cpu=8031 Data: text ' DS1621 -',00 Data: text1 ' Programmer',00 Data: chiptest ' Chip Testing !',00 Data: chipok ' Chip << OK >> ',00 Data: chiperr ' Chip <> ',00 Data: menuet ' - M E N U E -',00 Data: thregister ' TH - Register ',00 Data: tlregister ' TL - Register ',00 Data: thermo ' Thermometer ',00 Data: config 'Output Polarity ',00 Data: tempt ' Temp :+000.0°C',00 Data: minmax '-000.0 +000.0 --',00 Data: bit ' Output = ',00 Data : nohysterese '--',0 Data: lowbatt ' - Low Batt. - ',00 Data: newbatt 'insert new batt.',00 Data: makereset ' push -ENTER-! ',00 LD=P1.7 LB=P1.6 EN=P1.5 RS=P1.4 TU=P3.3 TD=P3.4 TM=P3.7 TE=P3.5 SDA = P3.1 SCL = P3.0 CIN = P3.2 org 00 ;reset ljmp main org 80 main: clr EA mov SP,#4f mov P1,#ffh mov P3,#ffh mov 20,#00h mov r6,#ffh acall wait clr RS clr EN mov r6,#52h acall wait mov r3,#03h init: setb EN mov a,P1 anl a,#f0h orl a,#03h mov P1,a clr EN mov r6,#02h acall wait djnz r3,init setb EN mov a,P1 anl a,#f0h orl a,#02h mov P1,a clr EN mov r6,#02h acall wait mov r0,#28h acall bschr mov r0,#0ch acall bschr mov r0,#06h acall bschr main0: acall clr setb LB jnb LB,main1 jmp batterror main1: mov DPTR,#tx1 call tabtext mov r0,#c0h acall bschr mov DPTR,#tx2 call tabtext mov r3,#0ah main01: acall twait djnz r3,main01 acall clr mov dptr,#chiptest acall tabtext mov r3,#a1h acall bigread mov 2b,2f mov 2a,2e mov r3,#a2h acall bigread mov 29,2f mov 28,2e mov r3,#ach acall smallread mov a,2f anl a,#feh mov 27,a mov r3,a acall writeconfig mov r3,#eeh acall smallwrite mov r1,#50h main2: mov r6,#ffh acall wait djnz r1,main2 mov r3,#aah acall bigread mov r0,#c0h acall bschr mov DPTR,#chipok call tabtext acall twait acall twait acall twait acall twait menue: mov r3,#eeh acall smallwrite setb LD setb LB jnb LB,menue0 jmp batterror menue0: acall clr mov dptr,#menuet acall tabtext menue1: jnb TM,menue1 acall twait mov r0,#c0h acall bschr mov DPTR,#thermo call tabtext menue11: jb TE,menue12 ljmp mess menue12: jb TM,menue11 menue2: jnb TM,menue2 acall twait mov r0,#c0h acall bschr mov DPTR,#thregister call tabtext menue21: jnb TE,menue22 jb TM,menue21 jmp menue3 menue22: mov 26,2b mov 25,2a mov r3,#ach acall smallread mov a,2f anl a,#40h add a,#ffh mov 02,c acall twait mov DPTR,#thregister acall registerchange mov 2b,26 mov 2a,25 mov r3,#a1 acall writethl jnb 03,menue23 mov a,27 anl a,#9e mov r3,a acall writeconfig menue23: jmp menue menue3: jnb TM,menue3 acall twait mov r0,#c0h acall bschr mov DPTR,#tlregister call tabtext menue31: jnb TE,menue32 jb TM,menue31 jmp menue4 menue32: mov 26,29 mov 25,28 mov r3,#ach acall smallread mov a,2f anl a,#20h add a,#ffh mov 02,c acall twait mov DPTR,#tlregister acall registerchange mov 29,26 mov 28,25 mov r3,#a2 acall writethl jnb 03,menue33 mov a,27 anl a,#9e mov r3,a acall writeconfig menue33: jmp menue menue4: jnb TM,menue4 acall twait mov r0,#c0h acall bschr mov DPTR,#config call tabtext menue41: jnb TE,menue42 jb TM,menue41 jmp menue1 menue42: jmp output twait: mov r7,#02h mov r6,#ffh mov r5,#ffh jmp twait1 twait0: mov r7,#01h mov r6,#7fh mov r5,#ffh twait1: djnz r5,twait1 djnz r6,twait1 djnz r7,twait1 ret end mess: mov 24,#c9h ;max h mov 23,#00h ;max l mov 22,#7dh ;min h mov 21,#00h ;min l acall clr mov DPTR,#tempt acall tabtext mov r0,#8dh acall bschr mov r0,#dfh acall dschr mov r0,#c0h acall bschr mov DPTR,#minmax acall tabtext acall twait mess1: setb LB jnb LB,mess011 jmp batterror mess011: mov r3,#ach acall smallread mov a,2f anl a,#80h jb TE,mess01 jmp mess2 mess01: jnz mess1 mov c,CIN cpl c mov LD,c mov r3,#aah acall bigread mov 2d,2f mov 2c,2e mov r0,#87h acall bschr acall ascii max: mov a,2d rlc a jnc max0 mov a,24 rlc a jc max01 jmp min max0: mov a,24 rlc a jnc max01 mov 24,2d mov 23,2c jmp max3 max01: mov a,2d cjne a,24,max1 mov a,2c cjne a,23,max1 jmp min max1: jnc max2 jmp min max2: mov 24,2d mov 23,2c mov 2f,24 mov 2e,23 max3: mov r0,#c7h acall bschr acall ascii min: mov a,2d rlc a jc min0 mov a,22 rlc a jnc min01 jmp hysterese min0: mov a,22 rlc a jc min01 mov 22,2d mov 21,2c jmp min2 min01: mov a,22 cjne a,2d,min1 mov a,21 cjne a,2c,min1 jmp hysterese min1: jnc min2 jmp hysterese min2: mov 22,2d mov 21,2c mov 2f,22 mov 2e,21 min3: mov r0,#c0h acall bschr acall ascii hysterese: mov a,2b rlc a jnc hysterese_h1 mov a,2d rlc a jc hysterese_h2 jmp hysterese_h3 hysterese_h1: mov a,2d rlc a jnc hysterese_h2 jmp hysterese_l hysterese_h2: mov a,2d cjne a,2b,hysterese_h21 mov a,2c cjne a,2a,hysterese_h21 jmp hysterese_h3 hysterese_h21: jnc hysterese_h3 jmp hysterese_l hysterese_h3: mov DPTR,#thregister mov r0,#cd acall bschr acall tabtext jmp mess1 hysterese_l: mov a,29 rlc a jnc hysterese_l1 mov a,2d rlc a jc hysterese_l2 jmp hysterese_no hysterese_l1: mov a,2d rlc a jnc hysterese_l2 jmp hysterese_l3 hysterese_l2: mov a,29 cjne a,2d,hysterese_l21 mov a,28 cjne a,2c,hysterese_l21 jmp hysterese_l3 hysterese_l21: jnc hysterese_l3 jmp hysterese_no hysterese_l3: mov DPTR,#tlregister mov r0,#cd acall bschr acall tabtext jmp mess1 hysterese_no: mov DPTR,#nohysterese mov r0,#ce acall bschr acall tabtext jmp mess1 mess2: acall twait jmp menue output: acall clr mov DPTR,#config call tabtext mov r0,#c0 acall bschr mov DPTR,#bit call tabtext acall twait output0: mov r0,#cc acall bschr mov a,27 anl a,#02 jz output1 mov r0,#31 acall dschr jmp output2 output1: mov r0,#30 acall dschr output2: jnb TU,output3 jnb TD,output3 jnb TE,output4 jmp output2 output3: mov a,27 xrl a,#02 mov 27,a acall twait jmp output0 output4: mov r3,27 acall writeconfig acall twait jmp menue registerchange: acall clr acall tabtext mov r0,#c0 acall bschr mov DPTR,#tempt acall tabtext mov r0,#cdh acall bschr mov r0,#dfh acall dschr jnb 02,registerchange0 mov r0,#8fh acall bschr mov r0,#21h acall dschr clr 02 registerchange0: mov r0,#c7h acall bschr mov 2f,26 mov 2e,25 acall ascii acall twait0 registerchange1: jnb TD,registerchange2 jnb TU,registerchange4 jnb TE,registerchange10 jmp registerchange1 registerchange10: ret registerchange2: mov a,26 xrl a,#c9 jnz registerchange20 mov a,25 jnz registerchange20 jmp registerchange1 registerchange20: setb 03 clr LD mov r0,#8fh acall bschr mov r0,#20h acall dschr mov a,26 mov b,25 add a,b jz registerchange_null mov a,26 anl a,#80h jnz registerchange3 mov a,25 jz registerchange21 mov 25,#00h jmp registerchange0 registerchange21: dec 26 mov 25,#80h jmp registerchange0 registerchange_null: mov 26,#ff mov 25,#80h jmp registerchange0 registerchange3: mov a,25 jz registerchange31 mov 25,#00h jmp registerchange0 registerchange31: mov 25,#80 dec 26 jmp registerchange0 registerchange4: mov a,26 xrl a,#7d jnz registerchange401 mov a,25 jnz registerchange401 jmp registerchange1 registerchange401: setb 03 clr LD mov r0,#8fh acall bschr mov r0,#20h acall dschr mov a,26 anl a,#80h jnz registerchange5 mov a,25 jz registerchange40 mov 25,#00h inc 26 jmp registerchange0 registerchange40: mov 25,#80h ljmp registerchange0 registerchange_null1: mov 26,#ff mov 25,#80h ljmp registerchange0 registerchange5: mov a,25 jz registerchange51 mov 25,#00h inc 26 ljmp registerchange0 registerchange51: mov 25,#80 ljmp registerchange0 wait: mov r7,#18h wait1: djnz r7,wait1 nop nop djnz r6,wait ret bschr: clr RS setb EN mov a,p1 anl a,#f0h mov r1,a mov a,r0 swap a anl a,#00001111 orl a,r1 mov p1,a clr EN setb EN mov a,r0 anl a,#00001111 orl a,r1 mov p1,a clr EN mov r6,#02h acall wait ret dschr: setb RS setb EN mov a,p1 anl a,#f0h mov r1,a mov a,r0 swap a anl a,#0fh orl a,r1 mov p1,a clr EN mov a,r0 anl a,#0fh orl a,r1 mov p1,a clr EN mov r6,#02h acall wait ret clr: mov r0,#01h acall bschr mov r6,#22h acall wait ret tabtext: clr a movc a,@a+DPTR tabtext1: mov r0,a acall dschr inc DPTR clr a movc a,@a+DPTR jnz tabtext1 ret start: setb sda nop nop setb scl nop nop clr SDA nop nop clr SCL ret stop: setb SCL nop nop setb SDA ret write: mov r1,#08h clr c mov a,r0 write1: rlc a jc write2 clr SDA jmp write3 write2: setb SDA write3: nop setb SCL nop nop clr SCL djnz r1,write1 setb sda ret ackread: clr 00h mov r1,#14h setb scl ack1: jnb sda,ack2 djnz r1,ack1 setb 00h ack2: clr scl ret read: mov r1,#08h clr c clr a read1: setb scl nop nop mov c,sda clr scl nop nop rlc a djnz r1,read1 mov r0,a setb sda ret masterack: clr sda nop nop setb scl nop nop clr scl nop nop setb sda ret masternack: setb sda nop nop setb scl nop nop clr scl nop nop setb sda ret smallwrite: acall start mov r0,#90 acall write acall ackread jnb 00,small1 jmp error small1: mov a,r3 mov r0,a acall write acall ackread jnb 00,small2 jmp error small2: acall stop ret writeconfig: clr 03 acall start mov r0,#90 acall write acall ackread jnb 00,config1 jmp error config1: mov r0,#ac acall write acall ackread jnb 00,config2 jmp error config2: mov a,r3 mov r0,a acall write acall ackread jnb 00,config3 jmp error config3: acall stop ret writethl: acall start mov r0,#90 acall write acall ackread jnb 00,writethl1 jmp error writethl1: mov a,r3 mov r0,a acall write acall ackread jnb 00,writethl2 jmp error writethl2: mov a,26 mov r0,a acall write acall ackread jnb 00,writethl3 jmp error writethl3: mov a,25 mov r0,a acall write acall ackread jnb 00,writethl4 jmp error writethl4: acall stop ret smallread: mov 2f,#00h mov 2e,#00h acall start mov r0,#90 acall write acall ackread jnb 00,smallr1 jmp error smallr1: mov a,r3 mov r0,a acall write acall ackread jnb 00,smallr2 jmp error smallr2: acall start mov r0,#91h acall write acall ackread jnb 00,smallr3 jmp error smallr3: acall read mov 2f,r0 acall masternack acall stop ret bigread: mov 2f,#00h mov 2e,#00h acall start mov r0,#90 acall write acall ackread jnb 00,big1 jmp error big1: mov a,r3 mov r0,a acall write acall ackread jnb 00,big2 jmp error big2: acall start mov r0,#91h acall write acall ackread jnb 00,big3 jmp error big3: acall read mov 2f,r0 acall masterack acall read mov 2e,r0 acall masternack acall stop ret ascii: mov a,2fh anl a,#80h jz ascii1 mov a,2fh clr c subb a,#01h cpl a mov 2f,a setb 01h mov r0,#2dh acall dschr jmp ascii2 ascii1: clr 01h mov r0,#2b acall dschr ascii2: mov r3,2fh mov a,r3 mov b,#64h div ab add a,#30h mov r0,a mov r3,b acall dschr mov a,r3 mov b,#0ah div ab add a,#30h mov r0,a mov r3,b acall dschr jnb 01h,ascii3 mov a,2e jz ascii3 mov a,r3 jz ascii3 dec r3 ascii3: mov a,r3 add a,#30h mov r0,a acall dschr mov r0,#2eh acall dschr mov a,2e rl a anl a,#01h mov b,#05h mul ab add a,#30h mov r0,a acall dschr ret batterror: acall clr mov DPTR,#lowbatt acall tabtext mov r0,#c0 acall bschr mov DPTR,#newbatt acall tabtext clr LD batt1: mov r1,#28h batt2: mov r6,#ffh acall wait djnz r1,batt2 cpl LD jmp batt1 error: acall clr mov DPTR,#chiperr call tabtext mov r0,#c0h acall bschr mov DPTR,#makereset call tabtext clr LD error1: mov r1,#28h error2: mov r6,#ffh acall wait djnz r1,error2 cpl LD jb TE,error3 jmp main error3: jmp error1 tx1: Include Data text tx2: Include Data text1 chiptest: Include Data chiptest chipok: Include Data chipok chiperr: Include Data chiperr thregister: Include Data thregister tlregister: Include Data tlregister thermo: Include Data thermo config: Include Data config menuet: Include Data menuet tempt: Include Data tempt minmax: Include Data minmax bit: Include Data bit nohysterese: Include Data nohysterese lowbatt: Include Data lowbatt newbatt: Include Data newbatt makereset: Include Data makereset