DS18B20温度控制数码管显示(汇编非常详细)_第1页
DS18B20温度控制数码管显示(汇编非常详细)_第2页
DS18B20温度控制数码管显示(汇编非常详细)_第3页
DS18B20温度控制数码管显示(汇编非常详细)_第4页
DS18B20温度控制数码管显示(汇编非常详细)_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、DS18B20温度控制数码管显示(汇编非常详细)*1、P1.6=f进入设定温度报警值TL状态:*2、P1.6f进入设定温度报警值TH状态:L20H283、P1.6f返回4、设定过程:P1.4匐口键(UP)P1.5f键(DOWN),可快速调。*TIMER_LDATA23HTIMER_HDATA24HTIMER_COUNDATA25HTEMPLDATA26HTEMPHDATA27HTEMP_THDATA28HTEMP_TLDATA29HTEMPHCDATA2AHTEMPLCDATA2BHTEMP_ZHDATA2CHBEEPEQUP3.7DATA_LINEEQUP3.3RELAYEQUP1.3FLA

2、G1EQU20H.0FLAG2EQU20H.1K1EQUP1.4K2EQUP1.5K3EQUP1.6K4EQUP1.7ORG0000HJMPMAINORG000BHAJMPINT_T0;MAIN:MOVSP,#30HMOVTMOD,#01H;T0,方式1MOVTIMER_L,#00H;50ms定时值MOVTIMER_H,#4CHMOVTIMER_COUN,#00H;中断计数MOVIE,#82HLCALLREAD_E2;LCALLRE_18B20MOV20H,#00HSETBBEEPSETBRELAYMOV7FH,#0AHCALLRESETJNBFLAG1,MAIN1JMPSTARTMAIN1:

3、CALLRESETJBFLAG1,STARTLCALLBEEP_BLJMPMAIN1START:MOVA,#0CCHCALLWRITEMOVA,#044HCALLWRITECALLRESETMOVA,#0CCHCALLWRITEMOVA,#0BEHCALLWRITECALLREADCALLCONVTEMPCALLDISPBCDCALLDISP1CALLSCANKEY;EA=1,ET0=1;熄灭符;复位与检测DS18B20;FLAG1=0,DS18B20不存在;DS18B20错误,报警;跳过ROM匹配发出温度转换命令;跳过ROM匹配;发出读温度命令;读温度数据LCALLTEMP_COMPJMPM

4、AIN1J;DS18B20复位与检测子程序;FLAG1=1OK,FLAG1=0ERROR;RESET:SETBDATA_LINENOPCLRDATA_LINEMOVR0,#64H;主机发出延时600微秒的复位低脉冲RESET1:MOVR1,#03HDJNZR0,$MOVR0,#64HDJNZR1,RESET1SETBDATA_LINE;然后拉高数据线RESET2:NOPMOVR0,#25HJNBDATA_LINE,RESET3;等待DS18B20回应DJNZR0,RESET2JMPRESET4;延时RESET3:SETBFLAG1;置标志位,表示DS1820存在RESET4:JMPRESET5

5、CLRFLAG1;涓标志位,表小DS1820/、存在RESET5:JMPRESET6MOVR0,#064HDJNZR0,$;时序要求延时一段时间RESET6:SETBDATA_LINERETJ;=WRITE:MOVR2,#8;一共8位数据CLRCYWR1:CLRDATA_LINE;开始写入DS18B20总线要处于复位(低)状态MOVR3,#09DJNZR3,$;总线复位保去芋18微妙以上RRCA;把一个字节DATA分成8个BIT环移给CMOVDATA_LINE,C;写入一个BITMOVR3,#23DJNZR3,$;等待46微妙SETBDATA_LINE;重新释放总线NOPDJNZR2,WR1;

