高级会员
- 积分
- 853
- 金钱
- 853
- 注册时间
- 2016-4-7
- 在线时间
- 151 小时
|
10金钱
我暂时用3个DS18B20使用单总线通信,基本上是没有问题的,但程序和运行了一会儿偶尔(时间长短不一定)就有一个或者两个温度出现状况,我验证了一下,发现问题出在了ROM匹配上,复位一下,就OK了,想请问一下大神,求指点一二。
[mw_shl_code=applescript,true] while(1)
{
Match_ROM(ID1);
LcdDisplay(Read_Temp(ID1),1);
delayms(200);
Match_ROM(ID2);
LcdDisplay(Read_Temp(ID2),2);
delayms(200);
Match_ROM(ID3);
LcdDisplay(Read_Temp(ID3),3);
delayms(200);
if(flag)
{
Uart_flag = 1;
flag = 0;
ES = 1;
}
}
}
void Match_ROM(unsigned char *tab)
{
unsigned char i;
Ds18b20Init();
delayms(2);
Ds18b20WriteByte(0x55); //match ROM
for(i=0;i<8;i++)
{
Ds18b20WriteByte(tab);
delayms(2);
}
Ds18b20WriteByte(0x44); //convert temp
delayms(2);
}[/mw_shl_code]
|
最佳答案
查看完整内容[请看2#楼]
我发现了一个问题,好像是我串口通信使用了中断方式,可能是在匹配ROM时发生了中断请求,等恢复现场时就出现了错误,会不会是这样,大神们,求指点
|