导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→发表看法:[怒海骄阳]请问有没有那位在用DS18B20时,出现



No.67978
作者:怒海骄阳
邮件:bigsphinx@163.com
ID:28575
登陆:2次
文章数:2篇
最后登陆IP:221.4.182.126
最后登陆:2004/12/5 22:43:40
注册:2004/12/4 20:51:23
财富:110
发帖时间:2004/12/4 21:04:17
发贴者IP:221.4.182.126
标题:怒海骄阳:请问有没有那位在用DS18B20时,出现过读出的温度是15度的
摘要:No.67978请问有没有那位在用DS18B20时,出现过读出的温度是15度的 小弟刚开始学习单片机,就学着做个数字温度计,用DS18B20和80C51,现在只能读出15度,请问是怎么回事呢。下面是程序,谢谢!!
ORG 0000H
                       ;ds18b20----p2.2
                       ;p1.7用来检查是否检测到DS18B20
                       ;p2.7个位显示
  data_line equ p3.4                   ;单片机内存分配申明!
  TEMPER_L EQU 29H       ;用于保存读出温度的低8位
  TEMPER_H EQU 28H       ;用于保存读出温度的高8位
  FLAG1 EQU 38H          ;是否检测到DS18B20标志位
  a_bit equ 20h          ;数码管个位数存放内存位置
  b_bit equ 21h          ;数码管十位数存放内存位置


MAIN:
  ;clr p3.0
  ;clr p3.1
  LCALL GET_TEMPER;调用读温度子程序

;进行温度显示,这里我们考虑用网站提供的两位数码管来显示温度
;显示范围00到99度,显示精度为1度
;因为12位转化时每一位的精度为0.0625度,我们不要求显示小数所以可以抛弃29H的低4位
;将28H中的低4位移入29H中的高4位,这样获得一个新字节,这个字节就是实际测量获得的温度
;这个转化温度的方法可是我想出来的哦~~非常简洁无需乘于0.0625系数

  MOV A,29H
  MOV C,40h         ;将28H中的最低位移入C
  RRC A                 ;带进位循环右移
  MOV C,41h
  RRC A
  MOV C,42h
  RRC A
  MOV C,43h
  RRC A
  MOV 29H,A
  LCALL DISPLAY;调用数码管显示子程序
  AJMP MAIN


        ; 这是DS18B20复位初始化子程序--------------------
INIT_1820:
    SETB data_line           ;初始化程序的时序要求
    NOP
    CLR data_line
    MOV R1,#3
 TSR1:MOV R0,#107
    DJNZ R0,$
    DJNZ R1,TSR1       ;主机发出延时537微秒的复位低脉冲(我计算为660US)
    SETB data_line          ;然后拉高数据线
    NOP
    NOP
    NOP
    MOV R0,#25H
  TSR2:
    JNB data_line,TSR3    ;等待DS18B20回应   BIT=0 转移
    DJNZ R0,TSR2
    LJMP TSR4        ; 延时
  TSR3:
    SETB FLAG1       ; 置标志位,表示DS1820存在
    ;CLR P3.5         ;检查到DS18B20就点亮P3.5LED
    LJMP TSR5
  TSR4:
    CLR FLAG1         ; 清标志位,表示DS1820不存在
    LJMP TSR7
  TSR5:
    MOV R0,#117
  TSR6:
    DJNZ R0,TSR6 ; 时序要求延时一段时间
  TSR7:
    SETB data_line
RET


                             ; 读出转换后的温度值
GET_TEMPER:
   SETB data_line
   LCALL INIT_1820   ;先复位DS18B20
   JB FLAG1,TSS2
   RET          ; 判断DS1820是否存在?若DS18B20不存在则返回

TSS2:     ;DS18B20已经被检测到!!!!!!!!!!!!!!!!!!;*****先实现温度转换
     MOV A,#0CCH       ; 跳过ROM匹配
     LCALL WRITE_1820
     MOV A,#44H         ; 发出温度转换命令
     LCALL WRITE_1820
   ;这里通过调用显示子程序实现延时一段时间,等待AD转换结束,12位的话750微秒
     LCALL DISPLAY ......

>>返回讨论的主题



  发表回复
用户名   *您没有注册?
密码   *
验证码   * .
标题   *
心情
随便说说    我回答你    最新发现    得意的笑   
气死我了    真是没劲    坚决同意    表示反对   
大家过来    好奇怪哟    懒得理它    大家小心   
文件上传
内容


字体:      字体大小:    颜色:
粗体 斜体 下划线 居中 超级连接 Email连接 图片 Flash图片 Shockwave文件 realplay视频文件 Media Player视频文件 QuickTime视频文件 引用 飞行字 移动字 发光字 阴影字 查看更多的心情图标 背景音乐
点击加入表情
                         
选项
有回复时用短消息通知您?

   




老古网执行:16毫秒 最大:7276毫秒 查询6次