可以這樣說,如果你不能理解在單片機中為什么要設計這么一個東西、如何設計的這個東西,那么你就只能照抄別人的程序,而不知道程序結構為什么是這樣的,這個沒意思是吧?所以,我們應該弄懂。 簡單點說吧,我們知道在單片機的工作中,經常在做完一件事后,需要延遲一段時間才能去做下一步事件,也就是要“確定過一段時間”即定時。 我們知道,在單片機中,程序的執行都是由中央處理器來執行的。我們把這個“中央處理器”比作你,你做完一步,然后要延遲一段時間后再去做下一步。這個延遲時間的做法,我們首先想到的就是自己去數數,一二三四等等,數到了,就開始做下一步。這個蠻浪費你的時間,因為你自己計數時,別的事就都干不了了。這個方法在編程中,我們就看到是放在主程序中直接執行延時計算程序(或者是直接調用延時子程序)。 為了解決浪費的問題,我們就想到了在旁邊放一個鐘,讓鐘來幫你數數(計時),然后你可以做其它的事,過一會看一下鐘,再做其它的事,再過一會再看一下鐘,也就是做一會事看一下鐘,一看時間到了,就開始做你原先計劃定時后的下一步。這個方法在編程中,我們就看到主程序中依然要花一段程序去實現延時,這個依然需要占用你(中央處理器)一定的時間。 有沒有不需要中央處理器來直接實現延時(定時)的辦法?那就是讓鐘加一個鬧鐘功能嘛,你只需要象我們在生活中使用鬧鐘一樣設定需要延遲的時間段,并在這個鬧鐘下面寫一張條子,條子上面寫好這個鬧鐘開鬧后你要做的事,設好后你該干嘛就去干嘛,等鬧鐘響了,你先把手頭上正在做的事記一下做到哪了,然后你就跑去干這個條子上的事就行了。這個方法在編程中,我們就看到有了個中斷程序,這個中斷程序中放的就是條子上寫的事。 這里需要說明的是,單片機中的定時器,猶如你生活中的鬧鐘一樣,是另外一個東西,而不是中央處理器的一部分,它是做在單片機中的一個功能硬件。而且,所有的程序執行,都是你(中央處理器)的事,鬧鐘的設定與解除,也是你的事而不是鬧鐘的事,包括中斷程序中的程序,也是由中央處理器來執行的。這一點,對于我們理解程序結構很重要。 我們可以再深入思考一下:中斷程序中的程序,能不能由鬧鐘來執行?那樣不是可以更加節省中央處理器的時間?這個應該是可以的吧?你給鬧鐘再配一個人嘛,也就是你給鬧鐘也加一個中央處理器就行了,讓他去干條子上的事。只不過,我們現在用的單片機,都沒這個功能,你想要這么一個單片機,那你得自己動手設計并制造了。如果你不想或不能設計,那你得再買一片單片機了,劃不劃算是另外一回事,你的思路應該這樣開闊。 PS:細節上的差別我就不說了。
|