打印

ds18b20的写字节的疑问

[复制链接]
2249|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
soch|  楼主 | 2010-3-9 17:05 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
uchar Write_slot(uchar bdat)
{

DQ=1;

delay(10);//两次写时间片隔大于1US

DQ=0;

delay(10);//写时间片为低电平时要大于1US

DQ=bdat;

delay(180);//读时间片最短60US

DQ=1;     //这条语句有什么用?
}
uchar Write_Byte(uchar bdat)
{

uchar i;

for(i=0;i<8;i++)

{

Write_slot(bdat&(1<<i));

//bdat<<1;
                        //Write_slot(CY);

}
}问题是两个红字部分,Write_slot(bdat&(1<<i));这条语句我认为不对,应该用粉色的语句,但视频里的是用的Write_slot(bdat&(1<<i));不知道为什么那位高手给解释一下。

相关帖子

沙发
soch|  楼主 | 2010-3-9 17:08 | 只看该作者
write_slot()函数只能写入0或1对吧,bdat&(1<<i)可能不是0或一啊,那们给解释一下

使用特权

评论回复
板凳
chen3bing| | 2010-3-9 17:12 | 只看该作者
我也感觉有问题。

使用特权

评论回复
地板
soch|  楼主 | 2010-3-9 18:18 | 只看该作者
那位大侠给解释一下先谢谢过了
这个程序单片机基础外设九日通第四日里的,

使用特权

评论回复
5
原野之狼| | 2010-3-9 18:26 | 只看该作者
程序不是很完整 DQ的定义在哪里呢
但是可以肯定 粉色的是不对的
//bdat<<1;
这句是无效操作
//Write_slot(CY);
这句怎么还操作CY呢

使用特权

评论回复
6
司徒老鹰| | 2010-3-9 18:31 | 只看该作者
是书上的?

使用特权

评论回复
7
soch|  楼主 | 2010-3-9 18:31 | 只看该作者
粉色的是我编的红色的是人家编的,别外DQ就是DS18B20里那个引脚连接P3。3口

使用特权

评论回复
8
soch|  楼主 | 2010-3-9 18:36 | 只看该作者
另外第一个子函数里红色的DQ=1有什么用

未命名.jpg (24.27 KB )

未命名.jpg

使用特权

评论回复
9
原野之狼| | 2010-3-9 19:11 | 只看该作者
那DQ就是一个位变量了 也就是P3.3
根据时序操作18B20即可
unsigned char 型变量赋给位变量 只取最低位 其余位舍去
Write_slot(bdat&(1<<i));
改为
Write_slot(bdat>>1);

使用特权

评论回复
10
soch|  楼主 | 2010-3-9 19:29 | 只看该作者
但是他那个视频里是Write_slot(bdat&(1<<i));难道视频错了http://v.youku.com/v_show/id_XMTU2MjAzMjY4.html 时间在44分23秒那里

使用特权

评论回复
11
znmcu| | 2010-3-9 20:31 | 只看该作者
本帖最后由 znmcu 于 2010-3-9 20:34 编辑

嗯,《基外9日通》里的程序全部经过数次测试,保证其正确性。
1、最后DQ又恢复为1,是总线的规范,在操作完后保证其为高电平,总线空闲时为高电平。如果不置为高电平,问题也不大,不过不操作时置高电平,是总线操作的习惯。
2、char转为bit不是按位截取的,它与int转char不同。char转bit时,只要char为非0,那个bit就为1,char为0,则bit为0. 这就是bit的逻辑赋值。

char转bit看下图就明白了:

=================================================
如果有其它的问题和意见,欢迎联系我,谢谢。  振南 QQ 987582714

使用特权

评论回复
12
soch|  楼主 | 2010-3-9 21:01 | 只看该作者
编程自成一家,学习了。

使用特权

评论回复
13
原野之狼| | 2010-3-10 08:39 | 只看该作者
谢谢11楼指正

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

41

帖子

1

粉丝