sharpxcb的笔记 https://bbs.21ic.com/?321853 [收藏] [复制] [RSS]

日志

“巨人的肩膀”之程式时序篇

已有 617 次阅读2010-9-16 13:04 |系统分类:单片机

在单片机“微秒必争”的世界里,时序的合理布控可谓是生命忧关,同样是单片机,有人可以写出实时性的操作系统,而有人却点亮个LED都会闪烁;好的主程式循环布局,不用中断来计时或事件中断,照样可以完成精准的走时,且其实时性,响应度不会有丝毫影响!


首先来说说决定时序的关键所在----时钟源,对于大部分MCU来说,都是每个指令周期为4振荡周期,这也是为什么往往我们看到的时钟源大多是4M8M的缘故了,大多数指令在整数倍的时序周期(如4M1us)内完成,也就方便了我们对时序的掌控;在有些要求精准时间的系统中,Real time 又帮了我们大忙,以32.768KHZ为整数倍而分频得到的RTC,可为我们得到准确的0.5s1s……,这也是我们在有些产品中看到的4.195M时钟源的缘故。


在有一个定时器的MCU应用程式中,开启定时器的计时功能,但不开中断功能,在主程式循环体内,每隔段时间在固定的地方等待判断定时器的或计时间隔时间标志,或溢出时间标志,保证整个主程式循环体每个循环周期为一个固定时间,这样就可以在主循环体内安插一段处理时间的子程式,依循环周期固定时间*N得到250ms500等,进而加入计数器得到秒,分,小时等较精确的系统时间,依这些秒,分标志,你想怎样安排你的任何时间段都可以,当然这样的前提是你必需保证你的主程式循环体内没有未知性的时间差分,如小的循环延时,外界的随机性的接收判断死循环等;


当主程式循环体内有较长的时间延时程式怎么办呢,我们可以采用定时中断来得到500ms(你的主程式循环周期应该不会长于500ms),置相应标志,在主程式安插一段处理时间的子程式,照样可以得到秒,分标志,这样即使你的个别秒种间隔会有稍许的延时差异,但我相信整个某一时间段的计时应该没有多大出入,若有RTC配合定时的精准中断,则做一个低功耗的钟表都绰绰有余!


时序的另一较大用途是用于软件模拟相关的通讯协议,如IICSPI等,配合IO的普通功能,按照较严格的时序操作(满足通讯协议的时钟数据的变化),普通的MCU也能发挥高效的性能;


MCU的软件防呆上来讲,时序的应用也大有益处,在一个循环等待外界电平变化的“死循环”内,如果用一个最大计时周期来判断等待的溢出,软件判断计时器的最大值,而强制性的退出循环体,就不会因无穷的等待而死机了!


路过

鸡蛋

鲜花

握手

雷人

评论 (0 个评论)