Skip to content

Instantly share code, notes, and snippets.

@PierreZ
Last active June 16, 2016 07:40
Show Gist options
  • Save PierreZ/0e16a141d273d59ba14c to your computer and use it in GitHub Desktop.
Save PierreZ/0e16a141d273d59ba14c to your computer and use it in GitHub Desktop.
ST7 Assembly Code
ST7/
;************************************************************************
; TITLE:
; AUTHOR:
; DESCRIPTION:
;************************************************************************
TITLE "SQUELET.ASM"
MOTOROLA
#include "ST7Lite2.INC"
; Enlever le commentaire si vous utilisez les afficheurs
; #include "MAX7219.INC"
;************************************************************************
;
; ZONE DE DECLARATION DES SYMBOLES
;
;************************************************************************
;************************************************************************
;
; FIN DE LA ZONE DE DECLARATION DES SYMBOLES
;
;************************************************************************
BYTES
segment byte 'ram0'
;************************************************************************
;
; ZONE DE DECLARATION DES VARIABLES
;
;************************************************************************
;************************************************************************
;
; FIN DE LA ZONE DE DECLARATION DES VARIABLES
;
;************************************************************************
WORDS
segment byte 'rom'
;************************************************************************
;
; ZONE DE DECLARATION DES CONSTANTES
;
;************************************************************************
;************************************************************************
;
; FIN DE LA ZONE DE DECLARATION DES CONSTANTES
;
;************************************************************************
;------------------------------------------------------------------------
;************************************************************************
;
; ZONE DE DECLARATION DES SOUS-PROGRAMMES
;
;************************************************************************
;************************************************************************
;
; FIN DE LA ZONE DE DECLARATION DES SOUS-PROGRAMMES
;
;************************************************************************
;************************************************************************
;
; PROGRAMME PRINCIPAL
;
;************************************************************************
main:
RSP ; Reset Stack Pointer
boucl
JP boucl
;************************************************************************
;
; ZONE DE DECLARATION DES SOUS-PROGRAMMES D'INTERRUPTION
;
;************************************************************************
dummy_rt: IRET ; Procédure vide : retour au programme principal.
;************************************************************************
;
; ZONE DE DECLARATION DES VECTEURS D'INTERRUPTION
;
;************************************************************************
segment 'vectit'
DC.W dummy_rt ; Adresse FFE0-FFE1h
SPI_it DC.W dummy_rt ; Adresse FFE2-FFE3h
lt_RTC1_it DC.W dummy_rt ; Adresse FFE4-FFE5h
lt_IC_it DC.W dummy_rt ; Adresse FFE6-FFE7h
at_timerover_it DC.W dummy_rt ; Adresse FFE8-FFE9h
at_timerOC_it DC.W dummy_rt ; Adresse FFEA-FFEBh
AVD_it DC.W dummy_rt ; Adresse FFEC-FFEDh
DC.W dummy_rt ; Adresse FFEE-FFEFh
lt_RTC2_it DC.W dummy_rt ; Adresse FFF0-FFF1h
ext3_it DC.W dummy_rt ; Adresse FFF2-FFF3h
ext2_it DC.W dummy_rt ; Adresse FFF4-FFF5h
ext1_it DC.W dummy_rt ; Adresse FFF6-FFF7h
ext0_it DC.W dummy_rt ; Adresse FFF8-FFF9h
AWU_it DC.W dummy_rt ; Adresse FFFA-FFFBh
softit DC.W dummy_rt ; Adresse FFFC-FFFDh
reset DC.W main ; Adresse FFFE-FFFFh
END
;************************************************************************
ST7/
;************************************************************************
; TITLE: infinite loop %10
; AUTHOR: Pierre Zemb
; DESCRIPTION:
;************************************************************************
compte DS.B 1 ; counting var
;************************************************************************
;
; FIN DE LA ZONE DE DECLARATION DES VARIABLES
;
;************************************************************************
WORDS
segment byte 'rom'
;************************************************************************
;
; PROGRAMME PRINCIPAL
;
;************************************************************************
main:
RSP ; Reset Stack Pointer de Pierre
res:
CLR compte ; Reset compteur de Pierre
boucl:
INC compte ; Increment compte
LD A,compte ; put I in A
CP A,#10 ; Compare A with decimal 10
JREQ res ; Jump to reset compte
JP boucl ; Or jump to boucl
;************************************************************************
; TITLE: for loop
; AUTHOR: Pierre Zemb
; DESCRIPTION:
;************************************************************************
TITLE "SQUELET.ASM"
MOTOROLA
#include "ST7Lite2.INC"
; Enlever le commentaire si vous utilisez les afficheurs
; #include "MAX7219.INC"
;************************************************************************
;
; ZONE DE DECLARATION DES SYMBOLES
;
;************************************************************************
;************************************************************************
;
; FIN DE LA ZONE DE DECLARATION DES SYMBOLES
;
;************************************************************************
BYTES
segment byte 'ram0'
i DS.B 1 ;
somme DS.B 1 ;
;************************************************************************
;
; PROGRAMME PRINCIPAL
;
;************************************************************************
main:
RSP ; Reset Stack Pointer
CLR i ; Reset i and somme
CLR somme
boucl:
LD A,i
CP A,#20
JRUGE end ; If i>=20, jump to end
INC i ; i++
LD A,somme
ADD A,i ; A+i
LD somme,A
JP boucl
end:
JP end
ST7/
;************************************************************************
; TITLE: sub-program
; AUTHOR: Pierre Zemb
; DESCRIPTION: Permet l'appel de sous-programme
;************************************************************************
BYTES
segment byte 'ram0'
;************************************************************************
;
; ZONE DE DECLARATION DES VARIABLES
;
;************************************************************************
calcul DS.B 1 ;
somme DS.B 1 ;
calcul_somme:
CLR calcul
LD X,A ; A into X
boucl:
CP X,#0
JREQ fin ; if X ==0, jump to end
LD A,somme
LD calcul,X
ADD A,calcul ; A+X
LD somme,A
DEC X ; X--
JP boucl
fin:
RET
;************************************************************************
;
; FIN DE LA ZONE DE DECLARATION DES SOUS-PROGRAMMES
;
;************************************************************************
;************************************************************************
;
; PROGRAMME PRINCIPAL
;
;************************************************************************
main:
RSP ; Reset Stack Pointer
CLR somme ; Reset i and somme
NOP
LD X,#$88
NOP
LD A,#22
CALL calcul_somme
end:
JP end
ST7/
;************************************************************************
; TITLE: switch LED on with button
; AUTHOR: Pierre Zemb
; DESCRIPTION:
;************************************************************************
TITLE "SQUELET.ASM"
MOTOROLA
#include "ST7Lite2.INC"
; Enlever le commentaire si vous utilisez les afficheurs
; #include "MAX7219.INC"
;************************************************************************
;
; ZONE DE DECLARATION DES SYMBOLES
;
;************************************************************************
;************************************************************************
;
; FIN DE LA ZONE DE DECLARATION DES SYMBOLES
;
;************************************************************************
BYTES
segment byte 'ram0'
;************************************************************************
;
; ZONE DE DECLARATION DES VARIABLES
;
;************************************************************************
;************************************************************************
;
; FIN DE LA ZONE DE DECLARATION DES VARIABLES
;
;************************************************************************
WORDS
segment byte 'rom'
;************************************************************************
;
; ZONE DE DECLARATION DES CONSTANTES
;
;************************************************************************
;************************************************************************
;
; FIN DE LA ZONE DE DECLARATION DES CONSTANTES
;
;************************************************************************
;------------------------------------------------------------------------
;************************************************************************
;
; ZONE DE DECLARATION DES SOUS-PROGRAMMES
;
;************************************************************************
init_ports
;PADDR controle la direction de chaque bit du port : soit
;en entre´e (bit correspondant a` 0), soit en sortie (1).
;La LED1 est commande´e par le bit 0 du port A (PA0)
;en sortie push-pull
BSET PADDR, #0 ; PA0 en sortie
BSET PAOR, #0 ; PA0 en push-pull
;L'etat du bouton poussoir 1 est vu par le bit 3
;du port A (PA3) en entre´e flottante
BRES PADDR, #3 ;PA3 en entrée
BRES PAOR, #3 ; PA3 en flottant
RET
etat_poussoir
BTJT PADR,#3,allume_LED ; Bit Test and Jump if True
JP eteint_LED
return
RET
allume_LED
BSET PADR, #0 ; LED allumé
JP return
eteint_LED
BRES PADR, #0 ; LED éteinte
JP return
;************************************************************************
;
; FIN DE LA ZONE DE DECLARATION DES SOUS-PROGRAMMES
;
;************************************************************************
;************************************************************************
;
; PROGRAMME PRINCIPAL
;
;************************************************************************
main:
RSP ; Reset Stack Pointer
CALL init_ports
loop
CALL etat_poussoir
JP loop
boucl
JP boucl
;************************************************************************
;
; ZONE DE DECLARATION DES SOUS-PROGRAMMES D'INTERRUPTION
;
;************************************************************************
dummy_rt: IRET ; Procédure vide : retour au programme principal.
;************************************************************************
;
; ZONE DE DECLARATION DES VECTEURS D'INTERRUPTION
;
;************************************************************************
segment 'vectit'
DC.W dummy_rt ; Adresse FFE0-FFE1h
SPI_it DC.W dummy_rt ; Adresse FFE2-FFE3h
lt_RTC1_it DC.W dummy_rt ; Adresse FFE4-FFE5h
lt_IC_it DC.W dummy_rt ; Adresse FFE6-FFE7h
at_timerover_it DC.W dummy_rt ; Adresse FFE8-FFE9h
at_timerOC_it DC.W dummy_rt ; Adresse FFEA-FFEBh
AVD_it DC.W dummy_rt ; Adresse FFEC-FFEDh
DC.W dummy_rt ; Adresse FFEE-FFEFh
lt_RTC2_it DC.W dummy_rt ; Adresse FFF0-FFF1h
ext3_it DC.W dummy_rt ; Adresse FFF2-FFF3h
ext2_it DC.W dummy_rt ; Adresse FFF4-FFF5h
ext1_it DC.W dummy_rt ; Adresse FFF6-FFF7h
ext0_it DC.W dummy_rt ; Adresse FFF8-FFF9h
AWU_it DC.W dummy_rt ; Adresse FFFA-FFFBh
softit DC.W dummy_rt ; Adresse FFFC-FFFDh
reset DC.W main ; Adresse FFFE-FFFFh
END
;************************************************************************
ST7/
;************************************************************************
; TITLE: Multiple LED
; AUTHOR: Pierre Zemb
; DESCRIPTION:
;************************************************************************
TITLE "SQUELET.ASM"
MOTOROLA
#include "ST7Lite2.INC"
; Enlever le commentaire si vous utilisez les afficheurs
; #include "MAX7219.INC"
;************************************************************************
;
; ZONE DE DECLARATION DES SYMBOLES
;
;************************************************************************
;************************************************************************
;
; FIN DE LA ZONE DE DECLARATION DES SYMBOLES
;
;************************************************************************
BYTES
segment byte 'ram0'
;************************************************************************
;
; ZONE DE DECLARATION DES VARIABLES
;
;************************************************************************
;************************************************************************
;
; FIN DE LA ZONE DE DECLARATION DES VARIABLES
;
;************************************************************************
WORDS
segment byte 'rom'
;************************************************************************
;
; ZONE DE DECLARATION DES CONSTANTES
;
;************************************************************************
;************************************************************************
;
; FIN DE LA ZONE DE DECLARATION DES CONSTANTES
;
;************************************************************************
;------------------------------------------------------------------------
;************************************************************************
;
; ZONE DE DECLARATION DES SOUS-PROGRAMMES
;
;************************************************************************
init_ports_led_impair
;PADDR controle la direction de chaque bit du port : soit
;en entre´e (bit correspondant a` 0), soit en sortie (1).
;La LED1 est commande´e par le bit 0 du port A (PA0)
;en sortie push-pull
BSET PADDR, #0 ; PA0 en sortie
BSET PAOR, #0 ; PA0 en push-pull
BSET PADDR, #3 ; PA3 en sortie
BSET PAOR, #3 ; PA3 en push-pull
BSET PADDR, #7 ; PA7 en sortie
BSET PAOR, #7 ; PA7 en push-pull
BSET PBDDR, #5 ; PB5 en sortie
BSET PBOR, #5 ; PB5 en push-pull
RET
allume_impair
BSET PADR, #3 ; LED allumé
BSET PADR, #0 ; LED allumé
BSET PADR, #7 ; LED allumé
BSET PBDR, #5 ; LED allumé
RET
;************************************************************************
;
; FIN DE LA ZONE DE DECLARATION DES SOUS-PROGRAMMES
;
;************************************************************************
;************************************************************************
;
; PROGRAMME PRINCIPAL
;
;************************************************************************
main:
RSP ; Reset Stack Pointer
CALL init_ports_led_impair
CALL allume_impair
loop
JP loop
boucl
JP boucl
;************************************************************************
;
; ZONE DE DECLARATION DES SOUS-PROGRAMMES D'INTERRUPTION
;
;************************************************************************
dummy_rt: IRET ; Procédure vide : retour au programme principal.
;************************************************************************
;
; ZONE DE DECLARATION DES VECTEURS D'INTERRUPTION
;
;************************************************************************
segment 'vectit'
DC.W dummy_rt ; Adresse FFE0-FFE1h
SPI_it DC.W dummy_rt ; Adresse FFE2-FFE3h
lt_RTC1_it DC.W dummy_rt ; Adresse FFE4-FFE5h
lt_IC_it DC.W dummy_rt ; Adresse FFE6-FFE7h
at_timerover_it DC.W dummy_rt ; Adresse FFE8-FFE9h
at_timerOC_it DC.W dummy_rt ; Adresse FFEA-FFEBh
AVD_it DC.W dummy_rt ; Adresse FFEC-FFEDh
DC.W dummy_rt ; Adresse FFEE-FFEFh
lt_RTC2_it DC.W dummy_rt ; Adresse FFF0-FFF1h
ext3_it DC.W dummy_rt ; Adresse FFF2-FFF3h
ext2_it DC.W dummy_rt ; Adresse FFF4-FFF5h
ext1_it DC.W dummy_rt ; Adresse FFF6-FFF7h
ext0_it DC.W dummy_rt ; Adresse FFF8-FFF9h
AWU_it DC.W dummy_rt ; Adresse FFFA-FFFBh
softit DC.W dummy_rt ; Adresse FFFC-FFFDh
reset DC.W main ; Adresse FFFE-FFFFh
END
;************************************************************************
ST7/
;************************************************************************
; TITLE: Multiples LED
; AUTHOR: Pierre Zemb
; DESCRIPTION:
;************************************************************************
TITLE "SQUELET.ASM"
MOTOROLA
#include "ST7Lite2.INC"
; Enlever le commentaire si vous utilisez les afficheurs
; #include "MAX7219.INC"
;************************************************************************
;
; ZONE DE DECLARATION DES SYMBOLES
;
;************************************************************************
;************************************************************************
;
; FIN DE LA ZONE DE DECLARATION DES SYMBOLES
;
;************************************************************************
BYTES
segment byte 'ram0'
;************************************************************************
;
; ZONE DE DECLARATION DES VARIABLES
;
;************************************************************************
;************************************************************************
;
; FIN DE LA ZONE DE DECLARATION DES VARIABLES
;
;************************************************************************
WORDS
segment byte 'rom'
;************************************************************************
;
; ZONE DE DECLARATION DES CONSTANTES
;
;************************************************************************
;************************************************************************
;
; FIN DE LA ZONE DE DECLARATION DES CONSTANTES
;
;************************************************************************
;------------------------------------------------------------------------
;************************************************************************
;
; ZONE DE DECLARATION DES SOUS-PROGRAMMES
;
;************************************************************************
init_ports_led
;PADDR controle la direction de chaque bit du port : soit
;en entre´e (bit correspondant a` 0), soit en sortie (1).
LD A, PADDR
OR A, #%11111111 ; Toutes les LEDs en sortie
LD PADR, A
LD A, PAOR
OR A, #%11111111 ; toutes les sorties en push_pull
LD PAOR, A
LD A, PBDDR
OR A, #%11111111 ; Toutes les LEDs en sortie
LD PBDR, A
LD A, PBOR
OR A, #%11111111 ; Toutes les LEDs en sortie
LD PBOR, A
RET
allume_pair
LD A, PADR
OR A, #%00010010 ; On allume les LED pairs
LD PADR, A
LD A, PBDR
OR A, #%01010000 ; On allume les LED pairs
LD PBDR, A
RET
allume_impair
LD A, PADR
OR A, #%10001001 ; On allume les LED impairs
LD PADR, A
LD A, PBDR
OR A, #%00100000 ; On allume les LED impairs
LD PBDR, A
RET
attend_500ms
LD X,#100
boucle:
CP X,#0
JREQ fin ; if X ==0, jump to end
NOP
DEC X ; X--
JP boucle
fin:
RET
allume
LD A, PADR
OR A, #%10011011 ; On allume les LED impairs
LD PADR, A
LD A, PBDR
OR A, #%01110000 ; On allume les LED impairs
LD PBDR, A
RET
eteind
LD A, PADR
OR A, #%00000000 ; On allume les LED impairs
LD PADR, A
LD A, PBDR
OR A, #%00000000 ; On allume les LED impairs
LD PBDR, A
RET
;************************************************************************
;
; FIN DE LA ZONE DE DECLARATION DES SOUS-PROGRAMMES
;
;************************************************************************
;************************************************************************
;
; PROGRAMME PRINCIPAL
;
;************************************************************************
main:
RSP ; Reset Stack Pointer
CALL init_ports_led
loop
;CALL allume_impair
CALL attend_500ms
;CALL allume_pair
CALL allume
CALL attend_500ms
CALL eteind
JP loop
boucl
JP boucl
;************************************************************************
;
; ZONE DE DECLARATION DES SOUS-PROGRAMMES D'INTERRUPTION
;
;************************************************************************
dummy_rt: IRET ; Procédure vide : retour au programme principal.
;************************************************************************
;
; ZONE DE DECLARATION DES VECTEURS D'INTERRUPTION
;
;************************************************************************
segment 'vectit'
DC.W dummy_rt ; Adresse FFE0-FFE1h
SPI_it DC.W dummy_rt ; Adresse FFE2-FFE3h
lt_RTC1_it DC.W dummy_rt ; Adresse FFE4-FFE5h
lt_IC_it DC.W dummy_rt ; Adresse FFE6-FFE7h
at_timerover_it DC.W dummy_rt ; Adresse FFE8-FFE9h
at_timerOC_it DC.W dummy_rt ; Adresse FFEA-FFEBh
AVD_it DC.W dummy_rt ; Adresse FFEC-FFEDh
DC.W dummy_rt ; Adresse FFEE-FFEFh
lt_RTC2_it DC.W dummy_rt ; Adresse FFF0-FFF1h
ext3_it DC.W dummy_rt ; Adresse FFF2-FFF3h
ext2_it DC.W dummy_rt ; Adresse FFF4-FFF5h
ext1_it DC.W dummy_rt ; Adresse FFF6-FFF7h
ext0_it DC.W dummy_rt ; Adresse FFF8-FFF9h
AWU_it DC.W dummy_rt ; Adresse FFFA-FFFBh
softit DC.W dummy_rt ; Adresse FFFC-FFFDh
reset DC.W main ; Adresse FFFE-FFFFh
END
;************************************************************************
ST7/
;************************************************************************
; TITLE: Affichage valeur
; AUTHOR: Pierre Zemb
; DESCRIPTION:
;************************************************************************
TITLE "SQUELET.ASM"
MOTOROLA
#include "ST7Lite2.INC"
; Enlever le commentaire si vous utilisez les afficheurs
#include "MAX7219.INC"
;************************************************************************
;
; ZONE DE DECLARATION DES SYMBOLES
;
;************************************************************************
;************************************************************************
;
; FIN DE LA ZONE DE DECLARATION DES SYMBOLES
;
;************************************************************************
BYTES
segment byte 'ram0'
;************************************************************************
;
; ZONE DE DECLARATION DES VARIABLES
;
;************************************************************************
compt_un DS.B 1
compt_diz DS.B 1
;************************************************************************
;
; FIN DE LA ZONE DE DECLARATION DES VARIABLES
;
;************************************************************************
WORDS
segment byte 'rom'
;************************************************************************
;
; ZONE DE DECLARATION DES CONSTANTES
;
;************************************************************************
;************************************************************************
;
; FIN DE LA ZONE DE DECLARATION DES CONSTANTES
;
;************************************************************************
;------------------------------------------------------------------------
;************************************************************************
;
; ZONE DE DECLARATION DES SOUS-PROGRAMMES
;
;************************************************************************
init_ports_spi
LD A,#$0C
LD SPICR,A
LD A,#$03
LD SPISR,A
LD A,#$5C
LD SPICR,A
BSET PBDDR,#2
BSET PBOR,#2
RET
wait
LD X,#0
loop
NOP
INC X
CP X,#200
JREQ wait2
JP loop
wait2
LD X,#0
loop2
NOP
INC X
CP X,#200
JREQ wait3
JP loop2
wait3
LD X,#0
loop3
NOP
INC X
CP X,#200
JREQ wait4
JP loop3
wait4
LD X,#0
loop4
NOP
INC X
CP X,#200
JREQ fin_wait
JP loop4
fin_wait
RET
incr_un
LD A,#4
LD DisplayChar_Digit,A ; on travaille sur le 4eme chiffre
LD A,compt_un ; on charge dans A
CP A,#9
JREQ incr_diz ; si on change de dizaine
INC A
LD compt_un,A
LD DisplayChar_Character,A
CALL MAX7219_DisplayChar
return
RET
incr_diz
LD A,compt_diz
CP A,#9
JREQ reset_chiffre ; si on arrive à 100, jump => reset_chiffre
LD A,#0 ; reinitialise compt-un
LD compt_un,A ; on s'occupe de l'unite
LD DisplayChar_Character,A
CALL MAX7219_DisplayChar
LD X,compt_diz ; puis de la dizaine
INC X
LD DisplayChar_Character,X
LD compt_diz,X
LD A,#3
LD DisplayChar_Digit,A
CALL MAX7219_DisplayChar
JP return
reset_chiffre
LD A,#0
LD DisplayChar_Character,A
LD X,#4
LD DisplayChar_Digit,X
CALL MAX7219_DisplayChar
LD X,#3
LD DisplayChar_Digit,X
CALL MAX7219_DisplayChar
CLR compt_diz
CLR compt_un
JP return
;************************************************************************
;
; FIN DE LA ZONE DE DECLARATION DES SOUS-PROGRAMMES
;
;************************************************************************
;************************************************************************
;
; PROGRAMME PRINCIPAL
;
;************************************************************************
main:
RSP ; Reset Stack Pointer
CLR DisplayChar_Digit
CLR DisplayChar_Character
CLR compt_diz
CLR compt_un
LD A,#4
LD DisplayChar_Digit,A
LD A,#0
LD compt_un,A
CALL init_ports_spi
CALL MAX7219_Init
CALL MAX7219_Clear
CALL MAX7219_DisplayChar
boucl
CALL incr_un
CALL wait
JP boucl
;************************************************************************
;
; ZONE DE DECLARATION DES SOUS-PROGRAMMES D'INTERRUPTION
;
;************************************************************************
dummy_rt: IRET ; Procédure vide : retour au programme principal.
;************************************************************************
;
; ZONE DE DECLARATION DES VECTEURS D'INTERRUPTION
;
;************************************************************************
segment 'vectit'
DC.W dummy_rt ; Adresse FFE0-FFE1h
SPI_it DC.W dummy_rt ; Adresse FFE2-FFE3h
lt_RTC1_it DC.W dummy_rt ; Adresse FFE4-FFE5h
lt_IC_it DC.W dummy_rt ; Adresse FFE6-FFE7h
at_timerover_it DC.W dummy_rt ; Adresse FFE8-FFE9h
at_timerOC_it DC.W dummy_rt ; Adresse FFEA-FFEBh
AVD_it DC.W dummy_rt ; Adresse FFEC-FFEDh
DC.W dummy_rt ; Adresse FFEE-FFEFh
lt_RTC2_it DC.W dummy_rt ; Adresse FFF0-FFF1h
ext3_it DC.W dummy_rt ; Adresse FFF2-FFF3h
ext2_it DC.W dummy_rt ; Adresse FFF4-FFF5h
ext1_it DC.W dummy_rt ; Adresse FFF6-FFF7h
ext0_it DC.W dummy_rt ; Adresse FFF8-FFF9h
AWU_it DC.W dummy_rt ; Adresse FFFA-FFFBh
softit DC.W dummy_rt ; Adresse FFFC-FFFDh
reset DC.W main ; Adresse FFFE-FFFFh
END
;************************************************************************
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment