Ne znam šta ti u primeru radi ovaj deo u prekidnoj rutini:
push zl
push zh
Mislim da ti je to suvišno.
Možeš preload vrednosti tajmera1 da smestiš u neka druga dva registra opšte namene, recimo r16 i r17 ti sadrže vrednosti 0xB9, i 0xB1
Onda u prekidnoj rutini samo radiš:
out TCNT1H, r16
out TCNT1L, r17
Time redukuješ ovaj deo koda:
;ldi zl, byte1(177)
;sts TCNT1L, zl
;ldi zh, byte2(185)
;sts TCNT1H, zh
X, Y i Z registre čuvaj za važnije stvari. Napomenuo sam ti da ti mogu pomoći kod adresiranja kao pokazivači.
Na startu Timer1 prekidne rutine možeš onemogućiti prekide (za sad) naredbom cli a pre izlaska iz prekida ponovo omogućiš sve prekide sa sei.
Nije loše i da obrišeš TOV bit u registru TIFR1 tako što upišeš 1 na njegovo mesto. On treba automatski da se obriše po izlasku iz prekida ali...
push zl
push zh
Mislim da ti je to suvišno.
Možeš preload vrednosti tajmera1 da smestiš u neka druga dva registra opšte namene, recimo r16 i r17 ti sadrže vrednosti 0xB9, i 0xB1
Onda u prekidnoj rutini samo radiš:
out TCNT1H, r16
out TCNT1L, r17
Time redukuješ ovaj deo koda:
;ldi zl, byte1(177)
;sts TCNT1L, zl
;ldi zh, byte2(185)
;sts TCNT1H, zh
X, Y i Z registre čuvaj za važnije stvari. Napomenuo sam ti da ti mogu pomoći kod adresiranja kao pokazivači.
Na startu Timer1 prekidne rutine možeš onemogućiti prekide (za sad) naredbom cli a pre izlaska iz prekida ponovo omogućiš sve prekide sa sei.
Nije loše i da obrišeš TOV bit u registru TIFR1 tako što upišeš 1 na njegovo mesto. On treba automatski da se obriše po izlasku iz prekida ali...