;program pro prijem seriovych dat pro zobrazeni na 6 mistnem ;led displeji s vyssim napajecim napetim ; ;vysilat se bude po 2400Bd (4800Bd)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 ends Dseg ukaz data 20H ;ukazatel obcerstvovaneho displeje format1 data 21H ;desetine tecky, xx123456 rad12 data 22H ;v jednom bytu dva digity rad34 data 23H ;v kazdem digitu cislo pro displej rad56 data 24H 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 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 4800Bd 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 ;____________________________________________________________ cykl: acall displej ;zpracovava data pro displej mov format2,#0 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 ;--------------------------------------- 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 add a,#rad12 ;adresa bytu v Acc 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,teck1 ;nastaveni des.tecky 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 des.tecky mov 0e0h,c jnb blik,peri60 jnb blik2,peri60 sjmp peri70 peri20: cjne r0,#3,peri30 setb anod3 clr anod4 mov c,teck3 ;nastaveni des.tecky 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 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 mov 0e0h,c jnb blik,peri60 jnb blik5,peri60 sjmp peri70 peri50: cjne r0,#6,peri60 setb anod6 clr anod1 mov c,teck6 ;nastaveni des.tecky 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 ;odskok pri blikani ;--------------------------------------- pop r0 ;obnova dat pop psw pop acc reti ;____________________________________________________________ displej: nop ret ;____________________________________________________________ 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,seri3 mov a,sbuf mov rad12,a ;pri souhlasu adresy, prijmi data pro displej sjmp seri20 seri3: mov a,#2 ;adresa 2 sekundy hry cjne a,citac,seri4 mov a,sbuf mov rad34,a ;pri souhlasu adresy, prijmi data pro displej sjmp seri20 seri4: mov a,#3 ;adresa 3 tecky jako dvojtecky cjne a,citac,seri5 mov a,sbuf mov rad56,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 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