diff --git a/principal.txt b/principal.txt index 3c9a19b..71e67cb 100644 --- a/principal.txt +++ b/principal.txt @@ -3,12 +3,9 @@ .equ PINA = 0x00 .equ DDRA = 0x01 .equ PORTA = 0x02 - -.equ PINB = 0x03 -.equ DDRB = 0x04 -.equ PORTB = 0x05 - -.equ SREG = 0x3F +.equ PINC = 0x06 +.equ DDRC = 0x07 +.equ PORTC = 0x08 .equ WDTCSR = 0x60 @@ -30,8 +27,8 @@ ; Nommage des registres utilisés -.def etat = r0 -.def reference = r1 ; Température de référence actuelle +.def etat = r12 +.def reference = r13 ; Température de référence actuelle .def d3 = r2 ; Digit 3 (tout à gauche) .def d2 = r3 ; Digit 2 .def d1 = r4 ; Digit 1 @@ -75,14 +72,16 @@ ; Tableaux de la mémoire du programme afficheur: - .DB 0x3F, 0x30, 0x6D, 0x79, 0x72, 0x5B, 0x5F, 0x31, 0x7F, 0x7B, 0x77, 0x40, 0x4c, 0xfc, 0xcf, 0xc7, 0x40, 0xf6, 0x04, 0x3c, 0x40, 0x0E, 0x37, 0x54, 0x5c, 0x40, 0x40, 0x44, 0x5b, 0x4e, 0x1c, 0x1c, 0x40, 0x40, 0x40, 0x40, 0x63 - ; 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, ° + .DB 0x3F, 0x30, 0x6D, 0x79, 0x72, 0x5B, 0x5F, 0x31, 0x7F, 0x7B + ; 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ; Programme debut: ; Configuration des composants - SREG <- 0b10000000 + ; Ports parallèles + DDRA@IO <- 0xFF + DDRC@IO <- 0xFF ; Watchdog WDTCSR <- 0b00010000 @@ -126,25 +125,25 @@ afficherHorloge: ; Affiche l'heure actuelle temp <- t2 & 0b00011111 d3 <- 0x00 - si temp > 10 alors d3 <- afficheur[temp/10] - d2 <- afficheur[temp%10] | 0b10000000 - d1 <- afficheur[t2/10] - d0 <- afficheur[t2%10] + si temp > 10 alors d3 <- afficheur@ROM[temp/10] + d2 <- afficheur@ROM[temp%10] | 0b10000000 + d1 <- afficheur@ROM[t2/10] + d0 <- afficheur@ROM[t2%10] ret afficherTemperature: ; Considère le registre compteur comme une température et l'affiche - d0 <- afficheurLettre[26] ; Sigle degré - d1 <- afficheur[compteur%10] + d0 <- 0x63 + d1 <- afficheur@ROM[compteur%10] temp <- compteur + 50 - d2 <- afficheur[(temp/10)%10] | 0b10000000 - d3 <- afficheur[temp/100] + d2 <- afficheur@ROM[(temp/10)%10] | 0b10000000 + d3 <- afficheur@ROM[temp/100] ret afficherHeur: ; Considère le registre compteur comme une heure et l'affiche - d3 <- afficheur[compteur/10] - d2 <- afficheur[compteur%10] | 0b10000000 + d3 <- afficheur@ROM[compteur/10] + d2 <- afficheur@ROM[compteur%10] | 0b10000000 d1 <- 0x00 d0 <- 0x00 ret @@ -153,8 +152,8 @@ afficherMinu: ; Considère le registre compteur comme une minute et l'affiche d3 <- 0x00 d2 <- 0b10000000 - d1 <- afficheur[compteur/10] - d0 <- afficheur[compteur%10] + d1 <- afficheur@ROM[compteur/10] + d0 <- afficheur@ROM[compteur%10] ret afficherJour: @@ -281,12 +280,16 @@ etatMenuJoursC: call boundJour jmp etatMenuJoursU +etatMenuJoursS: + ; TODO Switch mode nuit ↔ mode jour + reti + etatParaJours: etat <- etat + 7 compteur <- 12 etatParaJoursU: - d3 <- afficheur[compteur/10] - d2 <- afficheur[compteur%10] + d3 <- afficheur@ROM[compteur/10] + d2 <- afficheur@ROM[compteur%10] d1 <- 0x00 d0 <- 0xFF ; TODO Récupérer le mode reti @@ -319,7 +322,7 @@ etatParaTJourC: ; TODO Sauvegarde jmp etatParaTJourU -etatMenuTNuit: + etatMenuTNuit: etat <- 19 d3 <- 0x54 d2 <- 0x1c @@ -411,8 +414,8 @@ etatParaHMinuC: incrementer: inc compteur - si etat = 0 saut etatVeilleHeur - si etat = 1 saut etatVeilleTemp + si etat = 0 saut etatVeilleTemp + si etat = 1 saut etatVeilleHeur si etat = 2 saut etatMenuTJour si etat <= 9 saut etatMenuJoursC si etat <= 16 saut etatParaJoursC @@ -431,8 +434,8 @@ incrementer: decrementer: dec compteur - si etat = 0 saut etatVeilleHeur - si etat = 1 saut etatVeilleTemp + si etat = 0 saut etatVeilleTemp + si etat = 1 saut etatVeilleHeur si etat = 2 saut etatMenuHorloge si etat <= 9 saut etatMenuJoursC si etat <= 16 saut etatParaJoursC @@ -500,7 +503,7 @@ watchdog: t2 <- t2 & 0b11100000 ; Heure à minuit si t2 >= 0b11100000 alors t2 <- 0b00000000 ; Si on est dimanche soir, on revient à lundi matin watchdogHeure: - call agirHeure + call agirHeur reti ; Interruption ADC diff --git a/scripts/instr.asm b/scripts/instr.asm deleted file mode 100644 index 321adfa..0000000 --- a/scripts/instr.asm +++ /dev/null @@ -1,220 +0,0 @@ -; -; Complete instruction set -; test file for gavrasm compiler -; -; If testhigh is 0 the lower range of values is tested, -; if testhigh is 1 the upper range of values is tested -; -.EQU testhigh=0 -; -.IF testhigh==0 ; Lower range of values -.DEF r = R0 -.DEF rh = R16 -.DEF rd = R24 -.DEF rf = R16 -.DEF rm = R0 -.EQU p = 0 -.EQU pl = 0 -.EQU b = 0 -.EQU k63 = 0 -.EQU k127 = 0 -.EQU k255 = 0 -.EQU k4095 = 0 -.EQU k65535 = 0 -.EQU k4M = 0 -.ELSE ; Upper range of values -.DEF r = R31 -.DEF rh = R31 -.DEF rd = R30 -.DEF rf = R23 -.DEF rm = R30 -.EQU p = 63 -.EQU pl = 31 -.EQU b = 7 -.EQU k63 = 63 -.EQU k127 = -63 -.EQU k255 = 255 -.EQU k4095 = -2048 -.EQU k65535 = 65535 -.EQU k4M = 4194303 -.ENDIF -; -instruct: - adc r,r - add r,r - adiw rd,k63 - and r,r - andi rh,k255 - asr r - bclr b - bld r,b -.IF testhigh==0 - brbc b,-64 - brbs b,-64 - brcc -64 - brcs -64 -.ELSE - brbc b,+63 - brbs b,+63 - brcc +63 - brcs +63 -.ENDIF - break -.IF testhigh==0 - breq -64 - brge -64 - brhc -64 - brhs -64 - brid -64 - brie -64 - brlo -64 - brlt -64 - brmi -64 - brne -64 - brpl -64 - brsh -64 - brtc -64 - brts -64 - brvc -64 - brvs -64 -.ELSE - breq +63 - brge +63 - brhc +63 - brhs +63 - brid +63 - brie +63 - brlo +63 - brlt +63 - brmi +63 - brne +63 - brpl +63 - brsh +63 - brtc +63 - brts +63 - brvc +63 - brvs +63 -.ENDIF - bset b - bst r,b - call k4M - cbi pl,b - cbr rh,k255 - clc - clh - cli - cln - clr r - cls - clt - clv - clz - com r - cp r,r - cpc r,r - cpi rh,k255 - cpse r,r - dec r - des 8 - eicall - eijmp - elpm - elpm r,Z - elpm r,Z+ - eor r,r - fmul rf,rf - fmuls rf,rf - fmulsu rf,rf - icall - ijmp - in r,p - inc r - jmp k4M - lac Z,r - las Z,r - lat Z,r - ld r,X - ld r,X+ - ld r,-X - ld r,Y - ld r,Y+ - ld r,-Y - ld r,Z - ld r,Z+ - ld r,-Z - ldd r,Y+k63 - ldd r,Z+k63 - ldi rh,k255 - lds r,k65535 - lpm - lpm r,Z - lpm r,Z+ - lsl r - lsr r - mov r,r - movw rm,rm - mul r,r - muls rh,rh - neg r - nop - or r,r - ori rh,k255 - out p,r - pop r - push r -.IF testhigh==0 - rcall -2048 -.ELSE - rcall +2047 -.ENDIF - ret - reti -.IF testhigh==0 - rjmp -2048 -.ELSE - rcall +2047 -.ENDIF - rol r - ror r - sbc r,r - sbci rh,k255 - sbi pl,b - sbic pl,b - sbis pl,b - sbiw rd,k63 - sbr rh,k255 - sbrc r,b - sbrs r,b - sec - seh - sei - sen - ser rh - ses - set - sev - sez - sleep - spm - spm Z+ - st X,r - st X+,r - st -X,r - st Y,r - st Y+,r - st -Y,r - st Z,r - st Z+,r - st -Z,r - std Y+k63,r - std Z+k63,r - sts k65535,r - sub r,r - subi rh,k255 - swap r - tst r - wdr - xch Z,r -.EXIT - -This is the complete instruction set in one file. -- libgit2 0.21.2