周末开始做毕业设计。
首先是要用单片机读取DS18B20的数据。
看了一两天时序,基本看懂了,首先想写一个初始化程序,让单片机发现DS18B20的存在。结果发现压根没反应。
说说我做的情况。
DS18B20的硬件情况:
额,引脚是 有字的一面朝着自己,然后从左往右是 地,数据,电;
我试过直接连IO,也试过从电拉一个5.1K的上拉电阻给数据口。但是都不行。
(总不能说,PDF上给的是4.7K,我用5.1K就不行吧?)
程序,那个时序图就是一般资料里面的。
480到960us的复位脉冲。然后中间停止15到60us.
这个过程,我试过,先拉高再等待,或者先等待再拉高,貌似没啥区别。
然后,DS18B20在60到240us内发出一个低电平的存在脉冲。
而单片机要做的就是把那条线先拉高,再读取该低电平。
我试过自己写的C语言不行,那时我怀疑是时间没控制好,后来改了一个汇编的,还是不行。
再后来,我用了PDF中的一个例程,还是不行。
例程是这样的:
RESET:
MOV A, #4 ;设置循环次数
CLR P1.0 ;发出复位脉冲
MOV B, #250 ;计数250 次
DJNZ B, $ ;保持低电平500us
SETB P1.0 ;释放总线
MOV B, #6 ;设置时间常数
CLR C ;清存在信号标志
WAITL:JB P1.0, WH ;若总线释放跳出循环
DJNZ B, WAITL ;总线低等待
DJNZ ACC, WAITL;释放总线等待一段时间
SJMP SHORT
WH: MOV B, #111
WH1:ORL C, P1.0
DJNZ B, WH1 ;存在时间等待
SHORT:RET
这个例程,作用应该是,如果存在脉冲存在,则它会与CY位相或,因而,CY会是低电平。否则是高。
所以,我在主程序中,这么写:
ORG 0100H
START:
CALL RESET;
JC $;
CLR P1.5;
SJMP $;
可是,事实上,没用,灯没亮。
想不通为什么。
难道引脚错了?
难道是坏的?我昨天刚买的说。
此帖出自
小平头技术问答
我想,大叔的意思是否:子程序中保存的数据出了子程序就挂掉?还是说别的,我不是很懂。
还是说,编译过程中,这个量不知道因为什么变得乱七八糟。
有点奇怪的是,我也试过在子程序里丢失数据,所以我干脆在子程序中也点亮一个LED灯。
额,elulis,你这个可真狠,20毫秒啊!!行,我回去试试。
一周热门 更多>