请教 定时中断

[复制链接]
 楼主| electron0101 发表于 2009-5-20 20:52 | 显示全部楼层 |阅读模式
由于 要用485 时实 查询数据.所以 串口发送 接收用中断  但是  定时中断  刷新太快  抢占 主循环 搞的键盘 按键  反应迟钝!  各位大侠 有解决的思路没???
tingtang 发表于 2009-5-20 20:54 | 显示全部楼层

我亲爱的

买个高hz的
lyjian 发表于 2009-5-20 20:56 | 显示全部楼层

思路有问题

 楼主| electron0101 发表于 2009-5-21 07:49 | 显示全部楼层

回3楼能否指点一下???

救火车 发表于 2009-5-21 10:45 | 显示全部楼层

把串行数据收发,改成中断方式。

只要程序协调好,51也能实现你这些功能。
 楼主| electron0101 发表于 2009-5-21 12:12 | 显示全部楼层

回5楼 正是用的51也是 串行数据收发在中断里

键盘 扫 也在中断 .  

 在主循环里 描,

就按了下键盘 过了1秒才反映过来
zyboy 发表于 2009-5-21 13:05 | 显示全部楼层

是队列方式吗?

每收一个串口数据都跳到串口中断函数吗?如果是真正中断方式,只是每个数据到达主程序才会跳到中断响应,数据传输的时候,主程序都是空闲的,你应该有足够的时间做其他的
刘前辈 发表于 2009-5-21 13:41 | 显示全部楼层

要是不好解决,送你个书上的程序?

其实把这两个中断注意独立互锁就行了。

原因:由于接收采用的是串口中断(23H ?)假定发送端以19.2K比特率连续发送,那么接收端就要1ms左右中断一次。

那么还有另一个定时扫描键盘中断假设50ms中断一次,能保证定时中断1ms内把键盘扫描程序运行完?

所以,原理上应该没问题。可能自己的程序哪里有漏洞不完善的地方。
调试技巧:
1:先去掉通信任务,把独立键盘扫描程序时序调试好。
2、去掉键盘扫描程序,把独立通信任务调试好。
3、也许把键盘扫描程序放在主程序,50ms定时中断仅向键盘扫描程序传递定时到标志,瞬间运行完毕、退出更合理吧。
4、两中断IP寄存器应该设置同等优先级?还是进入一个,立即封锁另一个?

都注意到就没什么了。
928315 发表于 2009-5-21 15:08 | 显示全部楼层

为什么用定时中断?

开辟一段接受缓冲区后,可以根据收到数据的长度来判断是否需要处理。搞2个指针,一个读缓冲,一个写缓冲。类似循环队列。只要两个指针不相等,就应该有数据可以读。好像不需要用定时器啊。
刘前辈 发表于 2009-5-21 21:49 | 显示全部楼层

键盘扫描的3种方式。

1、程序控制;也就是在主程序中无限循环方式;
2、定时控制;就是利用定时器定时扫描,例如50ms一次;像HOT说的“零耗时”技术就是根据定时扫描控制来的;
3、中断控制方式:这是效率最高的,因为定时扫描可能大部分时间没有键按下。但是中断方式可能要加硬件,也许现在有些MCU有多个管脚可以作为中断脚了。

你若不用定时方式,而用无限循环控制,当然也行,除了效率低点。
ayb_ice 发表于 2009-5-21 22:59 | 显示全部楼层

通过队列处理比较好

 楼主| electron0101 发表于 2009-5-22 07:45 | 显示全部楼层

先谢楼上各位 !

我设置串口 中断 为最 高优先级别 
 
定时器0为 显示输出
定时器2为 键盘 和发送数据  

接收只管把数据送 缓存 接收完 21个后 置标志 位

发送只管把数据送 缓存 发送完 21个后 置标志 位

发送  接收都有 缓存 21个字节 


主程序负责 把要发的数据打包  填入缓存

和把接收完的数据校验  取出缓存 
xppx1987 发表于 2014-11-27 10:02 | 显示全部楼层
肯定是lz主循环中任务处理不合理,把按键扫描放在中断中处理~
coody 发表于 2014-11-27 11:30 | 显示全部楼层
这点任务,用个老的51跑11.0592MHZ都轻松完成
您需要登录后才可以回帖 登录 | 注册

本版积分规则

16

主题

79

帖子

0

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