资源描述:
《ds18b20数字温度传感器程序》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、DS18B20数字温度传感器程序-----------------------Page1-----------------------;DS18B20数字温度传感器程序(有故障报警)张邦宏编写;伪指令赋值:B1820BIT00H;DS18B20应答标志DQBITP2.2;模拟串口通信总线RCAP2LEQU0CAH;T2定时/计数器扑捉寄存器SFR低字节地址RCAP2HEQU0CBH;T2定时/计数器扑捉寄存器SFR高字节地址TL2EQU0CCH;T2定时/计数器低字节地址TH2EQU0CDH;T2定时
2、/计数器高字节地址T2CONEQU0C8H;T2定时/计数器控制寄存器SFR地址T2MODEQU0C9H;T2定时/计数器方式寄存器SFR地址TR2EQU0C8H.2;T2定时/计数器TR2的位地址(启动/停止控制位)TF2EQU0C8H.7;T2定时/计数器TF2的位地址(溢出标志位);主程序:ORG0000HLJMPBZ0ORG30HBZ0:MOVSP,#50H;设置堆栈指针MOV70H,#00H;显示数据缓冲区清零MOV71H,#00HMOV72H,#00HMOV76H,#00H;数据缓冲器BZ
3、1:LCALLXSZMOV76H,29HLCALLBCDZLCALLCWZLCALLWDZSJMPBZ1;18B20测温子程序:CWZ:SETBDQ;复位通信总线B1:LCALLCH1820;调用DS18B20初始化子程序JBB1820,B2;检测DS18B20应答标志,有应答转B2LJMPB1;无应答,返回B1B2:LCALLXSZ;延时MOVA,#0CCH;跳过ROM命令LCALLXE1820;调用写DS18B20子程序MOVA,#44H;发出温度转换命令LCALLXE1820;调用写DS18B2
4、0子程序NOP;延时LCALLYS0B3:LCALLCH1820;调用DS18B20初始化子程序JBB1820,B4;检测DS18B20应答标志,有应答转B4LJMPB3;无应答,返回B3-----------------------Page2-----------------------B4:LCALLYS1;延时MOVA,#0CCH;跳过ROM命令LCALLXE1820;调用写DS18B20子程序MOVA,#0BEH;发出读温度命令LCALLXE1820;调用写DS18B20命令子程序LCALLD
5、U1820;调用读DS18B20两个字节数据子程序RET;DS18B20初始化程序CH1820:SETBDQ;串口数据线置高NOP;延时CLRDQ;串口数据线置低MOVR0,#80H;置定时常数512μSC1:DJNZR0,C1;延时SETBDQ;串口数据线置高MOVR0,#25H;置定时常数75μSC2:JNBDQ,C3;检测串口数据线,为0表示DS1820有应答,转C3DJNZR0,C2;等待DS1820应答(出低电平)LJMPC4;为1表示DS1820无应答(不存在),转C4C3:SETBB18
6、20;置标志位,表示DS1820存在SETBP1.1;关闭故障报警指示SETBP2.3LJMPC5;转C5C4:CLRB1820;清零DS1820存在标志位CLRP1.1;点亮报警指示灯,表示温度传感器通信失败,有故障LCALLYPZLCALLDL01SLJMPC7;转C7C5:MOVR0,#06BH;置定时常数215μSC6:DJNZR0,C6;延时C7:SETBDQ;串口数据线置高(复位)RET;写DS18B20子程序XE1820:MOVR2,#8;一个字节8位CLRC;清零CY位X1:CLRDQ
7、;总线拉低MOVR3,#6;置定时常数DJNZR3,$;延时13μSRRCA;A带进位右环移一位MOVDQ,C;写一位数据到总线MOVR3,#23;置定时常数DJNZR3,$;延时SETBDQ;释放总线(总线拉高)NOP;延时1μSDJNZR2,X1;8位数据未写完继续-----------------------Page3-----------------------SETBDQ;8位数据写完,总线复位(拉高)RET;读DS18B20中两个字节的温度数据DU1820:MOVR4,#2;读2字节MOV
8、R1,#27H;低字节地址D1:MOVR2,#8;一个字节为8位数据D2:CLRC;清零CY位SETBDQ;串口总线拉高NOP;延时NOPCLRDQ;串口总线拉低NOP;延时NOPNOPSETBDQ;串口总线拉高MOVR3,#7;定时常数DJNZR3,$;延时15μSMOVC,DQ;读一位数据MOVR3,#23;定时常数DJNZR3,$;延时93μSRRCA;A带进位右环移一位DJNZR2,D2;8位数据未读完继续MOV@R1,A;保存一个字节数据到温度