新手求助!数码管送显时间问题
时间:10-02
整理:3721RD
点击:
根据宋老师的教材程序,可以看出数码管的中断刷新周期是1ms,满1000次后也就是满1s后返回主程序即while(1)处开始给数码管送显,但是在此过程中我觉得会有点问题,具体我举例如下(以程序起始运行到1s截至为例):
假设程序从第1ms,2ms,3ms......一致执行到1000ms时,也即执行到了第1000次中断时,也就是正好计时到了1s的时刻,即flags=1,这时数码管应该立即开始显示000 001了,假设送显程序段从if (flag1s == 1)执行到赋值语句LedBuff[0] = LedChar[sec%10]需要10ms,由于数码管刷新中断是1ms执行一次,那么CPU在执行到送显赋值的过程中(共需10ms),会产生10次刷新中断,这样的话就造成要延时10ms才能显示当前计时值了。
以上的意思也就是,时间到了1s的时候,由于送显程序自身运行要一定时间,而且中断程序要1ms要执行一次,那么CPU基本上一直被中断程序占用(假设送显程序执行时间相对较长),导致当前计时值无法立即显示到数码管上,而且该延时时间应该是送显程序自身执行时间加上这段时间内中断程序执行占用的时间.
以上理解对吗?请各位老师帮忙回答一下,谢谢!
假设程序从第1ms,2ms,3ms......一致执行到1000ms时,也即执行到了第1000次中断时,也就是正好计时到了1s的时刻,即flags=1,这时数码管应该立即开始显示000 001了,假设送显程序段从if (flag1s == 1)执行到赋值语句LedBuff[0] = LedChar[sec%10]需要10ms,由于数码管刷新中断是1ms执行一次,那么CPU在执行到送显赋值的过程中(共需10ms),会产生10次刷新中断,这样的话就造成要延时10ms才能显示当前计时值了。
以上的意思也就是,时间到了1s的时候,由于送显程序自身运行要一定时间,而且中断程序要1ms要执行一次,那么CPU基本上一直被中断程序占用(假设送显程序执行时间相对较长),导致当前计时值无法立即显示到数码管上,而且该延时时间应该是送显程序自身执行时间加上这段时间内中断程序执行占用的时间.
以上理解对吗?请各位老师帮忙回答一下,谢谢!
表示向学习
数码管动态显示以1ms刷新一次是完全合理的,如果是8个数码管完成一轮刷新需要约8ms,如果你的显示程序需要10ms才能完成一个数码管刷新,那么这个程序是有缺陷的。设计比较好的数码管动态显示程序只需要几十us就完成1个数码管刷新并自动保持,不用延时等待,而是跳出该程序执行其他任务,1ms后再来刷新下一个数码管。
假设不成立,题主低估了CPU的处理速度。两次中断间隔时间(第一次中断结束到第二次触发中断)完全足够显示语句的执行。用keil软件的话可以打开调试状态看看语句执行时间是多长。
要是往极端上想的话,中断时间设置时间成微秒级别的话,可能会满足题主的那种假设。不过时间还要满足中断函数的执行才行。
谢谢王工的指导!感觉按你的指导,的确是低估了单片机的运行速度了。
谢谢王工的指导!感觉按你的指导,的确是低估了单片机的运行速度了。
谢谢王工的指导!感觉按你的指导,的确是低估了单片机的运行速度了。
谢谢王工的指导!感觉按你的指导,的确是低估了单片机的运行速度了。
谢谢王工的指导!感觉按你的指导,的确是低估了单片机的运行速度了。
谢谢王工的指导!感觉按你的指导,的确是低估了单片机的运行速度了。