RTX51_Tiny_RTOS如何克服读取外围器件时序误差问题?
正在做一个项目,采用AT89S52和RTX51_Tiny,任务包括:图形液晶驱动、时钟显示、3路温度检测DS18B20、马达速度检测、运转周期数、按键扫描、EEPROM数据保存、工作参数设定。<br /> 功能已经实现了,现在就是:巡检读取DS18B20,因RTX51固有的时间片轮询机制导致的时间误差,偶尔会读取错误,不知还有没有更好的解决办法?<br /> 将任务时间片数目TIMESHARING调整为20,即200ms,效果较好,但偶尔还是会读取错误。不太好解决
DS18B20对时间很敏感<br /> DQ = 1; //DQ复位<br /> delay(8); //稍做延时<br /> DQ = 0; //单片机将DQ拉低<br /> delay(80); //精确延时 大于 480us<br /> DQ = 1; //拉高总线<br /> delay(14);<br /> x=DQ; //稍做延时后 如果x=0则初始化成功 x=1则初始化失败<br /> delay(20);<br />而任务切换时间是时间片,里面的延时时间不能很精确,所以,不太好解决读取DS18B20的时候,将调度关闭,延时自己写试试?
读取DS18B20的时候,将调度关闭,延时自己写试试?关全局中断
想办法在两次中断之间完成查询
例如,检查时钟定时器到下次中断的时间是否足够一次查询,如果不够,就等下次,总之,不要使中断在一次查询期间发生。<br /><br />减少中断的频率或临时关中断等做法都不是很理想的,都有各自的问题。>>
每次中断只检测1路。。。-
应该确保在读写18B20时禁止任务调度,甚至于在整个对18B20操作的时期都禁止,因为如果刚发了一读温度的命令,这时任务切换,但是18B20将温度发送给单片机,由于此时没有运行有关读温度的任务。数据就丢失了! 确实这个rtx51 去读18b20很容易出问题,不知道楼主解决没有?
页:
[1]