Dobrý den,
snažím se naprogramovat binární hodiny na procesor Mega8A
program by se měl řídit 16bit čítačem a při každém přerušení jej nulovat,
Simulace funguje jak má, každou sekundu (cca, přerušení není přesně dopočítáno).
Na procesoru se však chová zcela jinak, čas najednou opravdu letí a jediné, co je člověk schopen počítat jsou hodiny.
Když se však nulování TCNT vynechá, program funguje ± normálně, jen nedodržuje 1s ale o něco víc, než přeteče celý registr čítače.
Nejspíš mi v kódu někde něco chybí, ale já už to asi nejsem schopen doplnit, proto prosím kohokoliv, kdo by tušil,co je špatně o radu.
(používám AVRstudio)
Děkuji
.NOLIST
.INCLUDE "m8def.inc"
.LIST
.ORG 0
RJMP RESET
.ORG OC1Baddr
; =============================
; delay loop generator
; 49 cycles:
; -----------------------------
; delaying 48 cycles:
ldi R17, $10
WGLOOP0: dec R17
brne WGLOOP0
; -----------------------------
; delaying 1 cycle:
nop
; =============================
ldi tmp,0
out TCNT1L,tmp
ldi tmp,0
out TCNT1H,tmp
rjmp zobrazeni
.DEF seco = R1
.DEF mino = R2
.DEF hro = R3
.DEF sys = R4
.DEF tmp = R16
.DEF hr = R20
.DEF mn = R21
.DEF sc = R22
.DEF cycs = R23
.DEF cycm = R24
.DEF cych = R25
reset:
;******************
LDI tmp,LOW(RAMEND)
OUT SPL,tmp
LDI tmp,HIGH(RAMEND)
OUT SPH,tmp
;******************
LDI tmp,255
OUT DDRB,tmp
OUT DDRC,tmp
OUT DDRD,tmp
clr cycs
clr cycm
clr cych
clr sc
clr mn
clr hr
clr mino
clr seco
clr hro
start:
;******************
;nastaveni citace
LDI R19,3
OUT TCCR1B,R19
LDI R19,0b00100011
OUT OCR1BL,R19
LDI R19,0b11110100
OUT OCR1BH,R19
LDI R19,8
OUT TIMSK,R19
;*****************
sei
wait:
cpi tmp,2
brne scnd
rjmp wait
zobrazeni:
out portB,seco
out portD,mino
out portC,hro
reti
scnd:
ldi tmp,2
mov seco,cycs
add seco,sc
cpi cycs,0b1001
breq scnd2
inc cycs
rjmp wait
scnd2:
ldi cycs,0b10000
add sc,cycs
clr cycs
cpi sc,0b1100000
breq sres
rjmp wait
sres:
clr sc
rjmp min
min:
mov mino,cycm
add mino,mn
cpi cycm,0b1001
breq min2
inc cycm
rjmp wait
min2:
ldi cycm,0b10000
add mn,cycm
clr cycm
cpi mn,0b1100000
breq mres
rjmp wait
mres:
clr mn
rjmp hrs
hrs:
mov hro,cych
add hro,hr
ldi tmp,0b100101
cp hro,tmp
breq hres
cpi cych,0b1001
breq hrs2
inc cych
rjmp wait
hrs2:
ldi cych,0b10000
add hr,cych
clr cych
cpi hr,0b100100
rjmp wait
hres:
clr hr
clr cych
clr hro
clr tmp
rjmp wait
ret
delay:
; =============================
; delay loop generator
; 400000 cycles:
; -----------------------------
; delaying 399999 cycles:
ldi R17, $97
WGLOOP4: ldi R18, $06
WGLOOP1: ldi R19, $92
WGLOOP2: dec R19
brne WGLOOP2
dec R18
brne WGLOOP1
dec R17
brne WGLOOP4
; -----------------------------
; delaying 1 cycle:
nop
; =============================
ret
administrator: přejmenováno z "Splašený čítač"