Vous êtes sur la page 1sur 11

/* 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

Vous aimerez peut-être aussi