6、写入下一个BITSETBDATA_LINERET尸=;ADS18B20中读出温度低位、高位和报警值TH、TL;存入26H、27H、28H、29H;READ:MOVR4,#4MOVR1,#26H;将温度高位和低位从;存入26H、27H、28HDS18B20中读出、29HRE00:RE01:MOVR2,#8CLRCSETBDATA_LINENOPNOPCLRDATA_LINE;读前总线保持为低NOPNOPNOPSETBDATA_LINE;开始读总线释放MOVR3,#09;延时18微妙DJNZR3,$MOVC,DATA_LINE;从DS18B20总线读得一一个BITMOVR3,#23DJNZR3,$

7、;等待46微妙RRCA;把读得的位值环移给ADJNZR2,RE01;读卜一个BITMOVR1,AINCR1DJNZR4,RE00RETJ;200ms对闪动标记取反一次JINT_T0:PUSHACCPUSHPSWMOVTL0,TIMER_LMOVTH0,TIMER_HINCTIMER_COUNMOVA,TIMER_COUNCJNEA,#04H,INT_ENDMOVTIMER_COUN,#00HCPLFLAG2INTEND:POPPSWPOPACCRETI;重新对DS18B20初始化;将设定的温度报警值写入DS18B20尸=RE_18B20:JBFLAG1,RE_18B20ARETRE_18B20

8、A:CALLMOVRESETA,#0CCH;跳过ROM匹配LCALLWRITEMOVA,#4EH;写暂存寄存器LCALLWRITEMOVA,TEMP_TH;TH(报警上限)LCALLWRITEMOVA,TEMP_TL;TL(报警下限)LCALLWRITEMOVA,#7FH;12位精确度LCALLWRITERET;=;功能键扫描子程序;=SCANKEY:SCAN_K1:MOVP1,#0F0HJBK1,SCAN_K2CALLBEEP_BLCALLALERT_TLSCAN_K11:CALLALERT_PLAYJBK1,SCAN_K1CALLBEEP_BLCALLALERT_THSCAN_K2:CAL

9、LALERT_PLAYJBK1,SCAN_K11CALLBEEP_BLJBK2,SCAN_K3SCAN_K3:CALLBEEP_BLJBK3,SCAN_K4CALLBEEPBLLCALLRESET_ALERTLCALLRE_18B20LCALLWRITE_E2SCAN_K4:JBK4,SCAN_ENDCALLBEEP_BLSCAN_END:RETJ;设置温度报警值尸=RESET_ALERT:CALLALERT_TLCALLALERT_PLAYJNBK3,$;K3为位移键SETBTR0RESET_TL:CALLALERT_PLAYJNBFLAG2,R_TL01mov75H,7m;送入熄灭符mov

10、76H,7mCALLALERT_PLAYJMPR_TL02R_TL01:CALLALERT_TLmov75h,7Eh;送设定值mov76h,7DhCALLALERT_PLAY;显示设定值R_TL02:JNBK1,K011AJNBK2,K011BJNBK3,RESET_THJMPRESET_TLK011A:INCTEMP_TLMOVA,TEMP_TLCJNEA,#120,K012A;没有到设定上限值,转MOVTEMP_TL,#0K012A:CALLTL_DELJMPRESET_TLK011B:DECTEMP_TLMOVA,TEMP_TLCJNEA,#00H,K012B;没有到设5限值,转MOVT

11、EMP_TL,#119K012B:CALLTL_DELJMPRESET_TLJRESET_TH:CALLBEEP_BLJNBK3,$RESET_TH1:CALLALERT_PLAYJNBFLAG2,R_TH01mov75H,7fh;送入熄灭符mov76H,7mCALLALERT_PLAYJMPR_TH02R_TH01:CALLALERT_THmov75h,7Eh;mov76h,7DhCALLALERT_PLAYR_TH02:JNBK1,K021AJNBK2,K021BJNBK3,K002JMPRESET_TH1K021A:INCTEMP_THMOVA,TEMP_THCJNEA,#120,K02

