• 回复
  • 收藏
  • 点赞
  • 分享
  • 发新帖

18B20温度汇编程序问题,不能正常读出温度,请各位老师帮忙指点.

DELAY10US:
NOP
NOP
NOP
NOP
NOP
NOP
RET

RES1820:SETB DQ      ;复位1820
NOP
MOV R4,#45 ;拉低540uS 45*12=540
CLR DQ
D1: LCALL DELAY10US
DJNZ R4,D1

SETB DQ
MOV R4,#20 ;等应答脉冲280uS
D2: LCALL DELAY10US
JNB DQ,RES_OK
DJNZ R4,D2
MOV R0,#0
RET

RES_OK: MOV R4,#40 ;复位OK,延时480uS
D3: LCALL DELAY10US
DJNZ R4,D3
MOV R0,#1
SETB DQ
RET
全部回复(12)
正序查看
倒序查看
dxgung
LV.8
2
2009-11-08 19:27
此帖已被删除
0
回复
dxgung
LV.8
3
2009-11-08 19:34
@dxgung
此帖已被删除
请各位老师帮我看看,我的复位,读写子程度是不是有什么问题?
通过一些测试感觉到复位子程序应该是可以的.现在的温度显示是不正常的,所以想请各位老师帮我看看读写子程序是不是有什么问题,或者通过什么方法可以判定读写子程序是否正常.也就是写数的时候是否确实正常写进了18B20,读数的时候是否确实有读出正确的数据. 如果需要,我后续再把温度处理子程序贴上来.
0
回复
2009-11-10 09:07
@dxgung
请各位老师帮我看看,我的复位,读写子程度是不是有什么问题?通过一些测试感觉到复位子程序应该是可以的.现在的温度显示是不正常的,所以想请各位老师帮我看看读写子程序是不是有什么问题,或者通过什么方法可以判定读写子程序是否正常.也就是写数的时候是否确实正常写进了18B20,读数的时候是否确实有读出正确的数据.如果需要,我后续再把温度处理子程序贴上来.
仔细读一下1820的DATASHEET,还有IIC协议,看一下你的时序是不是正确,还有
信号时间是否够长,一般程序出小问题,都是细节没注意,祝你早日找到问题.
0
回复
dxgung
LV.8
5
2009-11-11 22:20
@chengkai422
仔细读一下1820的DATASHEET,还有IIC协议,看一下你的时序是不是正确,还有信号时间是否够长,一般程序出小问题,都是细节没注意,祝你早日找到问题.
非常感谢您的指点!
感觉到各个时序要求都和18B20的要求相符,但结果就是不正常,也不知道到底哪里出了问题,能帮我看看吗?
0
回复
2009-11-12 09:00
@dxgung
非常感谢您的指点!感觉到各个时序要求都和18B20的要求相符,但结果就是不正常,也不知道到底哪里出了问题,能帮我看看吗?
其实我没有用过1820,只是之前看过51的书上有提过这个IC的用法,大概了解而已,指点谈不上.
建议先检查硬件线路,如果软件查不到问题,就先检查硬件吧,不然你会两头冒泡的.
0
回复
dxgung
LV.8
7
2009-11-12 21:31
@chengkai422
其实我没有用过1820,只是之前看过51的书上有提过这个IC的用法,大概了解而已,指点谈不上.建议先检查硬件线路,如果软件查不到问题,就先检查硬件吧,不然你会两头冒泡的.
硬件是可以的.有另一个C程序能正常工作显示温度. 我想用汇编做出来,自己感觉到时序和逻辑同C一样,也看过多次18B20的资料,感觉时序也对得上,但就是做出来的结果不对.不知道程序问题到底出在哪里?
0
回复
xing1234
LV.6
8
2009-11-13 10:32
@dxgung
硬件是可以的.有另一个C程序能正常工作显示温度.我想用汇编做出来,自己感觉到时序和逻辑同C一样,也看过多次18B20的资料,感觉时序也对得上,但就是做出来的结果不对.不知道程序问题到底出在哪里?
18B20在网上的资料很多,通信对时序的要求很高,要搞一阵才行,简单点的办法是用示波器调你的延迟时间,一定要弄好,再一个是回路不能有电容,另上拉电流要足,否则低电平回到高电平的时间不好.慢慢来,用51还好点,用PIC更累
0
回复
dxgung
LV.8
9
2009-11-13 20:19
@xing1234
18B20在网上的资料很多,通信对时序的要求很高,要搞一阵才行,简单点的办法是用示波器调你的延迟时间,一定要弄好,再一个是回路不能有电容,另上拉电流要足,否则低电平回到高电平的时间不好.慢慢来,用51还好点,用PIC更累
我是在一个学习板上弄的,有配套过来的18B20的程序是可以的.不过它是C语言的.我就按C的编程用汇编完全复制过来,比如C程序那里是多长时间我的汇编程序相应地方就弄多长时间,而且感觉也是18B20资料上的时序对得上,但结果就是不行.也不知道具体是我哪里弄错了.
0
回复
chengkai422
LV.6
10
2009-11-14 10:13
@dxgung
我是在一个学习板上弄的,有配套过来的18B20的程序是可以的.不过它是C语言的.我就按C的编程用汇编完全复制过来,比如C程序那里是多长时间我的汇编程序相应地方就弄多长时间,而且感觉也是18B20资料上的时序对得上,但结果就是不行.也不知道具体是我哪里弄错了.
告诉你一个笨办法,C语言编译成机器码之前会转成汇编代码,你可以通过编译环境看一下这个汇编程序.
0
回复
dxgung
LV.8
11
2009-11-15 11:36
@chengkai422
告诉你一个笨办法,C语言编译成机器码之前会转成汇编代码,你可以通过编译环境看一下这个汇编程序.
非常感谢您的指点.
感觉到这到时是一个好办法,不过能说具体一点吗: 如何通过编译环境看到这个汇编程序?期待您的更多的指点.
0
回复
ddmushroom
LV.4
12
2009-12-12 16:02
@dxgung
我是在一个学习板上弄的,有配套过来的18B20的程序是可以的.不过它是C语言的.我就按C的编程用汇编完全复制过来,比如C程序那里是多长时间我的汇编程序相应地方就弄多长时间,而且感觉也是18B20资料上的时序对得上,但结果就是不行.也不知道具体是我哪里弄错了.
18B20的汇编程序网上直接就有啊

我以前用过,不喜欢这个,太慢,占时间.还不如用AD口直接采热敏电阻,测温范围不大的话精度照样很高
0
回复
dxgung
LV.8
13
2009-12-12 23:15
@ddmushroom
18B20的汇编程序网上直接就有啊我以前用过,不喜欢这个,太慢,占时间.还不如用AD口直接采热敏电阻,测温范围不大的话精度照样很高
感谢对我的问题的关注,到现在为止那个能把温度读出来出来了.不过偶尔出现读取的数据错误的问题.能帮我看看这个问题吗?就是AD转换显示的问题.
http://bbs.dianyuan.com/topic/539649
0
回复