Raczkuję w mikrokontrolerach więc mogłem popełnić jakiś drobny błąd którego nie widzę. Chciałem wykorzystać timer wewnętrzny 89c2051 do zliczania czasu. Ustawiłem go żeby zaświecał / gasił jedną diodę co 1 sekundę i żeby zaświecał / gasił inną diodę co 1 minutę. Niestety coś musiałem pokiełbasić i albo źle poobliczałem pętle albo źle ułożyłem program. W każdym razie na pierwszy rzut oka wszystko jest ok, ale jak zmierzyłem czas 1 minuty stoperem to brakuje jej mniej więcej 1 sekundę (czyli dioda minutowa załącza się i gaśnie średnio co 59 sek.)
W układzie jest wmontowany kwarc 12MHz.
Zgodnie z moimi źródłami liczyłem to tak:
Tryb licznika 0
fz - częst. imp. zliczanych przez licznik
Fk - częst. kwarca
fz= fk/12/32=31250
fz dzieli się przez 250
TH1imp=31250/250=125 (czyli co 125 impulsów będzie 1/250 sekundy)
Th1poczatkowe=TH1max-TH1imp=256-125=131
pomóżcie bo już siedzę nad rym 2 dzień i nic mi nie przychodzi do głowy
W układzie jest wmontowany kwarc 12MHz.
Zgodnie z moimi źródłami liczyłem to tak:
Tryb licznika 0
fz - częst. imp. zliczanych przez licznik
Fk - częst. kwarca
fz= fk/12/32=31250
fz dzieli się przez 250
TH1imp=31250/250=125 (czyli co 125 impulsów będzie 1/250 sekundy)
Th1poczatkowe=TH1max-TH1imp=256-125=131
czest equ 131
org 0000h
ljmp start
org 001bh
ljmp intT1
intt1:
mov th1,#czest ;zaladowanie licznika
djnz r2,koniect1 ;jezeli 0 to
cpl p1.7 ; zaneguj stan diody sek.
mov r2,#250 ; zaladowanie petli sek.
djnz r3,koniect1 ;jezeli 0 to
cpl p1.1 ; zaneguj stan diody min.
mov r3,#60 ; zaladowanie petli min.
koniect1:
reti
start:
clr TR1
anl Tmod,#0fh ;ustawienie licznika
orl tmod,#00h
mov th1,#czest ;zaladowanie licznika
mov r2,#250 ;zaladowanie petli 1 sek.
mov r3,#60 ; zaladowanie petli 1 min.
setb p1.7 ; zgaszenie diody sek.
setb p1.1 ; zgaszenie diody min.
setb ET1
setb ea
setb pt1
setb tr1 ; uruchomienie timera
czekaj:
djnz r0,czekaj ;pusta petla
djnz r1,czekaj
ajmp czekaj
end
pomóżcie bo już siedzę nad rym 2 dzień i nic mi nie przychodzi do głowy