想问一下在那个温度传感器实验里为什么要单独写时序函数

2019-07-20 17:07发布

RTDS18B20和DHT11这2个温度传感器都是用的单总线和MCU通信,需要发送读写命令时为什么不能直接写命令比如0xCC,而是要自己写一个发送函数,DS18B20是60us+2us来判断高低电平:
void DS18B20_Write_Byte(u8 dat)     
{            
    u8 j;
    u8 testb;
        DS18B20_IO_OUT();//SET PG11 OUTPUT;
    for (j=1;j<=8;j++)
        {
        testb=dat&0x01;
        dat=dat>>1;
        if (testb)
        {
            DS18B20_DQ_OUT=0;// Write 1
            delay_us(2);                           
            DS18B20_DQ_OUT=1;
            delay_us(60);            
        }
        else
        {
            DS18B20_DQ_OUT=0;// Write 0
            delay_us(60);            
            DS18B20_DQ_OUT=1;
            delay_us(2);                          
        }
    }
}

是不是单总线wire都是要自己写这个函数的,还是因为没用复用功能,没办法直接让MCU自己发0XCC这种指令,所以需要自己写的?
还有TTL电平的高低判断是怎么样的(是几us高+几us低算1,几us高+几us低算0)?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
2条回答
老虎的菜
1楼-- · 2019-07-20 18:06
MCU没有单总线这个功能,所以只能模拟时序自己写了。如果单片机没有IIC这个功能,你也需要自己模拟时序写了,TTL一样1是高,0是低啊,那个几us高,几us低实在模拟单总线时序呢,你看了单总线时序图就懂了。
在LS参考系
2楼-- · 2019-07-20 20:47
老虎的菜 发表于 2017-1-24 09:53
MCU没有单总线这个功能,所以只能模拟时序自己写了。如果单片机没有IIC这个功能,你也需要自己模拟时序写 ...

喔我有点懂了,有i2c功能所以模拟时序是单片机自己有的,我们只需要关心发什么数据就好。而wire就不行。

一周热门 更多>