;obrazy na sedmisegmentu z techto vah ; viz soubor v excelu displejcit ;tabulka znaku ;0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f ;0.,1.,2.,3.,4.,5.,6.,7.,8.,9.,a.,b.,c.,d.,e.,f., ;tma,minus,stupen Bseg onik bit 01h ;zapnuty frek bit 02h ;mod mereni dle sekundy ted bit 03h ;pripraveno nacitaneho ke cteni deseti bit 04h ;citani v desetine sekundy a desetinasobny prumer perio bit 05h ;mereni periody mene bit 06h ;pocet period k mereni zmensi vice bit 07h ;pocet period k mereni zvetsi ends Dseg dspl1 data 10h ;displej poz 1 dspl2 data 11h ;displej poz 2 dspl3 data 12h ;displej poz 3 dspl4 data 13h ;displej poz 4 dspl5 data 14h ;displej poz 5 dspl6 data 15h ;displej poz 6 per1 data 18H ;perioda v dms L per2 data 19H ;perioda v dms H per3 data 1ah ;perioda v dms HH cetpel data 1bh ;nastaveni poctu merenych period L cetpeh data 1ch ;H ukaz data 22H ;citac ukazatele multiplexu tlscan data 23H ;scan tl0 thscan data 24h ;scan th0 over data 25h ;preteceni citace th0 poz1 data 26H ;nejvyssi rad cislice poz2 data 27H poz3 data 28H poz4 data 29H poz5 data 2aH poz6 data 2bH ;nejnižší rad cislice modif data 2eH ;mod prepinatelny resetem klic data 2fh ;test platnosti dat v pameti procesoru mulper data 30h ;delic casu pro displej zakla1 data 31h ;500ms zakla2 data 32h ;sekunda zakladna zaklan data 33h ;pomocný byte čítání času ends Cseg timdis = 256-100 ;perioda timeru casovace1 1us/krystal 12MHz/th1/8bitu 100us muldis = 20 ;nasobek casu timeru displeje aktiv = 114 ;klic aktivity pameti ends ;%S ;______________________________________________________________________ org 0 ajmp setup ;najeti setupu ;______________________________________________________________________ org 0bh ajmp prenos ;______________________________________________________________________ org 1bh ajmp period reti ;______________________________________________________________________ org 23h reti ;nic ;____________________________________________________________ ;____________________________________________________________ ;____________________________________________________________ org 50h setup: mov p1,#255 ;osetreni vystupu mov p3,#255 mov sp,#6fh ;presmerovani zasobniku mov ukaz,#1 ;prednastaveni ukazatele multiplexu mov tmod,#00100101b ;vytvor cit1 8bitu s predv. v th1 casovani displeje a casu ; a cit0 16bitu mov th1,#timdis ;citac 1 casovani zakladny a multiplexu setb tr1 ;uvolni citani z hodin pro displej a zakladnu mov th0,#0 ;smaz citac mov tl0,#0 mov over,#0 clr tr0 ;zastav citani udalosti setb c/t0\ ;nastaveni pripojeni T0 k citaci0 setb et0 ;uvolni preruseni od casovace 0 setb et1 ;uvolni preruseni od casovace 1 setb ea ;uvolni vsechna povolena preruseni setb pt1 ;priorita displej mov mulper,#muldis nop ;prvotní nastaveni displeje clr frek ;zakladni stav merkru clr ted clr deseti clr perio clr mene clr vice mov zakla1,#50 ;multiplex a zakladna mov zakla2,#10 mov zaklan,#0 mov per1,#0 ;pro periodu v dms mov per2,#0 mov per3,#0 ;____________________________________________________________ ;____________________________________________________________ ;resumé po resetu procesoru moder: mov a,klic ;test aktivity pameti clr c subb a,#aktiv ;porovnani s drive ulozenym jnz mode0 ;_______________________ mov c,onik ;nacteni bit zapnuti jc mode00 ;zapnuty pak skoc ;_______________________ mode0: setb c ;nebyl li zapnut zapni a zakladni mod mov klic,#aktiv ;aktivace klice mov modif,#1 ;zakladni mod pocitadlo udalosti setb onik sjmp mode1 ;_______________________ mode00: inc modif ;posun v nastaveni modu po restartu ;_______________________ mode1: mov a,modif ;nacteni modifikatoru funkce citace cjne a,#1,mode2 ;počítadlo pulsu v hexa setb tr0 mov poz1,#12 ;C mov poz2,#38 ;i mov poz3,#39 ;t mov poz4,#32 ; mov poz5,#1 ;1 mov poz6,#32 ; mov r7,#10 ajmp modend ;_______________________ mode2: cjne a,#2,mode3 ;počítadlo pulsu v desítkové setb tr0 ;mereno po desetinach sekundy setb frek setb deseti mov poz1,#15 ;F mov poz2,#41 ;r mov poz3,#14 ;E mov poz4,#32 ; mov poz5,#2 ;2 mov poz6,#32 ; mov r7,#10 ajmp modend ;_______________________ mode3: cjne a,#3,mode4 ;čítač frekvence pulsu za sekundu setb tr0 ;mereno po sekundach s destinou teckou setb frek clr perio mov poz1,#15 ;F mov poz2,#41 ;r mov poz3,#14 ;E mov poz4,#32 ; mov poz5,#3 ;3 mov poz6,#32 ; mov r7,#10 ajmp modend ;_______________________ mode4: cjne a,#4,mode5 ;mereni periody mov cetpel,#256-1 ;nastaveni mereni na 1 periodu mov cetpeh,#255 setb tr0 setb perio ;nastaveni pro mereni periody mov poz1,#35 ;P mov poz2,#14 ;E mov poz3,#41 ;r mov poz4,#32 ; mov poz5,#4 ;4 mov poz6,#32 ; mov r7,#1 mov th0,cetpeh ;smaz citac mov tl0,cetpel mov zaklan,#0 ajmp modend ;_______________________ mode5: cjne a,#5,mode6 ;rez mov cetpel,#256-10 ;nastaveni mereni na 10 periodu mov cetpeh,#255 setb tr0 setb perio ;nastaveni pro mereni periody mov poz1,#35 ;P mov poz2,#14 ;E mov poz3,#41 ;r mov poz4,#32 ; mov poz5,#5 ;5 mov poz6,#32 ; mov r7,#1 mov th0,cetpeh ;smaz citac mov tl0,cetpel mov zaklan,#0 ajmp modend ;_______________________ mode6: cjne a,#6,mode7 ;rez mov cetpel,#256-100 ;nastaveni mereni na 100 periodu mov cetpeh,#255 setb tr0 setb perio ;nastaveni pro mereni periody mov poz1,#35 ;P mov poz2,#14 ;E mov poz3,#41 ;r mov poz4,#32 ; mov poz5,#6 ;6 mov poz6,#32 ; mov r7,#1 mov th0,cetpeh ;smaz citac mov tl0,cetpel mov zaklan,#0 ajmp modend ;_______________________ mode7: cjne a,#7,mode8 ;rez mov cetpel,#17h ;nastaveni mereni na 1000 period mov cetpeh,#0fch setb tr0 setb perio ;nastaveni pro mereni periody mov poz1,#35 ;P mov poz2,#14 ;E mov poz3,#41 ;r mov poz4,#32 ; mov poz5,#7 ;7 mov poz6,#32 ; mov r7,#1 mov th0,cetpeh ;smaz citac mov tl0,cetpel mov zaklan,#0 ajmp modend ;_______________________ mode8: cjne a,#8,mode9 ;rez mov cetpel,#0efh ;nastaveni mereni na 10000 period mov cetpeh,#0d8h setb tr0 setb perio ;nastaveni pro mereni periody mov poz1,#35 ;P mov poz2,#14 ;E mov poz3,#41 ;r mov poz4,#32 ; mov poz5,#8 ;8 mov poz6,#32 ; mov r7,#1 mov th0,cetpeh ;smaz citac mov tl0,cetpel mov zaklan,#0 ajmp modend ;_______________________ mode9: clr onik ;vypnuti procesoru clr ea ;zakaz preruseni mov p1,#255 ;zhasnuti displeje mov p3,#255 orl pcon,#2 ;spi ;_______________________ modend: mov R5,#255 mov R6,#255 modcy: djnz R5,modcy djnz R6,modcy djnz R7,modcy ajmp cykl ;____________________________________________________________ ;____________________________________________________________ ;programovy cyklus cykl: nop jnb perio,cit0a jnb mene,viic ;prepinani rozsahu periody dolu dec modif mov a,modif clr mene cjne a,#3,mee mov modif,#4 sjmp cit00 mee: mov a,modif ajmp mode4 viic: jnb vice,cit00 ;prepinani rozsahu periody nahoru inc modif mov a,modif clr vice cjne a,#9,vii mov modif,#8 sjmp cit00 vii: mov a,modif ajmp mode4 cit00: mov a,zaklan clr c subb a,#35 ;dellsi nez 3,5s mereni pak mene jc cit0a setb mene ;chtej kratsi mereni cit0a: mov a,modif ;pocet pulsu v hexa cit01: cjne a,#1,cit02 ;pocet pulsu v dec acall prevod ;binar z citace prevadi na deca toto rozhodi na digity displeje ljmp citend cit02: cjne a,#2,cit03 ;citac v jedne sekunde jnb ted,cit03 ;jeli po mereni jedne desetiny sekundy acall zasob ;uloz do FILO zasobniku poslednich deseti namerenych hodnot acall deskrt ;soucet celeho zasobniku acall frekve ;prevod z bin do des acall zbynul ;odstrani zbytecne nuly clr ted ;smazani ukazatele pripravenosti nacitane hodnoty ljmp citend cit03: cjne a,#3,cit04 ;citac v deseti sekundach jnb ted,cit04 ;jeli po mereni jedne sekundy acall zasob ;uloz do FILO zasobniku poslednich deseti namerenych hodnot acall deskrt ;soucet celeho zasobniku acall frekve ;prevod z bin do des orl poz5,#16 ;desetina tecka na desetiny Hertze acall zbynul ;odstrani zbytecne nuly clr ted ;smazani ukazatele pripravenosti nacitane hodnoty ljmp citend cit04: cjne a,#4,cit05 ;mereni periody mov cetpel,#256-1 ;nastaveni mereni na 1 period mov cetpeh,#255 jnb ted,cit05 ;je li po mereni periody acall frekve ;prevod z bin do des clr ted ;smazani ukazatele pripravenosti nacitane hodnoty orl poz5,#16 ;desetina tecka na desetiny ms acall zbynul ;odstrani zbytecne nuly ljmp citend cit05: cjne a,#5,cit06 ;mereni periody mov cetpel,#256-10 ;nastaveni mereni na 10 period mov cetpeh,#255 jnb ted,cit06 ;je li po mereni periody acall frekve ;prevod z bin do des clr ted ;smazani ukazatele pripravenosti nacitane hodnoty orl poz4,#16 ;desetina tecka na setiny ms acall zbynul ;odstrani zbytecne nuly ljmp citend cit06: cjne a,#6,cit07 ;mereni periody mov cetpel,#256-100 ;nastaveni mereni na 100 period mov cetpeh,#255 jnb ted,cit07 ;je li po mereni periody acall frekve ;prevod z bin do des clr ted ;smazani ukazatele pripravenosti nacitane hodnoty orl poz3,#16 ;desetina tecka na tisiciny ms acall zbynul ;odstrani zbytecne nuly ljmp citend cit07: cjne a,#7,cit08 ;mereni periody mov cetpel,#17h ;nastaveni mereni na 1000 period mov cetpeh,#0fch jnb ted,cit08 ;je li po mereni periody acall frekve ;prevod z bin do des clr ted ;smazani ukazatele pripravenosti nacitane hodnoty orl poz2,#16 ;desetina tecka na desetitisiciny ms acall zbynul ;odstrani zbytecne nuly ljmp citend cit08: cjne a,#8,cit09 ;mereni periody mov cetpel,#0efh ;nastaveni mereni na 10000 period mov cetpeh,#0d8h jnb ted,cit09 ;je li po mereni periody acall frekve ;prevod z bin do des clr ted ;smazani ukazatele pripravenosti nacitane hodnoty orl poz1,#16 ;desetina tecka na desetitisiciny ms acall zbynul ;odstrani zbytecne nuly ljmp citend cit09: nop citend: nop ajmp cykl ;____________________________________________________________ ;____________________________________________________________ ;____________________________________________________________ ;____________________________________________________________ ;multiplex displeje a casova zakladna period: push acc ;uklid dat do zasobniku push psw push r0 jnb perio,peri0 clr ea ;pricitani do citace periody inc per1 mov a,per1 jnz peri0 inc per2 mov a,per2 jnz peri0 setb mene ;zmena rozsahu v mereni periody inc per3 mov a,per3 ;--------------------------------------- peri0: setb ea djnz mulper,perend ;citani periody multiplexu mov mulper,#muldis ;2ms ;--------------------------------------- djnz zakla1,peri00 mov zakla1,#50 ;citani 0,1 sekundy inc zaklan ;citaní desetin sekundy do 25,5 jb deseti,dilek ;citani v desetine sekundy ;--------------------------------------- djnz zakla2,peri00 mov zakla2,#10 ;citani vteřina jnb frek,peri00 ;necitamli frekvenci obskoc ;--------------------------------------- dilek: clr tr0 ;zastaveni casu clr tr1 mov R1,tl0 ;nacteni nacitaneho mov R2,th0 mov R3,over mov tl0,#0 ;nulovani nejnizsiho bytu citace setb tr0 ;spusteni casu setb tr1 mov th0,#0 ;domazani zbytku citace a hned dal mov over,#0 setb ted ;uvolnit pro prepocet na displej ;--------------------------------------- peri00: ;--------------------------------------- djnz ukaz,peri1 ;posun ukazatele multiplexu 6,5,4,3,2,1,6... mov ukaz,#6 ;--------------------------------------- peri1: mov dptr,#tabulka mov a,ukaz ;nacteni ukazatele na obcerstvovany rad add a,#over ;adresu zacatku prijatych cisel pricist do Acc mov r0,a mov a,@r0 ;cislo do A jako adresa pro tabulku ascii movc a,@a+dptr ;vytazeni obrazu znaku do ACC BAHFGCDE ;--------------------------------------- mov p3,#255 ;zhasni anody mov p1,a ;novy znak ;--------------------------------------- mov dptr,#anulka mov a,ukaz ;nacti ukazatel dec a ;sniz o jeden movc a,@a+dptr ;vytazeni anody do Acc mov p3,a ;--------------------------------------- perend: pop r0 ;obnova dat pop psw pop acc reti ;____________________________________________________________ ;____________________________________________________________ tabulka: ;zde jsou obrazy LCD pro jednotlive znaky db 136,187,28,25,43,73,72,155 ;0,1,2,3,4,5,6,7 db 8,9,10,104,204,56,76,78 ;8,9,A,b,C,d,E,F db 128,179,20,17,35,65,64,147 ;0.1.2.3.4.5.6.7. db 0,1,2,96,196,48,68,70 ;8.9.A.b.C.d.E.F. db 255,127,15,14,120,124 ;tma,minus,stupen,P,o,c db 251,108,247,126 ;i,t,tecka,r anulka: ;seřazení anod db 127,223,247,254,253,251 ;____________________________________________________________ ;____________________________________________________________ ;citac prenos do vyssiho bytu prenos: jb perio,per01 inc over reti per01: mov tl0,cetpel mov th0,cetpeh mov r1,per1 mov r2,per2 mov r3,per3 ;nacteni dat push acc push psw mov a,R2 anl a,#0f8h orl a,R3 JNZ per02 setb vice per02: pop psw pop acc mov per1,#0 mov per2,#0 mov per3,#0 ;smazani dat mov zaklan,#0 ;smaz hlidac dlouheho mereni setb ted ;data pripravena pro zpracovani reti ;____________________________________________________________ ;____________________________________________________________ ;soucet z deseti troj bytu do ctyr deskrt: ;--------------------------------------- mov R1,#0 mov R2,#0 mov R3,#0 mov R4,#0 mov R0,#34h ;zacatek buferu mov R6,#10 ;pocet cyklu po trech bytech tedy 10 ;--------------------------------------- desecy: acall scet djnz R6,desecy ;soucet dat, deseti nasobek ;--------------------------------------- ret ;____________________________________________________________ ;____________________________________________________________ ;odstranovac zbytečnych nul zbynul: mov a,#0 cjne a,poz1,nemaz mov poz1,#32 cjne a,poz2,nemaz mov poz2,#32 cjne a,poz3,nemaz mov poz3,#32 cjne a,poz4,nemaz mov poz4,#32 cjne a,poz5,nemaz mov poz5,#32 nemaz: ret ;____________________________________________________________ ;____________________________________________________________ ;sejmuti sestnacti troj bytu a posun dat v buferu ;posun o 3 dolu ;o definovany pocet bytu ;a zapis novych do uvolnene pozice ve stylu LL HH OV atd zasob: push R1 ;zalozeni dat mov R1,#51h ;ukazatel na posledni, kam zapisovat mov R0,#4eh ;ukazatel odkud cist data mov R6,#27 ;kolik presunu ;--------------------------------------- zasocy: mov a,@R0 mov @R1,a dec R0 dec R1 djnz R6,zasocy ;samotny cyklus presunu ;--------------------------------------- pop acc mov 34h,a mov 35h,R2 mov 36h,R3 ;vlozeni nove zmerenych dat ret ;____________________________________________________________ ;____________________________________________________________ ;soucet dvou cisel scet: mov a,@R0 add a,R1 mov R1,a inc R0 mov a,@R0 addc a,R2 mov R2,a inc R0 mov a,@R0 addc a,R3 mov R3,a clr a addc a,R4 mov R4,a inc R0 ret ;____________________________________________________________ ;____________________________________________________________ ; pocitani prichozich pulsu v hexa scotek: mov tlscan,tl0 mov thscan,th0 mov a,tlscan anl a,#0Fh mov poz6,a mov a,tlscan swap a anl a,#0Fh mov poz5,a mov a,thscan anl a,#0Fh mov poz4,a mov a,thscan swap a anl a,#0Fh mov poz3,a mov a,over anl a,#0Fh mov poz2,a mov a,over swap a anl a,#0Fh mov poz1,a ret ;____________________________________________________________ ;____________________________________________________________ ; Prevod ze třech hexa bytu na sest desitkových cisel ;systemem deleni zakladem ciselne soustavy a razenim zbytku. prevod: mov R1,tl0 ;nacteni cisla a nastaveni počtu průchodů mov R2,th0 mov R3,over frekve: mov R0,#6 ;sest desitkovych radu preota: nop mov a,R3 ;nacteni vyssiho digitu nejvyssiho bytu anl a,#0F0h ;maska na vyssi digit swap a ;presun v bytu na nizsi digit mov b,#10 ;zaklad desitkove soustavy div ab ;deleni horniho digitu nejvyssiho bytu 10ti swap a ;presun v bytu mov R4,a ;ulozeni do registru mov a,b ;zbytek z B do A swap a ;z nizsiho digitu na vyssi mov b,a ;a zpet do B ;______________ mov a,R3 ;nacteni nizsiho digitu nejvyssiho bytu anl a,#0Fh ;maska na nizsi digit add a,b ;pricteni zbytku z minuleho deleni k nizsimu digitu mov b,#10 ;zaklad desitkove soustavy div ab ;deleni dolniho digitu nejvyssiho bytu 10ti orl a,R4 ;slouceni vysledku pro byte mov R3,a ;ulozeni do mezivysledku mov a,b ;zbytek z B do A swap a ;z nizsiho digitu na vyssi mov b,a ;a zpet do B ;_______________________ mov a,R2 ;nacteni vyssiho digitu prostredniho bytu anl a,#0F0h swap a ;presun v bytu add a,b ;pricteni zbytku do vyssiho digitu mov b,#10 div ab ;deleni horniho digitu prostredniho bytu 10ti swap a ;presun v bytu mov R4,a ;ulozeni do registru mov a,b swap a mov b,a ;______________ mov a,R2 ;nacteni nizsiho digitu prostredniho bytu anl a,#0Fh add a,b ;pricteni zbytku do nizsiho digitu mov b,#10 div ab ;deleni dolniho digitu prostredniho bytu 10ti orl a,R4 ;slouceni vysledku pro byte mov R2,a ;ulozeni do mezivysledku mov a,b swap a mov b,a ;_______________________ mov a,R1 ;nacteni vyssiho digitu spodniho bytu anl a,#0F0h swap a ;presun v bytu add a,b ;pricteni zbytku do vyssiho digitu mov b,#10 div ab ;deleni horniho digitu spodniho bytu 10ti swap a ;presun v bytu mov R4,a ;ulozeni do registru mov a,b swap a mov b,a ;______________ mov a,R1 ;nacteni nizsiho digitu spodniho bytu anl a,#0Fh add a,b ;pricteni zbytku do nizsiho digitu mov b,#10 div ab ;deleni dolniho digitu spodniho bytu 10ti orl a,R4 ;slouceni vysledku pro byte mov R1,a ;ulozeni do mezivysledku ;_______________________ mov R4,R0 ;schovej R0 mov a,#poz1 ;do A adresu nejvyssi desitkove pozice add a,R0 ;pricteni ukazatele z R0 dec a ;zmenseni o jednu mov R0,a ;adresa v R0 pro desitkovy rad mov a,b ;zbytek z B do A mov @R0,a ;zbytek do neprimo adresovaneho bytu desitkove presentace cisla mov R0,R4 ;obnoveni ukazatele djnz R0,preota ;šest pruchodu prevodu, sest desitkovych radu ;_______________________ preend: ret ;navrat ;____________________________________________________________ ;____________________________________________________________ ;%E ends end