打印

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

[复制链接]
2643|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
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 | 只看该作者

关全局中断

使用特权

评论回复
5
John_Lee| | 2008-9-13 00:42 | 只看该作者

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

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

减少中断的频率或临时关中断等做法都不是很理想的,都有各自的问题。

使用特权

评论回复
6
hex99| | 2008-9-13 03:56 | 只看该作者

>>

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

使用特权

评论回复
7
hotyong| | 2008-9-16 13:10 | 只看该作者

-

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

使用特权

评论回复
8
lwslws201| | 2012-8-9 14:35 | 只看该作者
确实这个rtx51 去读18b20很容易出问题,不知道楼主解决没有?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

10

主题

27

帖子

1

粉丝