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

[复制链接]
 楼主| hephi 发表于 2008-9-6 16:43 | 显示全部楼层 |阅读模式
    正在做一个项目,采用AT89S52和RTX51_Tiny,任务包括:图形液晶驱动、时钟显示、3路温度检测DS18B20、马达速度检测、运转周期数、按键扫描、EEPROM数据保存、工作参数设定。
    功能已经实现了,现在就是:巡检读取DS18B20,因RTX51固有的时间片轮询机制导致的时间误差,偶尔会读取错误,不知还有没有更好的解决办法?
    将任务时间片数目TIMESHARING调整为20,即200ms,效果较好,但偶尔还是会读取错误。
xjdr123057 发表于 2008-9-8 19:47 | 显示全部楼层

不太好解决

DS18B20对时间很敏感
 DQ = 1;    //DQ复位
 delay(8);  //稍做延时
 DQ = 0;    //单片机将DQ拉低
 delay(80); //精确延时 大于 480us
 DQ = 1;    //拉高总线
 delay(14);
 x=DQ;      //稍做延时后 如果x=0则初始化成功 x=1则初始化失败
 delay(20);
而任务切换时间是时间片,里面的延时时间不能很精确,所以,不太好解决
清风一士 发表于 2008-9-9 09:07 | 显示全部楼层

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

读取DS18B20的时候,将调度关闭,延时自己写试试?
winfeng 发表于 2008-9-11 11:23 | 显示全部楼层

关全局中断

John_Lee 发表于 2008-9-13 00:42 | 显示全部楼层

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

例如,检查时钟定时器到下次中断的时间是否足够一次查询,如果不够,就等下次,总之,不要使中断在一次查询期间发生。

减少中断的频率或临时关中断等做法都不是很理想的,都有各自的问题。
hex99 发表于 2008-9-13 03:56 | 显示全部楼层

>>

每次中断只检测1路。。。
hotyong 发表于 2008-9-16 13:10 | 显示全部楼层

-

应该确保在读写18B20时禁止任务调度,甚至于在整个对18B20操作的时期都禁止,因为如果刚发了一读温度的命令,这时任务切换,但是18B20将温度发送给单片机,由于此时没有运行有关读温度的任务。数据就丢失了!
lwslws201 发表于 2012-8-9 14:35 | 显示全部楼层
确实这个rtx51 去读18b20很容易出问题,不知道楼主解决没有?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

10

主题

27

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部