;12MHz ;Hasici Harta 20.1.2016 ;Vyjezdove hodiny ; ;vyjezdove hodiny odcitaji ;od prvního zahoukání sireny 10 minut ve formatu m:ss ;pak je v 11te minute spustena ;odjezdove akcelerujici animace kola [_] ;od 12te minuty pak je do jedné hodiny ;ukazovan stav minut s animaci ;tociciho se kolecka vlevo ve formatu o:mm ;od 12 minuty opet stopky reaguji na start casu od sireny ;po skončení animace svítí jen dvojtečka... ;______________________________________________________________________ Bseg hori bit 0h ;spusteno citani od vstupu odjezd bit 1h ;odjezd dosazeno 10minut a víc plus bit 2h ;plus sekunda +1s anim bit 3h ;krok animace dosazen 0,1s uz bit 4h ;docasovani programovatelneho casovace uklid bit 5h ;stop a stopky do zakladu odjeto bit 6h ;konec animace odjezdu re08 bit 7h jedn bit p3.5 ;anody desi bit p3.4 stov bit p3.7 tisi bit p3.3 sirena bit p3.0 ;start od sireny ends ;______________________________________________________________________ Dseg akcel data 40h ;rychlost animace ukaz data 41H ;ukazatel obcerstvovaneho displeje rad100 data 42H ;prvni displej rad10 data 43H rad1 data 44H doset data 45h ;citani do setin dosek data 46h ;citani do sekundy dodis data 47h ;cas multiplexu displeje doose data 48h ;osetreni programovatelné doani data 49h ;cas animace doba data 4ah desm data 4bh ;minuty desitky jedm data 4ch ;minuty jednotky dess data 4dh ;sekundy desitky jeds data 4eh ;sekundy jednotky animo data 4fh ;kroky animace modak data 50h ;ctvrta vlastnost v tabulce animace ends ;______________________________________________________________________ Cseg casoni = 56 ;200 us na 12MHz ends ;______________________________________________________________________ ;______________________________________________________________________ ;______________________________________________________________________ ;%S ;______________________________________________________________________ org 0 ajmp setup ;najeti setupu ;______________________________________________________________________ org 0bh ;preruseni od casovace 0 200us ajmp casy ;cas a obcerstvovani displeje led ;______________________________________________________________________ ;____________________________________________________________ ;____________________________________________________________ org 50h setup: clr hori ;0=nehori setu2: mov p3,#255 ;osetreni vystupu mov p1,#255 mov sp,#6fh ;presmerovani zasobniku mov tmod,#00010010b ;vytvor cit1 16bitu ;a cit0 8bitu s predv. v th1 mov desm,#0 ;snulovat hodiny mov jedm,#0 mov dess,#0 mov jeds,#0 clr odjezd ;0=jeste se nejede clr plus ;neni plus 1s clr anim ;neni krok animace clr uz ;priznak programovatelného casovace clr odjeto ;priznak odjeto clr uklid ;priznak uklizeni stopek mov doset,#50 ;prednastaveni delicky setin sekundy mov dosek,#100 ;prednastaveni delicky sekund mov dodis,#25 ;prednastaveni multiplexu displeje mov doose,#200 ;prednastaveni osetreni spusteni casovani mov doba,#250 ;predvolba programovatelny casovac 250* 1ms mov th0,#casoni ;casovani citani casu 200us clr tr1 ;necitat citac 1 setb tr0 ;uvolni citani0 z hodin setb et0 ;uvolneni preruseni od casovani 0 setb ea ;uvolni vsechna povolena preruseni mov ukaz,#1 ;prednastaveni ukazatele multiplexu ;---------------------------------------------- mov rad1,#32 ;prednastaveni displeje pomlcka uprostred mov rad10,#13 mov rad100,#32 sjmp cykl ;____________________________________________________________ ;____________________________________________________________ ;____________________________________________________________ cykl: jb hori,cyk01 ;jeli spusteno casovani obskoc jnb sirena,cyk02 ;sirena houka skoc mov doose,#200 ;nastav osetrovaci cas 4ms x N clr uz ;shod priznak cyk02: jnb uz,cyk70 ;nenili sirena po urcity cas, skoc setb hori ;jeli pak zapni mereni casu cyk01: jb odjezd,cyk03 ;jeli odjezd skoc mov a,desm ;do a dej desitky minut jz cyk03 ;neni pres 10 minut skoc mov akcel,#33 ;prednastavený cas animace 33x0,01 je 0,33s mov doani,akcel ;nastaveni do citace rychlosti setb anim ;nastaven anim pro okamzitou animaci mov animo,#1 ;prednastaveni kroku animace setb odjezd ;je pres deset minut pak odjezdova animace cyk03: jb odjeto,cyk04 mov a,jedm ;jeli na jednotkach minut cjne a,#1,cyk04 ;objevi x1 minuty dal,jinak skoc mov a,desm ;a na desitkah minut cjne a,#1,cyk04 ;objevi 1x minuty dal,jinak skoc mov doose,#200 ;nastaveno zase na cas osetreni od sireny clr uz mov akcel,#10 ;prednastavený cas animace 10x0,01 je 0,1s mov doani,akcel ;nastaveni do citace rychlosti setb anim ;nastaven anim pro okamzitou animaci mov animo,#1 ;prednastaveni kroku animace setb odjeto ;zmena animace i s casem cyk04: jnb odjeto,cyk07 mov a,jedm ;jeli na jednotkach minut cjne a,#0,cyk05 ;objevi x0 minuty dal,jinak skoc mov a,desm ;a na desitkah minut cjne a,#6,cyk05 ;objevi 6x minuty dal,jinak skoc setb uklid ;vypni stopky i displej clr ea ajmp setup ;nabehove nastaveni bez startu mereni casu cyk05: jnb sirena,cyk06 ;sirena houka skoc mov doose,#200 ;nastav osetrovaci cas 4ms x N clr uz ;shod priznak cyk06: jnb uz,cyk07 ;nenili sirena po urcity cas, skoc clr ea ajmp setu2 ;jeli pak zapni znovu mereni casu cyk07: nop ;az sem rizeni stavu stopek ;dal je obsluha obrazu hodin a animaci ;______________________________________ acall cyk50 ;rid citani hodin cyk20: jb odjezd,cyk21 ;jeli po odjezdu nezobrazuj cas ale animaci bez casu acall cyk60 ;na displej obraz minut a sekund s tečkou ajmp cykl cyk21: jb odjeto,cyk22 ;jeli uz odjeto zobrazuj animaci s casem minut acall cyk80 ;na displej zrychlujici se kolo ajmp cykl cyk22: acall cyk90 ;koncová animace malé kolo s dvojteckou a minuty ajmp cykl ;______________________________________ ;_____________________________ cyk70: mov rad100,#31 ;tecka mov rad10,#32 ;tma na displej mov rad1,#32 ;tma na displej ajmp cykl ;_____________________________ cyk50: jnb plus,cyk54 ;nenili sekunda obskoc clr plus ;zrus priznak sekundy inc jeds ;pricti do jednotek sekund mov a,jeds ;nacti sekundy cjne a,#10,cyk54 ;nenili 10 obskoc mov jeds,#0 ;jsouli jednotky sekund 10, snuluj cyk51: inc dess ;pricti do desitek sekund mov a,dess ;nacti desitku sekund cjne a,#6,cyk54 ;nenili 6 obskoc mov dess,#0 ;jsouli desitky sekund 6, snuluj cyk52: inc jedm ;pricti do minut mov a,jedm ;nacti minutu cjne a,#10,cyk54 ;nenili 10 obskoc mov jedm,#0 ;jsouli jednotky minut 10, snuluj cyk53: inc desm ;pricti do desitek minut mov a,desm ;nacti desitku minut cjne a,#10,cyk54 ;nenili 10 obskoc mov desm,#0 ;jsouli desitky minut 10, snuluj cyk54: ret ;_____________________________ cyk60: mov a,jedm ;na displej jednotky minut orl a,#10h ;s teckou mov rad100,a ;pošli na displej mov rad10,dess ;sekundy na displej mov rad1,jeds ret ;_____________________________ cyk80: jnb anim,cyk84 ;taktování animace velké kolo clr anim djnz animo,cyk81 ;citani taktu (maximum-animo) mov animo,#10 ;nastaveni otocky animace cyk81: mov a,#10 ;maxima clr c subb a,animo ;radek tabulky rl a ;x2 rl a ;x2 (x4) mov r7,a ;pozice prvniho prvku animace v A mov dptr,#animac1 ;odkaz na tabulku animací movc a,@a+dptr mov rad100,a ;animace levy inc r7 mov a,r7 movc a,@a+dptr mov rad10,a ;animace stredni inc r7 mov a,r7 movc a,@a+dptr mov rad1,a ;animace pravy inc r7 mov a,r7 movc a,@a+dptr mov modak,a ;speedovani animace add a,akcel ;zmena rychlosti animace mov r7,a clr c subb a,#3 ;minimální čas 3x0,01 je 0,03s jc cyk84 ;je menší skoc mov akcel,r7 ;prijmi zmenu cyk84: ret ;_____________________________ cyk90: mov rad10,desm mov rad1,jedm jnb anim,cyk94 ;taktování animace malé kolo a minuty clr anim djnz animo,cyk91 ;citani taktu (maximum-animo) mov animo,#8 ;nastaveni otocky animace cyk91: mov a,#8 ;maxima otocky clr c subb a,animo ;radek tabulky ;pozice prvniho prvku animace v A mov dptr,#animac2 ;odkaz na tabulku animací movc a,@a+dptr mov rad100,a ;animace levy cyk94: ret ;____________________________________________________________ ;____________________________________________________________ ;____________________________________________________________ ;multiplex displeje casy: push acc ;uklid dat do zasobniku push psw push dpl push dph jnb hori,disple ;nehori,bez hodin,obskoc djnz doset,disple ;citani 0,2ms do 0,01s mov doset,#50 ;50x0,2ms je 0,01s cas01: djnz doani,cas02 ;animacni cas mov doani,akcel ;10x0,01 je 01s setb anim ;posun animace cas02: djnz dosek,disple ;citani 0,01s do 1s mov dosek,#100 ;100x0,01s je 1s setb plus ;prosla sekunda ;____________________________ disple: djnz dodis,pern ;citani periody displeje 1ms mov dodis,#5 ;displej multiplex kazde 1ms djnz doose,dis01 ;programovatelny casovac mov doose,doba cpl uz ;uz=1 cas probehl dis01: mov dptr,#tabulka ;odkaz na tabulku znaku djnz ukaz,per0 ;posun ukazatele multiplexu 3,2,1,3... mov ukaz,#3 per0: mov p1,#0 ;zatemni katody displeje setb jedn ;vypni anody setb desi setb stov setb tisi mov a,ukaz ;---------------------------------------- per1: cjne a,#1,per2 ;jedna se o pozici jednotek? mov a,rad1 ;nacti znak pro rad jednotky movc a,@a+dptr ;vytazeni obrazu znaku do ACC BAHFGCDE mov p1,a ;nastav katody clr jedn ;zapni anodu sjmp pern ;---------------------------------------- per2: cjne a,#2,per3 ;jedna se o pozici desitek? mov a,rad10 ;nacti znak pro rad desitky movc a,@a+dptr ;vytazeni obrazu znaku do ACC BAHFGCDE mov p1,a ;nastav katody clr desi ;zapni anodu sjmp pern ;---------------------------------------- per3: cjne a,#3,pern ;jedna se o pozici stovek? mov a,rad100 ;nacti znak pro rad stovky movc a,@a+dptr ;vytazeni obrazu znaku do ACC BAHFGCDE mov p1,a ;nastav katody clr stov ;zapni anodu sjmp pern ;---------------------------------------- pern: pop dph pop dpl pop psw pop acc reti ;____________________________________________________________ ;____________________________________________________________ ;____________________________________________________________ tabulka: ;zde jsou obrazy LCD pro jednotlive znaky dle ascii ; db 250,144,121,217,147,203,235,152 ;0-7h cisla0-7 db 251,219,133,196,100,37,0,0 ;8-fh cisla8-9 kolotoč tam db 254,148,125,221,151,207,239,156 ;10-17h cisla0.-7. db 255,223,132,68,36,5,0,4 ;18-1fh cisla8.-9. kolotoč zpet db 0,10,8,24,192,64,96,34 ;20h tma ;____________________________________________________________ ;obrazy na sedmisegmentu z techto vah ; 8 ; 2 16 ; 1 ; 32 128 ; 64 ; 4 ; ;____________________________________________________________ animac1: db 33,32,32,0 ;10 taktu / 4sloupce db 34,34,32,0 db 32,34,34,0 db 32,32,35,0 db 32,32,1,0 db 32,32,36,0 db 32,37,37,0 db 37,37,32,0 db 38,32,32,0 db 39,32,32,255 ;ctvrty sloupec je speedovani animace -1 ; ;____________________________________________________________ animac2: db 10,26,11,27 ;8 taktu / 1 sloupec db 12,28,13,29 ; ;____________________________________________________________ ;%E ends end