jo a tady je ještě jeden příklad co dělal učitel ja jen at víte jak by to mělo zhruba vypadat.....
A K TOMU 1. příkladu prý to má být ve 3 podprogramech
a má to být jakási minutka která se používá u vaření když vaříte třeba ryži na 20 minut
; generace delsi casove prodlevy pomoci preruseni - 1 min schodistovy spinac
; doba sviceni odmerovana pomoci T0 - mod 2, interval 250 cyklu - pri 12Mhz to je 250 mikrosec
; spousteni/zastavovani vnejsim prerusenim INT0
;=================================================================================
svetlo.... bit.... p0.0 ..... ; na 1 minutu do 0
pocL ..... data .... 7fh ..... ; pocitadlo poctu preruseni - nizsi byte
pocH ..... data ..... 7eh....... ; pocitadlo poctu preruseni - vyssi byte
pocSec ...... data ... 7dh ....... ; pocitadlo sekund do minuty
...... org ...... 0
...... sjmp ...... start
...... org ...... 03h ...... ; vektor preruseni pro INT0
...... sjmp ...... prerusINT0
...... org ...... 0bh ...... ; vektor preruseni pro T0
...... sjmp ...... prerusT0
...... org ...... 30h ...... ; to uz je za vektory preruseni
start: ...... mov ...... sp,#30h ...... ; presunu zacatek stacku na zacatek bytove oblasti
...... setb ...... svetlo ...... ; na zacatku zhasnu
...... setb ...... it0 ...... ; preruseni od INT0 aktivovano sestupnou hranou
...... setb ...... ex0 ...... ; povolim preruseni od INT0
...... setb ...... ea ...... ; povolim prerusovaci system
...... sjmp ...... $ ...... ; nekonecna smycka, prerusovana jen prerusenimi
...... ; ve smycce by se daly delat dalsi veci
prerusINT0: push ...... psw ...... ; pozadavek na zapnuti nebo predcasne vypnuti svetla
...... push ...... acc
...... jnb ...... svetlo,zhasni
rozsvit: ...... mov ...... th0,#(256-250) ...... ; naplnime th0 pozadovanym intervalem (250 cyklu)
...... mov ...... tl0,#(256-250) ...... ; naplnime tl0 stejnym cislem
...... mov ...... tmod,#00000010b ...... ; T0 - mod 2, casovat
...... setb ...... tr0 ...... ; povoleni T0
...... setb ...... et0 ...... ; povoleni preruseni od T0
...... mov ...... pocL,#low(4000-1) ...... ; pocet preruseni do 1 sec - nizsi byte
mov ...... pocH,#high(4000-1) ; pocet preruseni do 1 sec - vyssi byte
...... ; vezmu o jedna mene, protoze pri mereni sekundy nereaguji
...... ; na 0, ale na podteceni
...... mov ...... pocSec,#60 ...... ; pocitadlo sekund do minuty
...... clr ...... svetlo ...... ; rozsvitim
...... sjmp ...... konecINT0 ...... ; vyskocim z obsluhy
zhasni: clr et0 ...... ; pozadavek na predcasne zhasnuti
...... clr ...... tr0
...... setb ...... svetlo ...... ; zhasnu
konecINT0: ...... pop ...... acc
...... pop ...... psw
...... reti
prerusT0: ...... push ...... psw ...... ; uschova stavoveho slova
...... push ...... acc ...... ; uschova akumulatoru (zde zbytecna)
...... clr ...... c ...... ; odectu od dvoubytoveho pocitadla 1
...... mov ...... a,pocL
...... subb ...... a,#1
...... mov ...... pocL,a
...... mov ...... a,pocH ...... ; od pocH odectu pripadne C z nizsiho byte
...... subb ...... a,#0
...... mov ...... pocH,a
...... jnc ...... konecT0 ...... ; jeste jsem nepodtekl, jdu ven
mov pocL,#low(4000-1) ...... ; nastavim pocitadla na odmerovani dalsi sec
...... mov ...... pocH,#high(4000-1)
...... djnz ...... pocSec,konecT0
zhasniT0: ...... clr ...... et0 ...... ; zakazu dalsi preruseni od casovace
...... clr ...... tr0 ...... ; zastavim casovac
...... setb ...... svetlo ...... ; zhasnu
konecT0: ...... pop ...... acc ...... ; obnovim akumulator
...... pop ...... psw ...... ; obnovim stavove slovo
...... reti ...... ...... ; navrat z preruseni
...... end
ty tečky tam jsou aby se v tom dalo vyznat protože by to bylo všecko namačkane na sobě....asi to není uplně přehledne ale snad se v tom vyznáte