;program pro prijem seriovych dat pro zobrazeni na 6 mistnem ;led displeji s vyssim napajecim napetim ; ;vysilat se bude po 2400Bd (4800) a deviti bitech, devaty bit ; v log. 1 odstartuje sekvenci, byte nese adresu bytu. ;Jeden byte budou dve cisla na displeji ;co ma za funkci, kolikaty byte.. ;prvni byte cislice displeje z leva HL 1 a 2 ;druhy byte HL 3 a 4 ;treti byte HL 5 a 6 ;15. byte format1 tecek HL ;X X 1T 2T 3T 4T 5T 6T ;14. byte format2 blikani HL ;X X 1B 2B 3B 4B 5B 6B ;13. byte format3 jas HL ;cim vyssi cislo,tim vyssi jas ; ; 1 2 3 4 5 6 oznaceni jednotlivych zobrazovacu displeje Bseg anod1 BIT p3.4 ;anoda statisicovek xx123456 anod2 BIT P3.2 ;anoda desetitisicovek anod3 BIT P3.3 ;anoda tisicovek anod4 BIT P3.1 ;anoda stovek anod5 BIT P3.7 ;anoda desitek anod6 BIT P3.5 ;anoda jednotek prijem BIT P3.0 ;seriovy vstup hodin teck6 bit 8 ;nastaveni tecek teck5 bit 9 teck4 bit 0AH ;xx123456 teck3 bit 0BH teck2 bit 0CH teck1 bit 0DH blik6 bit 40H ;nastaveni blikani blik5 bit 41H blik4 bit 42H blik3 bit 43H ;xx123456 blik2 bit 44H blik1 bit 45H blik bit 30h ;blikani 0.5Hz tma bit 31h ;priznak tmy panex bit 28h ;panel2 jeli 1 panel1 jeli 0 lin1 bit 29h ;obraz 1 drahy lin2 bit 2ah ;obraz 2 drahy lin12 bit 2bh ;meri se cas blox bit 2ch ;blokovani prepinace obrazu pom1 bit 2dh ;pocnicci pom2 bit 2eh cykex bit 2fh ;uvolneni prepinani navesti po prijeti depese ends Dseg ukaz data 20H ;ukazatel obcerstvovaneho displeje format1 data 21H ;desetine tecky, xx123456 rad12 data 22H ;v jednom bytu dva digity panel 1 rad34 data 23H ;v kazdem digitu cislo pro displej rad56 data 24H param data 25h ;bitove promenne zadane data 26H citac data 27H ;citac prijatych bytu format2 data 28h ;blikani jednotlivych cislic, xx123456 format3 data 29h ;rizeni jasu displeje od 1 do 10 blikavec1 data 30h ;casovani blikani blikavec2 data 31h jasovac data 32h ;citac pro rizeni jasu plni se z format3 casox data 40h ;casovac prepinani panelu L sad12 data 42H ;v jednom bytu dva digity panel2 sad34 data 43H ;v kazdem digitu cislo pro displej sad56 data 44H odrus data 45h ends Cseg perled = 250 ;perioda displeje 1,536ms/krystal 12MHz/th0/16bitu ;serie = 230 ;2400Bd/krystal 12MHz/TH1/8bitu smod=1 serie = 243 ;4800Bd/krystal 12MHz/TH1/8bitu smod=1 ltime = 100 ;zakladni cas blikani 100*1,536=154ms htime = 3 ;nasobek zakladu casu pro blikani 460ms ends ;%S ;______________________________________________________________________ org 0 ajmp setup ;najeti setupu ;______________________________________________________________________ org 0bh ajmp period ;obcerstvovani displeje led ;______________________________________________________________________ org 1bh ajmp jasek ;rizeni jasu a casovani serioveho prijmu dat ;______________________________________________________________________ org 23h ajmp serius ;prijem dat pro zobrazeni ;______________________________________________________________________ org 50h setup: mov p1,#0 ;osetreni vystupu mov p3,#1 mov sp,#6fh ;presmerovani zasobniku mov ukaz,#1 ;prednastaveni nekterych promennych mov tmod,#00100001b ;vytvor cit1 8bitu s predv. v th1 ; a citac0 16bitu s progr.predv. v th0 mov th1,#serie ;citac 1 casovani serioveho prijmu dat 1200Bd setb tr1 ;uvolni citani z hodin mov scon,#11000000b ;uart 9bitu orl pcon,#80h ;SMOD=1 nastaveni dvojnasobne rychlosti clr ti clr ri setb et1 ;uvolneni preruseni dalsiho casovani setb es ;priprava a uvolneni prijmu seriovych dat setb ren ;uvolneni pro prijem setb th0,#perled ;prvotni nastaveni cit 0 pro buzeni multiplexu led setb tr0 ;uvolneni citani z hodin setb et0 ;uvolni preruseni od casovace 0 setb ea ;uvolni vsechna povolena preruseni setb pt0 ;priorita displej mov blikavec1,#1 ;prednastaveni delicky blikani mov blikavec2,#1 ;prednastaveni delicky blikani mov format1,#63 ;tecky, xx123456 mov format2,#0 ;blikani, xx123456 mov format3,#100 ;zakladni jas mov rad12,#012h ;sestupka mov rad34,#034h mov rad56,#056h mov sad12,#078h ;sestupka mov sad34,#09ah mov sad56,#0bch mov param,#0 ;rizeni stridani panelu panel1 mov casox,#5 ;cas prvniho prepnuti panelu pan1 a pan2 mov odrus,#1 ;proti prijmu spatnych tecek ;____________________________________________________________ cykl: mov format2,#0 jnb cykex,cykl mov c,teck4 anl c,/teck5 jc cy5 cy3: clr lin12 clr lin1 ;neni ve stavu stopek clr lin2 sjmp cykl cy5: mov a,rad12 ;jestli bezi prvni draha anl a,#00001111b orl a,rad34 orl a,rad56 jnz cy9 ;bezi mov a,rad12 cpl a anl a,#11110000b jnz cy9 ;i tak bezi clr pom1 ;nebezi sjmp cy10 cy9: setb pom1 ;1 bezi cy10: mov a,sad12 ;jestli bezi druha draha anl a,#00001111b orl a,sad34 orl a,sad56 jnz cy19 ;bezi mov a,sad12 cpl a anl a,#11110000b jnz cy19 ;i tak bezi clr pom2 ;nebezi sjmp cy20 cy19: setb pom2 ;2 bezi cy20: mov c,pom1 ;jestli bezi jen 1 a 2 ne anl c,/pom2 jnc cy25 ;neni tak clr panex ;preklapec 0=pan1 mov casox,#3 ;je tak, blokuj prepinani sjmp cy50 cy25: mov c,pom2 ;jestli bezi jen 2 a 1 ne anl c,/pom1 jnc cy30 ;neni tak setb panex ;preklapec 1=pan2 mov casox,#3 ;je tak, blokuj prepinani sjmp cy50 cy30: mov c,pom1 ;jestli bezi obe anl c,pom2 jc cy50 ;bezi obe nech prepinat casem cy40: ajmp cy3 ;neres stav cy50: setb lin12 ;je ve stavu stopek jb panex,cy55 setb lin1 clr lin2 ajmp cykl cy55: setb lin2 clr lin1 ajmp cykl ;____________________________________________________________ ;multiplex displeje period: push acc ;uklid dat do zasobniku push psw push r0 ;--------------------------------------- djnz blikavec1,peri0 ;blikani displeje mov blikavec1,#ltime djnz blikavec2,peri0 mov blikavec2,#htime cpl blik djnz casox,peri0 ;prepinac zobrazeni panelu mezi pan1 a pan2 mov casox,#12 ;4 bliknuti cpl panex ;prepnuti panelu ;--------------------------------------- peri0: mov th0,#perled ;delka periody pro posun multiplexu ;--------------------------------------- djnz ukaz,peri1 ;posun ukazatele multiplexu 6,5,4,3,2,1,6... mov ukaz,#6 peri1: nop ;--------------------------------------- mov dptr,#tabulka mov a,ukaz ;nacteni ukazatele obcerstvovaneho radu dec a ;5,4,3,2,1,0,5,... clr c rrc a ;vypocet ukazatele na byt, kde je digit 0,1,2 mov F0,c jb panex,pane2 add a,#rad12 ;adresa bytu v Acc panel1 sjmp pane pane2: add a,#sad12 ;adresa bytu v Acc panel2 pane: mov r0,a ;zadani adresy do R0 mov a,@r0 ;vytazeni obou digitu do Acc ;--------------------------------------- jnb F0,digiH ;neni-li nizsi /lichy/ digit, ber vyssi /sudy/ digiL: anl a,#00001111b ;maska pro cislo v nizsim digitu sjmp peri2 digiH: anl a,#11110000b ;maska pro cislo ve vyssim digitu swap a ;prohoz, vyssi digit do nizsiho digitu peri2: movc a,@a+dptr ;vytazeni obrazu znaku do ACC abcdefgh ;--------------------------------------- mov r0,ukaz mov p1,#0 ;zatemni segmenty pedchoziho radu cjne r0,#1,peri10 ;prepni anody podle ukazatele multiplexu setb anod1 clr anod2 ;prepnuti anod mov c,lin12 ;nastaveni des.tecky 100000 mov 0e0h,c jnb blik,peri60 ;blikani jnb blik1,peri60 sjmp peri70 peri10: cjne r0,#2,peri20 setb anod2 clr anod3 mov c,teck2 ;nastaveni dvojtecky 020000 mov 0e0h,c jnb blik,peri60 jnb blik2,peri60 sjmp peri70 peri20: cjne r0,#3,peri30 setb anod3 clr anod4 mov c,lin1 ;nastaveni des.tecky 003000 mov 0e0h,c jnb blik,peri60 jnb blik3,peri60 sjmp peri70 peri30: cjne r0,#4,peri40 setb anod4 clr anod5 mov c,teck4 ;nastaveni des.tecky dole 000400 mov 0e0h,c jnb blik,peri60 jnb blik4,peri60 sjmp peri70 peri40: cjne r0,#5,peri50 setb anod5 clr anod6 mov c,teck5 ;nastaveni des.tecky nahore 000050 mov 0e0h,c jnb blik,peri60 jnb blik5,peri60 sjmp peri70 peri50: cjne r0,#6,peri60 setb anod6 clr anod1 mov c,lin2 ;nastaveni des.tecky 000006 mov 0e0h,c jnb blik,peri60 jnb blik6,peri60 sjmp peri70 peri60: mov p1,a ;rozsvit segmenty nynejsiho radu mov jasovac,format3 ;nastav jas clr tma ;uvolni kraceni jasu peri70: nop ;--------------------------------------- pop r0 ;obnova dat pop psw pop acc reti ;____________________________________________________________ tabulka: ;zde jsou obrazy LCD pro jednotlive znaky db 252,96,218,242,102,182,190,224 ;0,1,2,3,4,5,6,7 db 254,246,238,62,156,122,158,0 ;8,9,A,b,C,d,E,tma db 253,97,219,243,103,183,191,225 ;0.1.2.3.4.5.6.7. db 255,247,239,63,157,123,159,143 ;8.9.A.b.C.d.E.F. db 0,2,198 ;tma,minus,stupen ;____________________________________________________________ serius: ;zpracovani prijatych dat prijimac 1 push acc clr ti clr ri jb rb8,seri10 ;devaty bit urcuje start sequence prisunu dat ;--------------------------------------- mov a,#1 ;adresa 1 minuty hry cjne a,citac,reri3 mov a,sbuf mov rad12,a ;pri souhlasu adresy, prijmi data pro displej sjmp seri20 reri3: mov a,#2 ;adresa 2 sekundy hry cjne a,citac,reri4 mov a,sbuf mov rad34,a ;pri souhlasu adresy, prijmi data pro displej sjmp seri20 reri4: mov a,#3 ;adresa 3 tecky jako dvojtecky cjne a,citac,reri5 mov a,sbuf mov rad56,a ;pri souhlasu adresy, prijmi data pro displej sjmp seri20 reri5: mov a,#4 ;adresa 1 minuty hry cjne a,citac,seri3 mov a,sbuf mov sad12,a ;pri souhlasu adresy, prijmi data pro displej sjmp seri20 seri3: mov a,#5 ;adresa 2 sekundy hry cjne a,citac,seri4 mov a,sbuf mov sad34,a ;pri souhlasu adresy, prijmi data pro displej sjmp seri20 seri4: mov a,#6 ;adresa 3 tecky jako dvojtecky cjne a,citac,seri5 mov a,sbuf mov sad56,a ;pri souhlasu adresy, prijmi data pro displej sjmp seri20 seri5: mov a,#7 ;adresa pro jas 13 cjne a,citac,seri6 mov a,sbuf mov format3,a ;pri souhlasu adresy, prijmi data pro displej jas sjmp seri20 seri6: mov a,#8 ;adresa pro tecky 14 cjne a,citac,seri7 mov a,sbuf mov format1,a ;pri souhlasu adresy, prijmi data pro displej tecky setb cykex sjmp seri20 seri7: mov a,#9 ;adresa problikani 15 cjne a,citac,seri8 mov a,sbuf mov format2,a ;pri souhlasu adresy, prijmi data pro blikani radu seri8: sjmp seri20 ;--------------------------------------- seri10: mov a,sbuf ;nacteni adresy mov citac,a pop acc reti ;--------------------------------------- seri20: inc citac ;zvys adresaci dat pop acc reti ;____________________________________________________________ jasek: ;kraceni jasu displeje jnb tma,case1 ;neprobehlo-li zhasnuti,skoc reti case1: djnz jasovac,case10 ;odcitani casu jasu displeje setb tma ;probehlo zhasnuti mov p1,#0 ;zhasnuti displeje case10: reti ;____________________________________________________________ ;%E ends end