摸板写程序如下
unsigned char i=0;
for (i=8; i>0; i--)
{
DQ = 0;
DQ = dat&0x01;
Delay_DS18B20(5);
DQ = 1;
dat>>=1;
在执行完DQ = dat&0x01;后,手册上说写0DQ要保较长时间,而写1时间很短,但Delay_DS18B20(5);中的延时都是一样的,那怎么区分写入的是0和1呢,谢谢
DS18B20中文手册上是这样描述的
写0的步骤如下 写1的步骤如下
1.单片机拉低电平约10-15us , 1.单片机拉低电平约10-15us,
2.单片机持续拉低电平约20-45us, 2.单片机持续拉高电平约20-45us,
3.释放总线 3.释放总线
问题是第2步单片机持续拉低电平和拉高电平如何在程序中体现出来的
DQ = dat&0x01;
Delay_DS18B20(5); 这条语句就是延时语句
这就是单片机持续拉低电平和拉高电平的体现 如果dat&0x01 的值是1 那DQ拉高 然后进行延时 如果dat&0x01是0 DQ拉低 然后进行等待 一个完整的写时序步骤
DQ =1; // 先将数据线拉高
_nop_(); //等待一个机器周期
DQ=0; //将数据线从高拉低时即启动写时序
DQ=dat&0x01; //利用与运算取出要写的某位二进制数据,
//并将其送到数据线上等待DS18B20采样
for(time=0;time<10;time++)
;//延时约30us,DS18B20在拉低后的约15~60us期间从数据线上采样
DQ=1; //释放数据线
for(time=0;time<1;time++)
;//延时3us,两个写时序间至少需要1us的恢复期