您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 基于51单片机――Ds18B20温度采集LCD显示汇编程序
TEMP_ZHEQU24H;实测温度值存放单元TEMPLEQU25HTEMPHEQU26HTEMP_THEQU27H;高温报警值存放单元TEMP_TLEQU28H;低温报警值存放单元TEMPHCEQU29H;正、负温度值标记TEMPLCEQU2AHTEMPFCEQU2BHK1EQUP1.4;查询按键K2EQUP1.5;设置/调整键K3EQUP1.6;调整键K4EQUP1.7;确定键BEEPEQUP3.7;蜂鸣器RELAYEQUP1.3;指示灯LCD_XEQU2FH;LCD字符显示位置LCD_RSEQUP2.0;LCD寄存器选择信号LCD_RWEQUP2.1;LCD读写信号LCD_ENEQUP2.2;LCD允许信号FLAG1EQU20H.0;DS18B20是否存在标志KEY_UDEQU20H.1;设定按键的增、减标志DQEQUP3.3;DS18B20数据信号ORG0000HLJMPMAINORG0030HMAIN:MOVSP,#60HMOVA,#00HMOVR0,#20H;将20H~2FH单元清零MOVR1,#10HCLEAR:MOV@R0,AINCR0DJNZR1,CLEARLCALLSET_LCDLCALLRE_18B20START:LCALLRST;调用18B20复位子程序JNBFLAG1,START1;DS1820不存在LCALLMENU_OK;DS1820存在,调用显示正确信息子程序MOVTEMP_TH,#055H;设置TH初值85度MOVTEMP_TL,#019H;设置TL初值25度LCALLRE_18B20A;调用暂存器操作子程序LCALLWRITE_E2;写入DS18B20LCALLTEMP_BJ;显示温度标记JMPSTART2START1:LCALLMENU_ERROR;调用显示出错信息子程序LCALLTEMP_BJ;显示温度标记SJMP$START2:LCALLRST;调用DS18B20复位子程序JNBFLAG1,START1;DS18B20不存在MOVA,#0CCH;跳过ROM匹配命令LCALLWRITEMOVA,#44H;温度转换命令LCALLWRITELCALLRSTMOVA,#0CCH;跳过ROM匹配LCALLWRITEMOVA,#0BEH;读温度命令LCALLWRITELCALLREAD;调用DS18B20数据读取操作子程序LCALLCONVTEMP;调用温度数据BCD码处理子程序LCALLDISPBCD;调用温度数据显示子程序LCALLCONV;调用LCD显示处理子程序LCALLTEMP_COMP;调用实测温度值与设定温度值比较子程序LCALLPROC_KEY;调用键扫描子程序SJMPSTART2;循环;***************************键扫描子程序*****************************PROC_KEY:JBK1,PROC_K1LCALLBEEP_BLJNBK1,$MOVDPTR,#M_ALAX1MOVA,#1LCALLLCD_PRINTLCALLLOOK_ALARMJBK3,$LCALLBEEP_BLJMPPROC_K2PROC_K1:JBK2,PROC_ENDLCALLBEEP_BLJNBK2,$MOVDPTR,#RST_A1MOVA,#1LCALLLCD_PRINTLCALLSET_ALARMLCALLRE_18B20;将设定的TH,TL值写入DS18B20LCALLWRITE_E2PROC_K2:LCALLMENU_OKLCALLTEMP_BJPROC_END:RET;***************************设定温度报警值TH、TL***************************SET_ALARM:LCALLLOOK_ALARMAS0:JBK1,AS00LCALLBEEP_BLJNBK1,$CPL20H.1;UP/DOWN标记AS00:JB20H.1,ASZ01;20H.1=1,增加JMPASJ01;20H.1=0,减小ASZ01:JBK2,ASZ02;TH值调整(增加)LCALLBEEP_BLINCTEMP_THMOVA,TEMP_THCJNEA,#120,ASZ011MOVTEMP_TH,#0ASZ011:LCALLLOOK_ALARMMOVR5,#10LCALLDELAYJMPASZ01ASZ02:JBK3,ASZ03;TL值调整(增加)LCALLBEEP_BLINCTEMP_TLMOVA,TEMP_TLCJNEA,#99,ASZ021MOVTEMP_TL,#00HASZ021:LCALLLOOK_ALARMMOVR5,#10LCALLDELAYJMPASZ02ASZ03:JBK4,AS0;确定调整LCALLBEEP_BLJNBK4,$RETASJ01:JBK2,ASJ02;TH值调整(减少)LCALLBEEP_BLDECTEMP_THMOVA,TEMP_THCJNEA,#0FFH,ASJ011JMPASJ022ASJ011:LCALLLOOK_ALARMMOVR5,#10LCALLDELAYJMPAS0ASJ02:JBK3,ASJ03;TL值调整(减少)LCALLBEEP_BLDECTEMP_TLMOVA,TEMP_TLCJNEA,#0FFH,ASJ021JMPASJ022ASJ021:LCALLLOOK_ALARM;MOVR5,#10LCALLDELAYJMPAS0ASJ022:CPL20H.1JMPASZ01ASJ03:JMPASZ03RETRST_A1:DBSETALERTCODE,0;***********************实测温度值与设定温度值比较子程序**********************TEMP_COMP:MOVA,TEMP_THSUBBA,TEMP_ZH;减数被减数,则JCCHULI1;借位标志位C=1,转MOVA,TEMPFCCJNEA,#0BH,COMPSJMPCHULI2COMP:MOVA,TEMP_ZHSUBBA,TEMP_TL;减数被减数,则JCCHULI2;借位标志位C=1,转MOVDPTR,#BJ5LCALLTEMP_BJ3CLRRELAY;点亮指示灯RETCHULI1:MOVDPTR,#BJ3LCALLTEMP_BJ3SETBRELAY;熄灭指示灯LCALLBEEP_BL;蜂鸣器响RETCHULI2:MOVDPTR,#BJ4LCALLTEMP_BJ3SETBRELAY;熄灭指示灯LCALLBEEP_BL;蜂鸣器响RET;-----------------------------------------TEMP_BJ3:MOVA,#0CEHLCALLWCOMMOVR1,#0MOVR0,#2BBJJ3:MOVA,R1MOVCA,@A+DPTRLCALLWDATAINCR1DJNZR0,BBJJ3RETBJ3:DBHBJ4:DBLBJ5:DB!;;****************************显示温度标记子程序***************************TEMP_BJ:MOVA,#0CBHLCALLWCOMMOVDPTR,#BJ1;指针指到显示消息MOVR1,#0MOVR0,#2BBJJ1:MOVA,R1MOVCA,@A+DPTRLCALLWDATAINCR1DJNZR0,BBJJ1RETBJ1:DB00H,C;********************************显示正确信息子程序***************************MENU_OK:MOVDPTR,#M_OK1;指针指到显示消息MOVA,#1;显示在第一行LCALLLCD_PRINTMOVDPTR,#M_OK2;指针指到显示消息MOVA,#2;显示在第一行LCALLLCD_PRINTRETM_OK1:DBDS18B20OK,0M_OK2:DBTEMP:,0;********************************显示出错信息子程序***************************MENU_ERROR:MOVDPTR,#M_ERROR1;指针指到显示消息MOVA,#1;显示在第一行LCALLLCD_PRINTMOVDPTR,#M_ERROR2;指针指到显示消息1MOVA,#2;显示在第一行LCALLLCD_PRINTRETM_ERROR1:DBDS18B20ERROR,0M_ERROR2:DBTEMP:----,0;****************************DS18B20复位子程序*****************************RST:SETBDQNOPCLRDQMOVR0,#6BH;主机发出延时复位低脉冲MOVR1,#04HTSR1:DJNZR0,$MOVR0,#6BHDJNZR1,TSR1SETBDQ;拉高数据线NOPNOPNOPMOVR0,#32HTSR2:JNBDQ,TSR3;等待DS18B20回应DJNZR0,TSR2JMPTSR4;延时TSR3:SETBFLAG1;置1标志位,表示DS1820存在JMPTSR5TSR4:CLRFLAG1;清0标志位,表示DS1820不存在JMPTSR7TSR5:MOVR0,#06BHTSR6:DJNZR0,$;时序要求延时一段时间TSR7:SETBDQRET;************************DS18B20暂存器操作子程序***************************RE_18B20:JBFLAG1,RE_18B20ARETRE_18B20A:LCALLRSTMOVA,#0CCH;跳过ROM匹配LCALLWRITEWR_SCRAPD:MOVA,#4EH;写暂器LCALLWRITEMOVA,TEMP_TH;TH(报警上限)LCALLWRITEMOVA,TEMP_TL;TL(报警下限)LCALLWRITEMOVA,#7FH;12位精度LCALLWRITERET;************************复制暂存器子程序*******************************WRITE_E2:LCALLRSTMOVA,#0CCH;跳过ROM匹配LCALLWRITEMOVA,#48H;把暂存器里的温度报警值拷贝到EEROMLCALLWRITERET;***********************重读EEROM子程序********************************READ_E2:LCALLRSTMOVA,#0CCH;跳过ROM匹配LCALLWRITEMOVA,#0B8H;把EEROM里的温度报警值拷贝回暂存器LCALLWRITERET;************************将自定义字符写入LCD的CGRAM中*********************STORE_DATA:MOVA,#40HLCALLWCOMMOVR2,#08HMOVDPTR,#D_DATAMOVR3,#00HS_DATA:MOVA,R3MOVCA,@A+DPTRLCALLWDATA;写入数据INCR3DJNZR2,S_DATARETD_DATA:DB0CH,12H,12H,0CH,00H,00H,00H,00H;***********************DS18B20数据写入操作子程序************************WRITE:MOVR2,#8;一共8位数据CLRCWR1:CLRDQ;开始写入DS18B20总线要处于复位(低)状态MOVR3,#07DJNZR3,$;总线复位保持16微妙以上RRCA;把一个字节DATA分成8个BIT环移给CMOVDQ,C;写入一位MOVR3,#3CHDJNZR3,$;等待100微妙SETBDQ;重新释放总线NOPDJNZR2,WR1;写入下一位SETBDQRET;**********************DS18B
本文标题:基于51单片机――Ds18B20温度采集LCD显示汇编程序
链接地址:https://www.777doc.com/doc-4020322 .html