Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ;*
- ;__
- ;Programme principal
- ;__
- Debut: ;Initialisation du programme
- ldi r16, $01 ;lecture du port C
- ldi r17, $30 ;ecriture de 00110000 dans r17 pour changer de sens
- eor r16, r17 ;Initialisation du port C à 0011 0000
- ldi r19, 0
- ldi r18, 0
- out TCCR0A, r18 ;Initialisation du registre de controle du timer 0 (0000 0000 en etat normal)
- ldi r18, $A0
- out TCNT0, r18 ;Initialisation du registre principal du timer 0 à 130 pour compter 125 (255-130)
- ldi r18, 0
- sts TIMSK0, r18 ;Initialisation du mask d'interruption du timer 0
- ldi r18, $03
- out TCCR0B, r18 ;Division de la clock (0000 0011 correspond a une division par 64, ce qui donnera 1ms par comptage complet du timer 0
- maj: ;Boucle infini du programme
- out PORTC, r16 ;Ecriture sur le port C
- call Delay ;Appel de la subroutine Delay pour temporiser l'affichage
- ;------------------------------------------------------------
- cpi r16, $30 ;Vérification du sens actuel du chenillard
- brge gauche ;Si r16 > 0011 0000, alors il va vers la gauche
- lsr r16
- cpi r16, $01 ;Direction vers la droite, on decremente r16
- brne maj ;Si le resultat est différent de 0, on affiche directement le résultat
- jmp inversion ;Sinon, on inverse le sens
- gauche:
- eor r16, r17 ;Direction vers la gauche
- lsl r16
- eor r16, r17 ;On incrémente r16
- cpi r16, $38
- brne maj ;Si le résultat est différent de 0011 1111, on met directement à jour les leds, sinon on inverse le sens
- inversion :
- eor r16, r17 ;Inversion des bits c5 et c4 pour changer le sens
- jmp maj ;On boucle infiniment sur maj
- ;**
- ;__
- ;Subroutines
- ;__
- Delay:
- ldi r19, 0 ;Reinitialisation du compteur d'overflow
- loopDelay: ;Tant que le timer n'a pas fini de compter, on boucle. Sinon on passe a la suite
- sbis TIFR0,0
- rjmp loopDelay
- ldi r18, 1
- out TIFR0, r18 ;Reset du flag bit d'overflow du timer
- ldi r18, $A0
- out TCNT0, r18 ;On replace le timer à 130
- inc r19 ;Incrémentation du compteur d'overflow
- cpi r19, 250 ;Tant que ce compteur n'atteind pas 250 (250ms), on continue de compter
- brne loopDelay
- ret ;Fin de la subroutine
- ;_
- ;**
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement