ds18b20的写字节的疑问

[复制链接]
2982|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 | 显示全部楼层
那位大侠给解释一下先谢谢过了
这个程序单片机基础外设九日通第四日里的,
原野之狼 发表于 2010-3-9 18:26 | 显示全部楼层
程序不是很完整 DQ的定义在哪里呢
但是可以肯定 粉色的是不对的
//bdat<<1;
这句是无效操作
//Write_slot(CY);
这句怎么还操作CY呢
司徒老鹰 发表于 2010-3-9 18:31 | 显示全部楼层
是书上的?
 楼主| soch 发表于 2010-3-9 18:31 | 显示全部楼层
粉色的是我编的红色的是人家编的,别外DQ就是DS18B20里那个引脚连接P3。3口
 楼主| soch 发表于 2010-3-9 18:36 | 显示全部楼层
另外第一个子函数里红色的DQ=1有什么用

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
原野之狼 发表于 2010-3-9 19:11 | 显示全部楼层
那DQ就是一个位变量了 也就是P3.3
根据时序操作18B20即可
unsigned char 型变量赋给位变量 只取最低位 其余位舍去
Write_slot(bdat&(1<<i));
改为
Write_slot(bdat>>1);
 楼主| soch 发表于 2010-3-9 19:29 | 显示全部楼层
但是他那个视频里是Write_slot(bdat&(1<<i));难道视频错了http://v.youku.com/v_show/id_XMTU2MjAzMjY4.html 时间在44分23秒那里
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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| soch 发表于 2010-3-9 21:01 | 显示全部楼层
编程自成一家,学习了。
原野之狼 发表于 2010-3-10 08:39 | 显示全部楼层
谢谢11楼指正
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

41

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部