0% ont trouvé ce document utile (0 vote)
30 vues11 pages

Achi tp3

Transféré par

pseri.2016
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
30 vues11 pages

Achi tp3

Transféré par

pseri.2016
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

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