┊ 网站导航 ┊ 管理登陆 ┊ 免责声明 ┊ 问题反馈 ┊ 友链说明┊本站部分内容来自网络共享资源,如有冒犯您的权利请来信告之删除或纠正! 不得对本站进行复制、盗链或镜像,转载内容须获得同意或授权;欢迎友情链接、站务合作! ![]() ![]() ![]() ![]() ![]() ![]() 本站学习交流群:138..158(高级群1-满)、77930286(高级群2)、61804809(群3) Copyright© MCUSY All Rights Reserved 本站网警备案号: WZ36040002485 ICP备案证书号:粤ICP备09034963号 |
当然,上图中的示意图并没有考虑诸如端口驱动能力、抗干扰处理等,仅表明一个逻辑的连接示意,具体在产品级的设计时会根据产品的应用做必要的处理,比如增加一些必要的电路等,此处不作为讨论的重点。
2.3 软件设计思路
在对连在一组8位端口上的8个DS18B20操作时,是同时对该组端口进行操作,也即同时对8个DS18B20器件进行同步的操作。
2.3.1 底层时序驱动
总线写1时序控制函数:
void DS18B20_Write_1(void)
{
P1 = 0x00;
Delay_1us(10);
P1 = 0xff;
Delay_1us(30);
}
总线写0时序控制函数:
void DS18B20_Write_0(void)
{
P1 = 0x00;
Delay_1us(40);
P1 = 0xff;
Delay_1us(1);
}
总线读取一个数据位时序控制函数:
unsigned char DS18B20_ReadDQ(void)
{
unsigned char DQ_S=0;
P1 = 0x00;
Delay_1us(10);
P1 = 0xff;
Delay_1us(1);
DQ_S = P1;
P1 = 0xff;
Delay_1us(30);
return DQ_S;
}
在读取一个总线状态数据位的函数中,将会返回一个byte的数据,该数据的8个位正好与连接在P2端口上的8个I/O口对应,如下图所示:
总线复位时序控制函数:
void DS18B20_Reset(void)
{
unsigned char Error_Counter=0;
P1 = 0x00;
Delay_1us(500);
P1 = 0xff;
Delay_1us(100);
if(P1!=0x00) B20_Error = P1;//如检测到DS18B20总线响应了回复信号,则读取当前8条
//总线的状态
Delay_1us(50);
P1 = 0xff;
for(Error_Counter=0;Error_Counter<200;Error_Counter++)
{
//束,则退出循环
}
P1 = 0xff;
Delay_1us(200);
}
2.3.2 操作协议相关的函数
┊ 网站导航 ┊ 管理登陆 ┊ 免责声明 ┊ 问题反馈 ┊ 友链说明┊本站部分内容来自网络共享资源,如有冒犯您的权利请来信告之删除或纠正! 不得对本站进行复制、盗链或镜像,转载内容须获得同意或授权;欢迎友情链接、站务合作! ![]() ![]() ![]() ![]() ![]() ![]() 本站学习交流群:138..158(高级群1-满)、77930286(高级群2)、61804809(群3) Copyright© MCUSY All Rights Reserved 本站网警备案号: WZ36040002485 ICP备案证书号:粤ICP备09034963号 |