新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 單片機程序設計中運用事件驅動機制

        單片機程序設計中運用事件驅動機制

        作者: 時間:2012-03-08 來源:網絡 收藏

        1 傳統程序開發的不足

        在傳統的程序中,通常是以“過程”和“操作”為中心的結構,程序按規定的過程順序地執行,與外設的連接一般采用中斷方式,在中斷服務程序中完成外設的全部處理工作,主程序一般是初始化系統并等待中斷的發生。這種結構成熟、易于理解,但有如下不足:

        (1)受性能的限制,容易造成系統對其它中斷的響應變得遲緩,特別是對于中斷源較多、中斷處理耗時較多的系統(如:LED顯示、鍵盤掃描等);

        (2)中斷服務程序過長,在中斷服務期間系統無法響應同級的中斷;

        (3)可能導致代碼重入,增大堆棧開銷,造成難以預料的結果;

        (4)程序調試時,花在各模塊定時協調方面的時間、精力隨系統的復雜程序大幅增加。

        如果在編寫單片機程序時,引入Windows程序中的機制,把中斷響應與事件處理程序分離,中斷服務程序的任務只是產生一個中斷發生的標志,而事件處理則由處理程序來完成,主程序則負責判斷標志和調度處理程序。這樣,可大幅縮短中斷服務程序的長度,減少斷服務程序的耗時,提高系統對多中斷的響應能力,從而較好地解決上述矛盾。

        2 Windows的機制

        在Windosw 系統中,程序的設計圍繞來進行。當對象有相關的事件發生時(如按下鼠標鍵),對象產生一條特定的標識事件發生的消息,消息被送入消息隊列,或不進入隊列而直接發送給處理對象,主程序負責組織消息隊列,將消息發送給相應的處理程序,使相應的處理程序執行相應的動作,做完相應的處理后將控制權交還給主程序。

        在這種機制中,對象的請求僅僅是向隊列中添加相應的消息,耗時的處理則被分離給處理函數。這種結構的程序中各功能模塊界限分明,便于擴充,能充分利用CPU的處理能力,使系統對外界響應準確而及時。

        3 事件驅動的單片機

        與Windows 系統相比,單片機的資源非常有限,因此,單片機程序中的事件驅動機制只能采取一種簡化的方式。當某個中斷發生時,中斷服務程序設置相應的標志,不同的標導代表不同的中斷發生的消息,而主程序不斷地判別這些標志,以決定啟動哪一個處理函數。相應的處理函數被啟動處理完相關的任務后,清除此標志,然后把控制權交還給主程序。采用這種機制,可合理地利用有限資源,使程序調試的工作量大幅下降。對于延時、定時處理(如LED顯示、鍵盤掃描等),更可方便地使用一定時器來完成延時、定時的任務,從而把CPU從這種耗時的任務中解放出來,確保系統對多中斷有足夠的響應能力。

        本文以一IC卡讀寫機為例,說明事件驅動機制在單片機中的具體應用。

        3.1 硬件結構

        本系統以ATMEL公司的89C51為核心(如圖1)。89C51價格低廉,性能較好,片內有4KB 的可擦寫程序存儲器,可滿足本系統的要求。為簡化硬件結構及系統能耗,鍵盤采用軟件掃描的矩陣鍵盤。LED顯示采用段位動態掃描,在任一時刻LED中最多只有一段被點亮。具體是在位選信號送某位LED的公共極時,每隔一個時間片依次輸出該位LED的段碼(含小數點),輸出完成一位后,再逐閃輸出下一位。從第一位至第N位LED依次分成8×N個時間片循環掃描顯示。串口UART作為系統與外部數據通信的通道,IC卡的讀寫由MCU模擬I2C協議來實現。

        3.2 事件驅動機制的單片機

        中斷申請標志

        在系統中定義一個可位尋址的單元,在此把它命名為Message_Flag,用來記錄描述中斷事件發生的情況。各位的定義如下:

        *Message_Flag中某位為1表示當前有相應的事件發生,為0則當有沒有相應的事件發生。


        上一頁 1 2 3 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 泰顺县| 英超| 尚义县| 铜山县| 台东市| 隆安县| 安溪县| 中山市| 于田县| 鄂托克前旗| 保定市| 新河县| 孙吴县| 通化县| 龙泉市| 云林县| 道孚县| 隆安县| 无锡市| 灵石县| 大港区| 周至县| 柘城县| 三都| 玉山县| 新巴尔虎左旗| 卢龙县| 湖南省| 喀什市| 青浦区| 常宁市| 环江| 东丽区| 台安县| 无棣县| 株洲县| 沾化县| 遂昌县| 平顶山市| 竹山县| 瑞昌市|