;LCD panel ;1=0V ;2=+5V ;3=+LCD ;4 RS= P2.5 ;5 R/W= P2.6 ;6 E= P2.7 ;7 D0= P0.0 ;8 D1= P0.1 ;9 D2= P0.2 ;10 D3= P0.3 ;11 D4= P0.4 ;12 D5= P0.5 ;13 D6= P0.6 ;14 D7= P0.7 ;tlacitka vstupy ;1 p1.0 ;2 p1.1 ;3 p1.2 ;4 p1.3 ;5 p1.4 ;6 p1.5 ;7 p1.6 ;8 Start p1.7 ;9 Stop A p3.2 ;10 Stop B p3.3 ; vystupy ;1 p2.4 ;2 p2.3 ;3 p2.2 ;4 p2.1 ;5 p2.0 ;6 p3.5 ;7 p3.6 ;8 p3.7 Dseg datik1 data 20h datik2 data 21h datik3 data 22h datik4 data 23h setka data 2ah ;deset milisekund pauska data 2bh ;setin vteriny do pausy min1 data 2ch ;stopky 1 sek1 data 2dh set1 data 2eh min2 data 2fh ;stopky 2 sek2 data 30h set2 data 31h mil1 data 32h ;tisiciny1 mil2 data 33h predm data 34h ;predvolba minut osetr data 35h ;osetreni tlacitek plus a minus sekund data 36h ;sto setin sekundy sek3 data 37h ;pro hodiny bezici pod min3 data 38h hod3 data 39h prod1 data 3ah ;prodleva pro spusteni hodin prod2 data 3bh ctvrt data 3eh ;na tisiciny deska data 3fh ;pro hodiny desetiny sekundy smer data 40h ;smer seriovky krok data 41h ;kolikaty krok v relaci ticho data 42h ;prodleva mezi relacemi jas data 43h tecky data 44h pmin1 data 45h ;stopky 1 psek1 data 46h pset1 data 47h pmin2 data 48h ;stopky 2 psek2 data 49h pset2 data 4ah pmil1 data 4bh ;tisiciny1 pmil2 data 4ch smin1 data 4dh ;stopky 1 ssek1 data 4eh sset1 data 4fh smin2 data 50h ;stopky 2 ssek2 data 51h sset2 data 52h smil1 data 53h ;tisiciny1 smil2 data 54h ends Bseg beh1 bit 0h ;uvolneni citani casu1 nahoru beh2 bit 1h ;uvolneni citani casu2 nahoru stop1 bit 2h ;stopnuty cas1 stop2 bit 3h ;stopnuty cas2 tygri bit 4h ;odpocitavej nic bit 5h ;preslapnuto kyvadlo bit 6h ;docasovan predvoleny cas obraz bit 7h ;prepis rastru blik bit 8h ;blikac jojo bit 9h ;osetreni tlacitek relac1 bit 0ah ;relace od 1 relac2 bit 0bh ;relace od 2 beep bit 0ch ;pipnuti po priprave casek bit 0dh ;spust hodiny nene bit 0Eh ;dvojklik zakazan ted bit 0Fh ;dvojklik dovolen sstop1 bit 15h ;sejmuté stavy tlačítek a vstupů sstop2 bit 16h sstart1 bit 13h sstart2 bit 14h panpc bit 18h enepc bit 19h reldi bit 1ah sto1 bit 1bh sto2 bit 1ch presla1 bit 1dh presla2 bit 1eh sig_rs bit p2.5 ;rizeni lcd sig_rw bit p2.6 ;rizeni lcd sig_e bit p2.7 ;rizeni lcd tprip bit p1.0 ;tlacitko odcitani dolu od prednastaveneho casu tstop1 bit p1.5 ;cidlo stop1 tstop2 bit p1.6 ;cidlo stop2 tpresl1 bit p1.7 ;preslap1 tpresl2 bit p3.2 ;preslap2 tnul1 bit p3.3 ;nulovani1 tnul2 bit p3.0 ;nulovani2 tplus bit p1.1 ;nastavovani plus tmin bit p1.2 ;nastavovani minus tstart1 bit p1.3 ;start1 tstart2 bit p1.4 ;start2 qnav1 bit p2.4 qnav2 bit p2.3 qsiren bit p2.2 qsmfr1 bit p2.1 qsmfr2 bit p2.0 qpres1 bit p3.5 ;vystup preslap1 qpres2 bit p3.6 ;vystup preslap2 qrez2 bit p3.7 qdispl bit p3.4 ;smerovani seriovky na displej ends Dseg ends ;%S ;___________________________________________ org 0 ljmp start ;po resetu do inicializace systemu ;_________________________________________ org 3h reti ;sejmuti casu po stopu 1 ;_________________________________________ org 0bh ljmp timer ;preruseni kazdych 0,25ms beh hodin ;_______________________________________________ org 13h reti ;sejmuti po stopu 2 ;_______________________________________________ org 1bh reti ;casovani seriovky ;_______________________________________________ org 23h ;seriová komunikace ljmp seriak ;komunikuj seriove ;_____________________________________________ ;############################################## ;############################################## ;############################################## timer: push acc push psw djnz ctvrt,timexx ;1ms = 250us x 4merit na tisiciny mov ctvrt,#4 djnz setka,time30 mov setka,#10 ;10ms = 250us x 10 djnz pauska,time30 mov pauska,#40 ; maximalne 2,55 sekundy jb blik,timezz mov pauska,#40 timezz: setb kyvadlo ;cas probehl cpl blik ;blikac sjmp time30 timexx: ajmp timend ;natazeni skoku mimo tisicin sekundy time30: jnb beh1,time60 ;pricitej cas 1 inc mil1 ;tisiciny mov a,#10 cjne a,mil1,time60 mov mil1,#0 mov a,set1 ;setiny add a,#1 da a mov set1,a jnc time60 mov set1,#0 mov a,sek1 ;sekundy add a,#1 da a mov sek1,a mov a,#60h cjne a,sek1,time60 mov sek1,#0 mov a,min1 ;minuty add a,#1 da a mov min1,a jnc time60 mov min1,#0 time60: jnb beh2,time90 ;pricitej cas 2 inc mil2 ;tisiciny mov a,#10 cjne a,mil2,time90 mov mil2,#0 mov a,set2 add a,#1 da a mov set2,a jnc time90 mov set2,#0 mov a,sek2 add a,#1 da a mov sek2,a mov a,#60h cjne a,sek2,time90 mov sek2,#0 mov a,min2 add a,#1 da a mov min2,a jnc time90 mov min2,#0 time90: jnb tygri,time120 ;minutka jb casek,time120 djnz mil1,time120 ;tisiciny mov mil1,#10 mov a,set1 add a,#99h da a mov set1,a mov a,#99h cjne a,set1,time95 mov set1,#99h mov a,sek1 add a,#99h da a mov sek1,a mov a,#99h cjne a,sek1,time120 mov sek1,#59h mov a,min1 add a,#99h da a mov min1,a time95: mov a,min1 orl a,sek1 orl a,set1 jnz time120 clr tygri mov pauska,#100 clr kyvadlo setb beep time120: djnz deska,time150 mov deska,#10 djnz sekund,time150 mov sekund,#100 ;vypocet sekund mov a,sek3 ;bezici hodiny add a,#1 da a mov sek3,a mov a,#60h cjne a,sek3,time150 mov sek3,#0 mov a,min3 add a,#1 da a mov min3,a mov a,#60h cjne a,min3,time150 mov min3,#0 mov a,hod3 add a,#1 da a mov hod3,a mov a,#0a0h mov a,#24h cjne a,hod3,time150 mov hod3,#0 time150: nop timend: jnb casek,time160 mov set1,sek3 mov sek1,min3 mov min1,hod3 mov set2,sek3 mov sek2,min3 mov min2,hod3 sjmp time170 time160: jnb tygri,time170 mov set2,set1 mov sek2,sek1 mov min2,min1 time170: mov 22h,p1 ;scan vstupů pro současné zpracovani jb tygri,time20 jb casek,time20 jb stop1,time10 jb sstart1,time1 jb beh1,time1 setb beh1 mov pauska,#50 ;predvolba po 0.05 do 1.000s clr kyvadlo setb beep time1: jnb beh1,time10 jb sstop1,time10 clr beh1 setb stop1 setb relac1 time10: jb stop2,time20 jb sstart2,time11 jb beh2,time11 setb beh2 mov pauska,#50 ;predvolba po 0.05 do 1.000s clr kyvadlo setb beep time11: jnb beh2,time20 jb sstop2,time20 clr beh2 setb stop2 setb relac2 time20: pop psw pop acc reti ;############################################## seriak: push acc push psw push r0 jb ti,se001 clr ri ajmp seend ;neprijimame, obskok se001: mov a,smer cjne a,#1,se005 ajmp se110 se005: cjne a,#2,se006 ajmp se210 se006: cjne a,#3,se007 ajmp se310 se007: mov smer,#0 sjmp se010 se010: jb relac1,se100 ;zacatky dat jb relac2,se200 jb reldi,se300 clr ti ajmp seend se100: mov smer,#1 sjmp se201 se200: mov smer,#2 se201: mov krok,#1 mov th1,#243 ;vytvor 8bitovy citac1 seriovka 4800Bd mov scon,#01000000b ;4800Bd 8bitu mov pcon,#11000000b ; clr qdispl ;smerovat do PC RS232 mov a,#02h ;zacatek relace ajmp se501 ;posli byte se300: mov krok,#1 mov smer,#3 mov c,panpc mov enepc,c ;uvolneni pro buzeni panelu v PC ;mov th1,#230 ;vytvor 8bitovy citac1 seriovka 2400Bd mov th1,#243 ;vytvor 8bitovy citac1 seriovka 4800Bd mov scon,#11000000b ;2400Bd 9bitu a take tb8=0 mov pcon,#11000000b ; setb tb8 ;a proto zde tb8=1 setb qdispl mov a,#1 ;adresa pro panelovy displej ajmp se501 se110: inc krok mov a,krok cjne a,#2,se112 ;oznaceni drahy 1 v ascii mov a,#31h ajmp se501 se112: cjne a,#3,se113 ;rozskok na kroky mov a,min1 ajmp se400 se113: cjne a,#4,se114 mov a,min1 ajmp se401 se114: cjne a,#5,se115 mov a,sek1 ajmp se400 se115: cjne a,#6,se116 mov a,sek1 ajmp se401 se116: cjne a,#7,se117 mov a,set1 ajmp se400 se117: cjne a,#8,se118 mov a,set1 ajmp se401 se118: cjne a,#9,se119 mov a,mil1 ajmp se401 se119: cjne a,#10,se120 ;uzaviraci krok mov a,#03h ajmp se501 se120: clr relac1 ;konec relace 1 mov krok,#0 mov smer,#0 ajmp se502 se210: inc krok mov a,krok cjne a,#2,se212 ;oznaceni drahy 2 v ascii mov a,#32h ajmp se501 se212: cjne a,#3,se213 ;rozskok na kroky mov a,min2 ajmp se400 se213: cjne a,#4,se214 mov a,min2 ajmp se401 se214: cjne a,#5,se215 mov a,sek2 ajmp se400 se215: cjne a,#6,se216 mov a,sek2 ajmp se401 se216: cjne a,#7,se217 mov a,set2 ajmp se400 se217: cjne a,#8,se218 mov a,set2 ajmp se401 se218: cjne a,#9,se219 mov a,mil2 ajmp se401 se219: cjne a,#10,se220 ;uzaviraci krok mov a,#03h ajmp se501 se220: clr relac2 mov krok,#0 mov smer,#0 ajmp se502 se310: inc krok mov a,krok clr tb8 cjne a,#2,se311 ;rozskok na kroky mov a,smin1 anl a,#240 ;zbytečné nuly jz sf310 mov a,smin1 ;nejsou zbytečné ajmp se501 sf310: mov a,smin1 ;jsou zbytecne orl a,#240 ajmp se501 se311: cjne a,#3,se312 mov a,ssek1 ajmp se501 se312: cjne a,#4,se313 mov a,sset1 jnb tygri,sf312 jb casek,sf312 orl a,#15 ;poslední řád setin zatemnit pri minutce sf312: ajmp se501 se313: cjne a,#5,se314 mov a,smin2 anl a,#240 ;zbytečné nuly jz sf314 mov a,smin2 ;nejsou zbytečné ajmp se501 sf314: mov a,smin2 ;jsou zbytecne orl a,#240 ajmp se501 se314: cjne a,#6,se315 mov a,ssek2 ajmp se501 se315: cjne a,#7,se316 mov a,sset2 jnb tygri,sf315 jb casek,sf315 orl a,#15 ;poslední řád setin zatemnit pri minutce sf315: ajmp se501 se316: cjne a,#8,se317 mov a,jas ;jas panelu ajmp se501 se317: cjne a,#9,se318 ;mov a,tecky ;pozice tecek xx123456 mov a,#00111111b ;tecky pro panel vsude ajmp se501 se318: jb enepc,se600 ;data na PC panel clr reldi ;zakonceni relace mov krok,#0 mov smer,#0 ajmp se502 se400: swap a se401: anl a,#0fh add a,#30h se501: mov sbuf,a se502: clr ti ;smaz zadost po odeslani seend: mov ticho,#4 pop r0 pop psw pop acc reti ;######### se600: cjne a,#10,se610 mov th1,#243 ;vytvor 8bitovy citac1 seriovka 4800Bd mov scon,#01000000b ;4800Bd 8bitu mov pcon,#11000000b ; clr qdispl ;smerovat do PC RS232 mov a,#02h ;zacatek relace ajmp se501 ;posli byte se610: cjne a,#11,se612 mov a,#33h ;stopky jnb tygri,sx610 mov a,#35h ;minutka jnb casek,sx610 mov a,#36h ;hodiny sx610: ajmp se501 se612: cjne a,#12,se613 ;rozskok na kroky mov a,smin1 ajmp se400 se613: cjne a,#13,se614 mov a,smin1 ajmp se401 se614: cjne a,#14,se615 mov a,ssek1 ajmp se400 se615: cjne a,#15,se616 mov a,ssek1 ajmp se401 se616: cjne a,#16,se617 mov a,sset1 ajmp se400 se617: cjne a,#17,se618 mov a,sset1 ajmp se401 se618: cjne a,#18,se619 mov a,smil1 jnb tygri,sx618 mov a,#0 sx618: ajmp se401 se619: inc a jnb tygri,se620 sjmp se630 ;cjne a,#19,se620 ;predelovy krok ;mov a,#09h ;ajmp se501 se620: cjne a,#20,se622 mov a,#34h ajmp se501 se622: cjne a,#21,se623 ;rozskok na kroky mov a,smin2 ajmp se400 se623: cjne a,#22,se624 mov a,smin2 ajmp se401 se624: cjne a,#23,se625 mov a,ssek2 ajmp se400 se625: cjne a,#24,se626 mov a,ssek2 ajmp se401 se626: cjne a,#25,se627 mov a,sset2 ajmp se400 se627: cjne a,#26,se628 mov a,sset2 ajmp se401 se628: cjne a,#27,se629 mov a,smil2 ajmp se401 se629: cjne a,#28,se630 ;uzaviraci krok mov a,#03h ajmp se501 se630: clr reldi ;zakonceni relace mov krok,#0 mov smer,#0 ajmp se502 ;############################################## ;############################################## ;############################################## start: mov p3,#255 ;osetreni vystupu na log.1 mov p1,#255 mov p0,#255 mov p2,#255 mov sp,#6fh ;premisteni zasobniku mov tmod,#00100010B ;vytvor 8bitovy citac0 hodiny mov th1,#230 ;vytvor 8bitovy citac1 seriovka 2400Bd mov th0,#6 ;0,25ms preruseni pro citani casu (timer) mov setka,#40 ;citani 10ms mov pauska,#200 ;predvolba 2 sekundy clr kyvadlo ;smaz priznak docasovani setb et0 ;casak0 jako casomira setb tr0 ;casovac t1 a t0 plnit setb tr1 clr ex0 ;zakaz preruseni od Stop1 clr ex1 ;zakaz preruseni od Stop2 clr ren ;prijem dat zakazan mov scon,#11000000b ;2400Bd 9bitu mov pcon,#11000000b ; clr ri ;smazani zadosti o seriovou komunikaci setb es ;uvolneni preruseni seriove komunikace setb pt0 ;priorita preruseni pro mereni casu mov 20h,#0 ;stavove bity do nuly mov 21h,#0 mov 22h,#0 ;stavove bity do nuly mov 23h,#0 mov krok,#0 ;navigace pro seriovku mov smer,#0 mov predm,#3 ;prednastaveni alarmu 3 minuty mov hod3,#08h ;nastaveni hodin po zapnuti mov min3,#0 mov sek3,#0 mov deska,#10 mov sekund,#100 mov jas,#90 mov tecky,#00010100b setb panpc ;data prioritne i do PC ;####################################### ;######################################## ;######################################## zaklad: setb ea ;uvolni vsechna povolena preruseni lcall lcdpack8 ;probud lcd lcall romobr ;natiskni uvitaci stranku mov pauska,#100 ;predvolba po 0.05 do 1.000s clr kyvadlo zakl1: jnb kyvadlo,zakl1 mov R1,#0h lcall xa ;zobraz animaci mov pauska,#30 ;predvolba po 0.05 do 1.000s clr kyvadlo zakl2: jnb kyvadlo,zakl2 mov R1,#0h lcall xb ;zobraz animaci mov pauska,#30 ;predvolba po 0.05 do 1.000s clr kyvadlo zakl3: jnb kyvadlo,zakl3 mov R1,#0h lcall xc ;zobraz animaci mov pauska,#30 ;predvolba po 0.05 do 1.000s clr kyvadlo zakl4: jnb kyvadlo,zakl4 mov R1,#0h lcall xd ;zobraz animaci mov pauska,#30 ;predvolba po 0.05 do 1.000s clr kyvadlo zakl5: jnb kyvadlo,zakl5 mov R1,#0h lcall xe ;zobraz animaci mov pauska,#30 ;predvolba po 0.05 do 1.000s clr kyvadlo zakl6: jnb kyvadlo,zakl6 mov R1,#0h lcall xf ;zobraz animaci mov pauska,#30 ;predvolba po 0.05 do 1.000s clr kyvadlo zakl7: jnb kyvadlo,zakl7 mov R1,#0h lcall xg ;zobraz animaci mov pauska,#20 ;predvolba po 0.05 do 1.000s clr kyvadlo zakl8: jnb kyvadlo,zakl8 lcall clearing ;smaz obraz mov R1,#07h ;pozice lcd lcall xrastrs ;priprav rastr na lcd prvni radek mov R1,#47h ;pozice lcd lcall xrastrs ;priprav rastr na lcd druhy radek setb tygri ajmp cycy72 ;############################################## cycy1: mov a,20h ;nacti stavove slovo anl a,#0fh ;bezi nebo je stoply jz cyci3 ;jeli neco z toho obskoc ajmp cycy5 cyci3: jb tygri,cycy2 jb tprip,cycy2 ;tlacitko pripravny cas mov prod1,#255 mov prod2,#4 clr ted clr nene mov min1,predm ;nastav predvolbu minut na citac1 mov mil1,#10 mov sek1,#0 mov set1,#0 mov min2,#0 ;citac2 smaz mov sek2,#0 mov set2,#0 clr presla1 ;smaz preslap clr presla2 ;smaz preslap setb tygri ;navol odpocitavani setb obraz ;pripraven pozadavek na prekresleni rastru po minutce lcall clearing ;smaz obraz mov R1,#0h ;pozice lcd lcall xalarm ;zobraz pauzu na lcd mov tecky,#00010000b mov R1,#07h ;pozice lcd lcall xrastrm ;priprav rastr na lcd prvni radek cycy2: jb nene,cycy9 ;casovani pro dvojklik, neni zakazano jnb tprip,cycy8 ;neni stisk djnz prod1,cycy8 ;docasovano uvolneni setb ted ;uvolni prijeti djnz prod2,cycy8 ;docasovani zakazu setb nene ;zakaz prijeti cycy8: jb tprip,cycy9 ;je stisknuto, dal jnb ted,cycy9 ;je dovoleno, dal setb casek ;nahozeni hodin po dvojkliku tlacitka mov R1,#07h ;pozice lcd lcall xrastrt ;priprav rastr na lcd prvni radek mov R1,#0h ;pozice lcd lcall xclock mov tecky,#00010110b cycy9: mov a,min1 ;nacteni predvolby minut jnb tygri,cycy4 jnb jojo,cycy4 ;osetreni tlacitka jb tplus,cycy3 ;plus 1 clr jojo ;priprav osetreni jb casek,cyho add a,#1 cycy6: da a mov min1,a mov predm,a jnz cycy4 mov predm,#1 ;hlidani minimalniho casu 1 minuta mov min1,#1 sjmp cycy4 cycy3: jb tmin,cycy4 clr jojo jb casek,cymi add a,#99h ;odcitani minut sjmp cycy6 cyho: jnb tprip,cyse mov a,hod3 ;staveni hodin add a,#1 da a mov hod3,a cjne a,#24h,cycy4 mov hod3,#0 sjmp cycy4 cymi: jnb tprip,cyse mov a,min3 ;staveni minut add a,#1 da a mov min3,a cjne a,#60h,cycy4 mov min3,#0 sjmp cycy4 cyse: mov sek3,#0 ;snulovani sekund cycy4: jb jojo,cycy5 jnb tmin,cycy7 jnb tplus,cycy7 djnz osetr,cycy5 ;osetreni tlacitek plus a minus setb jojo sjmp cycy5 cycy7: mov osetr,#60 cycy5: mov c,obraz anl c,/tygri ;po odpocitani jnc cycy11 clr obraz mov R1,#7h ;pozice lcd lcall xrastrs ;priprav rastr na lcd druhy radek mov R1,#47h ;pozice lcd lcall xrastrs ;priprav rastr na lcd druhy radek mov tecky,#00010100b ajmp cycy72 cycy11: mov c,tygri anl c,/casek jc cycy12 mov r1,#0dh ;pozice lcd set1 mov r4,#2 ;pocet cislic mov R0,#pset1 ;z jaké paměti lcall hmnprint cycy12: mov r1,#0ah ;pozice lcd set1 mov r4,#2 ;pocet cislic mov R0,#psek1 ;z jaké paměti lcall hmnprint mov r1,#07h ;pozice lcd set1 mov r4,#2 ;pocet cislic mov R0,#pmin1 ;z jaké paměti lcall hmnprint jb tygri,cycy21 mov r1,#0fh ;pozice lcd set1 mov R0,#pmil1 ;z jaké paměti lcall lsnprint cycy21: jb tygri,cycy31 mov r1,#4dh ;pozice lcd set1 mov r4,#2 ;pocet cislic mov R0,#pset2 ;z jaké paměti lcall hmnprint mov r1,#4ah ;pozice lcd set1 mov r4,#2 ;pocet cislic mov R0,#psek2 ;z jaké paměti lcall hmnprint mov r1,#47h ;pozice lcd set1 mov r4,#2 ;pocet cislic mov R0,#pmin2 ;z jaké paměti lcall hmnprint jb tygri,cycy31 mov r1,#4fh ;pozice lcd set1 mov R0,#pmil2 ;z jaké paměti lcall lsnprint cycy31: mov R1,#0h ;pozice lcd jnb presla1,cycy32 jnb blik,cycy32 lcall xclear ;zobraz nic sjmp cycy31a cycy32: mov R1,#00h ;pozice lcd jb tygri,cycy51 jnb beh1,cycy33 jnb tstart1,cycy36 setb sto1 cycy36: jb tstart1,cycy37 jb sto1,cycy38 cycy37: acall xstart ;zobraz start1 na lcd sjmp cycy31a cycy38: lcall xinfo sjmp cycy31a cycy33: jnb stop1,cycy34 jnb sto1,cycy39 jnb tstart1,cycy38 clr sto1 cycy39: acall xstop ;zobraz stop1 na lcd sjmp cycy31a cycy34: jb qsmfr1,cycy35 acall xerror ;zobraz error na lcd sjmp cycy31a cycy35: acall xready ;zobraz ready na lcd cycy31a: mov R1,#40h jnb presla2,cycy42 jnb blik,cycy42 lcall xclear ;zobraz nic sjmp cycy51 cycy42: mov R1,#40h ;pozice lcd jnb beh2,cycy43 jnb tstart2,cycy46 setb sto2 cycy46: jb tstart2,cycy47 jb sto2,cycy48 cycy47: acall xstart ;zobraz start1 na lcd sjmp cycy51 cycy48: lcall xinfo sjmp cycy51 cycy43: jnb stop2,cycy44 jnb sto2,cycy49 jnb tstart2,cycy48 clr sto2 cycy49: acall xstop ;zobraz stop1 na lcd sjmp cycy51 cycy44: jb qsmfr2,cycy45 acall xerror ;zobraz error na lcd sjmp cycy51 cycy45: acall xready ;zobraz ready na lcd cycy51: jb tygri,cycy61 ;pri hodinach nehlidej mov c,beh1 ;hlidani preslapu1 pred behem a ne pri stopu orl c,stop1 cpl c anl c,/tpresl1 jnc cycy51a setb presla1 cycy51a: mov c,beh2 ;hlidani preslapu2 pred behem a ne pri stopu orl c,stop2 cpl c anl c,/tpresl2 jnc cycy61 setb presla2 cycy61: jb tnul2,cycy71 ;mazani2 jb tygri,cycy72 jnb tstop2,cycy81 clr beh2 ;dej do ready clr stop2 mov mil2,#0 mov min2,#0 ;citac2 smaz mov sek2,#0 mov set2,#0 clr sto2 clr presla2 ;smaz preslap clr ted clr nene cycy71: jb tnul1,cycy81 ;mazani1 jb tygri,cycy72 jnb tstop1,cycy81 clr beh1 ;dej do ready clr stop1 mov mil1,#0 mov min1,#0 ;citac2 smaz mov sek1,#0 mov set1,#0 clr sto1 clr presla1 ;smaz preslap clr ted clr nene sjmp cycy81 cycy72: clr ea ;mazani po hodinach nebo alarmu clr tygri clr casek setb ea mov mil1,#0 mov mil2,#0 mov min2,#0 ;citac2 smaz mov sek2,#0 mov set2,#0 mov min1,#0 ;citac2 smaz mov sek1,#0 mov set1,#0 clr sto1 clr sto2 clr presla1 ;smaz preslap1 clr presla2 ;smaz preslap2 clr ted clr nene cycy81: mov c,beh1 ;vystup signalizace behu1 cpl c mov qnav1,c mov c,beh2 ;vystup signalizace behu2 cpl c mov qnav2,c mov c,beep ;rizeni sirenky nebo klaksonu cpl c mov qsiren,c jnb kyvadlo,cycy82 clr beep cycy82: jb tygri,cycy87 ;pri citani hodin minutky ne jb tstop1,cycy84 ;vystup pro indikaci zasah1 a stop1 clr qsmfr1 cycy84: jb tnul1,cycy85 setb qsmfr1 cycy85: jb tstop2,cycy86 ;vystup pro indikaci zasah2 a stop2 clr qsmfr2 cycy86: jb tnul2,cycy87 setb qsmfr2 cycy87: nop ;vystup pro indikaci preslapu mov c,presla1 anl c,/blik cpl c mov qpres1,c nop ;vystup pro indikaci preslapu mov c,presla2 anl c,/blik cpl c mov qpres2,c mov a,smer ;zadost o zobrazeni na panel jnz cycy90 djnz ticho,cycy90 ;prodleva mezi relacemi setb reldi setb ti cycy90: jb tygri,cycy100 ;specifikace, kdy lze menit jas panelu a komunikace na PC jb casek,cycy100 jnb tprip,cycy98 jnb tplus,cycy92 jnb tmin,cycy96 sjmp cycy100 cycy92: jnb kyvadlo,cycy100 ;nastavovani jasu obou panelu mov a,jas inc a clr c subb a,#100 ;omezeni jasu nahoru jnc cycy100 inc jas mov pauska,#10 clr kyvadlo sjmp cycy100 cycy96: jnb kyvadlo,cycy100 mov a,jas dec a jz cycy100 ;omezeni jasu dolu dec jas mov pauska,#10 clr kyvadlo sjmp cycy100 cycy98: jb tplus,cycy99 ;pripojovani PC sberu dat setb panpc sjmp cycy100 cycy99: jb tmin,cycy100 ;odpojovani PC sberu dat clr panpc cycy100: jb tygri,cycy105 jnb sto1,cycy105 jnb tstart1,cycy110 cycy105: clr ea ;data pro LCD zastavovana startem 1 mov pmin1,min1 mov psek1,sek1 mov pset1,set1 mov pmil1,mil1 setb ea cycy110: nop jb tygri,cycy115 jnb sto2,cycy115 jnb tstart2,cycy120 cycy115: clr ea ;data pro LCD zastavovana startem 2 mov pmin2,min2 mov psek2,sek2 mov pset2,set2 mov pmil2,mil2 setb ea cycy120: clr ea ;data pro PC a panel mov smin1,min1 mov ssek1,sek1 mov sset1,set1 mov smil1,mil1 setb ea nop clr ea mov smin2,min2 mov ssek2,sek2 mov sset2,set2 mov smil2,mil2 setb ea ajmp cycy1 ;############################################## ;############################################## romobr: mov dptr,#tabulro Tisk uvitaci obrazovky lcall position ;kurzor obrazovky na nulu mov r4,#80 ;kolika bytova zprava na displej mov r0,#0 pozic: sjmp nakolo nalcd: lcall adrznk ;nastav kurzor mov r0,#0 nakolo: mov a,r0 ;prenos dat do lcd movc a,@a+dptr lcall auto8 inc r0 djnz r4,nakolo ret ;############################### xerror: mov dptr,#retez7 ;texty do lcd error mov R4,#6 sjmp nalcd xstart: mov dptr,#retez1 ;texty do lcd START mov R4,#6 sjmp nalcd xstop: mov dptr,#retez2 ;texty do lcd STOP mov R4,#6 sjmp nalcd xready: mov dptr,#retez3 ;texty do lcd READY mov R4,#6 sjmp nalcd xalarm: mov dptr,#retez4 ;texty do lcd ALARM mov R4,#6 sjmp nalcd xclear: mov dptr,#retez5 ;texty do lcd prazdno mov R4,#6 sjmp nalcd xclock: mov dptr,#retez6 ;texty do lcd CLOCK mov R4,#6 sjmp nalcd xinfo: mov dptr,#retez8 ;texty do lcd INFO mov R4,#6 sjmp nalcd xrastrs: mov dptr,#retezs ;texty do lcd rastr mov R4,#9 sjmp nalcd xrastrt: mov dptr,#retezt ;texty do lcd rastr mov R4,#9 sjmp nalcd xrastrm: mov dptr,#retezm ;texty do lcd rastr mov R4,#9 sjmp nalcd xa: mov dptr,#reteza ;texty do lcd animace mov R4,#16 sjmp nalcd xb: mov dptr,#retezb ;texty do lcd animace mov R4,#16 sjmp nalcd xc: mov dptr,#retezc ;texty do lcd animace mov R4,#16 sjmp nalcd xd: mov dptr,#retezd ;texty do lcd animace mov R4,#16 ljmp nalcd xe: mov dptr,#reteze ;texty do lcd animace mov R4,#16 ljmp nalcd xf: mov dptr,#retezf ;texty do lcd animace mov R4,#16 ljmp nalcd xg: mov dptr,#retezg ;texty do lcd animace mov R4,#16 ljmp nalcd ;############################################## ;_______________________________________________________ tabulro: db '> STOPKY <' ;1.radek db '................' db '........' db 'Hasici Martinice' ;2.radek db '................' db '........' reteza: db ' > STOPKY < ' retezb: db ' > STOPKY < ' retezc: db ' > STOPKY < ' retezd: db ' >STOPKY< ' reteze: db ' >TOPK< ' retezf: db ' >OP< ' retezg: db ' >< ' retez1: db 'START ' retez2: db 'STOP ' retez3: db 'READY ' retez4: db 'ALARM ' retez5: db ' ' retez6: db 'CLOCK ' retez7: db 'ERROR ' retez8: db 'INFO ' retezs: db ' : . ' retezt: db ' : : ' retezm: db ' : ' ;####################################################### ;##################################################### ;#################################################### lcdpack8: ;zapnutí a inicializace LCD mov r7,#50 ;25ms qq01: mov r6,#250 qq02: djnz r6,qq02 ;cekej r7 x 0.5ms /12MHZ djnz r7,qq01 mov a,#00110000B ;d7-d6-d5-d4-x-x-x-x cislo 1.inicializace lCALL INIT8 ;komunikuj po 8 bitech ;______________________________________________________________________ mov r7,#50 ;100us qq03: djnz r7,qq03 ;cekej mov a,#00110000B ;d7-d6-d5-d4-x-x-x-x cislo 2.inicializace lCALL prog8 ;komunikuj po 8 bitech ;_______________________________________________________________________ mov a,#00111000B ;0-0-1-DL-N-F-x-x DL=sirka komun. 0=4bity lCALL prog8 ; 1=8bitu ; N=pocet linek 0=jedna ; 1=dve ; F=matice pismen 0=5x7 ; 1=5x10 ;_______________________________________________________________________ mov a,#00001100B ;0-0-0-0-1-D-C-B D=ON/OFF 1/0 celeho displeje lCALL prog8 ; C=ON/OFF 1/0 zobrazeni kursoru ; B=blik/neblik 1/0 blikani kurzoru ;_______________________________________________________________________ mov a,#00000001B ;0-0-0-0-0-0-0-1 maze displej a kursor dava na zacatek lcall prog8 ;_______________________________________________________________________ mov a,#00000110B ;0-0-0-0-0-1-I/D-S I/D=INC/DEC 1/0 zpusob zapisu na LCD ; S=0 normalni /0 lcall prog8 ret ;##################################################### ;___________________________________________ AUTO8: setb sig_rs ;data na zobrazeni nebo do tabulky uziv.znaku clr sig_rw setb c ;CY=1 znamena s hlidanim busy stavu LCD a adresy citace sjmp lcd1 UKAZ4: setb sig_rs ;data na zobrazeni nebo do tabulky uziv.znaku clr sig_rw clr c ;CY=0 znamena bez hlidani dokonceni operace v LCD sjmp lcd1 INIT8: clr sig_rw ;zapisy bytu pri inicializaci LCD po zapnuti,ukazatelu adres clr sig_rs clr c ;CY=0 znamena bez hlidani dokonceni operace v LCD sjmp lcd1 PROG8: clr sig_rw ;nastavovani parametru LCD displeje,ukazatelu adres clr sig_rs setb c ;CY=1 znamena s hlidanim busy stavu LCD lcd1: mov p0,a ;zapis dat z AC do LCD setb sig_e clr sig_e jc ctib4 ;pozadovano hlidani ukonceni operace v LCD ret ;___________________________________________ CTID4: clr c setb sig_rs ;cte byt na nastavene adrese setb sig_rw sjmp lcd2 CTIB4: setb c ;CY=1 znamena s hlidanim busy stavu LCD clr sig_rs ;dotaz na ukoncenou operaci , prijde v 7.bitu AC a v CY setb sig_rw sjmp lcd2 CTIA4: clr c clr sig_rs ;cteni aktualni adresy citace bez busy flagu setb sig_rw lcd2: mov p0,#255 setb sig_e ;cteni bytu z lcd do AC mov a,p0 clr sig_e ;v AC prijaty byt jnc lcd3 ;nebylo pozadovano hlidani busy stavu v LCD mov c,0e7h ;v CY je bit BF (busy flag) 0=hotovo 1=jeste ne jc lcd2 ;opakovani cteni pro BF lcd3: ret ;########################################################### ;########################################################### ;########################################################### clearing: mov a,#00000001b ;smaz obrazovku lcall prog8 position: mov a,#10000000b ;kurzor na pozici nula ljmp prog8 ;########################################################### ;########################################################### ;########################################################### ;pro zobrazeni cisel ulozenych po dvou v bytu v bcd ;R4 kolika znakova zprava na displej ;F0=1 zacina se lichym tedy L1 ;R1 adresa na displeji odkud prvni znak ;R0 adresa v RAM cpu pro zobrazeni lsnprint: ;zobrazení jednoho čísla z nižší části bytu mov r4,#1 ;##################################### lmnprint: ;zobrazení více čísel začni z nižší části bytu setb F0 sjmp mnprint ;##################################### hsnprint: ;zobrazení jednoho čísla z vyšší části bytu mov r4,#1 ;##################################### hmnprint: ;zobrazení více čísel začni z vyšší části bytu clr F0 sjmp mnprint ;##################################### mnprint: lcall adrznk zobr3: lcall zobrzn djnz r4,zobr3 ret zobrzn: mov a,@r0 jb F0,zobr1 swap a zobr1: anl a,#00001111b add a,#6 jnb 0e4h,zobr4 mov a,#0f6h ;vyssi nez cislo, nic zobr4: add a,#2ah ;asci cislo pro lcd cpl F0 ;ukazatel na pul byte jb F0,zobr2 inc r0 ;ukazatel na byte zvetsit zobr2: inc r1 ljmp auto8 ;zobraz znak na lcd adrznk: mov a,r1 ;nacti adresu na displeji orl a,#10000000b ; ljmp prog8 ;nastaveni adresy pro zobrazeni ;############################################## ;############################################## ;########################################################### ;########################################################### ;########################################################### ;%E ends end