摘 要: Windows環(huán)境下進(jìn)行串口通信很容易實(shí)現(xiàn),但在DOS環(huán)境下進(jìn)行串口通信時(shí),由于可調(diào)用的系統(tǒng)資源很少,只能通過直接操作硬件端口來實(shí)現(xiàn)。在對(duì)硬件端口進(jìn)行初始化設(shè)置之后,首先保存原中斷向量,然后裝入自己的中斷服務(wù)程序入口地址,再打開中斷,調(diào)用完成之后在程序關(guān)閉之前關(guān)閉中斷和恢復(fù)原中斷向量。通過以上方法實(shí)現(xiàn)了DOS環(huán)境下的串口通信,在轉(zhuǎn)臺(tái)設(shè)計(jì)過程中用于上下位機(jī)之間的通信,經(jīng)過上萬次的實(shí)驗(yàn)考核,該方法穩(wěn)定可靠,在工程應(yīng)用中具有很大的借鑒性。
關(guān)鍵字: 串口通信; 寄存器; 基地址; 中斷向量
中圖分類號(hào): TN964?34; TP311 文獻(xiàn)標(biāo)識(shí)碼: A 文章編號(hào): 1004?373X(2013)18?0078?02
0 引 言
Windows操作系統(tǒng)下進(jìn)行串口通信利用Windows API函數(shù)或現(xiàn)成的控件很容易實(shí)現(xiàn),但在DOS操作系統(tǒng)中,要進(jìn)行串行通信程序開發(fā),需對(duì)可編程串行通信接口芯片的內(nèi)部功能結(jié)構(gòu)、指令字及系統(tǒng)中斷調(diào)用[1]等有所了解,從而使得串行通信程序開發(fā)過程過多涉及硬件知識(shí),變得復(fù)雜且難以實(shí)現(xiàn)。
在某型號(hào)轉(zhuǎn)臺(tái)的軟件設(shè)計(jì)開發(fā)過程中,需要通過RS 232串口實(shí)現(xiàn)上下位機(jī)之間的通信,由于整個(gè)開發(fā)只能在DOS6.0操作系統(tǒng)下實(shí)現(xiàn),本文以Borland C++3.1為上位機(jī)軟件開發(fā)環(huán)境,通過調(diào)用中斷的方式來實(shí)現(xiàn)COM1的串口通信功能。
1 硬件介紹
PC機(jī)主板上負(fù)責(zé)串行通信的核心器件為8250(或其兼容元器件)異步通信適配器(UART)。程序通過對(duì)8250內(nèi)部的寄存器進(jìn)行讀寫進(jìn)而控制8250,如表1所示。
中斷初始化編程時(shí),調(diào)用8259A可編程中斷控制器的中斷IRQ4,要先保存原中斷向量,然后將自己的中斷服務(wù)程序入口地址裝入,再打開IRQ4,調(diào)用完成之后不要忘記在程序關(guān)閉前關(guān)中斷和恢復(fù)原中斷向量[1]。
2 程序代碼實(shí)現(xiàn)過程
2.1 初始化串口
3 結(jié) 語
本文以COM1為例,給出了在DOS操作系統(tǒng)下,用中斷方式實(shí)現(xiàn)串口通信的實(shí)現(xiàn)方法,可以實(shí)現(xiàn)數(shù)據(jù)的自動(dòng)接收和發(fā)送,經(jīng)過上萬次的實(shí)驗(yàn)考核,能夠一次性發(fā)送或接收最大256個(gè)字符,在某型號(hào)轉(zhuǎn)臺(tái)設(shè)計(jì)中得到了廣泛地應(yīng)用。
參考文獻(xiàn)
[1] 肖蒙.Windows 平臺(tái)下串口通信程序?qū)崿F(xiàn)方式研究[J].科技資訊,2008(7):42?45.
[2] 龔建偉.Visual C++/Turbo C串口通信編程實(shí)踐[M].北京:電子工業(yè)出版社,2004.
[3] 黃曉波.基于Windows API的異步串口通信軟件設(shè)[J].現(xiàn)代電子技術(shù),2011,34(16):35?38.
[4] 汪瀅,孫華軍.基于VC++串口通信的設(shè)計(jì)與實(shí)現(xiàn)[J].現(xiàn)代電子技術(shù),2011,34(16):19?20.
[5] 何湘智,王榮春,周偉.基于VC++和TRTD的無人機(jī)地面站軟件開發(fā)[J].現(xiàn)代電子技術(shù),2010,33(22):46?48.
[6] 翟希述,王寶興,范淼.基于Visual C#的串口通信程序設(shè)計(jì)[J].電子科技,2011(2):24?26.