LED的扫描程序放中断里,还是在放中断外好呢?

[复制链接]
4546|14
 楼主| zzdianzimi 发表于 2008-4-2 16:13 | 显示全部楼层 |阅读模式
我是新手,在发问之前我搜索了坛里的想关帖子,大家都说中断里的程序是越短越好,但有的人有说LED扫描放中断好,现在有点糊涂了,是把显示程序放在中断里,还是只在中断里做标志位,在主程序里扫描呢!!!个人觉得做标志好,但又不知道在主程序中该怎么做,才可以让显示做好呢??
computer00 发表于 2008-4-2 16:36 | 显示全部楼层

放定时器中断去定期刷新好。当然会需要一个定时器...

不过还可以将键盘扫描也一起放进去,那么你的主程序就会很轻松了~~~~~
Etual 发表于 2008-4-2 16:41 | 显示全部楼层

个人喜欢放在中断外面做

 楼主| zzdianzimi 发表于 2008-4-2 16:42 | 显示全部楼层

那样做,中断里的程序岂不很长?

能否提供一个范例?现在刚开始学,有点吃力,不过我**每天学到晚上十二点,按LS说的,那中断程序岂不是很长 啊???我也看了LS的时钟程序,不过不是很理解
computer00 发表于 2008-4-2 16:54 | 显示全部楼层

长点就长点,扫描个LED要不了多少时间的。几个指令就搞定

 楼主| zzdianzimi 发表于 2008-4-2 17:04 | 显示全部楼层

好的,我回去在试试!!!谢谢各位

有什么好的思路多说说哦!!!!
ayb_ice 发表于 2008-4-2 18:42 | 显示全部楼层

肯定是中断好

因为必须保证LED显示不闪烁,而中断更能保证及时扫描,当然在主循环如果能保证及时扫描也是没有问题的,而且一位LED一般是1~2个MS,而主循环一般很难保证小于这个时间。
xzl 发表于 2008-4-2 18:58 | 显示全部楼层

这要看你是否有对实时性要求更高的任务

如果只有LED要求高,放到中断里是个不错的选择.不过中断服务不能执行时间太长
leasor 发表于 2008-4-2 19:27 | 显示全部楼层

我的天~~~~~~~~~~


你们还在搞分任务的教科书模式吗?

快点改时间片,不然写代码那简直是一场灾难。

doublers 发表于 2008-4-3 08:32 | 显示全部楼层

赞同computer00的说法

赞同computer00的说法,放到中断中去主程序不但轻松很多,而且结构清晰,易于管理,更能体现C的优点
 楼主| zzdianzimi 发表于 2008-4-3 09:29 | 显示全部楼层

我是这样想的

我是使用有四位的共阳LED,学习使用的89C51芯片,编程语言用汇编,我昨晚又试了一个晚上,还是没能成功实现我的想法,问题是这样的:我是把显示放到中断,使用的是散转指令(刚刚接触单片机不知道怎样用汇编语言来实现我的想法,大家有没有什么好的学习意见?),结果前三次的中断时间间隔是一样的,第四次却跟前三次不一样,一时查不出来,由于已经12点多了,今天还得上班,所以先睡了,晚上继续调试
computer00 发表于 2008-4-3 10:04 | 显示全部楼层

建议你学C语言,用switch语句很轻松

汇编的话,可以计算出偏移量,然后跳转。实际上就是一个状态机,每跳一次就显示一位LED,并将状态改到下一种,
然后就可以返回了。状态到最后一种时复位状态,如此反复。
winloop 发表于 2008-4-3 11:14 | 显示全部楼层

我的放在主程序里扫描

gyt 发表于 2008-4-3 13:23 | 显示全部楼层

C的switch

就是散转指令的意思啊
杨益成 发表于 2008-4-3 15:59 | 显示全部楼层

都可以实现

其实放在外面或者中断里面都可以,扫描的程序不算很长,中断处理影响不是很大。放在外面,通过读定时器的值,一样可以做到很准确。例如:你要100hz扫描一次,在循环通过读Tcc的值可以得到,打开定时器,假设的Tcc递增一次是1ms,主循环不断读Tcc的值,当前Tcc-上一次Tcc=10,就扫描一次,不就是100Hz了,然后保存这次的Tcc,为下一次用。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

42

主题

163

帖子

1

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