孔憲青
摘要:介紹了一種C51下的按鍵檢測方式,并給出了程序的運行方法。
關鍵詞:節拍控制;按鍵檢測
中圖分類號:TP312 文獻標識碼:A 文章編號:1009-3044(2014)34-8154-02
用C語言在Keil軟件上進行單片機程序的編輯是常用的,其中按鍵檢測是必須的。傳統的最簡單的按鍵檢測就是使用延時去抖動,而去抖動的10ms左右時間是必須要通過指令來執行的。通過一個定時器能實現的單片機節拍控制是無操作系統下最簡單的任務管理模式,如果按鍵檢測也使用這個節拍,可以使這10ms的時間也節省出來,可提高了CPU的運行效率,縮短了總線周期。
1 節拍控制實現對程序的事件處理和并行時序分配
通過狀態機檢測按鍵,必須使用節拍控制。狀態機不是連續的時間單位,它是以事件為中心的編程思想。因此必須把檢測按鍵變成事件來處理,而節拍控制是單片機實現多任務處理最好的方式,因此按鍵檢測就可以融合到節拍控制中。Main.c文件內部while(1){……}采用一個定時中斷來產生節拍,例如AT89S52的16位定時器T2,設置T2為自動重裝,然后每5ms產生一個節拍。這樣在程序前臺[1]有一個節拍來控制任務的執行。見下面程序:
1) 定義節拍 char beat[3]=0; //全局節拍的個數由并行模塊的數量決定
2) 設置節拍
3) 中斷方式激活節拍
4) 控制并行模塊while(1)
節拍控制要占用一個定時器產生節拍,定時器設置為低級。通過節拍的并行模式不是一個真正的并行結構。單片機指令執行是串行的,但宏觀上節拍的引入,使事件或任務的發生僅僅出現在時間軸的點上,任務就類似并行序列。