;testy na malé kartě... ;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 Dseg bity0 data 20h ;bitiky 0 az 7 pameLL data 24h ;pamet tlacitka pameHH data 25h matLL data 26h ;nactena matice klavesnice 4x4 matHH data 27h ; osetr data 30h ;citac doby uvolnene klavesnice dmez data 31h ;delka mezery po korekci a prepoctu z pulzu dpuls data 32h ;delka pulsu pred3 data 33h ;predloha pro pozadovany pocet pulzu pred2 data 34h pred1 data 35h obrp3 data 36h ;pro zobrazeni bez zbytecnych nul predlohy obrp2 data 37h obrp1 data 38h pocita data 39h ;zachycuje pulsy z preruseni int1 poc3 data 3ah ;cita pulsy poc2 data 3bh poc1 data 3ch obrc3 data 3dh ;pro zobrazeni bez zbytecnych nul citace obrc2 data 3eh obrc1 data 3fh pipip data 40h ;delka pipnuti citac par1 data 41h ;parametry par2 data 42h par3 data 43h par4 data 44h par5 data 45h par6 data 46h par7 data 47h par8 data 48h rynaj data 49h ;doba najezdu rybrzd data 4ah ;doba brzdy rypom data 4bh ;doba pro zpomal ends Bseg mbeh bit 0h ;rozjed a jed podle zadani muz bit 1h ;splneny pocet pulsu mup bit 2h ;nabeh rychlosti motoru mdown bit 3h ;sebeh rychlosti motoru mem1 bit 4h ;pomocny bitik zatim jen pro nabeh mem2 bit 5h ;pomocny bit pro delete pri zapisu mpom bit 6h ;uz ne moc rychle, jsme blizko mpar bit 7h ;nastavovaci bit parametru sig_rs bit p2.5 ;rizeni lcd sig_rw bit p2.6 ;rizeni lcd sig_e bit p2.7 ;rizeni lcd istart bit p3.0 ;vstup9 inuly bit p3.2 ;vstup10 ipuls bit p3.3 ;vstup11 istop bit p3.4 ;vstup12 RADEK1 bit p1.0 ;radek 1. matice klaves RADEK2 bit p1.1 RADEK3 bit p1.2 RADEK4 bit p1.3 vybeh bit p2.3 ;vystup vypom bit p2.2 ;vystup vypip bit p2.1 ;vystup vykon bit p2.4 ;vystup vy05 bit p2.0 ;vystup vy06 bit p3.5 ;vystup vy07 bit p3.6 ;vystup vyneg bit p3.7 ;vystup ends Dseg ends ;%S ;___________________________________________ org 0 ljmp start ;po resetu do inicializace systemu ;_________________________________________ org 3h ;EX0 reti ;_________________________________________ org 0bh sjmp baze ;ET0 zakladna pwm ;_______________________________________________ org 13h inc pocita ;zachycovac pro citani pulsu reti ;EX1 ;_______________________________________________ org 1bh clr vykon ;ET1 aktivace vystupu pwm setb vyneg reti ;_______________________________________________ org 23h reti ;ES ;_____________________________________________ ;############################################## ;############################################## ;############################################## org 50h baze: push acc mov tl1,dmez ;ET0 synchronizace pwm se zakladnou nastav delku mezery mov a,dmez ;nacti do ac puls cpl a ;neguj a jz naplno ;jeli pozadavek na 100proc, nevypinej vystup setb vykon ;vystup do klidu pro pwm clr vyneg naplno: pop acc reti ;############################################## ;############################################## ;############################################## start: mov p3,#255 ;osetreni vystupu na log.1 mov p1,#255 mov p0,#255 mov p2,#255 mov sp,#60h ;premisteni zasobniku setb ex1 ;uvolneni pro zachycovani pulsu INT1 setb it1 ;preruseni s hranou pulsu pro INT1 mov th0,#0 ;zakladna pwm 256us mov th1,#0 ;prepnuti pwm do 0, (pasivni je 1) orl tmod,#00100010b ;dva osmi bitove citace s predvolbou setb et0 setb pt0 ;priorita pro casovace setb pt1 setb tr0 ;uvolneni citani do casovacu setb tr1 setb ea ;uvolneni vsech preruseni ;####################################### ;######################################## ;######################################## zaklad: clr a mov pocita,a ;predcitac pulzu do nuly mov poc3,a ;smazat citac mov poc2,a mov poc1,a mov pamell,a ;mazani promennych klavesnice mov pamehh,a mov matll,a mov mathh,a mov dpuls,a ;pwm do nuly mov dmez,#255 clr muz ;merkery do nuly clr mbeh clr mpom clr mup clr mdown clr mpar clr mem1 setb mem2 acall parcti ;nacti ulozene parametry1 acall predcti ;nacti ulozenou predvolbu mov a,par1 ;test parametru1 cpl a jnz za10 ;bylli prvni parametr FF nahraj default nastaveni mov par1,#15 ;UP trvani rampy pro rozjezd mov par2,#10 ;SLOWLY trvani rampy pro pomalu mov par3,#2 ;DOWN trvani rampy pro brzdu mov par4,#15 ;TRIGER uroven pro skokovy rozjezd mov par5,#255 ;MAXIMUM uroven pro maximum rychlosti mov par6,#100 ;MIDLE uroven pro zpomaleni mov par7,#10h ;DIFERENCE rozdil pulsu do zpomaleni mov par8,#30 ;KEYBOARD cas osetreni klaves mov pred1,a mov pred2,a mov pred3,a acall parpis ;uloz parametry1 do eeprom za10: mov rynaj,#1 ;priprava citacu ramp mov rybrzd,#1 mov rypom,#1 clr vy05 ;nevyuzite vystupy do 0 clr vy06 clr vy07 ;nevyuzite vystupy do 0 lcall lcdpack8 ;probud lcd lcall pulsobr ;zobraz zakladni stranku ;############################################## cykl: acall matice ;nacti matici tlacitek jb mbeh,cyk10 ;pri behu zakaz prepisu zadani cisel jb mdown,cyk10 ;musi byt opravdu zastaveno acall rezim ;skok do obrazovek nastaveni jb mpar,cyk20 ;nastavovani zakladnich parametru cyk05: acall osetri ;osetreni klavesnice a navesti pro prepis cisla po stopu acall cislo ;z klavesnice cislo do ac a smazat pamet klav acall zadani ;pokud cislo pak z Ac se uklada jako cislo pro zadani acall nuly ;citac smaz acall zbobrp ;zobrazeni predlohy bez zbytecnych nul acall zbobrc ;zobrazeni citace bez zbytecnych nul acall panel ;data pro lcd zobrazeni acall citac ;pocita pulsy vnejsich udalosti acall stasto ;start stop obvod a aktivace ramp acall vystupy ;nastaveni vystupu ajmp cykl cyk10: acall zbobrp ;zobrazeni predlohy bez zbytecnych nul acall zbobrc ;zobrazeni citace bez zbytecnych nul acall panel ;data pro lcd zobrazeni acall citac ;pocita pulsy vnejsich udalosti acall porovna ;zbyva pulsu acall stasto ;start stop obvod a aktivace ramp acall vystupy ;nastaveni vystupu acall rampa ;vypocet rampy ajmp cykl cyk20: acall testy ;zobrazeni parametru v hexa acall osetri ;osetreni klavesnice acall zmen ;meneni parametru ajmp cykl ;############################################## ;################################################### ;zapis predlohy do eeprom ;################################################### predpis: mov dptr,#9 ;adresa eeprom mov r0,#pred3 ;adresa ram parametru mov r4,#3 ;pocet ukladanych bytu mov 96h,#00011010B ;interni pamet eeprom a uvolnit pro zapis prp10: mov a,@r0 ;data z ram do acc movx @dptr,a ;ulozeni do eeprom inc dptr ;zvys adresaci pro eeprom inc r0 ;zvys adresaci pro ram prp15: mov a,96h ;nacteni systemove pameti anl a,#00000010B ;0 je ze jeste zapisuje jz prp15 ;cekej na uvolneni pro dalsi zapis djnz r4,prp10 ;8 x dokola mov 96h,#00000010B ;konec zapisu do eeprom ret ;################################################### ;zapis parametru do eeprom ;################################################### parpis: mov dptr,#0 ;adresa eeprom mov r0,#par1 ;adresa ram parametru mov r4,#8 ;pocet ukladanych bytu mov 96h,#00011010B ;interni pamet eeprom a uvolnit pro zapis pp10: mov a,@r0 ;data z ram do acc movx @dptr,a ;ulozeni do eeprom inc dptr ;zvys adresaci pro eeprom inc r0 ;zvys adresaci pro ram pp15: mov a,96h ;nacteni systemove pameti anl a,#00000010B ;0 je ze jeste zapisuje jz pp15 ;cekej na uvolneni pro dalsi zapis djnz r4,pp10 ;8 x dokola mov 96h,#00000010B ;konec zapisu do eeprom ret ;################################################### ;cteni parametru z eeprom ;################################################### parcti: mov dptr,#0 ;adresa eeprom mov r0,#par1 ;adresa ram parametru mov r4,#8 ;pocet ukladanych bytu mov 96h,#00001010B ;interni pamet eeprom a uvolnit pro zapis pc10: movx a,@dptr ;nacteni z eeprom do acc mov @r0,a ;data do ram parametru inc dptr ;zvys adresaci pro eeprom inc r0 ;zvys adresaci pro ram djnz r4,pc10 ;8 x dokola mov 96h,#00000010B ;konec cteni z eeprom ret ;################################################### ;cteni parametru z eeprom ;################################################### predcti: mov dptr,#9 ;adresa eeprom mov r0,#pred3 ;adresa ram parametru mov r4,#3 ;pocet ukladanych bytu mov 96h,#00001010B ;interni pamet eeprom a uvolnit pro zapis prc10: movx a,@dptr ;nacteni z eeprom do acc mov @r0,a ;data do ram parametru inc dptr ;zvys adresaci pro eeprom inc r0 ;zvys adresaci pro ram djnz r4,prc10 ;8 x dokola mov 96h,#00000010B ;konec cteni z eeprom ret ;################################################### ;ridi staveni parametru ;################################################### zmen: mov a,pamell mov pamell,#0 cjne a,#16,zm01 inc par1 ret zm01: cjne a,#1,zm02 dec par1 ret zm02: cjne a,#32,zm03 inc par2 ret zm03: cjne a,#2,zm04 dec par2 ret zm04: cjne a,#64,zm05 inc par3 ret zm05: cjne a,#4,zm06 dec par3 ret zm06: cjne a,#128,zm07 inc par4 ret zm07: cjne a,#8,zm08 dec par4 ret zm08: mov a,pamehh mov pamehh,#0 cjne a,#16,zm11 inc par5 ret zm11: cjne a,#1,zm12 dec par5 ret zm12: cjne a,#32,zm13 inc par6 ret zm13: cjne a,#2,zm14 dec par6 ret zm14: cjne a,#64,zm15 mov a,#1 add a,par7 da a mov par7,a ret zm15: cjne a,#4,zm16 mov a,#99h add a,par7 da a mov par7,a ret zm16: cjne a,#128,zm17 inc par8 ret zm17: cjne a,#8,zm18 dec par8 zm18: ret ;################################################### ;ridi nastaveni rezimu ;################################################### rezim: jb mpar,re10 ;obskok mov a,mathh ;nacti klavesnici 0.bit * rrc a ;do C anl c,/istop ;zaroven stiskly stop jnc re10 setb mpar ;nastav rezim parametry mov pamell,#0 ;pamet klavesnice smaz mov pamehh,#0 mov osetr,#255 ajmp parobr ;a obrazovku parametry re10: jnb mpar,re20 ;obskok mov a,mathh ;nacti klavesnici 0.bit * rrc a ;do C cpl c ;klavesa neni stiskla a anl c,/istop ;zaroven stiskly stop jnc re20 clr mpar ;ukonci rezim parametry acall parpis ;uloz parametry setb mem2 ;pro pripadnou editaci predlohy s deletem ajmp pulsobr ;a obrazovku zakladni re20: ret ;################################################### ;ridi rampu pro najezd a sebeh pwm modulace ;################################################### rampa: jnb mup,ra30 ;neni najezd obskoc mov a,par1 ;nacteni parametru rampy pro test 0 jnz ra03 ;rampa neni 0 pak obskoc jb mpom,ra02 ;neni nahodou pomalu pak skoc mov dpuls,par5 ;rampa 0 nastav uroven z nuly max okamzite clr mup ;shod najezd bo je hotov sjmp ra90 ra02: mov dpuls,par6 ;rampa 0 okamzite z nuly na uroven pomalu sjmp ra90 ra03: djnz rynaj,ra29 ;casovani pro najezd mov rynaj,par1 ;nastaveni casovani mov a,dpuls ;nacteni hodnoty pulsu clr c subb a,par5 ;nastavena hodnota rychlosti motoru jc ra10 ;jeste neni na maximu pak skoc clr mup ;najezd dokoncen sjmp ra60 ;test na zpom ra10: inc dpuls ;zvetsi o jeden pwm ra29: sjmp ra60 ;test na zpom ra30: jnb mdown,ra60 ;neni brzdeni obskoc mov a,par3 ;nacteni parametru rampy pro test 0 jnz ra33 ;rampa neni 0 pak obskoc mov dpuls,#0 ;stuj clr mdown ;shod je zastaveno sjmp ra90 ra33: djnz rybrzd,ra59 ;casovani pro brzdu mov rybrzd,par3 ;nastaveni casovani mov a,dpuls ;nacteni hodnoty pulsu jnz ra40 ;jeste neni na minimu pak skoc clr mdown ;dobrzdeni dokonceno sjmp ra90 ra40: dec dpuls ;zmensi o jeden pwm ra59: sjmp ra90 ra60: jnb mpom,ra90 ;neni zpomal obskoc jnb mbeh,ra90 ;neni beh obskoc mov a,par2 ;nacteni parametru rampy pro test 0 jnz ra63 ;rampa neni 0 pak obskoc mov dpuls,#par6 ;rampa 0 zpomal skokem sjmp ra90 ra63: djnz rypom,ra90 ;casovani pro najezd mov rypom,par2 ;nastaveni casovani clr c mov a,dpuls ;nacteni hodnoty pulsu subb a,par6 ;dolu az po nastaveni pulsu 100 jc ra90 ;niz uz ne a skoc ra70: dec dpuls ;zmensi o jeden pwm ra90: mov a,dpuls ;nacti puls subb a,#17 mov dmez,dpuls ;definuj mezeru jc ra95 ;mezera je pod #xx, skoc setb et1 ret ra95: clr et1 ;nelze dosahnout nuly jinak nez takto ret ;################################################### ;mazani citace ;################################################### nuly: mov c,inuly ;tlacitko pro mazani citace cpl c jc nu10 ;mazani pak skoc ret nu10: mov a,poc1 orl a,poc2 orl a,poc3 orl a,pocita jz nu20 ;kdyz je smazano, uz nepipej mov poc1,#0 ;smazani citace mov poc2,#0 mov poc3,#0 setb vypip ;pipnuti mov pipip,#25 ;delka pipnuti nu20: clr muz ;smaz priznak uz ret ;################################################### ;nastaveni vystupu ;################################################### vystupy: mov c,mbeh ;zapnuto pak motor beh mov vybeh,c mov c,mpom mov vypom,c ;blizi se ke splneni poctu zpomaleni djnz pipip,vy20 clr vypip ;vypni pipak vy20: nop ret ;################################################### ;nacte do promennych matll a mathh maticovou klavesnici 4x4 ;stiskle tlacitko je log1 ;################################################### matice: clr radek1 ;prvotni nastaveni pri cteni klavesnice setb radek2 ;nastav cteni radku 1. A 3 2 1 setb radek3 setb radek4 mov matll,p1 ;0000A321 anl matll,#0f0h ;ulozen prvni radek matice setb radek1 ;nastav cteni radku 2. B 6 5 4 clr radek2 mov a,p1 anl a,#0f0h ;B6540000 swap a ;0000B654 orl a,matll ;A321B654 cpl a ;aktivni v 1 mov matll,a ;precteny dva radky matice setb radek2 ;nastav cteni radku 3. C 9 8 7 clr radek3 mov mathh,p1 anl mathh,#0f0h ;ulozen treti radek matice setb radek3 ;nastav cteni radku 4 D # 0 * clr radek4 mov a,p1 anl a,#0f0h swap a orl a,mathh cpl a ;C987D#0* mov mathh,a ;prectena cela matice setb radek4 ret ;################################################### ;prijme stav klavesnice z matll a mathh do pameti pamell a pamehh ;klavesnice musi byt definovany cas bez stisku ;a pak se teprve hranou po novem stisku provadi ulozeni stavu ;################################################### osetri: mov a,osetr ;test doby osetrene klavesnice jnz ose10 ;neosetrena pak skoc mov pamell,matll ;nacti matici mov pamehh,mathh ose10: mov a,matll ;test zda uz byla uvolnena klavesnice orl a,mathh jz ose20 ;uvolnena pak skoc mov osetr,par8 ;casova konstanta pro osetreni zadana ose20: mov a,osetr ;test doby osetrene klavesnice jz ose30 ;osetrena pak skoc dec osetr ;odcitej cas osetreni ose30: ret ;################################################### ;vytahne z pameti klavesnice pamell a pamehh cislo od 1 do 9 ;pismenu d da kod 64 a nula ma 128 ;################################################### cislo: mov a,pamehh ;toto je kvuli prepnuti do parametru jnb 0e0h,cis02 ;aby se nesmazal displej predvolby clr mem2 cis02: mov a,pamehh ;test klavesH C987D#0* jnz cis20 ;je stiskla odskoc mov a,pamell ;test klavesL A321B654 jz cis99 ;neni stiskla pak konec jnb mem2,cis05 ;nove cislo po stopu zarizeni mov a,#8 ;a zadej delete sjmp cis24 ;odskok na delete cis05: cjne a,#16,cis10 mov a,#1 ;cislice 1 do ac a smaz a navrat dec dpuls ;test pwm sjmp cis99 cis10: cjne a,#32,cis11 mov a,#2 ;cislice 2 do ac a smaz a navrat inc dpuls ;test pwm sjmp cis99 cis11: cjne a,#64,cis12 mov a,#3 ;cislice 3 do ac a smaz a navrat sjmp cis99 cis12: cjne a,#1,cis13 mov a,#4 ;cislice 4 do ac a smaz a navrat sjmp cis99 cis13: cjne a,#2,cis14 mov a,#5 ;cislice 5 do ac a smaz a navrat sjmp cis99 cis14: cjne a,#4,cis15 mov a,#6 ;cislice 6 do ac a smaz a navrat sjmp cis99 cis15: clr a ;nula nenasel co hledal sjmp cis99 ;navrat cis20: mov a,pamell ;test klaveL jnz cis99 ;nejaky mismas pak konec mov a,pamehh ;test klaveH C987D#0* jnb mem2,cis06 ;nove cislo po stopu zarizeni mov a,#8 ;a zadej delete sjmp cis24 ;odskok na delete cis06: cjne a,#16,cis21 mov a,#7 ;cislice 7 do ac a smaz a navrat sjmp cis99 cis21: cjne a,#32,cis22 mov a,#8 ;cislice 8 do ac a smaz a navrat sjmp cis99 cis22: cjne a,#64,cis23 mov a,#9 ;cislice 9 do ac a smaz a navrat sjmp cis99 cis23: cjne a,#2,cis24 mov a,#128 ;cislice 0 jako 128 do ac a smaz a navrat sjmp cis99 cis24: cjne a,#8,cis25 mov a,#64 ;smazat D jako 64 do ac a smaz a navrat sjmp cis99 cis25: clr a ;nula nenasel co hledal sjmp cis99 cis99: jb mem2,cis00 mov pamell,#0 ;smazani pameti klavesnice mov pamehh,#0 jz cis00 setb vypip ;pipnuti mov pipip,#40 ;delka pipnuti cis00: ret ;navrat ;################################################### ;posune cislo v registrech pred3, pred2, pred1 ;a prijate cislo z AC da na pozici jednotek ;################################################### zadani: jz zad99 ;v Ac neni cislo cjne a,#64,zad10 ;je znak prikaz smaz clr mem2 ;po pouziti smaz priznak mov pred3,#0 ;pak smaz cele cislo mov pred2,#0 mov pred1,#0 ret zad10: mov r0,#pred1 ;do r0 dej adresu na dva nejnizsi rady mov r4,#3 ;do r4 dej pocet takovych dvojic radu zad11: anl a,#0fh ;maska na cislo mov r7,a ;cislo zachovej v r7 mov a,@r0 ;nacti dva nejnizsi rady swap a ;prohod digity mezi sebou mov r6,a ;uloz toto do r6 anl a,#0f0h ;maska na ted vyssi digit zbytek smaz orl a,r7 ;prvni digit dopln ulozenym novym mov @r0,a ;uloz tyto dva rady mov a,r6 ;do a vrat rady po swapu dec r0 ;ukaz na vyssi rad tedy pred2, pred3 atd djnz r4,zad11 ;zopakuj toto r4 x tedy u nas 3x zad99: ret ;################################################### ;start rozjeti a stop pohybu ;aktivace setu nabehu a sebehu ;ulozi parametry a predlohu pri prepisu pred startem ;################################################### stasto: mov c,mbeh ;nacteni predchoziho stavu mbeh mov mem1,c mov c,istart cpl c ;nacteni tlacitka start orl c,mbeh ;or samodrz od behu anl c,istop ;and tlacitko stop anl c,/muz ;and neg priznak splneni poctu pulzu mov mbeh,c ;spusteny beh mov c,mem1 ;nacteni predchoziho stavu mbeh cpl c ;negace anl c,mbeh ;and mbeh jnc sta10 ;nebylli nabeh obskoc jb mem2,sta05 ;nebylli prepis predlohy obskoc acall predpis ;zmenu zadani uloz i s parametry sta05: setb mup ;nastav nabeh clr mdown mov a,dpuls ;nacti hodnotu pulsu jnz sta10 ;nenili nulovy tak nic jen obskoc mov dpuls,par4 ;uroven pro skokovy rozbeh sta10: mov c,mem1 ;nacteni predchoziho stavu beh anl c,/mbeh ;and ve stopu jnc sta20 ;nebylli sebeh obskoc setb mdown ;nastav sebeh setb mem2 ;bit pro prepis klavesnice clr mup sta20: ret ;################################################### ;cita pulsy zachycene do pomocneho registru v preruseni int1 ;################################################### citac: clr a ;smaz ac clr ex1 ;zakaz citani pulsu xch a,pocita ;smaz citac v preruseni a stahni napocitane setb ex1 ;uvolni dalsi citani add a,poc1 da a mov poc1,a mov a,poc2 addc a,#0 da a mov poc2,a mov a,poc3 addc a,#0 da a mov poc3,a ret ;################################################### ;zmeni do bytu pro zobrazeni nuly vlevo od cisla na mezery ;zadej nejvyssi byte zdroje a nejvyssi byte obrazu ;cislo v bytech je v BCDbcd ;v obrazovych bytech je tma urcena cislem v bcd nad 9 ;################################################### zbobrp: mov r0,#pred3 ;smerovani na nejvyssi byte zdroje mov r1,#obrp3 ;smerovani na nejvyssi rad obrazu mov r4,#3 ;delka cisla v ulozenych bytech sjmp zby10 zbobrc: mov r0,#poc3 ;smerovani na nejvyssi byte zdroje mov r1,#obrc3 ;smerovani na nejvyssi rad obrazu mov r4,#3 ;delka cisla v ulozenych bytech sjmp zby10 zby10: mov a,@r0 ;nacti zdrojove cislo BCDbcd jnz zby20 ;jeli nenulove skoc mov @r1,#0ffh ;jeli i BCD i bcd nula, pak zbytecne nuly FFh inc r1 ;zvetsi adresaci o jednu inc r0 djnz r4,zby10 ;smycka opakovani do uprav zbytecnych nul dec r1 ;adresaci obrazu o jednu zpet na konec obrazu mov @r1,#0f0h ;na konci je nula ret ;navrat zby20: mov @r1,a ;uloz cele do obrazu anl a,#0f0h ;testuj horni digit BCD jnz zby60 ;tady uz je cislo, konec redukce cisla mov a,#0f0h ;tady je jeste zbytecna nula, zmen na F0h orl a,@r1 ;spoj log. souctem F0h s BCDbcd cislem obrazu mov @r1,a ;uloz upravenou cast obrazu BCD na FXh djnz r4,zby50 ;smycka opakovani do pouheho kopirovani ret zby50: inc r1 ;zvetsi adresaci o jednu inc r0 zby60: mov a,@r0 ;nacti zdrojove cislo BCDbcd mov @r1,a ;uloz cislo nezmenene do obrazu djnz r4,zby50 ;smycka opakovani kopirovani ret ;################################################### ;zobrazuje cisla a texty na lcd panel ;################################################### panel: mov r1,#09h ;pozice lcd set1 mov r4,#6 ;pocet cislic mov R0,#obrp3 ;z jaké paměti lcall hmnprint mov r1,#49h ;pozice lcd set1 mov r4,#6 ;pocet cislic mov R0,#obrc3 ;z jaké paměti lcall hmnprint ret testy: mov r1,#40h ;pozice lcd set1 mov r4,#16 ;pocet cislic mov R0,#par1 ;z jaké paměti lcall hmnprint ret ;################################################### ;pocet zbyvajicich pulsu ;################################################### porovna: clr c ;doplnek cisla BCDbcd mov a,#99h subb a,poc1 mov r2,a clr c mov a,#99h subb a,poc2 mov r3,a clr c mov a,#99h subb a,poc3 mov r4,a mov a,r2 ;doplnek +1 add a,#1 da a mov r2,a mov a,r3 addc a,#0 da a mov r3,a mov a,r4 addc a,#0 da a mov r4,a mov a,r2 ;predvolba minus pocet nacitaneho v BCDbcd add a,pred1 da a mov r2,a mov a,r3 addc a,pred2 da a mov r3,a mov a,r4 addc a,pred3 da a mov r4,a jz po70 ;obskok pri vysledku nula na nejvyssim radu jnc po80 ;preteceni, okamzite stop po70: mov a,r3 orl a,r4 jnz po90 ;jeste zbyva dost mov a,r2 jz po80 ;presne natoceno clr c subb a,par7 jnc po90 ;jeste ne pod 10 setb mpom ;pod 10 pak zpomal clr muz mov a,r2 ;do AC zbyva dojet ret po80: setb muz clr mpom ret po90: clr mpom clr muz ret ;################################################### ;################################################### ;################################################### ;################################################### ;############################################## parobr: mov dptr,#tabulpa Tisk parametr obrazovky sjmp ob00 ;############################################## pulsobr: mov dptr,#tabulro Tisk zakladni obrazovky ob00: 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 ;############################### 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 ;############################################## ;_______________________________________________________ tabulro: db ' VOLBA: ' ;1.radek db '................' db '........' db ' CITAC: ' ;2.radek db '................' db '........' ;_______________________________________________________ tabulpa: db 'U.S.D.T.X.M.D.K.' ;1.radek db '................' db '........' db ' ' ;2.radek db '................' db '........' retez1: db 'START ' retez2: db 'STOP ' ;####################################################### ;##################################################### ;#################################################### 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 ;nacist znak jb F0,zobr1 ;ukazatel na dolni digit swap a ;prohodit digity zobr1: anl a,#00001111b ;vybrat dolni digit add a,#6 ;pricti 6 jnb 0e4h,zobr4 ;neni li bit s vahou 16 skoc jnb mpar,zobr5 obskok hexa add a,#7 ;vyssi nez cislo, uprav na ABCDEF 41h sjmp zobr4 zobr5: mov a,#0f6h ;nebo mezera zobr4: add a,#2ah ;asci cislo pro lcd 6 a 2A je 30h 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