;uprava nastavení pro kazdou minutu, sekundu ; ;casovac se ctyrmi LED displeji ;po zapnuti tlacitkem vlevo nebo po náběhu napětí ;si zkontroluje procesor platnost dat v ram ;je-li vsechno v poradku, zobrazi posledne nastavený čas ; ;Jeli v RAM zmatek napíše čas 1 hodinu.. ; ;Tlačítkem vpravo mohu nastavit predvolbu času nahoru nebo dolu ;Změna funkce tlačítka se děje stiskem tlačítka vlevo. ;V nastavovacím režimu nebliká tečka ; ;displej se nastavuje napred pomalu, ale delsim drzenim tlacitka ;se prestavovani cislic rapidne zrychli, takze jakykoliv stav ;v rozsahu 1m az 99hodin lze nastavit bez obtizi a velmi rychle ;prerusovanym stiskem nastavovacich tlacitek lze tez velmi rychle ;dostavet pozadovanou hodnotu, nebot prvni stisk je vzdy casove ;zvyhodnovan.. ; ;Pokud jsou hodiny v režimu nastavovaní a nic se neděje, ;pak po minute samy usínaj ; ; ;po stisku prostředního tlačítka se začne odpočítávat čas dolů ;Běh je indikován blikající tečkou ;Zároveň je seplý tranzistorový výstup ;Po dočasování se tranzistor zavře ;a hodiny jdou do režimu spánku ; ; ; ;Možné programové změny !!!! ;promenná ultim určuje režim citace do minut(60) sekund(1) ; ;v promenne vypos je urcen v minutach usinaci cas ;pro vypnuti pri necinnosti v nastavovacim rezimu (1) ;(nula tu znamená 256 minut) ; ;za návěštím nast2 je pevná předvolba po studeném startu hodin ;ted je tam jedna hodina (nebo jedna minuta dle rezimu) Bseg rele bit p3.7 dole bit p3.3 jedem bit p3.2 beh bit 8 ;ze se odcita cas kuk bit 9 ;pozadavek na obcerstveni displeje pip bit 10 ;cas dobehl, pozadavek na zvuk signal stav bit 11 ;nastavoval se cas, pozadavek pro ulozeni dat blik bit 12 ;blikavy bit tecka bit 14 ;vysledek tecky blesk bit 15 ;zatemnovani celeho displeje, blikani,citani pipani gogo bit 16 ;smer zmeny pro nastavovaci tlacitko tmadm bit 20 ;zatemni desitky minut tmajm bit 21 ;zatemni jednotky minut tmads bit 22 ;zatemneni desitek sekund ends Dseg taktlcd data 20h ;ridic led displeje bitiky1 data 21h ;bity merkru bitiky2 data 22h ;bity merkru ukazatel data 25h ;ukazatel na zobrazeni sichr1 data 26h ;kontrola pameti1 sichr2 data 41h ;kontrola pameti2 destis data 30h ;citace casu setiny data 31h jedsek data 32h ;citace casu pro zobrazeni dessek data 33h jedmin data 34h desmin data 35h jesepr data 36h ;pamet predvolby desepr data 37h jemipr data 38h demipr data 39h speed data 3ah ;citac rychlosti pro staveni casu z klaves rychlost data 3bh ;promenna rychlosti pro akceleraci casek data 3ch ;citac osetreni klaves vypol data 3dh ;vypinani po nevyuzitem zapnuti vypoh data 3eh vypox data 3fh sedesa data 42h ;ze sekund na minuty ends Cseg osetri = 14 ;osetreni klaves o x 5ms }30} prvotni = 10 ;cas pocatecniho repeatu tlacitka pri }20} ;trvalem stisku p x o x 5ms minim = 1 ;minimalni cas repeatu }3} ;s krokem 1 m x o x 5ms heslo1 = 34 ;hesla pro kontrolu dat v pameti heslo2 = 56 ultim = 60 ;60 pro minuty a 1 pro sekundy, rozsah vypos = 1 ;minuty pro uspavani pri necinnosti ends ;%S org 0 ajmp nastav org 0bh ajmp systca org 30h nastav: mov tmod,#00000010b ;0.citac s predvolbou setb et0 setb ea mov th0,#6 ;250/12MHz / 250us mov tl0,#0 mov sp,#6fh ;zasobnik od 70h / 16bytu setb pt0 ;vyssi prioritu pro cas0 setb tr0 ;start casovace 0 mov P1,#255 ;vystupy na klidovy stav mov P3,#11111111b mov destis,#0 ;nastaveni nulovych zlomku casu mov setiny,#0 mov sedesa,#0 clr kuk ;displej zatim ceka clr stav ;po restartu nic neukladej ;################################################################# mov a,sichr1 ;kontrola neporusenosti dat v ram xrl a,#heslo1 jnz nast1 mov a,sichr2 xrl a,#heslo2 jnz nast1 ;skok na nacteni z rom heslo poruseno cpl gogo ;prepinani funkce staveciho tlacitka nahoru dolu nast0: jnb stav,nast3 ;po predchozim nastaveni uloz data do pameti casu mov a,jedsek ;ale napred si prover data zda-li nejde o nesmysly orl a,dessek orl a,jedmin orl a,desmin anl a,#11110000b ;ve vyssich bitech nesmi nikde nic byt jnz nast2 ;skok na nacteni z rom jsouli to nesmysly mov jesepr,jedsek ;uloz predvolbu delky casu mov desepr,dessek mov jemipr,jedmin mov demipr,desmin ajmp nast5 nast1: clr gogo ;prepinani funkce staveciho tlacitka do nuly nast2: mov jesepr,#0 ;nastav z rom po studenem startu predvolbu delky casu mov desepr,#0 ;predvolba 1 hodina mov jemipr,#1 mov demipr,#0 mov sichr1,#heslo1 ;nastaveni kontrolnich bytu v ram mov sichr2,#heslo2 nast3: mov jedsek,jesepr ; nahraj na displej /do citacu/ predvolbu casu mov dessek,desepr mov jedmin,jemipr mov desmin,demipr nast5: clr stav clr beh clr pip setb rele mov vypol,#120 ;vypne procesor pri prodleve nastaveni mov vypoh,#200 mov vypox,#vypos ;n x počet minut acall minend ;ukazatel pro nastavovani ;YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY cykl: jnb kuk,cykl ;scanovani s casovanim kuk acall elcede ;volani obcerstvovani displeje cyk1: acall klavesy ;nastavovani casu, klavesy cyk3: jnb pip,cyk2 acall hali ;uspávání po odpočitani cyk2: jb stav,nast0 ;po zmene zadani casu uloz do predvolby jnb jedem,makej ;start pocitani casu ajmp cykl ;scan ;PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP makej: jnb beh,mak1 ;nenili beh nahod casovani sjmp cykl ;jinak nic mak1: mov destis,#0 ;nastaveni nulovych zlomku casu mov setiny,#0 mov sedesa,#0 setb beh ;citej cas clr pip ;nepipej clr gogo ;prednastaveni pro staveni do plusu clr stav ;zrus pozadavek zaznamu nastaveni casu do pameti acall minend ;identifikace ukazatele displeje clr rele ;sepni rele sjmp cykl ;skok na beh ;PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP hali: clr ea ;zacatek ukolebavky mov p1,#255 ;vystupy do klidu mov p3,#255 orl pcon,#2 ;uspavani nop ret ;KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK klavesy: jnb beh,klavz ;nenili beh obskoc konec ret ;budeli beh, necti klavesy a ven klavz: djnz vypol,vyps1 ;hlidani casu na nastaveni mov vypol,#120 djnz vypoh,vyps1 ;300ms mov vypoh,#200 djnz vypox,vyps1 ;n x sedesatisekundy sjmp hali vyps1: mov c,dole jnc klav1 ;test stisku klavesy mov casek,#osetri ;nastaveni pri uvolneni klaves osetreni stisku mov speed,#1 ;pro rychlou prvni odezvu mov rychlost,#prvotni ;a pro nasledujici odezvy trvaleho stisku klav0: ret klav1: setb rele ;vypni rele, mohlo zustat nastavene clr beh ;zastav beh hodin i pipani clr pip djnz casek,klav0 ;osetreni stisku mov casek,#osetri ;obcerstveni citace osetreni stisku djnz speed,klav0 ;citani casu opakovane reakce pri trval.stisku mov speed,rychlost ;obcerstveni citace rychlosti opakovani dec rychlost ;akcelerace rychlosti opakovane reakce mov a,rychlost cjne a,#minim,klav2 ;minimalni cas opakovani bude vetsi nez minim inc rychlost ;oprava periody klav2: setb stav ;nastav bit pro prepis predvolby jb gogo,dolu ;jeli gogo pak nastavuj dolu, jinak nahoru ;HHHHHHHHHHHHHHHHHHHHHHHHHHHHHH nahoru: mov a,desmin ;test na 99 minut, pak se zakaze pricitani xrl a,#9 jnz nah0 mov a,jedmin xrl a,#9 jnz nah0 nah3: ret nah0: mov a,ukazatel ;nastavovani sekund nahoru ; cjne a,#jedsek,nah1 ajmp plus nah1: mov jedsek,#0 ;nastavovani desitek sekund nahoru cjne a,#dessek,nah2 ajmp plus1 nah2: mov jedsek,#0 ;nastavovani desitek sekund nahoru cjne a,#jedmin,nah3 ajmp plus1 ;DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD dolu: mov a,jedsek ;test na min 1 sekundu xrl a,#1 jnz dol0 orl a,dessek orl a,jedmin orl a,desmin jnz dol0 dol3: ret dol0: mov a,ukazatel ; cjne a,#jedsek,dol1 ajmp minus dol1: mov jedsek,#0 ;nastavovani desitek sekund dolu cjne a,#dessek,dol2 ajmp min1 dol2: mov jedsek,#0 ;nastavovani desitek sekund dolu cjne a,#jedmin,dol3 ajmp min1 ;OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO elcede: inc taktlcd ;beh hodin pro lcd /predelano na LED clr kuk ;smaz pozadavek displeje acall teckit ;urceni , zda bude zobrazena tecka MOV A,#3 ;mask BUD 0 NEBO 1 = JEDNOTKY NEBO DES. ANL A,taktlcd mov taktlcd,a ;maskovane uloz ADD A,#jedsek ;adresa nejnizsiho radu mov r0,a mov a,@r0 jnb tecka,elced0 add a,#16 ;s teckou elced0: MOV DPTR,#TABULA ;VYTAZENI OBRAZKU PRO DISPLEJ Z TABULKY MOVC A,@A+DPTR jnb blesk,elcd01 ;pro blikani celeho displeje mov a,#255 elcd01: orl p3,#00110011b ;zhasnuti displeje anody mov p1,a ;katody prestav el0001: mov a,taktlcd jnz el0010 clr p3.4 ;anoda jednotek sekund ret el0010: dec a jnz el0100 jb tmads,elend clr p3.5 ;anoda desitek sekund ret el0100: dec a jnz el1000 jb tmajm,elend clr p3.1 ;anoda jednotek minut ret el1000: jb tmadm,elend clr p3.0 ;anoda desitek minut elend: ret ;TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT tabula: db 20,183,140,133,39,69,68,151,4,5,255,255,255,255,255,239 db 16,179,136,129,35,65,64,147,0,1,251,251,251,251,251,255 ;CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC systca: PUSH ACC ;ULOZ AKUMULATOR PUSH PSW ;ULOZ PRIZNAKY INC DESTIS ;DVOUDESETITISICINY + 1 MOV A,#10 ;250us X 10 x n = 2,5ms CJNE A,DESTIS,sysend ;PAK NESKAKEJ,JINAK SKOK VEN XRL DESTIS,A ;SNULUJ DESTIS setb kuk ;displej obcerstvi INC SETINY ;SETINY + 1 MOV A,#200 ;200 X 2,5ms = 0,5s CJNE A,SETINY,sysend ;PAK NESKAKEJ,JINAK SKOK VEN XRL SETINY,A ;SNULUJ SETINY PRAVE PROSLA pulsekunda cpl blik jb stav,sysend ;nastavovani aktivovano jnb blik,sysend ;blikani f=1s inc sedesa ;citani sekund do minuty mov a,#ultim cjne a,sedesa,sysend xrl sedesa,a syst1: jnb beh,sysend ;neni-li aktivovan beh, nemen cas mov a,jedsek ;test dosleho casu k jedne sekunde dec a orl a,jedmin orl a,dessek orl a,desmin jnz sysbeh ;neni-li nula sekundy skoc a odcitej clr beh ;zastav dalsi odcitani casu a setb pip ;zapni pipani setb rele ;vypni rele ajmp sysend sysbeh: acall minus sysend: POP PSW ;OBNOV PRIZNAKY POP ACC ;OBNOV AKUMULATOR RETI ;MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM minus: dec jedsek ;odcitani navoleneho casu mov a,jedsek cpl a jnz minend mov jedsek,#9 min1: dec dessek mov a,dessek cpl a jnz minend mov dessek,#5 min2: dec jedmin mov a,jedmin cpl a jnz minend mov jedmin,#9 min3: dec desmin mov a,desmin cpl a jnz minend minend: mov ukazatel,#jedmin mov a,desmin jnz min31 mov ukazatel,#dessek mov a,jedmin jnz min31 mov ukazatel,#jedsek min31: ret ;PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP plus: inc jedsek mov a,#10 cjne a,jedsek,plusend mov jedsek,#0 plus1: inc dessek mov a,#6 plus12: cjne a,dessek,plusend mov dessek,#0 plus2: inc jedmin mov a,#10 cjne a,jedmin,plusend mov jedmin,#0 plus3: inc desmin mov a,#10 cjne a,desmin,plusend mov desmin,#9 ;osetreni protoceni stopek mov jedmin,#9 plusend: mov ukazatel,#jedmin mov a,desmin jnz plus31 mov ukazatel,#dessek mov a,jedmin jnz plus31 mov ukazatel,#jedsek plus31: ret ;TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT teckit: clr tmads clr tmajm clr tmadm mov a,desmin jnz tecke setb tmadm ;bez desitek minut mov a,jedmin jnz tecke clr tmajm ;bez jednotek minut mov a,dessek jnz tecke clr tmads ;s desítkama sekund tecke: mov a,taktlcd ;kam ukazuje multiplex clr tecka ;zakazat tecku cjne a,#2,teck1 ;identifikace taktu multiplexu pevné tečky setb tecka ;povolit tecku teck1: jnb beh,teck4 ;blikani tecky, pokud je pozadovana mov c,blik ;pri behu blikat svit tecky anl c,tecka ;pokud je pozadovana tecka mov tecka,c sjmp teck7 ;bez blikani cisel v behu teck4: mov c,blik ;blikani celeho displeje pri aktivaci pipani mov blesk,c ;citani pipani nebo staveni clr blesk ;nastaveno bez blikani jnb dole,teck7 ;pri stisku klavesy neblikej ret teck7: clr blesk ret ;################################################ ;%E ends end