面向?qū)ο蠹夹g(shù)在單片機(jī)系統(tǒng)設(shè)計(jì)中的應(yīng)用
2.2.4 雙向通道類
雙向通道類包括串行通信類和預(yù)留的I/O類。該類可以和單片機(jī)類相互交換數(shù)據(jù)。本系統(tǒng)的串行通信類是RS-232接口,主要由MAX232芯片來完成該項(xiàng)功能。由于單片機(jī)的I/O資源有限,所以在單片機(jī)類設(shè)計(jì)中,留出了RAM的0FF00H~0FFFFH的256字節(jié)的地址空間做I/O口,供用戶擴(kuò)展使用。
2.3消息驅(qū)動(dòng)在本系統(tǒng)的實(shí)現(xiàn)
在某個(gè)事件發(fā)生時(shí),監(jiān)控程序?qū)⒃O(shè)置該事件相對應(yīng)的消息標(biāo)志,監(jiān)控程序?qū)@些標(biāo)志進(jìn)行判斷來決定執(zhí)行請求處理的事件。如外部中斷0請求處理中斷的事件的處理:當(dāng)外部中斷0請求處理時(shí),監(jiān)控程序暫停當(dāng)前任務(wù),判斷當(dāng)前任務(wù)數(shù),如果當(dāng)前任務(wù)數(shù)大于等于MAX_TASK(系統(tǒng)所允許的最大任務(wù)數(shù)),刪除優(yōu)先級最小的任務(wù)(優(yōu)先級的級數(shù)從0~MAX_TASK-1共有MAX_TASK個(gè),所以不存在優(yōu)先級相同的任務(wù),其中優(yōu)先級級數(shù)為0的優(yōu)先級最高),然后針對 INT0的請求設(shè)置消息標(biāo)志(修改消息隊(duì)列),并判斷它的優(yōu)先級與當(dāng)前任務(wù)優(yōu)先級的高低,以決定是否繼續(xù)當(dāng)前任務(wù)。消息驅(qū)動(dòng)的實(shí)現(xiàn)如圖2所示:
圖2 消息驅(qū)動(dòng)的實(shí)現(xiàn)示意圖
2.4 系統(tǒng)設(shè)計(jì)
我們將單片機(jī)系統(tǒng)類對象化,即組合成了一個(gè)通用板,提供了如下資源:64K的RAM和64K的ROM存儲(chǔ)器、4K的flash存儲(chǔ)器、A/D轉(zhuǎn)換芯片 AD574A和ADC0809的接口、D/A轉(zhuǎn)換芯片DAC0832的接口、一個(gè)16鍵的鍵盤接口、8個(gè)外部中斷接口、256個(gè)I/O口、一個(gè)4行16字的字符型液晶顯示器接口、一個(gè)320×240點(diǎn)陣式液晶顯示器接口和一個(gè)RS-232串行通訊口。原理框圖如圖3所示:
圖3 系統(tǒng)原理框圖
2.5 監(jiān)控程序設(shè)計(jì)
當(dāng)外部設(shè)備象單片機(jī)對象發(fā)送信號時(shí),監(jiān)控程序必須對鍵盤操作進(jìn)行解釋,然后調(diào)用相應(yīng)的功能模塊,完成預(yù)定的任務(wù),并通過顯示等方式給出執(zhí)行的結(jié)果。
系統(tǒng)投入運(yùn)行的最初時(shí)刻,應(yīng)對系統(tǒng)進(jìn)行自檢和初始化。開機(jī)自檢在系統(tǒng)初始化之前執(zhí)行,如果自檢無誤,則對系統(tǒng)進(jìn)行正常初始化,通常包括硬件初始化和軟件初始化兩個(gè)方面。硬件初始化工作是對系統(tǒng)中的各種硬件資源設(shè)定明確的初始狀態(tài),如對各種可編程芯片進(jìn)行編程、對各I/O端口設(shè)定初始狀態(tài)和為單片機(jī)的硬件資源分配任務(wù)等。軟件初始化包括對中斷的安排、對堆棧的安排、狀態(tài)變量的初始化、各種軟件標(biāo)志的初始化、系統(tǒng)時(shí)鐘的初始化和各種變量存儲(chǔ)單元的初始化等。除自檢和初始化之外,監(jiān)控程序的任務(wù)還有:處理鍵盤命令、處理接口命令、處理?xiàng)l件觸發(fā)、及時(shí)啟動(dòng)輸出和顯示功能等。
評論