【VB开源代码栏目提醒】:网学会员为需要VB开源代码的朋友们搜集整理了WIN9598的串行通信机制及程序设计方法 - 期刊论文相关资料,希望对各位网友有所帮助!
D煎崆些出笠釜盟堂熊堂拯 2QQ!!£玺!型!望笙堑趔2笙!§鲞 WIN95--98的串行通信机制及程序
设计方法 ·王兰英 内容提要介绍运用VB5编制Pc机与单片机实现串行通信的方法,并给出通信源程序。
关键词单片机异步串行通信发送与接收VB5 WIN95—98 串行通信控件 一、前言 。
啦片机(Single ChiP Microcomputer)以其优异的控制功能,在〕:控领域、智能仪器仪农系统等领域I三l 箍5^1:脊伽人的生命力。
‘个小小的心-ii-片(儿个、r方胍米)便具钉了汁算机的艰小功能,从而使.J::控系统、仪器仪表、家IU产M向智能化厅向产fI!了飞跃。
但足_f,lm:多需要人量计算的运川I卜,还必须借助Pc微机的强 人数执:处州能力,这样必须通过通信电路实现单片机oj Pc微机之问的可靠数据传输。
由于串行通信具有容错能/J姒、硬件IU路简单、所需通信线少(三线)等优点,在不需要高速数据传输的地方,得到了广泛的应用。
}|:行通信协议rIl运用最广泛的是RS232,所有PC机叶l都带有这样的fB行通信接IJ,可用于与单片机通信。
常Ⅲ的DOS系统二E要:f:作在响应巾断方式,使Pc机程序‘j单片机通信。
PC机Ⅲ行通信程序大多利用其BIOS块的INT 1411巾断,以
查询flj行LI的方式完成异步flJ行通信。
然而在WINDOWS系统·1I,上层
软件不再 ‘j操作系统的底层rIl断打交道,这样就使WINDOWS
系统巾的硬件编程变得十分I稠难,对:{;行
通信接L.I的编程 也‘样。
在WINDOWS系统函数巾包含了通信支持rlt断功能。
WIN95--98系统为每个通信设备开辟了用户定义的输入输f【j缓冲区(即读、’j缓冲区),数据进出通信LI由系统后台来完成。
应JIj程序只需完J&x,l输入输出缓冲Ⅸ操作就可以了。
实际过程足每接收一‘‘个字符就产:磐4个低绂蚀件中断,WIN95--98系统中的jI};行驱动程序就_【Dc得了W,B Jl权,jl:将接收到的字符放入输入数搬缓冲lK,然后将控制权返还j卜在运行的应用程序,如果输入缓冲f爰数据已满,小行驱动
程序用当前定义的流控制机制通知发送方停』上=发送数据,队列『fJ的数据按“先进允…”的次序处理。
在WIN95--98系统Il、.}|I I-{和fI{行通信驱动程序足通过一一数据结构进行配惯的,这个数据结构被称为设符控制J火(DEVICE CONTROL BLOCK),简称DCB。
花WIN95--98 F,通常呵按以下四步实现tl坪i通信: (1)按队议的设攒初始化并打Jt:ⅢlJ,这样做就足通知WINDOWS小应用程.ri序;幡f-,要这个小I-I,并封锁其他J_JIJ干lI!J≯使它1『J1i能使』{J此jl{I I。
(2,艇肖:这个fI:|{。
(3)住ⅢI I l:矩返地1‘输数掂,Ji:谯f譬输过程一l一进行校验。
(4)小j*婴此{l:I J11’1‘.天闭Ⅲ【I。
l{|J释放出I J以供jC它应J『J{鼙序使川。
住这个过榭·hI _li婴的张序
代码集Ifl在笫(3)少。
然If,ix,J JI.一般的程序员l叭;,对设备控制块DCB的编程:11i91:;…雉,_jj|5么蜘冲q简化编程姬【|.完成对}:I{行通信接I一…,J所仃功能的应J|〕l!Ji:?相:VB5 rI,提供了一个MSCOMM挖件.它,’Z--‘个专门川n对fI埽j通信接IJ进行编程的控件,通过对它的运川,lq‘以火人简化对;l矸i通信接I J的编刷,IN为这个Y,?PI:I,I装了所仃关于}I{行通信接I I的DCB编程,埘J1j,。
而.j,界_匝i简便,_I_1j起来-II?,T;方便。
二、MSCOMM控件的使用 为J’说I”J办他.我们以VB5一I-文版为例来说}lJJ MSCOMM的常川属性、方法、‘j…:。
坡后给…源程序。
伦VB5·I—j J)f:+柏in,J I:f’I!.柏:“I:}I!”1 2菜Int”J量_|_li“糊5f,l‘”r菜一丫1.,就会洲}I{“瑚5{J{:”刈话}1i,n!“控什”口!IIt,选sl…M1CR()SOI?T COMM CONTROl。
5.0”前的复选{=Il:,点.ji“确定”返川。
此时往左边的1 2I}栏 万 方数据小,-一J.以发现多了一个形状象一个IU话样的控件,这就赴MSCOMM控件。
每个使川的MSCOMM控件刈应着‘‘‘个jI:行端I l。
如果J遁川辆{序需要访nU多个串行端I一1,必须使Jt】多个MSCOMM控什。
MSCOMM控件具仃yl:多的属性,fI【足厦婴的植一陀列如I-: 榭性 椭述 ConunPot,t i殳霄J{:返州通讯端I J号。
、 Settirigs 以’7:符m的形工℃设矬并返叫波特率、奇偶校验、数撕位、停1i:位。
PortOpen i殳岿!Jf:返刚通讯端LI的状态。
也可以打,r和关PJ〕_!fir,i I-I。
Input 从接收缓冲区返回和删除字符。
Output 向f钳iii缓冲区写‘个字符fI}{。
Col xunF.vent 返叫1i同的值水表示不I司的通讯错误或>’lift:。
这些常数可以在陔控什的对象库-1I找到。
MSCOMM控件八仃ONCOMM’-Mq:来实现”Mg:驱动方式的}|;行通信程序编写。
无沦tⅡ时jlj CommEvent心。
l’l!II(J{I_!【变化时,就产生OnConun:ltff:,标志发生了一个通汛小件或一个错洪。
现将常川的Co,m1Event属性所返刚的一i川位fFJ小|f,-j意义列如F: 迎讯钳跌包括卜.列没谲:值: 常数 值 描述 ComEventRxOver 1008 接受缓冲区溢出。
接收缓冲区没有窄问。
comEventTxFull 10lO 传输缓冲区已满。
传输字符时代输缓冲区已满 通讯。
j〔什包括下列设戳值: ……………………………………一…~…………~一…… 常数 值 描述 comEvSend l 在化输缓冲区lII订比Sthreshold数少的字符。
ComEvReceive 2 收到Rthreshold个字符。
该习f件将持续产’l-littJsOI J Input槭忡从 接收缓冲lj)‘:Ill删除数捌。
三、PC机VB通信程序实例 以li例_J,足PC机’jtp”机;I;行通信的VB源稿:序。
. |)l’1 i rate Sub Form—Load 0 ’{!:u始化MSCO M!M控仲 Dim lnstring As String’保存输入子串的缓冲区 MSCofIunl.ConunPort=l’使用COMl。
MSComml.Settings=”9600,N,8。
1”9600波特。
无奇偶校验,8位数扒, 一个停ll:位; ’”1输入l|l‘川时: ’告诉控件读入祭个缓冲区。
MSConunl.InputLen=0 MSComml.PortOpen=’true’打”端1 1。
MSComd.Output:”AT”+Chr¥(13)’将attention命令送到调制解iJlIj器。
End Sub P1’i vate Sub MSComm—OnComm 0 ’通信习f件程J弘川j二处理通信jjf件‘j_}j}误 SeleCt case MSComJnl.CommEvent’锵跌 Case comEventBreak’收至0 Break。
Case comEventCDTO’CD(RLSD)超If寸。
Case comEventCTST0’CTS Timeout。
Case comEventDSRT0’DSR Timeout。
Case comEventFI,ame’Framing Errm· 85 万 方数据 Case comEventOverrun ’数捌丢失。
Case comEventRxOver’接收缓冲区溢}lj。
Case comEventRxParity’Parity错溪。
Case comEventl、xFoll ’传输缓冲区已满。
Case comEventDCB ’获取DCB〕时意外错误’事件 Case comEvCD’CD线状态变化。
Case comEvCTS’CTS线状态变化。
Case comEvDSR’DSR线状态变化。
Case comEvRing’Ring Indicator变化。
Case comEvReceive’收到RThreshold#ofchars. Case comEvSend ’传输缓pp区柏‘Sthreshold个字符 Case comEvEof’输入数拂:流rfl发现EOF字符 End Select End Sub PI’irate Sub Co.unandl—C1iek0 ’该子程序说}¨J如何从接收缓,冲区渎取数据。
· DilTl I nString as String MSComml.InputLen=0’读取所有可Jl】数据。
I{、MSCommI.InBufferCount Then’检查数据。
InString=MSComml.Input’Read data. End JI’ l-nd Sub 1)I’i Va¨Sub Integer) ’ Ft).Fm一_Keyl’ress(KeyAscii As 该子程序说f¨J如何将用t户键入的每…个字符 送刨Ⅲ行端I I: DiflI BLlffell as Vat’iant MSComM.Conunl’ort=l ’砹谶并打开窗IJ MSConun 1.PortOpen=True l{t11、fell=Chl’¥(KeyAsci i) MS(h)lllllll.Output=BuI’fleF End S“b 参考文献 1.美ba rwin Boyle等Vi sual Basic 5 Developer’s Guide.北京,机械工业出版社,1 998。
2.Vi stirl BR Si c 5.0 Acti veX控件参考手册,科学出版社龙门书局,Microsoft Corporation著。
万 方数据