12、2A;没有到设定上限值,转MOVTEMP_TH,#0K022A:CALLTH_DELJMPRESET_TH1K021B:DECTEMP_TH;减1MOVA,TEMP_THCJNEA,#00H,K022B;没有到设5限值,转MOVTEMP_TH,#119K022B:CALLTH_DELJMPRESET_TH1K002:CALLBEEP_BLCLRTR0;关闭中断RETJ;键延时子程序;多次调用报警值显示程序来延时;TL_DEL:;报警低值延时MOVR2,#0AHTL_DEL1:CALLALERT_TLCALLALERT_PLAYDJNZR2,TL_DEL1RETTH_DEL:;报警高值延时MOV

13、R2,#0AHTH_DEL1:CALLALERT_THCALLALERT_PLAYDJNZR2,TH_DEL1RET实时温度值与设定报警温度值TH、TL比较子程序当实际温度大于当实际温度小于TH的设定值时,显示TH的设定值时,显示“H;继电器关闭。“O;继电器吸合。当实际温度小于TL的设定值时,显示“L:闪动显示标记符H、L、OTEMP_COMP:SETBTR0;启动中断MOVA,TEMP_THSUBBA,TEMP_ZH;减数被减数,则JCCHULI1;借位标志位C=1,转MOVA,TEMP_ZHSUBBA,TEMP_TL;减数被减数,则JCCHULI2;借位标志位C=1,转JNBFLAG2,

14、T_COMP1;FLAG2=0,显示标记字符MOV74H,#0AH;熄灭符LCALLDISP1JMPT_COMP2T_COMP1:MOV74H,#00HLCALLDISP1;显示"O"T_COMP2:CLRRELAY;继电器吸合CLRTR0;关闭中断RET;超温处理;CHULI1:SETBRELAY;继电器关闭JNBFLAG2,CHULI10MOV74H,#0AH;熄灭符LCALLDISP1JMPCHULI11CHULI10:MOV74H,#0DHLCALLDISP1;显示"H"CALLBEEP_BL;蜂鸣器响CHULI11:CLRTR0;关闭中断RET

15、;欠温处理;CHULI2:;欠温处理JNBFLAG2,CHULI20MOV74H,#0AH;熄灭符LCALLDISP1JMPCHULI21CHULI20:MOV74H,#0CHLCALLDISP1;显示"L"CALLBEEP_BL;蜂鸣器响CHULI21:CLRTR0;关闭中断RET;把DS18B20暂存器里的温度报警值拷贝到EEROMJWRITE_E2:CALLRESETMOVA,#0CCH;跳过ROM匹配LCALLWRITEMOVA,#48H;温度报警值拷贝到EEROMLCALLWRITERETJ;把DS18B20EEROM里的温度报警值拷贝回暂存器;READ_E2:C

16、ALLRESETMOVA,#0CCH;跳过ROM匹配LCALLWRITEMOVA,#0B8H;温度报警值拷贝回暂存器CALLWRITERET.*;处理温度BCD码子程序.*;CONVTEMP:MOVA,TEMPH;判温度是否零下ANLA,#80HJZTEMPC1;温度零上转CLRCMOVA,TEMPL;一进制数求补(双字节)CPLA;取反加1ADDA,#01HMOVTEMPL,AMOVA,TEMPH;一CPLAADDCA,#00HMOVTEMPH,A;TEMPHCHI=符号位MOVTEMPHC,#0BHSJMPTEMPC11TEMPC1:MOVTEMPHC,#0AH;TEMPC11:MOVA,

17、TEMPHCSWAPAMOVTEMPHC,AMOVA,TEMPLANLA,#0FH乘0.0625MOVDPTR,#TEMPDOTTABMOVCA,A+DPTRMOVTEMPLC,A;TEMPLCLOW=小数部分BCDMOVA,TEMPL;整数部分ANLA,#0F0HSWAPAMOVTEMPL,AMOVA,TEMPHANLA,#0FHSWAPAORLA,TEMPLMOVTEMP_ZH,A;组合后的脸入TEMP_ZHLCALLHEX2BCD1MOVTEMPL,AANLA,#0F0HSWAPAORLA,TEMPHC;TEMPHCLOW=十位数BCDMOVTEMPHC,AMOVA,TEMPLANLA,

