hephi 发表于 2008-9-6 16:43

RTX51_Tiny_RTOS如何克服读取外围器件时序误差问题?

&nbsp;&nbsp;&nbsp;&nbsp;正在做一个项目,采用AT89S52和RTX51_Tiny,任务包括:图形液晶驱动、时钟显示、3路温度检测DS18B20、马达速度检测、运转周期数、按键扫描、EEPROM数据保存、工作参数设定。<br />&nbsp;&nbsp;&nbsp;&nbsp;功能已经实现了,现在就是:巡检读取DS18B20,因RTX51固有的时间片轮询机制导致的时间误差,偶尔会读取错误,不知还有没有更好的解决办法?<br />&nbsp;&nbsp;&nbsp;&nbsp;将任务时间片数目TIMESHARING调整为20,即200ms,效果较好,但偶尔还是会读取错误。

xjdr123057 发表于 2008-9-8 19:47

不太好解决

DS18B20对时间很敏感<br />&nbsp;DQ&nbsp;=&nbsp;1;&nbsp;&nbsp;&nbsp;&nbsp;//DQ复位<br />&nbsp;delay(8);&nbsp;&nbsp;//稍做延时<br />&nbsp;DQ&nbsp;=&nbsp;0;&nbsp;&nbsp;&nbsp;&nbsp;//单片机将DQ拉低<br />&nbsp;delay(80);&nbsp;//精确延时&nbsp;大于&nbsp;480us<br />&nbsp;DQ&nbsp;=&nbsp;1;&nbsp;&nbsp;&nbsp;&nbsp;//拉高总线<br />&nbsp;delay(14);<br />&nbsp;x=DQ;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//稍做延时后&nbsp;如果x=0则初始化成功&nbsp;x=1则初始化失败<br />&nbsp;delay(20);<br />而任务切换时间是时间片,里面的延时时间不能很精确,所以,不太好解决

清风一士 发表于 2008-9-9 09:07

读取DS18B20的时候,将调度关闭,延时自己写试试?

读取DS18B20的时候,将调度关闭,延时自己写试试?

winfeng 发表于 2008-9-11 11:23

关全局中断

John_Lee 发表于 2008-9-13 00:42

想办法在两次中断之间完成查询

例如,检查时钟定时器到下次中断的时间是否足够一次查询,如果不够,就等下次,总之,不要使中断在一次查询期间发生。<br /><br />减少中断的频率或临时关中断等做法都不是很理想的,都有各自的问题。

hex99 发表于 2008-9-13 03:56

>>

每次中断只检测1路。。。

hotyong 发表于 2008-9-16 13:10

-

应该确保在读写18B20时禁止任务调度,甚至于在整个对18B20操作的时期都禁止,因为如果刚发了一读温度的命令,这时任务切换,但是18B20将温度发送给单片机,由于此时没有运行有关读温度的任务。数据就丢失了!

lwslws201 发表于 2012-8-9 14:35

确实这个rtx51 去读18b20很容易出问题,不知道楼主解决没有?
页: [1]
查看完整版本: RTX51_Tiny_RTOS如何克服读取外围器件时序误差问题?