標(biāo)題: 從設(shè)計(jì)角度理解單片機(jī)定時(shí)器及相應(yīng)的程序結(jié)構(gòu) [打印本頁(yè)]
作者: 慢慢思考 時(shí)間: 2018-1-7 21:21
標(biāo)題: 從設(shè)計(jì)角度理解單片機(jī)定時(shí)器及相應(yīng)的程序結(jié)構(gòu)
可以這樣說(shuō),如果你不能理解在單片機(jī)中為什么要設(shè)計(jì)這么一個(gè)東西、如何設(shè)計(jì)的這個(gè)東西,那么你就只能照抄別人的程序,而不知道程序結(jié)構(gòu)為什么是這樣的,這個(gè)沒(méi)意思是吧?所以,我們應(yīng)該弄懂。
簡(jiǎn)單點(diǎn)說(shuō)吧,我們知道在單片機(jī)的工作中,經(jīng)常在做完一件事后,需要延遲一段時(shí)間才能去做下一步事件,也就是要“確定過(guò)一段時(shí)間”即定時(shí)。
我們知道,在單片機(jī)中,程序的執(zhí)行都是由中央處理器來(lái)執(zhí)行的。我們把這個(gè)“中央處理器”比作你,你做完一步,然后要延遲一段時(shí)間后再去做下一步。這個(gè)延遲時(shí)間的做法,我們首先想到的就是自己去數(shù)數(shù),一二三四等等,數(shù)到了,就開(kāi)始做下一步。這個(gè)蠻浪費(fèi)你的時(shí)間,因?yàn)槟阕约河?jì)數(shù)時(shí),別的事就都干不了了。這個(gè)方法在編程中,我們就看到是放在主程序中直接執(zhí)行延時(shí)計(jì)算程序(或者是直接調(diào)用延時(shí)子程序)。
為了解決浪費(fèi)的問(wèn)題,我們就想到了在旁邊放一個(gè)鐘,讓鐘來(lái)幫你數(shù)數(shù)(計(jì)時(shí)),然后你可以做其它的事,過(guò)一會(huì)看一下鐘,再做其它的事,再過(guò)一會(huì)再看一下鐘,也就是做一會(huì)事看一下鐘,一看時(shí)間到了,就開(kāi)始做你原先計(jì)劃定時(shí)后的下一步。這個(gè)方法在編程中,我們就看到主程序中依然要花一段程序去實(shí)現(xiàn)延時(shí),這個(gè)依然需要占用你(中央處理器)一定的時(shí)間。
有沒(méi)有不需要中央處理器來(lái)直接實(shí)現(xiàn)延時(shí)(定時(shí))的辦法?那就是讓鐘加一個(gè)鬧鐘功能嘛,你只需要象我們?cè)谏钪惺褂敏[鐘一樣設(shè)定需要延遲的時(shí)間段,并在這個(gè)鬧鐘下面寫(xiě)一張條子,條子上面寫(xiě)好這個(gè)鬧鐘開(kāi)鬧后你要做的事,設(shè)好后你該干嘛就去干嘛,等鬧鐘響了,你先把手頭上正在做的事記一下做到哪了,然后你就跑去干這個(gè)條子上的事就行了。這個(gè)方法在編程中,我們就看到有了個(gè)中斷程序,這個(gè)中斷程序中放的就是條子上寫(xiě)的事。
這里需要說(shuō)明的是,單片機(jī)中的定時(shí)器,猶如你生活中的鬧鐘一樣,是另外一個(gè)東西,而不是中央處理器的一部分,它是做在單片機(jī)中的一個(gè)功能硬件。而且,所有的程序執(zhí)行,都是你(中央處理器)的事,鬧鐘的設(shè)定與解除,也是你的事而不是鬧鐘的事,包括中斷程序中的程序,也是由中央處理器來(lái)執(zhí)行的。這一點(diǎn),對(duì)于我們理解程序結(jié)構(gòu)很重要。
我們可以再深入思考一下:中斷程序中的程序,能不能由鬧鐘來(lái)執(zhí)行?那樣不是可以更加節(jié)省中央處理器的時(shí)間?這個(gè)應(yīng)該是可以的吧?你給鬧鐘再配一個(gè)人嘛,也就是你給鬧鐘也加一個(gè)中央處理器就行了,讓他去干條子上的事。只不過(guò),我們現(xiàn)在用的單片機(jī),都沒(méi)這個(gè)功能,你想要這么一個(gè)單片機(jī),那你得自己動(dòng)手設(shè)計(jì)并制造了。如果你不想或不能設(shè)計(jì),那你得再買(mǎi)一片單片機(jī)了,劃不劃算是另外一回事,你的思路應(yīng)該這樣開(kāi)闊。
PS:細(xì)節(jié)上的差別我就不說(shuō)了。
| 歡迎光臨 (http://www.denmoz.com/bbs/) |
Powered by Discuz! X3.1 |