欢迎来到51自学网!

51自学网

当前位置: 主页 > 软件教程 > 单片机教程 >

DS18B20读取温度并显示-汇编程序

时间:2018-08-13 20:21来源:网络整理 作者:51自学网
* 程序效果:通过DS18B20读取温度值,显示对应的温度值 程序重在理解时序,及延时时间 */ DS18DQ EQU P1.3 //P1.3与DS18DQ等同,便于理解 SPEAKER EQU P2.0 //驱动蜂鸣器 TEMPH EQU 29H //保存读出温度的

*
程序效果:通过DS18B20读取温度值,显示对应的温度
           程序重在理解时序,及延时时间
*/

          DS18DQ EQU P1.3   //P1.3与DS18DQ等同,便于理解
          SPEAKER EQU P2.0   //驱动蜂鸣器
          TEMPH EQU 29H       //保存读出温度的低8位
          TEMPL EQU 28H       //保存读出温度的高8位
          DS18FLAG EQU 40H  //设置标志
          ORG  0000H
          LJMP  START
          ORG  0030H
START:   MOV  30H,#00  //设置初始值
          MOV  31H,#00
          MOV  32H,#00
START1: LCALL  DS18_GF  //设置DS18B20的工作方式
          LCALL  CONVERT_TEMPERATURE //输出转换温度命令
          LCALL DELAY750MS //延时750ms
          LCALL  GET_TEMPERATURE //获?温度数据
          LCALL  CAL_TEMPERATURE //计算温度数值
          LCALL  DISPLAY  //调用显示,防止掉显
          LJMP  START1 //无限循环     
//初始化子程序
DS18_START: 
          PUSH   07H //保存R7的值,防止改变R7的数值
          SETB   DS18DQ  //将数据线拉高
          NOP    //延时1us
          CLR    DS18DQ  //将数据线拉低
          MOV    R7,#0   //延时大约512us
          DJNZ   R7,$
          SETB   DS18DQ  //将数据线拉高
          MOV    R7,#40
DS18_START1:        //延时大约160us
          JNB    DS18DQ,DS18_START2  //检查DS18B20是否工作正常
          DJNZ   R7,DS18_START1
          SETB   DS18FLAG   //工作不正常
          CLR    SPEAKER    //驱动蜂鸣器,报警
DS18_START2:
          CLR   DS18FLAG
          MOV    R7,#100 //延时月200us
          DJNZ   R7,$
          POP    07H  //恢复R7的值
          RET
//设置DS18B20工作方式
DS18_GF:CLR  DS18FLAG //清除标志
          LCALL  DS18_START  //调用初始化子程序
          MOV  A,#0CCH  //跳跃ROM指令
             LCALL  DS18_SEND   //
          MOV    A,#4EH     //向RAM写数据             
          LCALL  DS18_SEND
          MOV    A,#75 
          LCALL  DS18_SEND
          MOV  A,#0
          LCALL  DS18_SEND
          MOV  A,#7FH  //设置工作方式
          LCALL  DS18_SEND
          CLR    DS18DQ  //释放总线
          LCALL  DELAY500US   //延时500us                                     
LOOP:     LCALL  CONVERT_TEMPERATURE //调用转子程序
             MOV    R5,#80
LOOP1:   LCALL  DISPLAY //调用显示防止掉显,同时等待转换完成
                DJNZ   R5,LOOP1
          LCALL  GET_TEMPERATURE  //获?转换值
          LCALL  CAL_TEMPERATURE //计算温度值
          LJMP   LOOP
          RET
//输出转换温度命令
CONVERT_TEMPERATURE:
          LCALL  DS18_START //调用初始化子程序
             MOV    A,#0CCH    //跳跃ROM指令         
             LCALL DS18_SEND
          MOV    A,#44H    //温度转换        
          LCALL  DS18_SEND
         RET
//读?温度数据
GET_TEMPERATURE:
             LCALL  DS18_START //调用初始化子程序
          MOV    A,#0CCH  //跳跃ROM指令                
          LCALL  DS18_SEND
          MOV    A,#0BEH   //从RAM中的数据          
          LCALL  DS18_SEND
          LCALL  DELAY60US
           LCALL  DS18_READ
           MOV    TEMPL,A   //将获得数据的低八位存到TEMPL
           LCALL  DS18_READ
           MOV    TEMPH,A  //将获得数据的高八位存到TEMPH
           CLR    DS18DQ   //即复位。否则会一直读到
          LCALL DELAY501US //暂存第九字节             
          RET
//计算获得温度值,便于现实
CAL_TEMPERATURE:
          PUSH   07H    //暂存,防止改变R7的数据
          CLR    C    //进位标志清零
          MOV    R7,#04H  //循环次数

(责任编辑:admin)

织梦二维码生成器
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
相关文章
栏目列表
推荐内容