<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 單片機(jī)程序設(shè)計(jì)中運(yùn)用事件驅(qū)動(dòng)機(jī)制

          單片機(jī)程序設(shè)計(jì)中運(yùn)用事件驅(qū)動(dòng)機(jī)制

          作者: 時(shí)間:2012-03-08 來(lái)源:網(wǎng)絡(luò) 收藏

          1 傳統(tǒng)程序開發(fā)的不足

          在傳統(tǒng)的程序中,通常是以“過(guò)程”和“操作”為中心的結(jié)構(gòu),程序按規(guī)定的過(guò)程順序地執(zhí)行,與外設(shè)的連接一般采用中斷方式,在中斷服務(wù)程序中完成外設(shè)的全部處理工作,主程序一般是初始化系統(tǒng)并等待中斷的發(fā)生。這種結(jié)構(gòu)成熟、易于理解,但有如下不足:

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

          (2)中斷服務(wù)程序過(guò)長(zhǎng),在中斷服務(wù)期間系統(tǒng)無(wú)法響應(yīng)同級(jí)的中斷;

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

          (4)程序調(diào)試時(shí),花在各模塊定時(shí)協(xié)調(diào)方面的時(shí)間、精力隨系統(tǒng)的復(fù)雜程序大幅增加。

          如果在編寫單片機(jī)程序時(shí),引入Windows程序中的機(jī)制,把中斷響應(yīng)與事件處理程序分離,中斷服務(wù)程序的任務(wù)只是產(chǎn)生一個(gè)中斷發(fā)生的標(biāo)志,而事件處理則由處理程序來(lái)完成,主程序則負(fù)責(zé)判斷標(biāo)志和調(diào)度處理程序。這樣,可大幅縮短中斷服務(wù)程序的長(zhǎng)度,減少斷服務(wù)程序的耗時(shí),提高系統(tǒng)對(duì)多中斷的響應(yīng)能力,從而較好地解決上述矛盾。

          2 Windows的機(jī)制

          在Windosw 系統(tǒng)中,程序的設(shè)計(jì)圍繞來(lái)進(jìn)行。當(dāng)對(duì)象有相關(guān)的事件發(fā)生時(shí)(如按下鼠標(biāo)鍵),對(duì)象產(chǎn)生一條特定的標(biāo)識(shí)事件發(fā)生的消息,消息被送入消息隊(duì)列,或不進(jìn)入隊(duì)列而直接發(fā)送給處理對(duì)象,主程序負(fù)責(zé)組織消息隊(duì)列,將消息發(fā)送給相應(yīng)的處理程序,使相應(yīng)的處理程序執(zhí)行相應(yīng)的動(dòng)作,做完相應(yīng)的處理后將控制權(quán)交還給主程序。

          在這種機(jī)制中,對(duì)象的請(qǐng)求僅僅是向隊(duì)列中添加相應(yīng)的消息,耗時(shí)的處理則被分離給處理函數(shù)。這種結(jié)構(gòu)的程序中各功能模塊界限分明,便于擴(kuò)充,能充分利用CPU的處理能力,使系統(tǒng)對(duì)外界響應(yīng)準(zhǔn)確而及時(shí)。

          3 事件驅(qū)動(dòng)的單片機(jī)

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

          本文以一IC卡讀寫機(jī)為例,說(shuō)明事件驅(qū)動(dòng)機(jī)制在單片機(jī)中的具體應(yīng)用。

          3.1 硬件結(jié)構(gòu)

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

          3.2 事件驅(qū)動(dòng)機(jī)制的單片機(jī)

          中斷申請(qǐng)標(biāo)志

          在系統(tǒng)中定義一個(gè)可位尋址的單元,在此把它命名為Message_Flag,用來(lái)記錄描述中斷事件發(fā)生的情況。各位的定義如下:

          *Message_Flag中某位為1表示當(dāng)前有相應(yīng)的事件發(fā)生,為0則當(dāng)有沒(méi)有相應(yīng)的事件發(fā)生。


          上一頁(yè) 1 2 3 下一頁(yè)

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();