新华龙C8051F310与DS18B20,C语言程序

在网上找了很多关于C8051F310的资料和18B20的程序,网上很多程序都是以89C51、1602A、18B20为硬件编的程,能正常运行,我进行了适当的改编,可似乎310就是无法与18B20通信,显示一直不会改变,显示用的是段式液晶,显示部分程序自己编的,独立运行正常,这到底是怎么回事?C8051F310I/O口初始化不对?还是其他什么问题?求大虾帮忙啊,如果能帮上小弟,一定还会再加分的……

C8051F都是1T的单片机,就是1个机器周期等于1个晶振周期,速度太快了啊!而一般的89C51是1机器周期等于12晶振周期。速度不一样,所以把89C51的程序用在C8051F上就不行了啊!

你下载这个程序包试试:http://www.stcmcu.com/datasheet/stc/STC-USER-CODE/STCMCU-DS18B20.rar

因为STC有1T的单片机,所以和C8051F的特性接近,你用其中1T文件夹下的程序试试。追问

恩,果然有反应了……就是还想问一下,如果C8051F310用外接的32K晶振,能否与18B20进行通信呢?我看18B20的时序要求有很多都是微秒级的,32K不会太慢吧?

追答

32K也不算慢,但是你必须要计算那些延时了,根据频率来计算延时需要的指令周期数。比如480us、180us和60us这些延时,计算好就可以。

追问

我试了好多次,只要用了32K的晶振就又不行了,关键我还不知道C语言中一个while或一个for循环的机器周期是多少,所以不懂循环多少次?能具体教一下不?或者有32K的例程是最好的了~~~

追答

你用32K晶振,一个机器周期是30.5微秒。

你用debug模式看编译生成的汇编代码,然后根据每条指令的机器周期数来计算时间。

追问

看了下18B20的时序,貌似里面有个要求15us的时序,那32K是不是太满了?

追答

是大了。但你看看那15us是要求的“最小时间”还是“最大时间”。

追问

是最大时间……

追答

那就没办法了。

追问

额……那至少得用多大的晶振呢?256K?

追答

256K的话一个机器周期就是3.8us,可以做到15us的要求。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-08-08
你认真看datasheet了吗?你确定你的单片机发送的频率在18B20要求的频率范围内?
另外,为了保证不是你液晶的问题,你可以做一个判定,如果你的单片机接收温度那个变量==0的话就警报,或者亮灯,这样比较容易定位问题
相似回答