OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3751|回复: 2

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

[复制链接]

33

主题

80

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
251
金钱
251
注册时间
2016-10-19
在线时间
30 小时
发表于 2017-1-23 21:08:56 | 显示全部楼层 |阅读模式
1金钱
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#楼]

MCU没有单总线这个功能,所以只能模拟时序自己写了。如果单片机没有IIC这个功能,你也需要自己模拟时序写了,TTL一样1是高,0是低啊,那个几us高,几us低实在模拟单总线时序呢,你看了单总线时序图就懂了。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

29

主题

340

帖子

0

精华

高级会员

Rank: 4

积分
799
金钱
799
注册时间
2013-12-17
在线时间
100 小时
发表于 2017-1-23 21:08:57 | 显示全部楼层
MCU没有单总线这个功能,所以只能模拟时序自己写了。如果单片机没有IIC这个功能,你也需要自己模拟时序写了,TTL一样1是高,0是低啊,那个几us高,几us低实在模拟单总线时序呢,你看了单总线时序图就懂了。
就算有一天梦想成真,而你做好准备了吗?
回复

使用道具 举报

33

主题

80

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
251
金钱
251
注册时间
2016-10-19
在线时间
30 小时
 楼主| 发表于 2017-1-25 09:19:25 | 显示全部楼层
老虎的菜 发表于 2017-1-24 09:53
MCU没有单总线这个功能,所以只能模拟时序自己写了。如果单片机没有IIC这个功能,你也需要自己模拟时序写 ...

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

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-20 04:40

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表