TP2 fait en séance
This commit is contained in:
parent
e98ecc5c1f
commit
b0e0a8d9a4
84
TP2/TP20.asm
Normal file
84
TP2/TP20.asm
Normal file
|
@ -0,0 +1,84 @@
|
||||||
|
.equ PINA = 0x00 ; définition des adresses des ports
|
||||||
|
.equ DDRA = 0x01
|
||||||
|
.equ PORTA = 0x02
|
||||||
|
|
||||||
|
.equ WDTCSR = 0x60
|
||||||
|
|
||||||
|
.equ RAMEND = 0x21FF
|
||||||
|
.equ SPH = 0x3E ; initialisation de la pile
|
||||||
|
.equ SPL = 0x3D
|
||||||
|
|
||||||
|
.org 0x000
|
||||||
|
; Vecteur RESET
|
||||||
|
jmp debut
|
||||||
|
|
||||||
|
.org 0x0080
|
||||||
|
|
||||||
|
debut:
|
||||||
|
; DDRA@IO <- 0x01 ; Configuration du port pour mettre la LED en sortie et le bouton en entrée
|
||||||
|
LDI R16,0x01
|
||||||
|
OUT DDRA,R16
|
||||||
|
|
||||||
|
|
||||||
|
attend:
|
||||||
|
; On reste là si le bouton n'est pas appuyé
|
||||||
|
; si (PINA@IO & 0x02) == 0 saut attend
|
||||||
|
IN R16,PINA
|
||||||
|
ANDI R16,0x02
|
||||||
|
PUSH R16
|
||||||
|
LDI R16,0
|
||||||
|
POP R17
|
||||||
|
CP R17,R16
|
||||||
|
BREQ eti0
|
||||||
|
CLR R16
|
||||||
|
RJMP eti1
|
||||||
|
eti0:
|
||||||
|
LDI R16,0x01
|
||||||
|
eti1:
|
||||||
|
TST R16
|
||||||
|
BREQ eti2
|
||||||
|
JMP attend
|
||||||
|
eti2:
|
||||||
|
|
||||||
|
|
||||||
|
; Dès que le bouton est appuyé
|
||||||
|
cli ; Activation du chien de garde en mode RESET
|
||||||
|
; WDTCSR <- 0b00010000 ; Autorise la modification du chien de garde
|
||||||
|
LDI R16,0b00010000
|
||||||
|
STS WDTCSR,R16
|
||||||
|
|
||||||
|
; WDTCSR <- 0b00001110 ; Reset le programme après 1 seconde
|
||||||
|
LDI R16,0b00001110
|
||||||
|
STS WDTCSR,R16
|
||||||
|
|
||||||
|
sei
|
||||||
|
|
||||||
|
; PORTA@IO <- 0x01 ; On allume la LED
|
||||||
|
LDI R16,0x01
|
||||||
|
OUT PORTA,R16
|
||||||
|
|
||||||
|
|
||||||
|
boucle:
|
||||||
|
; On reste ici en attendant que le watchdog arrive à expiration si le bouton est relâché
|
||||||
|
; si (PINA@IO & 0x02) = 0 saut boucle
|
||||||
|
IN R16,PINA
|
||||||
|
ANDI R16,0x02
|
||||||
|
PUSH R16
|
||||||
|
LDI R16,0
|
||||||
|
POP R17
|
||||||
|
CP R17,R16
|
||||||
|
BREQ eti3
|
||||||
|
CLR R16
|
||||||
|
RJMP eti4
|
||||||
|
eti3:
|
||||||
|
LDI R16,0x01
|
||||||
|
eti4:
|
||||||
|
TST R16
|
||||||
|
BREQ eti5
|
||||||
|
JMP boucle
|
||||||
|
eti5:
|
||||||
|
|
||||||
|
wdr ; Sinon si le bouton est appuyé on bloque le watchdog à 1s
|
||||||
|
jmp boucle
|
||||||
|
|
||||||
|
|
|
@ -18,7 +18,8 @@ debut:
|
||||||
DDRA@IO <- 0x01 ; Configuration du port pour mettre la LED en sortie et le bouton en entrée
|
DDRA@IO <- 0x01 ; Configuration du port pour mettre la LED en sortie et le bouton en entrée
|
||||||
|
|
||||||
attend:
|
attend:
|
||||||
si (PINA@IO & 0x02) == 0 saut attend ; On reste là si le bouton n'est pas appuyé
|
; On reste là si le bouton n'est pas appuyé
|
||||||
|
si (PINA@IO & 0x02) == 0 saut attend
|
||||||
|
|
||||||
; Dès que le bouton est appuyé
|
; Dès que le bouton est appuyé
|
||||||
cli ; Activation du chien de garde en mode RESET
|
cli ; Activation du chien de garde en mode RESET
|
||||||
|
@ -29,7 +30,8 @@ attend:
|
||||||
PORTA@IO <- 0x01 ; On allume la LED
|
PORTA@IO <- 0x01 ; On allume la LED
|
||||||
|
|
||||||
boucle:
|
boucle:
|
||||||
si (PINA@IO & 0x02) == 0 saut boucle ; On reste ici en attendant que le watchdog arrive à expiration si le bouton est relâché
|
; On reste ici en attendant que le watchdog arrive à expiration si le bouton est relâché
|
||||||
|
si (PINA@IO & 0x02) = 0 saut boucle
|
||||||
wdr ; Sinon si le bouton est appuyé on bloque le watchdog à 1s
|
wdr ; Sinon si le bouton est appuyé on bloque le watchdog à 1s
|
||||||
jmp boucle
|
jmp boucle
|
||||||
|
|
||||||
|
|
384
TP2/TP21.asm
Normal file
384
TP2/TP21.asm
Normal file
|
@ -0,0 +1,384 @@
|
||||||
|
.equ PINA = 0x00 ; définition des adresses des ports
|
||||||
|
.equ DDRA = 0x01
|
||||||
|
.equ PORTA = 0x02
|
||||||
|
.equ PINB = 0x03
|
||||||
|
.equ DDRB = 0x04
|
||||||
|
.equ PORTB = 0x05
|
||||||
|
|
||||||
|
.equ EIMSK = 0x3D
|
||||||
|
.equ EICRA = 0x69
|
||||||
|
.equ EICRB = 0x6A
|
||||||
|
.equ SREG = 0x3F
|
||||||
|
|
||||||
|
.equ WDTCSR = 0x60
|
||||||
|
|
||||||
|
.equ RAMEND = 0x21FF
|
||||||
|
.equ SPH = 0x3E ; initialisation de la pile
|
||||||
|
.equ SPL = 0x3D
|
||||||
|
|
||||||
|
.def chen = r19
|
||||||
|
.def port = r20
|
||||||
|
|
||||||
|
.org 0x000
|
||||||
|
; Vecteur RESET
|
||||||
|
jmp debut
|
||||||
|
|
||||||
|
.org 0x0002 ; Définition du code à éxecuter lors des interruption
|
||||||
|
jmp horaire
|
||||||
|
|
||||||
|
.org 0x0004 ; Définition du code à éxecuter lors des interruption
|
||||||
|
jmp antihoraire
|
||||||
|
|
||||||
|
.org 0x0080
|
||||||
|
|
||||||
|
debut:
|
||||||
|
; DDRA@IO <- 0xFF ; Configuration des ports A et B en sortie
|
||||||
|
LDI R16,0xFF
|
||||||
|
OUT DDRA,R16
|
||||||
|
|
||||||
|
; DDRB@IO <- 0xFF
|
||||||
|
LDI R16,0xFF
|
||||||
|
OUT DDRB,R16
|
||||||
|
|
||||||
|
|
||||||
|
; EIMSK <- 0b00000011 ; On active les interruptions PD0 et PD1 sur front descendant
|
||||||
|
LDI R16,0b00000011
|
||||||
|
STS EIMSK,R16
|
||||||
|
|
||||||
|
; EICRA <- 0b00001010
|
||||||
|
LDI R16,0b00001010
|
||||||
|
STS EICRA,R16
|
||||||
|
|
||||||
|
; EICRB <- 0b00000000
|
||||||
|
LDI R16,0b00000000
|
||||||
|
STS EICRB,R16
|
||||||
|
|
||||||
|
; On active les interruptions au niveau du µP
|
||||||
|
; SREG <- 0b10000000
|
||||||
|
LDI R16,0b10000000
|
||||||
|
STS SREG,R16
|
||||||
|
|
||||||
|
|
||||||
|
; chen <- 0b00000001
|
||||||
|
LDI R16,0b00000001
|
||||||
|
STS chen,R16
|
||||||
|
|
||||||
|
; chen <- 0xAA
|
||||||
|
LDI R16,0xAA
|
||||||
|
STS chen,R16
|
||||||
|
|
||||||
|
; port <- 0x00 ; pair : port A, impair : port B
|
||||||
|
LDI R16,0x00
|
||||||
|
STS port,R16
|
||||||
|
|
||||||
|
call afficher
|
||||||
|
sei
|
||||||
|
|
||||||
|
boucle:
|
||||||
|
sleep ; On ne fait rien jusqu'à la prochaine interruption
|
||||||
|
; jump boucle
|
||||||
|
JMP boucle
|
||||||
|
|
||||||
|
|
||||||
|
horaire:
|
||||||
|
; si (port & 0x01) == 0 alors lsl chen
|
||||||
|
; si (port & 0x01) == 0 alors chen <- chen * 2
|
||||||
|
LDS R16,port
|
||||||
|
ANDI R16,0x01
|
||||||
|
PUSH R16
|
||||||
|
LDI R16,0
|
||||||
|
POP R17
|
||||||
|
CP R17,R16
|
||||||
|
BREQ eti0
|
||||||
|
CLR R16
|
||||||
|
RJMP eti1
|
||||||
|
eti0:
|
||||||
|
LDI R16,0x01
|
||||||
|
eti1:
|
||||||
|
TST R16
|
||||||
|
BREQ eti2
|
||||||
|
LDS R16,chen
|
||||||
|
LDI R17,2
|
||||||
|
MUL R16,R17
|
||||||
|
MOV R16,R0
|
||||||
|
STS chen,R16
|
||||||
|
eti2:
|
||||||
|
|
||||||
|
; si (port & 0x01) == 1 alors lsr chen
|
||||||
|
; si (port & 0x01) == 1 alors chen <- chen / 2
|
||||||
|
LDS R16,port
|
||||||
|
ANDI R16,0x01
|
||||||
|
PUSH R16
|
||||||
|
LDI R16,1
|
||||||
|
POP R17
|
||||||
|
CP R17,R16
|
||||||
|
BREQ eti3
|
||||||
|
CLR R16
|
||||||
|
RJMP eti4
|
||||||
|
eti3:
|
||||||
|
LDI R16,0x01
|
||||||
|
eti4:
|
||||||
|
TST R16
|
||||||
|
BREQ eti6
|
||||||
|
LDS R16,chen
|
||||||
|
LDI R17,2
|
||||||
|
SER R18
|
||||||
|
eti5:
|
||||||
|
INC R18
|
||||||
|
SUB R16,R17
|
||||||
|
BRCC eti5
|
||||||
|
MOV R16,R18
|
||||||
|
STS chen,R16
|
||||||
|
eti6:
|
||||||
|
|
||||||
|
; si chen != 0 saut finhoraire
|
||||||
|
LDS R16,chen
|
||||||
|
PUSH R16
|
||||||
|
LDI R16,0
|
||||||
|
POP R17
|
||||||
|
CP R17,R16
|
||||||
|
BRNE eti7
|
||||||
|
CLR R16
|
||||||
|
RJMP eti8
|
||||||
|
eti7:
|
||||||
|
LDI R16,0x01
|
||||||
|
eti8:
|
||||||
|
TST R16
|
||||||
|
BREQ eti9
|
||||||
|
JMP finhoraire
|
||||||
|
eti9:
|
||||||
|
|
||||||
|
|
||||||
|
; si (port & 0x01) == 0 alors chen <- 0b10000000
|
||||||
|
LDS R16,port
|
||||||
|
ANDI R16,0x01
|
||||||
|
PUSH R16
|
||||||
|
LDI R16,0
|
||||||
|
POP R17
|
||||||
|
CP R17,R16
|
||||||
|
BREQ eti10
|
||||||
|
CLR R16
|
||||||
|
RJMP eti11
|
||||||
|
eti10:
|
||||||
|
LDI R16,0x01
|
||||||
|
eti11:
|
||||||
|
TST R16
|
||||||
|
BREQ eti12
|
||||||
|
LDI R16,0b10000000
|
||||||
|
STS chen,R16
|
||||||
|
eti12:
|
||||||
|
|
||||||
|
; si (port & 0x01) == 1 alors chen <- 0b00000001
|
||||||
|
LDS R16,port
|
||||||
|
ANDI R16,0x01
|
||||||
|
PUSH R16
|
||||||
|
LDI R16,1
|
||||||
|
POP R17
|
||||||
|
CP R17,R16
|
||||||
|
BREQ eti13
|
||||||
|
CLR R16
|
||||||
|
RJMP eti14
|
||||||
|
eti13:
|
||||||
|
LDI R16,0x01
|
||||||
|
eti14:
|
||||||
|
TST R16
|
||||||
|
BREQ eti15
|
||||||
|
LDI R16,0b00000001
|
||||||
|
STS chen,R16
|
||||||
|
eti15:
|
||||||
|
|
||||||
|
inc port
|
||||||
|
finhoraire:
|
||||||
|
call afficher
|
||||||
|
reti
|
||||||
|
|
||||||
|
antihoraire:
|
||||||
|
; si (port & 0x01) == 0 alors lsr chen
|
||||||
|
; si (port & 0x01) == 0 alors chen <- chen / 2
|
||||||
|
LDS R16,port
|
||||||
|
ANDI R16,0x01
|
||||||
|
PUSH R16
|
||||||
|
LDI R16,0
|
||||||
|
POP R17
|
||||||
|
CP R17,R16
|
||||||
|
BREQ eti16
|
||||||
|
CLR R16
|
||||||
|
RJMP eti17
|
||||||
|
eti16:
|
||||||
|
LDI R16,0x01
|
||||||
|
eti17:
|
||||||
|
TST R16
|
||||||
|
BREQ eti19
|
||||||
|
LDS R16,chen
|
||||||
|
LDI R17,2
|
||||||
|
SER R18
|
||||||
|
eti18:
|
||||||
|
INC R18
|
||||||
|
SUB R16,R17
|
||||||
|
BRCC eti18
|
||||||
|
MOV R16,R18
|
||||||
|
STS chen,R16
|
||||||
|
eti19:
|
||||||
|
|
||||||
|
; si (port & 0x01) == 1 alors lsl chen
|
||||||
|
; si (port & 0x01) == 1 alors chen <- chen * 2
|
||||||
|
LDS R16,port
|
||||||
|
ANDI R16,0x01
|
||||||
|
PUSH R16
|
||||||
|
LDI R16,1
|
||||||
|
POP R17
|
||||||
|
CP R17,R16
|
||||||
|
BREQ eti20
|
||||||
|
CLR R16
|
||||||
|
RJMP eti21
|
||||||
|
eti20:
|
||||||
|
LDI R16,0x01
|
||||||
|
eti21:
|
||||||
|
TST R16
|
||||||
|
BREQ eti22
|
||||||
|
LDS R16,chen
|
||||||
|
LDI R17,2
|
||||||
|
MUL R16,R17
|
||||||
|
MOV R16,R0
|
||||||
|
STS chen,R16
|
||||||
|
eti22:
|
||||||
|
|
||||||
|
; si chen != 0 saut finantihoraire
|
||||||
|
LDS R16,chen
|
||||||
|
PUSH R16
|
||||||
|
LDI R16,0
|
||||||
|
POP R17
|
||||||
|
CP R17,R16
|
||||||
|
BRNE eti23
|
||||||
|
CLR R16
|
||||||
|
RJMP eti24
|
||||||
|
eti23:
|
||||||
|
LDI R16,0x01
|
||||||
|
eti24:
|
||||||
|
TST R16
|
||||||
|
BREQ eti25
|
||||||
|
JMP finantihoraire
|
||||||
|
eti25:
|
||||||
|
|
||||||
|
|
||||||
|
; si (port & 0x01) == 0 alors chen <- 0b00000001
|
||||||
|
LDS R16,port
|
||||||
|
ANDI R16,0x01
|
||||||
|
PUSH R16
|
||||||
|
LDI R16,0
|
||||||
|
POP R17
|
||||||
|
CP R17,R16
|
||||||
|
BREQ eti26
|
||||||
|
CLR R16
|
||||||
|
RJMP eti27
|
||||||
|
eti26:
|
||||||
|
LDI R16,0x01
|
||||||
|
eti27:
|
||||||
|
TST R16
|
||||||
|
BREQ eti28
|
||||||
|
LDI R16,0b00000001
|
||||||
|
STS chen,R16
|
||||||
|
eti28:
|
||||||
|
|
||||||
|
; si (port & 0x01) == 1 alors chen <- 0b10000000
|
||||||
|
LDS R16,port
|
||||||
|
ANDI R16,0x01
|
||||||
|
PUSH R16
|
||||||
|
LDI R16,1
|
||||||
|
POP R17
|
||||||
|
CP R17,R16
|
||||||
|
BREQ eti29
|
||||||
|
CLR R16
|
||||||
|
RJMP eti30
|
||||||
|
eti29:
|
||||||
|
LDI R16,0x01
|
||||||
|
eti30:
|
||||||
|
TST R16
|
||||||
|
BREQ eti31
|
||||||
|
LDI R16,0b10000000
|
||||||
|
STS chen,R16
|
||||||
|
eti31:
|
||||||
|
|
||||||
|
inc port
|
||||||
|
finantihoraire:
|
||||||
|
call afficher
|
||||||
|
reti
|
||||||
|
|
||||||
|
afficher:
|
||||||
|
; si (port & 0x01) == 0 alors PORTB@IO <- 0x00
|
||||||
|
LDS R16,port
|
||||||
|
ANDI R16,0x01
|
||||||
|
PUSH R16
|
||||||
|
LDI R16,0
|
||||||
|
POP R17
|
||||||
|
CP R17,R16
|
||||||
|
BREQ eti32
|
||||||
|
CLR R16
|
||||||
|
RJMP eti33
|
||||||
|
eti32:
|
||||||
|
LDI R16,0x01
|
||||||
|
eti33:
|
||||||
|
TST R16
|
||||||
|
BREQ eti34
|
||||||
|
LDI R16,0x00
|
||||||
|
OUT PORTB,R16
|
||||||
|
eti34:
|
||||||
|
|
||||||
|
; si (port & 0x01) == 1 alors PORTA@IO <- 0x00
|
||||||
|
LDS R16,port
|
||||||
|
ANDI R16,0x01
|
||||||
|
PUSH R16
|
||||||
|
LDI R16,1
|
||||||
|
POP R17
|
||||||
|
CP R17,R16
|
||||||
|
BREQ eti35
|
||||||
|
CLR R16
|
||||||
|
RJMP eti36
|
||||||
|
eti35:
|
||||||
|
LDI R16,0x01
|
||||||
|
eti36:
|
||||||
|
TST R16
|
||||||
|
BREQ eti37
|
||||||
|
LDI R16,0x00
|
||||||
|
OUT PORTA,R16
|
||||||
|
eti37:
|
||||||
|
|
||||||
|
; si (port & 0x01) == 0 alors PORTA@IO <- chen
|
||||||
|
LDS R16,port
|
||||||
|
ANDI R16,0x01
|
||||||
|
PUSH R16
|
||||||
|
LDI R16,0
|
||||||
|
POP R17
|
||||||
|
CP R17,R16
|
||||||
|
BREQ eti38
|
||||||
|
CLR R16
|
||||||
|
RJMP eti39
|
||||||
|
eti38:
|
||||||
|
LDI R16,0x01
|
||||||
|
eti39:
|
||||||
|
TST R16
|
||||||
|
BREQ eti40
|
||||||
|
LDS R16,chen
|
||||||
|
OUT PORTA,R16
|
||||||
|
eti40:
|
||||||
|
|
||||||
|
; si (port & 0x01) == 1 alors PORTB@IO <- chen
|
||||||
|
LDS R16,port
|
||||||
|
ANDI R16,0x01
|
||||||
|
PUSH R16
|
||||||
|
LDI R16,1
|
||||||
|
POP R17
|
||||||
|
CP R17,R16
|
||||||
|
BREQ eti41
|
||||||
|
CLR R16
|
||||||
|
RJMP eti42
|
||||||
|
eti41:
|
||||||
|
LDI R16,0x01
|
||||||
|
eti42:
|
||||||
|
TST R16
|
||||||
|
BREQ eti43
|
||||||
|
LDS R16,chen
|
||||||
|
OUT PORTB,R16
|
||||||
|
eti43:
|
||||||
|
|
||||||
|
ret
|
87
TP2/TP21.txt
Normal file
87
TP2/TP21.txt
Normal file
|
@ -0,0 +1,87 @@
|
||||||
|
.equ PINA = 0x00 ; définition des adresses des ports
|
||||||
|
.equ DDRA = 0x01
|
||||||
|
.equ PORTA = 0x02
|
||||||
|
.equ PINB = 0x03
|
||||||
|
.equ DDRB = 0x04
|
||||||
|
.equ PORTB = 0x05
|
||||||
|
|
||||||
|
.equ EIMSK = 0x3D
|
||||||
|
.equ EICRA = 0x69
|
||||||
|
.equ EICRB = 0x6A
|
||||||
|
.equ SREG = 0x3F
|
||||||
|
|
||||||
|
.equ WDTCSR = 0x60
|
||||||
|
|
||||||
|
.equ RAMEND = 0x21FF
|
||||||
|
.equ SPH = 0x3E ; initialisation de la pile
|
||||||
|
.equ SPL = 0x3D
|
||||||
|
|
||||||
|
.def chen = r19
|
||||||
|
.def port = r20
|
||||||
|
|
||||||
|
.org 0x000
|
||||||
|
; Vecteur RESET
|
||||||
|
jmp debut
|
||||||
|
|
||||||
|
.org 0x0002 ; Définition du code à éxecuter lors des interruption
|
||||||
|
jmp horaire
|
||||||
|
|
||||||
|
.org 0x0004 ; Définition du code à éxecuter lors des interruption
|
||||||
|
jmp antihoraire
|
||||||
|
|
||||||
|
.org 0x0080
|
||||||
|
|
||||||
|
debut:
|
||||||
|
DDRA@IO <- 0xFF ; Configuration des ports A et B en sortie
|
||||||
|
DDRB@IO <- 0xFF
|
||||||
|
|
||||||
|
EIMSK <- 0b00000011 ; On active les interruptions PD0 et PD1 sur front descendant
|
||||||
|
EICRA <- 0b00001010
|
||||||
|
EICRB <- 0b00000000
|
||||||
|
; On active les interruptions au niveau du µP
|
||||||
|
SREG <- 0b10000000
|
||||||
|
|
||||||
|
chen <- 0b00000001
|
||||||
|
chen <- 0xAA
|
||||||
|
port <- 0x00 ; pair : port A, impair : port B
|
||||||
|
call afficher
|
||||||
|
sei
|
||||||
|
|
||||||
|
boucle:
|
||||||
|
sleep ; On ne fait rien jusqu'à la prochaine interruption
|
||||||
|
jump boucle
|
||||||
|
|
||||||
|
horaire:
|
||||||
|
; si (port & 0x01) == 0 alors lsl chen
|
||||||
|
si (port & 0x01) == 0 alors chen <- chen * 2
|
||||||
|
; si (port & 0x01) == 1 alors lsr chen
|
||||||
|
si (port & 0x01) == 1 alors chen <- chen / 2
|
||||||
|
si chen != 0 saut finhoraire
|
||||||
|
|
||||||
|
si (port & 0x01) == 0 alors chen <- 0b10000000
|
||||||
|
si (port & 0x01) == 1 alors chen <- 0b00000001
|
||||||
|
inc port
|
||||||
|
finhoraire:
|
||||||
|
call afficher
|
||||||
|
reti
|
||||||
|
|
||||||
|
antihoraire:
|
||||||
|
; si (port & 0x01) == 0 alors lsr chen
|
||||||
|
si (port & 0x01) == 0 alors chen <- chen / 2
|
||||||
|
; si (port & 0x01) == 1 alors lsl chen
|
||||||
|
si (port & 0x01) == 1 alors chen <- chen * 2
|
||||||
|
si chen != 0 saut finantihoraire
|
||||||
|
|
||||||
|
si (port & 0x01) == 0 alors chen <- 0b00000001
|
||||||
|
si (port & 0x01) == 1 alors chen <- 0b10000000
|
||||||
|
inc port
|
||||||
|
finantihoraire:
|
||||||
|
call afficher
|
||||||
|
reti
|
||||||
|
|
||||||
|
afficher:
|
||||||
|
si (port & 0x01) == 0 alors PORTB@IO <- 0x00
|
||||||
|
si (port & 0x01) == 1 alors PORTA@IO <- 0x00
|
||||||
|
si (port & 0x01) == 0 alors PORTA@IO <- chen
|
||||||
|
si (port & 0x01) == 1 alors PORTB@IO <- chen
|
||||||
|
ret
|
212
TP2/TP22.asm
Normal file
212
TP2/TP22.asm
Normal file
|
@ -0,0 +1,212 @@
|
||||||
|
.equ PINA = 0x00 ; définition des adresses des ports
|
||||||
|
.equ DDRA = 0x01
|
||||||
|
.equ PORTA = 0x02
|
||||||
|
.equ PINB = 0x03
|
||||||
|
.equ DDRB = 0x04
|
||||||
|
.equ PORTB = 0x05
|
||||||
|
.equ PINC = 0x06
|
||||||
|
.equ DDRC = 0x07
|
||||||
|
.equ PORTC = 0x08
|
||||||
|
|
||||||
|
.equ SREG = 0x3F
|
||||||
|
|
||||||
|
.equ WDTCSR = 0x60
|
||||||
|
.equ TCCR0A = 0x24
|
||||||
|
.equ TCCR0B = 0x25
|
||||||
|
.equ TIMSK0 = 0x6E
|
||||||
|
.equ TIFR0 = 0x35
|
||||||
|
|
||||||
|
.equ RAMEND = 0x21FF
|
||||||
|
.equ SPH = 0x3E ; initialisation de la pile
|
||||||
|
.equ SPL = 0x3D
|
||||||
|
|
||||||
|
.def d2 = r19
|
||||||
|
.def d1 = r20
|
||||||
|
.def d0 = r21
|
||||||
|
.def select = r22
|
||||||
|
|
||||||
|
.org 0x000
|
||||||
|
; Vecteur RESET
|
||||||
|
jmp debut
|
||||||
|
|
||||||
|
.org 0x0018
|
||||||
|
jmp wd
|
||||||
|
|
||||||
|
.org 0x002E
|
||||||
|
jmp tm
|
||||||
|
|
||||||
|
.org 0x0080
|
||||||
|
|
||||||
|
afficheur:
|
||||||
|
.DB 0x7E, 0x0C, 0x37, 0x9F, 0x4D, 0xDB, 0xFB, 0x0E, 0xFF, 0xDF
|
||||||
|
; 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
|
||||||
|
|
||||||
|
debut:
|
||||||
|
; d2 <- 0
|
||||||
|
LDI R16,0
|
||||||
|
STS d2,R16
|
||||||
|
|
||||||
|
; d1 <- 0
|
||||||
|
LDI R16,0
|
||||||
|
STS d1,R16
|
||||||
|
|
||||||
|
; d0 <- 0
|
||||||
|
LDI R16,0
|
||||||
|
STS d0,R16
|
||||||
|
|
||||||
|
; select <- 0x01
|
||||||
|
LDI R16,0x01
|
||||||
|
STS select,R16
|
||||||
|
|
||||||
|
|
||||||
|
cli
|
||||||
|
; SREG <- 0b10000000
|
||||||
|
LDI R16,0b10000000
|
||||||
|
STS SREG,R16
|
||||||
|
|
||||||
|
|
||||||
|
; Configuration des ports
|
||||||
|
; DDRA@IO <- 0xFF
|
||||||
|
LDI R16,0xFF
|
||||||
|
OUT DDRA,R16
|
||||||
|
|
||||||
|
; DDRB@IO <- 0xFF
|
||||||
|
LDI R16,0xFF
|
||||||
|
OUT DDRB,R16
|
||||||
|
|
||||||
|
; DDRC@IO <- 0xFF
|
||||||
|
LDI R16,0xFF
|
||||||
|
OUT DDRC,R16
|
||||||
|
|
||||||
|
|
||||||
|
; Watchdog toutes les secondes
|
||||||
|
; WDTCSR <- 0x10
|
||||||
|
LDI R16,0x10
|
||||||
|
STS WDTCSR,R16
|
||||||
|
|
||||||
|
; WDTCSR <- 0b01000110
|
||||||
|
LDI R16,0b01000110
|
||||||
|
STS WDTCSR,R16
|
||||||
|
|
||||||
|
|
||||||
|
; Timer toutes les 8-16ms
|
||||||
|
;TCCR0A@IO <- 0x00
|
||||||
|
;TCCR0B@IO <- 0x04
|
||||||
|
;TIMSK0 <- 0x01
|
||||||
|
;TIFR0 <- 0x01
|
||||||
|
sei
|
||||||
|
|
||||||
|
boucle:
|
||||||
|
sleep
|
||||||
|
; jump boucle
|
||||||
|
JMP boucle
|
||||||
|
|
||||||
|
|
||||||
|
wd:
|
||||||
|
inc d0
|
||||||
|
; si d0 < 10 saut finwd
|
||||||
|
LDS R16,d0
|
||||||
|
PUSH R16
|
||||||
|
LDI R16,10
|
||||||
|
POP R17
|
||||||
|
CP R17,R16
|
||||||
|
BRLO eti0
|
||||||
|
CLR R16
|
||||||
|
RJMP eti1
|
||||||
|
eti0:
|
||||||
|
LDI R16,0x01
|
||||||
|
eti1:
|
||||||
|
TST R16
|
||||||
|
BREQ eti2
|
||||||
|
JMP finwd
|
||||||
|
eti2:
|
||||||
|
|
||||||
|
; d0 <- 0
|
||||||
|
LDI R16,0
|
||||||
|
STS d0,R16
|
||||||
|
|
||||||
|
inc d1
|
||||||
|
; si d1 < 10 saut finwd
|
||||||
|
LDS R16,d1
|
||||||
|
PUSH R16
|
||||||
|
LDI R16,10
|
||||||
|
POP R17
|
||||||
|
CP R17,R16
|
||||||
|
BRLO eti3
|
||||||
|
CLR R16
|
||||||
|
RJMP eti4
|
||||||
|
eti3:
|
||||||
|
LDI R16,0x01
|
||||||
|
eti4:
|
||||||
|
TST R16
|
||||||
|
BREQ eti5
|
||||||
|
JMP finwd
|
||||||
|
eti5:
|
||||||
|
|
||||||
|
; d1 <- 0
|
||||||
|
LDI R16,0
|
||||||
|
STS d1,R16
|
||||||
|
|
||||||
|
inc d2
|
||||||
|
; si d2 < 10 saut finwd
|
||||||
|
LDS R16,d2
|
||||||
|
PUSH R16
|
||||||
|
LDI R16,10
|
||||||
|
POP R17
|
||||||
|
CP R17,R16
|
||||||
|
BRLO eti6
|
||||||
|
CLR R16
|
||||||
|
RJMP eti7
|
||||||
|
eti6:
|
||||||
|
LDI R16,0x01
|
||||||
|
eti7:
|
||||||
|
TST R16
|
||||||
|
BREQ eti8
|
||||||
|
JMP finwd
|
||||||
|
eti8:
|
||||||
|
|
||||||
|
; d2 <- 0
|
||||||
|
LDI R16,0
|
||||||
|
STS d2,R16
|
||||||
|
|
||||||
|
finwd:
|
||||||
|
; PORTA@IO <- afficheur@ROM[d1]
|
||||||
|
LDS R16,d1
|
||||||
|
LDI R30,low(afficheur<<1)
|
||||||
|
LDI R31,high(afficheur<<1)
|
||||||
|
CLR R17
|
||||||
|
ADD R30,R16
|
||||||
|
ADC R31,R17
|
||||||
|
LPM R16,Z
|
||||||
|
OUT PORTA,R16
|
||||||
|
|
||||||
|
; PORTC@IO <- 0x40
|
||||||
|
LDI R16,0x40
|
||||||
|
OUT PORTC,R16
|
||||||
|
|
||||||
|
reti
|
||||||
|
|
||||||
|
tm:
|
||||||
|
;PortC@IO <- select
|
||||||
|
;si select = 0x80 alors PortA@IO <- afficheur@ROM[d0]
|
||||||
|
;si select = 0x40 alors PortA@IO <- afficheur@ROM[d1]
|
||||||
|
;si select = 0x20 alors PortA@IO <- afficheur@ROM[d2]
|
||||||
|
;lsl select
|
||||||
|
;si select = 0 alors select <- 0x20
|
||||||
|
;PORTC@IO <- afficheur@ROM[d0]
|
||||||
|
;PORTB@IO <- afficheur@ROM[d1]
|
||||||
|
; PORTA@IO <- afficheur@ROM[d2]
|
||||||
|
LDS R16,d2
|
||||||
|
LDI R30,low(afficheur<<1)
|
||||||
|
LDI R31,high(afficheur<<1)
|
||||||
|
CLR R17
|
||||||
|
ADD R30,R16
|
||||||
|
ADC R31,R17
|
||||||
|
LPM R16,Z
|
||||||
|
OUT PORTA,R16
|
||||||
|
|
||||||
|
; PORTC@IO <- 0x40
|
||||||
|
LDI R16,0x40
|
||||||
|
OUT PORTC,R16
|
||||||
|
|
||||||
|
reti
|
99
TP2/TP22.txt
Normal file
99
TP2/TP22.txt
Normal file
|
@ -0,0 +1,99 @@
|
||||||
|
.equ PINA = 0x00 ; définition des adresses des ports
|
||||||
|
.equ DDRA = 0x01
|
||||||
|
.equ PORTA = 0x02
|
||||||
|
.equ PINB = 0x03
|
||||||
|
.equ DDRB = 0x04
|
||||||
|
.equ PORTB = 0x05
|
||||||
|
.equ PINC = 0x06
|
||||||
|
.equ DDRC = 0x07
|
||||||
|
.equ PORTC = 0x08
|
||||||
|
|
||||||
|
.equ SREG = 0x3F
|
||||||
|
|
||||||
|
.equ WDTCSR = 0x60
|
||||||
|
.equ TCCR0A = 0x24
|
||||||
|
.equ TCCR0B = 0x25
|
||||||
|
.equ TIMSK0 = 0x6E
|
||||||
|
.equ TIFR0 = 0x35
|
||||||
|
|
||||||
|
.equ RAMEND = 0x21FF
|
||||||
|
.equ SPH = 0x3E ; initialisation de la pile
|
||||||
|
.equ SPL = 0x3D
|
||||||
|
|
||||||
|
.def d2 = r19
|
||||||
|
.def d1 = r20
|
||||||
|
.def d0 = r21
|
||||||
|
.def select = r22
|
||||||
|
|
||||||
|
.org 0x000
|
||||||
|
; Vecteur RESET
|
||||||
|
jmp debut
|
||||||
|
|
||||||
|
.org 0x0018
|
||||||
|
jmp wd
|
||||||
|
|
||||||
|
.org 0x002E
|
||||||
|
jmp tm
|
||||||
|
|
||||||
|
.org 0x0080
|
||||||
|
|
||||||
|
afficheur:
|
||||||
|
.DB 0x7E, 0x0C, 0x37, 0x9F, 0x4D, 0xDB, 0xFB, 0x0E, 0xFF, 0xDF
|
||||||
|
; 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
|
||||||
|
|
||||||
|
debut:
|
||||||
|
d2 <- 0
|
||||||
|
d1 <- 0
|
||||||
|
d0 <- 0
|
||||||
|
select <- 0x01
|
||||||
|
|
||||||
|
cli
|
||||||
|
SREG <- 0b10000000
|
||||||
|
|
||||||
|
; Configuration des ports
|
||||||
|
DDRA@IO <- 0xFF
|
||||||
|
DDRB@IO <- 0xFF
|
||||||
|
DDRC@IO <- 0xFF
|
||||||
|
|
||||||
|
; Watchdog toutes les secondes
|
||||||
|
WDTCSR <- 0x10
|
||||||
|
WDTCSR <- 0b01000110
|
||||||
|
|
||||||
|
; Timer toutes les 8-16ms
|
||||||
|
;TCCR0A@IO <- 0x00
|
||||||
|
;TCCR0B@IO <- 0x04
|
||||||
|
;TIMSK0 <- 0x01
|
||||||
|
;TIFR0 <- 0x01
|
||||||
|
sei
|
||||||
|
|
||||||
|
boucle:
|
||||||
|
sleep
|
||||||
|
jump boucle
|
||||||
|
|
||||||
|
wd:
|
||||||
|
inc d0
|
||||||
|
si d0 < 10 saut finwd
|
||||||
|
d0 <- 0
|
||||||
|
inc d1
|
||||||
|
si d1 < 10 saut finwd
|
||||||
|
d1 <- 0
|
||||||
|
inc d2
|
||||||
|
si d2 < 10 saut finwd
|
||||||
|
d2 <- 0
|
||||||
|
finwd:
|
||||||
|
PORTA@IO <- afficheur@ROM[d1]
|
||||||
|
PORTC@IO <- 0x40
|
||||||
|
reti
|
||||||
|
|
||||||
|
tm:
|
||||||
|
;PortC@IO <- select
|
||||||
|
;si select = 0x80 alors PortA@IO <- afficheur@ROM[d0]
|
||||||
|
;si select = 0x40 alors PortA@IO <- afficheur@ROM[d1]
|
||||||
|
;si select = 0x20 alors PortA@IO <- afficheur@ROM[d2]
|
||||||
|
;lsl select
|
||||||
|
;si select = 0 alors select <- 0x20
|
||||||
|
;PORTC@IO <- afficheur@ROM[d0]
|
||||||
|
;PORTB@IO <- afficheur@ROM[d1]
|
||||||
|
PORTA@IO <- afficheur@ROM[d2]
|
||||||
|
PORTC@IO <- 0x40
|
||||||
|
reti
|
312
TP2/TP23.asm
Normal file
312
TP2/TP23.asm
Normal file
|
@ -0,0 +1,312 @@
|
||||||
|
.equ PINA = 0x00 ; définition des adresses des ports
|
||||||
|
.equ DDRA = 0x01
|
||||||
|
.equ PORTA = 0x02
|
||||||
|
.equ PINB = 0x03
|
||||||
|
.equ DDRB = 0x04
|
||||||
|
.equ PORTB = 0x05
|
||||||
|
.equ PIND = 0x09
|
||||||
|
.equ DDRD = 0x0A
|
||||||
|
.equ PORTD = 0x0B
|
||||||
|
|
||||||
|
.equ SREG = 0x3F
|
||||||
|
|
||||||
|
.equ WDTCSR = 0x60
|
||||||
|
.equ TCCR0A = 0x24
|
||||||
|
.equ TCCR0B = 0x25
|
||||||
|
.equ TIMSK0 = 0x6E
|
||||||
|
.equ TIFR0 = 0x35
|
||||||
|
|
||||||
|
.equ EIMSK = 0x3D
|
||||||
|
.equ EICRA = 0x69
|
||||||
|
.equ EICRB = 0x6A
|
||||||
|
|
||||||
|
.equ RAMEND = 0x21FF
|
||||||
|
.equ SPH = 0x3E ; initialisation de la pile
|
||||||
|
.equ SPL = 0x3D
|
||||||
|
|
||||||
|
.def d1 = r20
|
||||||
|
.def d0 = r21
|
||||||
|
.def route = r22
|
||||||
|
|
||||||
|
.org 0x000
|
||||||
|
; Vecteur RESET
|
||||||
|
jmp debut
|
||||||
|
|
||||||
|
.org 0x0002
|
||||||
|
jmp b10s
|
||||||
|
|
||||||
|
.org 0x0004
|
||||||
|
jmp b1s
|
||||||
|
|
||||||
|
.org 0x0006
|
||||||
|
jmp marche
|
||||||
|
|
||||||
|
.org 0x0008
|
||||||
|
jmp arret
|
||||||
|
|
||||||
|
.org 0x0018
|
||||||
|
jmp wd
|
||||||
|
|
||||||
|
.org 0x0080
|
||||||
|
|
||||||
|
afficheur:
|
||||||
|
.DB 0x7E, 0x0C, 0x37, 0x9F, 0x4D, 0xDB, 0xFB, 0x0E, 0xFF, 0xDF
|
||||||
|
; 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
|
||||||
|
|
||||||
|
debut:
|
||||||
|
; d1 <- 0
|
||||||
|
LDI R16,0
|
||||||
|
STS d1,R16
|
||||||
|
|
||||||
|
; d0 <- 0
|
||||||
|
LDI R16,0
|
||||||
|
STS d0,R16
|
||||||
|
|
||||||
|
; route <- 0
|
||||||
|
LDI R16,0
|
||||||
|
STS route,R16
|
||||||
|
|
||||||
|
|
||||||
|
cli
|
||||||
|
; SREG <- 0b10000000
|
||||||
|
LDI R16,0b10000000
|
||||||
|
STS SREG,R16
|
||||||
|
|
||||||
|
|
||||||
|
; Configuration des ports
|
||||||
|
; DDRA@IO <- 0xFF
|
||||||
|
LDI R16,0xFF
|
||||||
|
OUT DDRA,R16
|
||||||
|
|
||||||
|
; DDRB@IO <- 0xFF
|
||||||
|
LDI R16,0xFF
|
||||||
|
OUT DDRB,R16
|
||||||
|
|
||||||
|
; DDRD@IO <- 0x80
|
||||||
|
LDI R16,0x80
|
||||||
|
OUT DDRD,R16
|
||||||
|
|
||||||
|
|
||||||
|
; Interruptions
|
||||||
|
; EIMSK <- 0b00001111 ; On active les interruptions PD[3:0] sur front descendant
|
||||||
|
LDI R16,0b00001111
|
||||||
|
STS EIMSK,R16
|
||||||
|
|
||||||
|
; EICRA <- 0b10101010
|
||||||
|
LDI R16,0b10101010
|
||||||
|
STS EICRA,R16
|
||||||
|
|
||||||
|
; EICRB <- 0b00000000
|
||||||
|
LDI R16,0b00000000
|
||||||
|
STS EICRB,R16
|
||||||
|
|
||||||
|
|
||||||
|
; Watchdog toutes les secondes
|
||||||
|
; WDTCSR <- 0x10
|
||||||
|
LDI R16,0x10
|
||||||
|
STS WDTCSR,R16
|
||||||
|
|
||||||
|
; WDTCSR <- 0b01000110
|
||||||
|
LDI R16,0b01000110
|
||||||
|
STS WDTCSR,R16
|
||||||
|
|
||||||
|
|
||||||
|
sei
|
||||||
|
|
||||||
|
call affiche
|
||||||
|
|
||||||
|
boucle:
|
||||||
|
sleep
|
||||||
|
; jump boucle
|
||||||
|
JMP boucle
|
||||||
|
|
||||||
|
|
||||||
|
b1s:
|
||||||
|
inc d0
|
||||||
|
; si d0 < 10 saut finb1s
|
||||||
|
LDS R16,d0
|
||||||
|
PUSH R16
|
||||||
|
LDI R16,10
|
||||||
|
POP R17
|
||||||
|
CP R17,R16
|
||||||
|
BRLO eti0
|
||||||
|
CLR R16
|
||||||
|
RJMP eti1
|
||||||
|
eti0:
|
||||||
|
LDI R16,0x01
|
||||||
|
eti1:
|
||||||
|
TST R16
|
||||||
|
BREQ eti2
|
||||||
|
JMP finb1s
|
||||||
|
eti2:
|
||||||
|
|
||||||
|
; d0 <- 0
|
||||||
|
LDI R16,0
|
||||||
|
STS d0,R16
|
||||||
|
|
||||||
|
; jump b10s
|
||||||
|
JMP b10s
|
||||||
|
|
||||||
|
finb1s:
|
||||||
|
call affiche
|
||||||
|
reti
|
||||||
|
|
||||||
|
b10s:
|
||||||
|
inc d1
|
||||||
|
; si d1 < 10 saut finb10s
|
||||||
|
LDS R16,d1
|
||||||
|
PUSH R16
|
||||||
|
LDI R16,10
|
||||||
|
POP R17
|
||||||
|
CP R17,R16
|
||||||
|
BRLO eti3
|
||||||
|
CLR R16
|
||||||
|
RJMP eti4
|
||||||
|
eti3:
|
||||||
|
LDI R16,0x01
|
||||||
|
eti4:
|
||||||
|
TST R16
|
||||||
|
BREQ eti5
|
||||||
|
JMP finb10s
|
||||||
|
eti5:
|
||||||
|
|
||||||
|
; d0 <- 9
|
||||||
|
LDI R16,9
|
||||||
|
STS d0,R16
|
||||||
|
|
||||||
|
; d1 <- 9
|
||||||
|
LDI R16,9
|
||||||
|
STS d1,R16
|
||||||
|
|
||||||
|
finb10s:
|
||||||
|
call affiche
|
||||||
|
reti
|
||||||
|
|
||||||
|
affiche:
|
||||||
|
; PORTA@IO <- afficheur@ROM[d1]
|
||||||
|
LDS R16,d1
|
||||||
|
LDI R30,low(afficheur<<1)
|
||||||
|
LDI R31,high(afficheur<<1)
|
||||||
|
CLR R17
|
||||||
|
ADD R30,R16
|
||||||
|
ADC R31,R17
|
||||||
|
LPM R16,Z
|
||||||
|
OUT PORTA,R16
|
||||||
|
|
||||||
|
; PORTB@IO <- afficheur@ROM[d0]
|
||||||
|
LDS R16,d0
|
||||||
|
LDI R30,low(afficheur<<1)
|
||||||
|
LDI R31,high(afficheur<<1)
|
||||||
|
CLR R17
|
||||||
|
ADD R30,R16
|
||||||
|
ADC R31,R17
|
||||||
|
LPM R16,Z
|
||||||
|
OUT PORTB,R16
|
||||||
|
|
||||||
|
ret
|
||||||
|
|
||||||
|
marche:
|
||||||
|
; route <- 1
|
||||||
|
LDI R16,1
|
||||||
|
STS route,R16
|
||||||
|
|
||||||
|
; PORTD@IO <- 0x80
|
||||||
|
LDI R16,0x80
|
||||||
|
OUT PORTD,R16
|
||||||
|
|
||||||
|
reti
|
||||||
|
|
||||||
|
arret:
|
||||||
|
; route <- 0
|
||||||
|
LDI R16,0
|
||||||
|
STS route,R16
|
||||||
|
|
||||||
|
; d0 <- 0
|
||||||
|
LDI R16,0
|
||||||
|
STS d0,R16
|
||||||
|
|
||||||
|
; d1 <- 0
|
||||||
|
LDI R16,0
|
||||||
|
STS d1,R16
|
||||||
|
|
||||||
|
call affiche
|
||||||
|
reti
|
||||||
|
|
||||||
|
wd:
|
||||||
|
; si route = 0 saut finwd
|
||||||
|
LDS R16,route
|
||||||
|
PUSH R16
|
||||||
|
LDI R16,0
|
||||||
|
POP R17
|
||||||
|
CP R17,R16
|
||||||
|
BREQ eti6
|
||||||
|
CLR R16
|
||||||
|
RJMP eti7
|
||||||
|
eti6:
|
||||||
|
LDI R16,0x01
|
||||||
|
eti7:
|
||||||
|
TST R16
|
||||||
|
BREQ eti8
|
||||||
|
JMP finwd
|
||||||
|
eti8:
|
||||||
|
|
||||||
|
dec d0
|
||||||
|
; si d0 < 10 saut prefinwd
|
||||||
|
LDS R16,d0
|
||||||
|
PUSH R16
|
||||||
|
LDI R16,10
|
||||||
|
POP R17
|
||||||
|
CP R17,R16
|
||||||
|
BRLO eti9
|
||||||
|
CLR R16
|
||||||
|
RJMP eti10
|
||||||
|
eti9:
|
||||||
|
LDI R16,0x01
|
||||||
|
eti10:
|
||||||
|
TST R16
|
||||||
|
BREQ eti11
|
||||||
|
JMP prefinwd
|
||||||
|
eti11:
|
||||||
|
|
||||||
|
; d0 <- 9
|
||||||
|
LDI R16,9
|
||||||
|
STS d0,R16
|
||||||
|
|
||||||
|
dec d1
|
||||||
|
; si d1 < 10 saut prefinwd
|
||||||
|
LDS R16,d1
|
||||||
|
PUSH R16
|
||||||
|
LDI R16,10
|
||||||
|
POP R17
|
||||||
|
CP R17,R16
|
||||||
|
BRLO eti12
|
||||||
|
CLR R16
|
||||||
|
RJMP eti13
|
||||||
|
eti12:
|
||||||
|
LDI R16,0x01
|
||||||
|
eti13:
|
||||||
|
TST R16
|
||||||
|
BREQ eti14
|
||||||
|
JMP prefinwd
|
||||||
|
eti14:
|
||||||
|
|
||||||
|
; route <- 0
|
||||||
|
LDI R16,0
|
||||||
|
STS route,R16
|
||||||
|
|
||||||
|
; PORTD@IO <- 0x00
|
||||||
|
LDI R16,0x00
|
||||||
|
OUT PORTD,R16
|
||||||
|
|
||||||
|
; d0 <- 0
|
||||||
|
LDI R16,0
|
||||||
|
STS d0,R16
|
||||||
|
|
||||||
|
; d1 <- 0
|
||||||
|
LDI R16,0
|
||||||
|
STS d1,R16
|
||||||
|
|
||||||
|
prefinwd:
|
||||||
|
call affiche
|
||||||
|
finwd:
|
||||||
|
reti
|
135
TP2/TP23.txt
Normal file
135
TP2/TP23.txt
Normal file
|
@ -0,0 +1,135 @@
|
||||||
|
.equ PINA = 0x00 ; définition des adresses des ports
|
||||||
|
.equ DDRA = 0x01
|
||||||
|
.equ PORTA = 0x02
|
||||||
|
.equ PINB = 0x03
|
||||||
|
.equ DDRB = 0x04
|
||||||
|
.equ PORTB = 0x05
|
||||||
|
.equ PIND = 0x09
|
||||||
|
.equ DDRD = 0x0A
|
||||||
|
.equ PORTD = 0x0B
|
||||||
|
|
||||||
|
.equ SREG = 0x3F
|
||||||
|
|
||||||
|
.equ WDTCSR = 0x60
|
||||||
|
.equ TCCR0A = 0x24
|
||||||
|
.equ TCCR0B = 0x25
|
||||||
|
.equ TIMSK0 = 0x6E
|
||||||
|
.equ TIFR0 = 0x35
|
||||||
|
|
||||||
|
.equ EIMSK = 0x3D
|
||||||
|
.equ EICRA = 0x69
|
||||||
|
.equ EICRB = 0x6A
|
||||||
|
|
||||||
|
.equ RAMEND = 0x21FF
|
||||||
|
.equ SPH = 0x3E ; initialisation de la pile
|
||||||
|
.equ SPL = 0x3D
|
||||||
|
|
||||||
|
.def d1 = r20
|
||||||
|
.def d0 = r21
|
||||||
|
.def route = r22
|
||||||
|
|
||||||
|
.org 0x000
|
||||||
|
; Vecteur RESET
|
||||||
|
jmp debut
|
||||||
|
|
||||||
|
.org 0x0002
|
||||||
|
jmp b10s
|
||||||
|
|
||||||
|
.org 0x0004
|
||||||
|
jmp b1s
|
||||||
|
|
||||||
|
.org 0x0006
|
||||||
|
jmp marche
|
||||||
|
|
||||||
|
.org 0x0008
|
||||||
|
jmp arret
|
||||||
|
|
||||||
|
.org 0x0018
|
||||||
|
jmp wd
|
||||||
|
|
||||||
|
.org 0x0080
|
||||||
|
|
||||||
|
afficheur:
|
||||||
|
.DB 0x7E, 0x0C, 0x37, 0x9F, 0x4D, 0xDB, 0xFB, 0x0E, 0xFF, 0xDF
|
||||||
|
; 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
|
||||||
|
|
||||||
|
debut:
|
||||||
|
d1 <- 0
|
||||||
|
d0 <- 0
|
||||||
|
route <- 0
|
||||||
|
|
||||||
|
cli
|
||||||
|
SREG <- 0b10000000
|
||||||
|
|
||||||
|
; Configuration des ports
|
||||||
|
DDRA@IO <- 0xFF
|
||||||
|
DDRB@IO <- 0xFF
|
||||||
|
DDRD@IO <- 0x80
|
||||||
|
|
||||||
|
; Interruptions
|
||||||
|
EIMSK <- 0b00001111 ; On active les interruptions PD[3:0] sur front descendant
|
||||||
|
EICRA <- 0b10101010
|
||||||
|
EICRB <- 0b00000000
|
||||||
|
|
||||||
|
; Watchdog toutes les secondes
|
||||||
|
WDTCSR <- 0x10
|
||||||
|
WDTCSR <- 0b01000110
|
||||||
|
|
||||||
|
sei
|
||||||
|
|
||||||
|
call affiche
|
||||||
|
|
||||||
|
boucle:
|
||||||
|
sleep
|
||||||
|
jump boucle
|
||||||
|
|
||||||
|
b1s:
|
||||||
|
inc d0
|
||||||
|
si d0 < 10 saut finb1s
|
||||||
|
d0 <- 0
|
||||||
|
jump b10s
|
||||||
|
finb1s:
|
||||||
|
call affiche
|
||||||
|
reti
|
||||||
|
|
||||||
|
b10s:
|
||||||
|
inc d1
|
||||||
|
si d1 < 10 saut finb10s
|
||||||
|
d0 <- 9
|
||||||
|
d1 <- 9
|
||||||
|
finb10s:
|
||||||
|
call affiche
|
||||||
|
reti
|
||||||
|
|
||||||
|
affiche:
|
||||||
|
PORTA@IO <- afficheur@ROM[d1]
|
||||||
|
PORTB@IO <- afficheur@ROM[d0]
|
||||||
|
ret
|
||||||
|
|
||||||
|
marche:
|
||||||
|
route <- 1
|
||||||
|
PORTD@IO <- 0x80
|
||||||
|
reti
|
||||||
|
|
||||||
|
arret:
|
||||||
|
route <- 0
|
||||||
|
d0 <- 0
|
||||||
|
d1 <- 0
|
||||||
|
call affiche
|
||||||
|
reti
|
||||||
|
|
||||||
|
wd:
|
||||||
|
si route = 0 saut finwd
|
||||||
|
dec d0
|
||||||
|
si d0 < 10 saut prefinwd
|
||||||
|
d0 <- 9
|
||||||
|
dec d1
|
||||||
|
si d1 < 10 saut prefinwd
|
||||||
|
route <- 0
|
||||||
|
PORTD@IO <- 0x00
|
||||||
|
d0 <- 0
|
||||||
|
d1 <- 0
|
||||||
|
prefinwd:
|
||||||
|
call affiche
|
||||||
|
finwd:
|
||||||
|
reti
|
Reference in a new issue