找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3095|回复: 0
打印 上一主题 下一主题
收起左侧

DS18B20 50H 85等问题调试总结-有程序-努力了就有回报

[复制链接]
跳转到指定楼层
楼主
ID:83710 发表于 2015-6-23 21:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
回顾我的18B20实验,直到今晚才告一段落,让我记住这一天2010年5月2日晚九点,现在回顾一下吧!
自从1602做出来后,我就致力于18B20温度传感器,因为他不仅体积小,而且是单总线,也是很先进的,我起初只意识到这东西的先进性,并没有了解他的难度,记得是四月初吧,那晚我在1602成功后,骄傲的忘乎所以,于是自己编了一个ASM,写进去直接傻逼!我那一晚试了七八次,都失败了,一连几晚编了写,写了编,还是失败,我开始重新审视这个DS18B20,我上网找了大量的资料,什么中文的,英文的,全解的,入门的,还有程序,结果,还是失败,现在看来,虽然我失败了,但是我已初步了解了1820的构造,和部分时序,半个月后,还是不行,我陷入思考中,为什么?时序不正确?要怎么做?后来想了一个办法,读温度,显示在P0口上,那样一旦成功,在P0上会有所反应,结果,在一切正常下,竟然读出一个0550H,而且不动,一直显示50H,但那时我可以证明我的复位时序是对的,悲哀的是我不知道怎样改了,有过了几天,在网上找到了关于显示0550H的信息,他们称之为85现象,但是还是没解决,大前天,我找了一段程序,写入,竟然让我眼前一亮,因为他可以读出,我在此基础上,看我的时序,原来是我时序出的问题,我按照手册从新编写,果然好了,读出是温度值,不过是BCD码的,然后我着手让他变成十进制,有在网上找公式,费了好大脑汁,写出来,一试,有傻逼,真无语了,还有乱码,直到今晚,我下了班,吃了饭,有来到电脑前,开机,运行KEIL,打开程序,把我的想发写进去,失败,我在一次看资料,说是得乘以0.0625,我想先不用这木弄,先乘以0.5,于是我组合高低字节,然后,处以2,显示,结果。。。。。,显示12摄氏度,不可能啊,今天很热,至少二十度,显然,不正确,我反复搞了几次,还是不行,但是我在偶然间,看到一个现象,就是我一按复位时,显示42摄氏度我一想,复位时应该是85才对,怎么是...42乘以2正好约等于85,数据处理问题,我马上把处以2,去掉,又一试,我成功了,显示25度,和空调上的数值一致,
            我........泪.........
这是坚持不懈的结果,永不放弃的结果,在哪里摔倒,在哪里站起来,虽然我笨,但是别人能做到的我通过努力也一定会做到,我付出了一个月的晚上,在工地我也在想,没事我就想,我心血太多了,我写了二百多次,实验更多了,开关,通电断电,资料在我电脑里存满了,网站在我地址栏里挤满了,今天.......不说了,看程序
ORG 0000H
DQ EQU P1.6
LSB EQU 50H
MSB EQU 51H
   mov 30H,#00h ;       个位缓冲区
     mov 31H,#00h  ;     十位缓冲区
  MOV 32H,#00H ;   百位缓冲区
  MOV 33H,#00H;      千位缓冲区
mov dptr,#tab
MAIN:
LCALL GMP
   lcall display
SJMP MAIN   
      
GMP: SETB P1.6        
           LCALL RSET_18B20
     MOV A,#0CCH
     LCALL WRITE_18B20
     MOV A,#44H
     LCALL WRITE_18B20
   
   
   
     LCALL DELAY

     LCALL RSET_18B20         
     MOV A,#0CCH
     LCALL WRITE_18B20
     MOV A,#0BEH
     LCALL WRITE_18B20
         
     LCALL READ_18B20
          MOV LSB,A      
     LCALL READ_18B20
           MOV MSB,A
      RET
   
      
RSET_18B20:SETB DQ
CLR DQ ;复位开始拉低总线500微秒等待应答。
  MOV R0,#100
W:  NOP   
  NOP
  NOP    ;延时500 微秒
  DJNZ R0,W
SETB DQ    ;总线拉高
MOV R0,#30 ;延时60微秒
DJNZ R0,$
JB DQ,$ ;等待18B20应答低脉冲为存在脉冲,MCU收到后才向下执行。
MOV R0,#200 ;延时60微秒
DJNZ R0,$     ;切忌切忌哈哈哈
RET
WRITE_18B20:MOV R2,#8;一共8位数据
WE: CLR C
CLR DQ
MOV R0,#5
DJNZ R0,$
RRC A
MOV DQ,C
MOV R0,#22
DJNZ R0,$
SETB DQ
NOP
DJNZ R2,WE
RET
READ_18B20:MOV R2,#8
RE:SETB DQ                     
NOP
CLR C
CLR DQ
NOP
NOP
NOP
NOP
SETB DQ
NOP
NOP
NOP
NOP
NOP
NOP
NOP
MOV C,DQ
MOV R0,#21
DJNZ R0,$
RRC A
DJNZ R2,RE
RET
   
DELAY:MOV R0,#0FFH
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
DJNZ R0,$
RET
      
display:
MOV A,LSB
ANL A,#0F0H
SWAP A
MOV LSB,A     ;消除小数
MOV A,MSB
ANL A,#07H
SWAP A
MOV MSB,A
ADD A,LSB
MOV B,#10
DIV AB
MOV 30H,B
MOV 31H,A
        

;*****************显示子程序 **********************************************
      clr P1.3
     mov a,30H ;个位
     movC A,@a+dptr
  MOV P0,A ;向个位写数据
     lcall deley
     sETb P1.3
     clr p1.2
     mov a,31H ;十位
     movc A,@a+dptr
  MOV P0,A;向十位写数据
  lcall deley
  sETb P1.2
  clr P1.1
     mov a,32H;百位
     movC A,@a+dptr
  MOV P0,A;向百位写数据
     lcall deley
     sETb P1.1
     clr p1.0
     mov a,33H ;千位
     movc A,@a+dptr
  MOV P0,A;向去千位写数据
  lcall deley
  sETb P1.0
   
;;**************************************************
deley:mov r0,#01h
loop:mov r1,#0ffh
lo:nop
nop
nop
NOP
NOP

   djnz r1,lo
   djnz r0,loop
   ret
  tab:db  0c0h,0f9h,0a4h,0b0h,099h,092h,082h,0f8h,080h,090h
ret
END

5月2日晚于天津开发区第四项目部二楼宿舍


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表