1 cyklus = 1,0850694us databit bit p1.7 ;pin,na kterem je TM led bit p1.6 ;pin,na kterem je LED dioda org 0 jmp zacatek org 30H zacatek: mov sp,#35H clr rs0 ;banka 0 clr rs1 mov scon,#01010000B ;nastaveni ser.linky+casovace1 mov tmod,#00100000B ;19200 bps,8 databit,1 stopbit,bez parity mov 87H,#10000000B ;casovac1 - mod2,serlink - mod 1 mov th1,#253 setb ea ;povoleni vsech preruseni setb et1 setb tr1 ;spusteni casovace1 start: call touchreset ;volani procedury-test pritomnosti TM jc pritomen ;pokud je TM pripojen,pokracuje rozsvicenim jmp start LED...,jinak nadale testuje pritomnost TM pritomen: clr led ;rozsviti LED clr c ;nuluje priznak pritomnosti TM setb rs0 ;banka 1 mov a,#33H ;vysle prikaz pro cteni ROM kodu call touchbyte mov a,#0FFH ;nastavi port jako prijimaci po celou dobu ;cteni call touchbyte ;v acc je family kod cjne a,#01H,nenikod ;cteni pokracuje pouze s DS1990A mov a,#0FFH ;nastavi port jako prijimaci call touchbyte ;v acc je 1.byte,1.znak-dolni pulbyte call prevod ;volani prevodu bin na ascii kod mov r0,b ;do r0 prvni znak serioveho cisla (zprava) mov r1,a ;do r1 druhy znak serioveho cisla mov a,#0FFH call touchbyte ;v acc je 2.byte call prevod mov r2,b ;do r2 treti znak mov r3,a ;do r3 ctvrty znak mov a,#0FFH call touchbyte ;v acc je 3.byte call prevod mov r4,b ;do r4 paty znak mov r5,a ;do r5 sesty znak mov a,#0FFH call touchbyte ;v acc je 4.byte call prevod mov r6,b ;do r6 sedmy znak mov r7,a ;do r7 osmy znak setb rs1 ;banka 3 mov a,#0FFH call touchbyte ;v acc je 5.byte call prevod mov r0,b ;do r0 devaty znak mov r1,a ;do r1 desaty znak mov a,#0FFH call touchbyte ;v acc je 6.byte call prevod mov r2,b ;do r2 jedenacty znak mov r3,a ;do r3 dvanacty znak mov a,#0FFH call touchbyte ;v acc je CRC clr rs1 clr rs0 ;banka 0 clr c ;nuluje priznak pritomnosti TM call vysilani ;volani procedury ser.vysilani jmp start ;test dalsiho TM nenikod: clr c ;nuluje priznak pritomnosti TM jmp start ; ;procedura touchreset vysle do TM RESET Pulse a ceka na odpoved v podobe ;Presence Pulsu od TM. Pokud je TM pritomen,nastavi C,jinak ho nuluje. ; touchreset: push b ;uchova b a acc push a mov a,#4 ;pocet opakovani smycky clr databit ;zacatek Reset Pulsu mov b,#221 ;zpozdeni 480us, po tuto dobu pridrzi pin djnz b,$ ; v nule setb databit ;pin do jednicky,konec Reset pulsu mov b,#6 ;casovy interval pro zpozdeni clr c ;nuluje priznak pritomnosti TM waitlow: jb databit,wh ;skok na wh,kdyz je pin v jednicce (tzn. po ;Reset pulsu) djnz b,waitlow ;ceka po dobu 3360us na prejiti pinu do 1 djnz a,waitlow jmp short ;pin nepresel do 1,TM neni pritomen wh: mov b,#111 ;interval 240us pro detekci Presence pulsu hl: orl c,/databit ;nastavi C,pokud se behem intervalu dostane ;pin do nuly(to je Presence puls) djnz b,hl short: pop a ;obnovi puvodni b a acc pop b ret ; ;procedura vysila obsah acc do TM a soucasne od nej prijima 1 byte opet do ;acc ; touchbyte: push b ;uchova b mov b,#8 ;pocitadlo 8 bitu smycka: rrc a ;vysilany bit do C call jedenbit ;volani-odeslani jednoho bitu djnz b,smycka ;dalsi bit k odeslani rrc a ;posledni prijaty bit do acc pop b ;obnovi b ret jedenbit: clr databit ;zacatek time slotu nop ;zpozdeni pres 4us,zajisti,aby nulu TM nop ;bezpecne zaregistrovalo(min.1us) nop nop mov databit,c ;vysle bit do TM nop ;zpozdeni 6,5us pred ctenim bitu z TM nop ;aby se dodrzel interval 15us pro precteni nop ;spravne hodnoty nop nop nop mov c,databit ;precte bit z TM (min.15us po zacatku time ;slotu) push b ;uchova b mov b,#12H ;zpozdeni 41us do konce time slotu djnz b,$ ;celkem tedy neco pres 60us(time slot) pop b ;obnovi b setb databit ;konec time slotu ret ; ; vysilani: setb rs0 ;banka 3 setb rs1 clr ti ;nuluje priznak prazdneho vysilaciho registru mov sbuf,r3 ;vyslat r3 - dvanacty znak ser.cisla jnb ti,$ ;ceka,dokud se korektne neodvysila clr ti ;nuluje priznak odvysilaneho bytu mov sbuf,r2 jnb ti,$ clr ti mov sbuf,r1 jnb ti,$ clr ti mov sbuf,r0 jnb ti,$ clr ti clr rs1 clr ti mov sbuf,r7 jnb ti,$ clr ti mov sbuf,r6 jnb ti,$ clr ti mov sbuf,r5 jnb ti,$ clr ti mov sbuf,r4 jnb ti,$ clr ti mov sbuf,r3 jnb ti,$ clr ti mov sbuf,r2 jnb ti,$ clr ti mov sbuf,r1 jnb ti,$ clr ti mov sbuf,r0 ;vysle r0 - prvni znak ser.cisla jnb ti,$ clr ti clr rs0 ;banka 0 clr rs1 ;zpozdeni pro zpozdene zhasnuti LED priblizne 280ms mov r0,#255 ;konstanty zpozdeni nic2: mov r1,#255 nic1: nop djnz r1,nic1 ;vnorene smycky djnz r0,nic2 setb led ;zhasne LED ret ;v acc je horni pulbyte,v b je dolni pulbyte ;prevod binarniho cisla v acc na ASCII znak do acc (puvod - www.8052.com) prevod: mov b,a ;kopie acc do b anl a,#00fh ;maska,ponecha pouze dolni pulbyte add a,#090h ;pricte 144 da a ;dekadicka korekce addc a,#040h ;pricte 64 da a ;dekadicka korekce xch a,b ;prohodi a<>b swap a ;prohodi dolni a horni pulbyte acc anl a,#00fh add a,#090h da a addc a,#040h da a ret end