孔憲青
摘要:介紹了一種C51下的按鍵檢測方式,并給出了程序的運行方法。
關(guān)鍵詞:節(jié)拍控制;按鍵檢測
中圖分類號:TP312 文獻標識碼:A 文章編號:1009-3044(2014)34-8154-02
用C語言在Keil軟件上進行單片機程序的編輯是常用的,其中按鍵檢測是必須的。傳統(tǒng)的最簡單的按鍵檢測就是使用延時去抖動,而去抖動的10ms左右時間是必須要通過指令來執(zhí)行的。通過一個定時器能實現(xiàn)的單片機節(jié)拍控制是無操作系統(tǒng)下最簡單的任務(wù)管理模式,如果按鍵檢測也使用這個節(jié)拍,可以使這10ms的時間也節(jié)省出來,可提高了CPU的運行效率,縮短了總線周期。
1 節(jié)拍控制實現(xiàn)對程序的事件處理和并行時序分配
通過狀態(tài)機檢測按鍵,必須使用節(jié)拍控制。狀態(tài)機不是連續(xù)的時間單位,它是以事件為中心的編程思想。因此必須把檢測按鍵變成事件來處理,而節(jié)拍控制是單片機實現(xiàn)多任務(wù)處理最好的方式,因此按鍵檢測就可以融合到節(jié)拍控制中。Main.c文件內(nèi)部while(1){……}采用一個定時中斷來產(chǎn)生節(jié)拍,例如AT89S52的16位定時器T2,設(shè)置T2為自動重裝,然后每5ms產(chǎn)生一個節(jié)拍。這樣在程序前臺[1]有一個節(jié)拍來控制任務(wù)的執(zhí)行。見下面程序:
1) 定義節(jié)拍 char beat[3]=0; //全局節(jié)拍的個數(shù)由并行模塊的數(shù)量決定
2) 設(shè)置節(jié)拍
3) 中斷方式激活節(jié)拍
4) 控制并行模塊while(1)
節(jié)拍控制要占用一個定時器產(chǎn)生節(jié)拍,定時器設(shè)置為低級。通過節(jié)拍的并行模式不是一個真正的并行結(jié)構(gòu)。單片機指令執(zhí)行是串行的,但宏觀上節(jié)拍的引入,使事件或任務(wù)的發(fā)生僅僅出現(xiàn)在時間軸的點上,任務(wù)就類似并行序列。
2 按鍵的檢測
傳統(tǒng)按鍵檢測就是加延時去掉抖動。類似這樣的:if(kex){ delay(xxx);if(key){……}}。狀態(tài)機檢測按鍵是要求利用節(jié)拍來檢測,節(jié)拍如果5ms一次。那么當檢測到按鍵的第一次數(shù)值進行保存,當?shù)诙喂?jié)拍到來時候,再去檢測。比較前后兩次的鍵值,如果相同則進入任務(wù)執(zhí)行。因為這時候的去抖動是靠節(jié)拍的間隔來是實現(xiàn)的,中間這段時間別空閑給CPU利用。對于按鍵來說,是通過狀態(tài)機方式來運行的狀態(tài)機檢測方式,具體運行模式見狀態(tài)機結(jié)構(gòu)圖1:
3 結(jié)束語
按鍵檢測是智能儀表最常用的,在快速響應(yīng)的場合按鍵的檢測需要浪費10~20ms的時間,如果按鍵很多,勢必造成大量無用的延時。該文從狀態(tài)機編程思想出發(fā),介紹在節(jié)拍控制下如何組織和檢測按鍵,使用了并行程序設(shè)計中的狀態(tài)機思想。其中要點是建立狀態(tài)機函數(shù),這種組織形式為類似的程序處理也提供了參考。
參考文獻:
[1] 侯殿有. 基于八位單片機的C語言程序設(shè)計[M]. 北京:北京大學出版社,2012.endprint
摘要:介紹了一種C51下的按鍵檢測方式,并給出了程序的運行方法。
關(guān)鍵詞:節(jié)拍控制;按鍵檢測
中圖分類號:TP312 文獻標識碼:A 文章編號:1009-3044(2014)34-8154-02
用C語言在Keil軟件上進行單片機程序的編輯是常用的,其中按鍵檢測是必須的。傳統(tǒng)的最簡單的按鍵檢測就是使用延時去抖動,而去抖動的10ms左右時間是必須要通過指令來執(zhí)行的。通過一個定時器能實現(xiàn)的單片機節(jié)拍控制是無操作系統(tǒng)下最簡單的任務(wù)管理模式,如果按鍵檢測也使用這個節(jié)拍,可以使這10ms的時間也節(jié)省出來,可提高了CPU的運行效率,縮短了總線周期。
1 節(jié)拍控制實現(xiàn)對程序的事件處理和并行時序分配
通過狀態(tài)機檢測按鍵,必須使用節(jié)拍控制。狀態(tài)機不是連續(xù)的時間單位,它是以事件為中心的編程思想。因此必須把檢測按鍵變成事件來處理,而節(jié)拍控制是單片機實現(xiàn)多任務(wù)處理最好的方式,因此按鍵檢測就可以融合到節(jié)拍控制中。Main.c文件內(nèi)部while(1){……}采用一個定時中斷來產(chǎn)生節(jié)拍,例如AT89S52的16位定時器T2,設(shè)置T2為自動重裝,然后每5ms產(chǎn)生一個節(jié)拍。這樣在程序前臺[1]有一個節(jié)拍來控制任務(wù)的執(zhí)行。見下面程序:
1) 定義節(jié)拍 char beat[3]=0; //全局節(jié)拍的個數(shù)由并行模塊的數(shù)量決定
2) 設(shè)置節(jié)拍
3) 中斷方式激活節(jié)拍
4) 控制并行模塊while(1)
節(jié)拍控制要占用一個定時器產(chǎn)生節(jié)拍,定時器設(shè)置為低級。通過節(jié)拍的并行模式不是一個真正的并行結(jié)構(gòu)。單片機指令執(zhí)行是串行的,但宏觀上節(jié)拍的引入,使事件或任務(wù)的發(fā)生僅僅出現(xiàn)在時間軸的點上,任務(wù)就類似并行序列。
2 按鍵的檢測
傳統(tǒng)按鍵檢測就是加延時去掉抖動。類似這樣的:if(kex){ delay(xxx);if(key){……}}。狀態(tài)機檢測按鍵是要求利用節(jié)拍來檢測,節(jié)拍如果5ms一次。那么當檢測到按鍵的第一次數(shù)值進行保存,當?shù)诙喂?jié)拍到來時候,再去檢測。比較前后兩次的鍵值,如果相同則進入任務(wù)執(zhí)行。因為這時候的去抖動是靠節(jié)拍的間隔來是實現(xiàn)的,中間這段時間別空閑給CPU利用。對于按鍵來說,是通過狀態(tài)機方式來運行的狀態(tài)機檢測方式,具體運行模式見狀態(tài)機結(jié)構(gòu)圖1:
3 結(jié)束語
按鍵檢測是智能儀表最常用的,在快速響應(yīng)的場合按鍵的檢測需要浪費10~20ms的時間,如果按鍵很多,勢必造成大量無用的延時。該文從狀態(tài)機編程思想出發(fā),介紹在節(jié)拍控制下如何組織和檢測按鍵,使用了并行程序設(shè)計中的狀態(tài)機思想。其中要點是建立狀態(tài)機函數(shù),這種組織形式為類似的程序處理也提供了參考。
參考文獻:
[1] 侯殿有. 基于八位單片機的C語言程序設(shè)計[M]. 北京:北京大學出版社,2012.endprint
摘要:介紹了一種C51下的按鍵檢測方式,并給出了程序的運行方法。
關(guān)鍵詞:節(jié)拍控制;按鍵檢測
中圖分類號:TP312 文獻標識碼:A 文章編號:1009-3044(2014)34-8154-02
用C語言在Keil軟件上進行單片機程序的編輯是常用的,其中按鍵檢測是必須的。傳統(tǒng)的最簡單的按鍵檢測就是使用延時去抖動,而去抖動的10ms左右時間是必須要通過指令來執(zhí)行的。通過一個定時器能實現(xiàn)的單片機節(jié)拍控制是無操作系統(tǒng)下最簡單的任務(wù)管理模式,如果按鍵檢測也使用這個節(jié)拍,可以使這10ms的時間也節(jié)省出來,可提高了CPU的運行效率,縮短了總線周期。
1 節(jié)拍控制實現(xiàn)對程序的事件處理和并行時序分配
通過狀態(tài)機檢測按鍵,必須使用節(jié)拍控制。狀態(tài)機不是連續(xù)的時間單位,它是以事件為中心的編程思想。因此必須把檢測按鍵變成事件來處理,而節(jié)拍控制是單片機實現(xiàn)多任務(wù)處理最好的方式,因此按鍵檢測就可以融合到節(jié)拍控制中。Main.c文件內(nèi)部while(1){……}采用一個定時中斷來產(chǎn)生節(jié)拍,例如AT89S52的16位定時器T2,設(shè)置T2為自動重裝,然后每5ms產(chǎn)生一個節(jié)拍。這樣在程序前臺[1]有一個節(jié)拍來控制任務(wù)的執(zhí)行。見下面程序:
1) 定義節(jié)拍 char beat[3]=0; //全局節(jié)拍的個數(shù)由并行模塊的數(shù)量決定
2) 設(shè)置節(jié)拍
3) 中斷方式激活節(jié)拍
4) 控制并行模塊while(1)
節(jié)拍控制要占用一個定時器產(chǎn)生節(jié)拍,定時器設(shè)置為低級。通過節(jié)拍的并行模式不是一個真正的并行結(jié)構(gòu)。單片機指令執(zhí)行是串行的,但宏觀上節(jié)拍的引入,使事件或任務(wù)的發(fā)生僅僅出現(xiàn)在時間軸的點上,任務(wù)就類似并行序列。
2 按鍵的檢測
傳統(tǒng)按鍵檢測就是加延時去掉抖動。類似這樣的:if(kex){ delay(xxx);if(key){……}}。狀態(tài)機檢測按鍵是要求利用節(jié)拍來檢測,節(jié)拍如果5ms一次。那么當檢測到按鍵的第一次數(shù)值進行保存,當?shù)诙喂?jié)拍到來時候,再去檢測。比較前后兩次的鍵值,如果相同則進入任務(wù)執(zhí)行。因為這時候的去抖動是靠節(jié)拍的間隔來是實現(xiàn)的,中間這段時間別空閑給CPU利用。對于按鍵來說,是通過狀態(tài)機方式來運行的狀態(tài)機檢測方式,具體運行模式見狀態(tài)機結(jié)構(gòu)圖1:
3 結(jié)束語
按鍵檢測是智能儀表最常用的,在快速響應(yīng)的場合按鍵的檢測需要浪費10~20ms的時間,如果按鍵很多,勢必造成大量無用的延時。該文從狀態(tài)機編程思想出發(fā),介紹在節(jié)拍控制下如何組織和檢測按鍵,使用了并行程序設(shè)計中的狀態(tài)機思想。其中要點是建立狀態(tài)機函數(shù),這種組織形式為類似的程序處理也提供了參考。
參考文獻:
[1] 侯殿有. 基于八位單片機的C語言程序設(shè)計[M]. 北京:北京大學出版社,2012.endprint