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

          新聞中心

          EEPW首頁 > 測試測量 > 設(shè)計(jì)應(yīng)用 > 基于ISA總線與KH-9300的數(shù)據(jù)采集系統(tǒng)軟件設(shè)計(jì)

          基于ISA總線與KH-9300的數(shù)據(jù)采集系統(tǒng)軟件設(shè)計(jì)

          作者: 時間:2009-09-23 來源:網(wǎng)絡(luò) 收藏

          (1)編寫中斷服務(wù)程序由于產(chǎn)生中斷時,必須保留被中斷程序中斷時的一些現(xiàn)場數(shù)據(jù),即保存斷點(diǎn),這些值都在寄存器中,以便恢復(fù)中斷時使這些值復(fù)原。以繼續(xù)執(zhí)行原來被中斷的程序。 Turbo C為此提供一種新的函數(shù)類型:inter-rupt,它將保存由該類型函數(shù)所指寄存器的值,而在退出該函數(shù)時,再復(fù)原這些寄存器的值,因而用戶的中斷服務(wù)程序必須定義成該類型的函數(shù),如中斷服務(wù)程序名為myp,則可將這個函數(shù)說明為:
          Void interrupt myp(unsigned bp,unsigned di,unsigned si,unsigned ds,unsigned es,unsigned dx,unsigned cx,unsignedbx,unsigned ax,unsiged ip,unsigned cs,unsigned flags)
          小模式下程序只有1段,在中斷服務(wù)程序中用戶可像用無符號整數(shù)變量一樣使用這些寄存器。若中斷服務(wù)程序中不使用上述寄存器,則可不寫這些寄存器參數(shù),而寫為:

          本文引用地址:http://www.ex-cimer.com/article/195713.htm


          對于硬件中斷,則在中斷服務(wù)程序結(jié)束前要將中斷結(jié)束命令字送至系統(tǒng)的中斷控制寄存器,其端口地址為0x20,中斷結(jié)束命令字也為0x20,即outportb(0x20,0x20)。
          在中斷服務(wù)程序中,若不允許別的優(yōu)先級較高的中斷打斷它,則要禁止中斷,可用函數(shù)disable()來關(guān)閉中斷。若允許中斷,則可用開中斷函數(shù)enable()來開啟中斷。
          (2)安裝中斷服務(wù)程序定義中斷服務(wù)程序后,還需將這個函數(shù)的人口地址填人中斷向量表中,以便產(chǎn)生中斷時程序能轉(zhuǎn)入中斷服務(wù)程序去執(zhí)行。為防止正在改寫中斷向量表時,又產(chǎn)生別的中斷而導(dǎo)致程序混亂,可先關(guān)閉中斷,待改寫完成后,再開啟中斷。


          其中faddr是中斷服務(wù)程序的入口地址,其函數(shù)名代表入口地址,而inum表示中斷類型號,setvect()函數(shù)設(shè)置中斷向量,上述定義的install()函數(shù)將完成把中斷服務(wù)程序入口地址填入中斷向量inum中。
          (3)中斷服務(wù)程序的激活對于硬件中斷,在相應(yīng)的中斷請求線(IRQi,i=0,1,2,…,7)產(chǎn)生一個由低到高的中斷請求電平,這個過程必需由接口電路來實(shí)現(xiàn),這個電平可用程序控制實(shí)現(xiàn),如發(fā)命令outportb(端口地址,命令)。然后程序等待中斷,當(dāng)中斷產(chǎn)生時,便去執(zhí)行中斷。
          (4)恢復(fù)被修改的中斷向量為在主程序結(jié)束后,恢復(fù)原來的中斷向量以指向原中斷服務(wù)程序,在主程序開始時,存下原中斷向量的內(nèi)容,用getvect()實(shí)現(xiàn),如j=(char*)getvect(0x1c),這樣指針變量中將是0xlc中斷程序的入口地址,當(dāng)主程序結(jié)束時,可恢復(fù)原來的中斷服務(wù)入口地址,可用setvect(0x1c,i),也可用install()函數(shù)再次安裝。

          4 程序設(shè)計(jì)
          4.1 程序說明
          程序主要分為主程序和中斷處理子程序2部分。其中主要程序是采用 I/O接口的輸入輸出函數(shù)進(jìn)行初始化。包括設(shè)置-定時計(jì)數(shù)器8254和中斷控制器8259的工作方式、初值、開中斷、觸發(fā)方式,對計(jì)算機(jī)的 8259開中斷等。在主程序的最后把采集的通道數(shù)據(jù)寫入文件。而中斷處理子程序是由CPU在每次接到IRQ5中斷請求信號后立即執(zhí)行,主要作用是把- 卡的第2、3、4、5號通道的計(jì)數(shù)值采集到程序的變量中。主程序和中斷處理子的程序流程分別如圖1、圖2所示。

          4.2 編程注意事項(xiàng)
          (1)不要用任何DOS功能調(diào)用,避免DOS重入。盡量避免使用與屏幕相關(guān)、檢查狀態(tài)、讀鍵盤及任何磁盤I/O子程序:避免使用浮點(diǎn)(實(shí)數(shù))運(yùn)算。中斷服務(wù)程序中所調(diào)用函數(shù)盡量是BIOS級庫函數(shù);(2)中斷程序執(zhí)行的時間應(yīng)盡可能的短。若 ISR中消耗時間過長,在完成一次運(yùn)行前有可能被再次調(diào)用,導(dǎo)致系統(tǒng)被掛起。(3)控制變量可以是全局變量,也可通過寄存器變量傳遞給interrupt 函數(shù);(4)若實(shí)時控制系統(tǒng)對中斷響應(yīng)速度要求較高,可采用嵌入?yún)R編技術(shù)。



          關(guān)鍵詞: 9300 ISA KH 總線

          評論


          相關(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); })();