/* Pour l'inclusion des noms des registres spécifiques */
#include <avr/io.h>
/* Debut de la section .text */
.section .text
.global main
main: sbi _SFR_IO_ADDR(DDRE), 4 // Mise à 1 du bit DDRE4
sbi _SFR_IO_ADDR(DDRG), 5 // Mise à 1 du bit DDRG5
sbi _SFR_IO_ADDR(DDRB), 4 // Mise à 1 du bit DDRB4
cbi _SFR_IO_ADDR(PORTE), 4
cbi _SFR_IO_ADDR(PORTG), 5
cbi _SFR_IO_ADDR(PORTB), 4
etatA: cbi _SFR_IO_ADDR(PORTE), 4
cbi _SFR_IO_ADDR(PORTG), 5
cbi _SFR_IO_ADDR(PORTB), 4
call tempo
call off
call on
etatB: cbi _SFR_IO_ADDR(PORTE), 4
sbi _SFR_IO_ADDR(PORTG), 5
cbi _SFR_IO_ADDR(PORTB), 4
call tempo
call off
call on
etatC: sbi _SFR_IO_ADDR(PORTE), 4
cbi _SFR_IO_ADDR(PORTG), 5
sbi _SFR_IO_ADDR(PORTB), 4
call tempo
call off
call on
rjmp etatA
fin: /* Boucle sans fin */
rjmp fin
on :
in R17,_SFR_IO_ADDR(PINB) //save la valeur de B6 dans R17
/*on veut decaler R12 pour que le bit 5 entre dans le carry et le declache */
lsl R17
lsl R17
brcs on
ret
off :
in R17,_SFR_IO_ADDR(PINB) //save la valeur de B6 dans R17
/*on veut decaler R12 pour que le bit 5 entre dans le carry et le declache */
lsl R17
lsl R17
brcc off
ret
tempo:
push R25
push R24
push R23
ldi R25,61
boucle3:ldi R24,255
boucle2:ldi R23,225
boucle1: subi R23,1
nop
brne boucle1
subi R24,1
brne boucle2
subi R25,1
brne boucle3
pop R23
pop R24
pop R25
ret //ret pour revenir a l'adresse de l'appellant .end
/* Pour l'inclusion des noms des registres spécifiques */
#include <avr/io.h>
/* Debut de la section .text */
.section .text
.global main
main:
cbi _SFR_IO_ADDR(DDRB), 6 /* Mise à 0 du bit DDRB6 */
/* C'est à dire mettre le bit PORTB6 en entre */
cbi _SFR_IO_ADDR(DDRB), 7 /* Mise à 0 du bit DDRB7 */
/* C'est à dire mettre le bit PORTB7 en entre */
sbi _SFR_IO_ADDR(DDRE), 4 /* Mise à 1 du bit DDRE4 */
/* C'est à dire mettre le bit PORTB5 en sortie */
sbi _SFR_IO_ADDR(DDRG), 5 /* Mise à 1 du bit DDRG5 */
/* C'est à dire mettre le bit PORTB5 en sortie */
sbi _SFR_IO_ADDR(DDRB),4
cbi _SFR_IO_ADDR(PORTE), 4
cbi _SFR_IO_ADDR(PORTG), 5
cbi _SFR_IO_ADDR(PORTB), 4
debut:
//nôtre automate est particulier parce qu'il a en realiter par de depart prédefinie
//donc on veux lire les deux bit d'entré (les deux bits de poids fort)
//on enregistre le port B dans un registre R17 par exemple et on fait un masquage sur R17 pour ne
garder que le bit 7 et le bit 6
call lecture
mov R17,R16
mov R18,R16
mov R19
inc R18
dec R17
etat1://mettre les leds en off
cbi _SFR_IO_ADDR(PORTE), 4
cbi _SFR_IO_ADDR(PORTG), 5
cbi _SFR_IO_ADDR(PORTB), 4
//maitenant on compare l'entré (actuel) a R18 et R17
call lecture
cp R17,R19
brne etat1
cp R17,R18
brne etat4
call lecture
mov R17,R16
mov R18,R16
mov R19
inc R18
dec R17
etat2:
sbi _SFR_IO_ADDR(PORTE), 4
cbi _SFR_IO_ADDR(PORTG), 5
cbi _SFR_IO_ADDR(PORTB), 4
call lecture
cp R17,R19
brne etat2
cp R17,R18
brne etat1
call lecture
mov R17,R16
mov R18,R16
mov R19
inc R18
dec R17
etat3:
sbi _SFR_IO_ADDR(PORTE), 4
sbi _SFR_IO_ADDR(PORTG), 5
cbi _SFR_IO_ADDR(PORTB), 4
call lecture
cp R17,R19
brne etat3
cp R17,R18
brne etat2
call lecture
mov R17,R16
mov R18,R16
mov R19
inc R18
dec R17
etat4:
sbi _SFR_IO_ADDR(PORTE), 4
sbi _SFR_IO_ADDR(PORTG), 5
sbi _SFR_IO_ADDR(PORTB), 4
call lecture
cp R17,R19
brne etat4
cp R17,R18
brne etat1
fin: /* Boucle sans fin */
rjmp
lecture :in R16,_SFR_IO_ADDR(PORTB) //save la valeur de B dans R16
andi R17,11000000
ret
.end