a wiec tak zakładamy że przy up pracuje kwarc 12MHz. jeśli nie wymagasz dużej dokładnośći to timer ustawiasz w tryb 1 ( 16 bit ) tak aby generował przerwanie np: co 10ms; przy 12MHz cykl wynośi 1us czyli przerwanie będzie co 10000 cykli ( 10000 us = 10ms ). wartość po której następuje przerwanie to zmiana z 65535 na 0000. czyli do rejestrów licznika musisz wpisać ( wpisywać w każdym przerwaniu ) wartość: 65535 - 10000 = 55535 ( D8EF hex ). w przerwaniu będziesz liczył przerwania ( zakręcone troche

) i jeśli wystąpi setne przerwanie to upłyneła właśnie jedna sekunda. troche programu:
org 0000h
sjmp pre_stert ; etykieta początek programu
org 000Bh ; tu program skacze jak pojawi sie przerwanie od t0 ( jego użyjemy)
sjmp przerwanie
; na poczatku deklarujemy zmienne "sek" i "10ms" ( bajt )
pre_start:
mov sek,#0
mov 10ms,#0
mov p1,# ; gasimy wszystkie ledy
; konfiguracja t0
mov tmod,#00000001b ; timer 0 w trym drugi ( 16 bit ) jako czasomerz
mov th0,#D8h ;ładujemy do licznika wartość początkową
mov tl0,#EFh
mov IE,#10000010b ; uaktywniamy przerwanie od t0
; i na koniec start licznika
setb tr0
prog_glowny: ; program główny
setb p2.1
jnb p2.1,prog_glowny ; jesli p2.1 w stanie wysokim to skocz do prog_glowny ( aktywny stan niski ) jesli pin aktywny to idz dalej
mov sek,#0 ; i zeruj zmienna sek ( liczba sekund )
mov p1,sek ; wyzeruj także port p1
sjmp prog_glowny
przerwanie:
mov th0,#D8h ; ponowne zaladowanie wartosci poczatkowych ( licznik liczy od zerz)
mov tl0,#EFh
push psw ;psw i a na stos
push a
inc 10ms ;zwieksz o jeden zmienna 10ms
mov a,10ms ;zmienna do a
cjne a,100,koniec_t0 ;jesli a nie jest rowne 100 to koniec przerania
setb p2.0 ; ustaw p2.0 w stan wysoki H
jb p2.0, koniec_t0 ;sprawdz czy p2.0 w stanie wysokim jeśli tak to koniec przerwania
inc sek ; jeśli nei to zwieksz zmienna sek o jeden
mov p1,sek ; przepisz zmienna na port p1
koniec_t0: ;koniec przerwania
pop a ;zdejmij ze stosu a
pop psw ;zdejmij ze stosu psw
reti ; najważniejsz instrukcja zakończ przerwanie bez niej program pujdzie w "maliny"
p.s. to coś ( "program" ) jest pisany na szybkiego i nie sprawdzany; przeglądałem go kilka razy i wydaje mnie sie ze niczego nie zapomniałem. pozdrawiam