Advertisement
Guest User

Untitled

a guest
Mar 19th, 2019
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ;*
  2. ;__
  3. ;Programme principal
  4. ;__
  5.  
  6. Debut:                                            ;Initialisation du programme
  7. ldi r16, $01                                    ;lecture du port C
  8. ldi r17, $30                                    ;ecriture de 00110000 dans r17 pour changer de sens
  9. eor r16, r17                                    ;Initialisation du port C à 0011 0000
  10.  
  11. ldi r19, 0
  12. ldi r18, 0
  13. out TCCR0A, r18                                    ;Initialisation du registre de controle du timer 0 (0000 0000 en etat normal)
  14. ldi r18, $A0
  15.  
  16. out TCNT0, r18                                    ;Initialisation du registre principal du timer 0 à 130 pour compter 125 (255-130)
  17. ldi r18, 0
  18. sts TIMSK0, r18                                    ;Initialisation du mask d'interruption du timer 0
  19. ldi r18, $03
  20. 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
  21. maj:                                            ;Boucle infini du programme
  22. out PORTC, r16                                    ;Ecriture sur le port C
  23.  
  24. call Delay                                        ;Appel de la subroutine Delay pour temporiser l'affichage
  25. ;------------------------------------------------------------
  26.  
  27. cpi r16, $30                                    ;Vérification du sens actuel du chenillard
  28. brge gauche                                        ;Si r16 > 0011 0000, alors il va vers la gauche
  29.  
  30. lsr r16
  31. cpi r16, $01                                    ;Direction vers la droite, on decremente r16
  32. brne maj                                        ;Si le resultat est différent de 0, on affiche directement le résultat
  33. jmp inversion                                    ;Sinon, on inverse le sens
  34.  
  35. gauche:
  36. eor r16, r17                                    ;Direction vers la gauche
  37. lsl r16
  38. eor r16, r17                                    ;On incrémente r16
  39. cpi r16, $38
  40. brne maj                                        ;Si le résultat est différent de 0011 1111, on met directement à jour les leds, sinon on inverse le sens
  41.  
  42.  
  43. inversion :
  44. eor r16, r17                                    ;Inversion des bits c5 et c4 pour changer le sens
  45.  
  46. jmp maj                                            ;On boucle infiniment sur maj
  47. ;**
  48. ;__
  49. ;Subroutines
  50. ;__
  51.  
  52. Delay:
  53. ldi r19, 0                                        ;Reinitialisation du compteur d'overflow
  54.  
  55. loopDelay:                                        ;Tant que le timer n'a pas fini de compter, on boucle. Sinon on passe a la suite
  56. sbis TIFR0,0
  57. rjmp loopDelay
  58.  
  59. ldi r18, 1
  60. out TIFR0, r18                                    ;Reset du flag bit d'overflow du timer
  61. ldi r18, $A0
  62. out TCNT0, r18                                    ;On replace le timer à 130
  63.  
  64. inc r19                                            ;Incrémentation du compteur d'overflow
  65. cpi r19, 250                                    ;Tant que ce compteur n'atteind pas 250 (250ms), on continue de compter
  66. brne loopDelay
  67. ret                                                ;Fin de la subroutine
  68. ;_
  69. ;**
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement