分時(shí)操作系統(tǒng)思想在單片機(jī)中的實(shí)現(xiàn)
2.作業(yè)流程
為了能實(shí)現(xiàn)8路分時(shí)工作,最主要的工作是將這一過程細(xì)分成一個(gè)個(gè)作業(yè)。筆者通過設(shè)計(jì)把它分成8個(gè)作業(yè),各作業(yè)的流程如圖2所示。 以上每一作業(yè)返回后,“路”指針自動(dòng)加1,到8后回到0,以保證分時(shí)工作合理。
3.幾點(diǎn)技巧
8路電話信息采集卡的編程中,為了使程序更精練,筆者應(yīng)用以下3個(gè)技巧:
?、? 因?yàn)檫@8路的工作是相同的,程序可以共用,只須再構(gòu)造1“路”地址表,每一表項(xiàng)含有本路的輸入鎖存器地址、輸出鎖存器地址、DTMF碼存放RAM地址、計(jì) 時(shí)單元地址。這樣可以省掉“路”調(diào)度表,因?yàn)楦髀废嗤鳂I(yè)的入口地址是相同的。根據(jù)“路”指針的不同,帶入該“路”的地址表項(xiàng),即可用相同的程序?qū)?路分 別控制操作。
② 定時(shí)器中斷設(shè)置成4ms一次,這是因?yàn)殡娫捳疋徥?5Hz,檢測腳保持低電平的時(shí)間為10ms,它是最低的計(jì)時(shí)值。當(dāng)振鈴檢測腳低電平保持時(shí)間少于8ms 時(shí)可認(rèn)為是干擾。每一路都有自己的計(jì)時(shí)單元,每次定時(shí)器中斷后,在定時(shí)服務(wù)自程序中各路計(jì)時(shí)單元自動(dòng)加1。在上一次作業(yè)中將計(jì)時(shí)單元請(qǐng)0,下一次作業(yè)讀出 計(jì)時(shí)單元的值,延時(shí)值即為該值乘以4ms。這樣任何延時(shí)都不占用CPU機(jī)時(shí)。
?、? 串行數(shù)據(jù)的發(fā)送和接收是8路共有的操作,采用共同的模塊。數(shù)據(jù)的鏈接是通過開辟緩沖區(qū)實(shí)現(xiàn)的,有發(fā)送緩沖區(qū)和接收緩沖區(qū),采用4800baud的波特率。 一般程序的串行數(shù)據(jù)發(fā)送時(shí),都須要檢測TI位的變化來判斷1字節(jié)數(shù)據(jù)發(fā)送是否完成,由此決定可否發(fā)下一字節(jié)數(shù)據(jù)。應(yīng)用到分時(shí)系統(tǒng)是行不通的,這要占用 CPU機(jī)時(shí),因?yàn)椴捎?800baud的波特率,則每一字節(jié)的發(fā)送時(shí)間少于4ms。當(dāng)發(fā)送緩沖區(qū)有數(shù)據(jù)時(shí),可在定時(shí)器中斷服務(wù)自程序中發(fā)送。每一次定時(shí)中 斷中發(fā)送1字節(jié)數(shù)據(jù),當(dāng)下一次定時(shí)中斷來時(shí),上一字節(jié)數(shù)據(jù)必定已發(fā)送完畢,可發(fā)送下一字節(jié)數(shù)據(jù)。無須檢測TI位,也不占用CPU機(jī)時(shí)。數(shù)據(jù)接收采用串行中 斷,接收到的數(shù)據(jù)存放到接收緩沖區(qū)供各路查詢。
結(jié)論
將分時(shí)操作系統(tǒng)的思想引入單片機(jī)系統(tǒng),提出了一個(gè)針對(duì)多路檢測控制的單片機(jī)系統(tǒng)軟件編程。大大減低了系統(tǒng)的設(shè)計(jì)成本,提高了系統(tǒng)的性能價(jià)格比,并在實(shí)際應(yīng)用中獲得成功。
評(píng)論