18、#0FHSWAPA;TEMPLCHI=个位数BCDORLA,TEMPLCMOVTEMPLC,AMOVA,R7BCDJZTEMPC12ANLA,#0FHSWAPAMOVR7,AMOVA,TEMPHC;TEMPHCHI=百位数ANLA,#0FHORLA,R7MOVTEMPHC,ATEMPC12:RET;小数部分码表;TEMPDOTTAB:DB00H,01H,01H,02H,03H,03H,04H,04H,05H,06HDB06H,07H,08H,08H,09H,09HJ;显示区BCD码温度值刷新子程序JDISPBCD:MOVA,TEMPLCANLA,#0FHMOV70H,A;小数位MOVA,TEM

19、PLCSWAPAANLA,#0FHMOV71H,A;个位MOVA,TEMPHCANLA,#0FHMOV72H,A;十位MOVA,TEMPHCSWAPAANLA,#0FHMOV73H,A;百位MOVA,TEMPHCANLA,#0F0HCJNEA,#010H,DISPBCD0SJMPDISPBCD2DISPBCD0:MOVA,TEMPHCANLA,#0FHJNZDISPBCD2;十位数是0MOVA,TEMPHCSWAPAANLA,#0FHMOV73H,#0AH;符号位不显示MOV72H,A;十位数显示符号DISPBCD2:RET;*;温度显示子程序;*;显示数据在70H73H单元内,用4位共阳数码

20、管显示,P0口输出段码数据,;P2口作扫描控制,每个LED数码管亮2MS时间再逐位循环。DISP1:MOVR1,#70H;指向显示数据首址;扫描控制字初值MOVR5,#7FHPLAY:MOVP0,#0FFHMOVA,R5MOVP2,A;扫描字放入AMOVA,R1;取显示数据到AMOVDPTR,#TAB;取段码表地址MOVCA,A+DPTR;查显示数据对应段码MOVP0,AMOVA,R5;段码放入P0口JBACC.6,LOOP5CLRP0.7;小数点处理LOOP5:LCALLDL_MS;显示2MSINCR1;指向卜一个地址MOVA,R5;放回R5内JNBACC.3,ENDOUT;ACC.3=0时

21、一次显示结束RRA;A中数据循环左移MOVR5,A;放入R5中AJMPPLAY;跳回PLAY循环ENDOUT:MOVP0,#0FFH;一次显布结束,P0口复位MOVP2,#0FFHRET;P2口复位TAB:DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH,0BFH,0C7H,89H;“0"“I”"2""3""4""5""6"""7""包""9"H"DL_

22、MS:MOVR6,#0AH;2MS延时程序,LED显示程序用DL1:MOVR7,#64HDL2:DJNZR7,DL2DJNZR6,DL1RET.*;;单字节十六进制转BCD*HEX2BCD1:MOVB,#064HDIVABMOVR7,AMOVA,#0AHXCHA,BDIVABSWAPAORLA,BRET;报警值TH、TL数据转换;ALERT_TL:ALERT_TL1:MOV79H,#0CHMOV78H,#0BHMOVA,TEMP_TLMOVR0,#77HMOVB,#064HDIVABCJNEA,#01H,ALERT_TL1MOVR0,AJMPALERT_TL2MOVA,#0BH;显示ALERT_TL2:MOVR0,AMOVA,#0AHXCHA,BDIVABDECR0MOVR0,AMOV7DH,ADECR0MOVR0,BMOV7EH,BRET;ALERT_TH:MOV79H,#0DHMOV78H,#0BHMOVA,TEMP_THALERTALERT_TH1:_TH2:MOVR0,#77HMOVB,#064HDI

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论