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