51单片机利用中断使数码管动态显示,其优势是什么

今日头条

1151人已加入

描述

关于中断的寄存器,如图:

寄存器

图1 IE——中断使能寄存器的位分配(地址 0xA8、可位寻址)

寄存器

图2 IE——中断使能寄存器的位描述

中断使能寄存器 IE 的位 0~5 控制了 6 个中断使能,而第 6 位没有用到,第 7 位是总开 关。总开关就相当于我们家里或者学生宿舍里的那个电源总闸门,而 0~5 位这 6 个位相当 于每个分开关。那么也就是说,我们只要用到中断,就要写 EA = 1 这一句,打开中断总开关, 然后用到哪个分中断,再打开相对应的控制位就可以了。

寄存器

图3 中断查询序列

这个表格同样不需要大家记住,需要的时候过来查就可以了。我们现在看第二行的 T0 中断,要使能这个中断那么就要把它的中断使能位 ET0 置 1,当它的中断标志位 TF0 变为 1 时,就会触发 T0 中断了,那么这时就应该来执行中断函数了,单片机又怎样找到这个中断 函数呢?靠的就是中断向量地址,所以 interrupt 后面中断函数编号的数字 x 就是根据中断向 量得出的,它的计算方法是 x*8+3=向量地址。当然表中都已经给算好放在第一栏了,我们可 以直接查出来用就行了。到此为止,中断函数的命名规则我们就都搞清楚了。 

中断函数写好后,每当满足中断条件而触发中断后,系统就会自动来调用中断函数。比 如我们上面这个程序,平时一直在主程序 while(1)的循环中执行,假如程序有 100 行,当执 行到 50 行时,定时器溢出了,那么单片机就会立刻跑到中断函数中执行中断程序,中断程 序执行完毕后再自动返回到刚才的第 50 行处继续执行下面的程序,这样就保证了动态显示 间隔是固定的 1ms,不会因为程序执行时间不一致的原因导致数码管显示的抖动了。

为什么要用中断?

我们的数码管上的数字每一秒变化一 次,变化的时候,不参加变化的数码管可能出现一次抖动,这个抖动没有什么专业的名字, 我们就称之为数码管抖动吧。这种数码管抖动是什么原因造成的呢?为何在数据改变的时候 才抖动呢? 

来分析一下我们的程序,程序在定时到 1 秒的时候,执行了“秒数+1 并转换为数码管显示字符这个操作,一个 32 位整型数的除法运算,实际上是比较耗费时间的,至于这一段 程序究竟耗费了多少时间,大家可以通过第四章讲的调试方法来看看这段程序运行用了多少 时间。由于每次定时到 1 秒的时候,程序都多运行了这么一段,导致了某个数码管的点亮时比其他情况下要长一些,总时间就变成了 1ms+本段程序运行时间,于此同时,其它的数码管就熄灭了 5ms+本段程序运行时间,如果这段程序运行时间非常短,那么可以忽略不计, 但很明显,现在这段程序运行时间已经比较长了,以致于严重影响到视觉效果了,所以我们要采取中断去解决这个问题。

fqj

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分