diff --git a/compteur.txt b/compteur.txt new file mode 100644 index 0000000..04f5bb8 --- /dev/null +++ b/compteur.txt @@ -0,0 +1,53 @@ +.equ PINA = 0x00 ; définition des adresses des ports +.equ DDRA = 0x01 +.equ PORTA = 0x02 +.equ PINC = 0x06 +.equ DDRC = 0x07 +.equ PORTC = 0x08 + +.equ RAMEND = 0x21FF +.equ SPH = 0x3E ; initialisation de la pile +.equ SPL = 0x3D + +.def compteur = r20 +.def seg = r21 + +.org 0x000 + ; Vecteur RESET + jmp debut + +.org 0x0080 + +afficheur: + .DB 0x3F, 0x30, 0x6D, 0x79, 0x72, 0x5B, 0x5F, 0x31, 0x7F, 0x7B + ; 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 + + +debut: + DDRA@IO <- 0xFF + DDRC@IO <- 0xFF + +boucle: + + ; On affiche compteur sur le 7 segments + seg <- afficheur@ROM[compteur] + out porta,seg + + ; On change de chiffre + inc compteur + si compteur > 9 alors compteur <- 0 + + ; On attend et on recommence + call tempo + call tempo + call tempo + saut boucle + +tempo: + ldi r24,8 +tempoA: + subi r22,1 + sbci r23,0 + sbci r24,0 + brcc tempoA + ret diff --git a/principal.txt b/principal.txt index 8194b4a..77e68f5 100644 --- a/principal.txt +++ b/principal.txt @@ -10,6 +10,8 @@ .equ SREG = 0x3F +.equ WDTCSR = 0x60 + .equ EIMSK = 0x3D .equ EICRA = 0x69 .equ EICRB = 0x6A @@ -26,6 +28,10 @@ .def etat = r19 .def reference = r20 +.def d3 = r20 ; Digit 3 (tout à gauche) +.def d2 = r20 ; Digit 2 +.def d1 = r20 ; Digit 1 +.def d0 = r20 ; Digit 0 (tout à droite) ; Vecteurs d'interruptions @@ -47,9 +53,17 @@ .org 0x0008 ; INT3 jmp decrementer +.org 0x0080 + ; Tableaux de la mémoire du programme -.org 0x0080 +afficheurNombres: + .DB 0x7E, 0x0C, 0x37, 0x9F, 0x4D, 0xDB, 0xFB, 0x0E, 0xFF, 0xDF ; TODO Ce sont pas les bonnes valeurs + ; 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 + +;afficheurLettres: +; .DB ; TODO +; ; A, B, C, D, E, F, G, H ; TODO ; Programme @@ -57,6 +71,9 @@ debut: ; Configuration des composants SREG <- 0b10000000 + ; Watchdog + WDTCSR <- + ; Interruptions externes EIMSK <- 0b00001111 EICRA <- 0b11111111 ; TODO Oscillations annulables ? -- libgit2 0.21.2