| 
 
高级会员 
 
	积分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时发生了中断请求,等恢复现场时就出现了错误,会不会是这样,大神们,求指点 |