chen.txt 1.12 KB
.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