.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 RAMEND = 0x21FF .equ SPH = 0x3E ; initialisation de la pile .equ SPL = 0x3D .org 0x000 ; Vecteur RESET jmp debut .org 0x0080 debut: ldi r16,0xFF ; On configure les ports A et B en sortie out DDRA,r16 out DDRB,r16 r17 <- 0b00000001 ; 8 places de chenillard boucleA: ; On affiche l'état courant out porta,r17 call tempo ; On calcule l'état suivant lsl r17 si r17 > 0 saut boucleA ; Si le bit "volant" est sorti de l'octet, on passe à l'autre partie du programme sur le port B out porta,r17 ; On éteint le port A ; On configure le registre pour qu'il commence de l'autre coté r17 <- 0b10000000 saut boucleB ; (pas nécessaire) boucleB: out portb,r17 call tempo; lsr r17 si r17 > 0 saut boucleB out portb,r17 r17 <- 0b00000001 saut boucleA ; Programme pour faire une pause tempo: ; On fait une pause ldi r24,8 tempoA: subi r22,1 sbci r23,0 sbci r24,0 brcc tempoA ret