c语言实现串行通信接口程序论文

c语言实现串行通信接口程序论文

ID:24860322

大小:65.50 KB

页数:7页

时间:2018-11-15

c语言实现串行通信接口程序论文_第1页
c语言实现串行通信接口程序论文_第2页
c语言实现串行通信接口程序论文_第3页
c语言实现串行通信接口程序论文_第4页
c语言实现串行通信接口程序论文_第5页
资源描述:

《c语言实现串行通信接口程序论文》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、C语言实现串行通信接口程序论文摘要:本文说明了异步串行通信(RS-232)的工作方式,探讨了查询和中断两种软件接口利弊,并给出两种方式的C语言源程序的I/O通道之一,以最简单方式组成的串行双工线路只需两条信号线和一条公共地线,因此串行通信既有线路简单的优点同时也有它的缺点,即通信速率无法同并行通信相比,实际上EIARS-232C在标准条件下的最大通信速率仅为20Kb/S。尽管如此,大多数外设都提供了串行口接口.freeldata()用于发送和接收数据串;1()和2()为中断例程,二者均调用fax2()函数,fax2()

2、函数为实际处理数据接收和发送的例程。明确了串行口的工作原理,就不难理解其具体程序。3.结论上述程序采用C语言编写,在BORLANDC++2.0集成环境中调试通过,为简单起见,只考虑了使用发送/接收两条信号线的情况,并未考虑使用握手信号线。在实际应用中这两组程序尚有一些可修改之处。比如,中断接收程序中的缓冲区可改为循环表,以防数据溢出,尽可能保留最新数据。由于笔者水平所限,文中不足疏漏之处尚希行家指正。程序1:staticintreceive_delay=10000;intmay(unsignedpar,char*m,c

3、har*ss){intcs=0,j=0;char*p;bios(0,par,0);//1loop:p=m;inportb(0x3f8);//resetdo{andos=0;j=0;do{if((inportb(0x3fd)0x01)==0)if(os〉receive_delay)break;else{cs++;continue;}ssj++=inportb(0x3f8);cs=0;}axsize4096#defineSEND2#defineRECEIVE1#define10#define21staticunsigned

4、charHardinterrupt=0;structInterrupt{intportadd;intintbit;charbufmaxsize,*m;intbufh,recount,sendcount;}2={{0x3f8,0x0c,,.freel);voidsetinterrupt(intnum);voidclearinterrupt(intnum);voidinit(intnum,intpara,intinterruptmark);voidsenddata(intnum,char*mand);intgetdata(

5、intnum,char*buf);voidinterrupt1(void){fax2(0);}voidinterrupt2(void){fax2(1);}//setinterrupt,num0=1,1=2voidsetinterrupt(intnum){old_num=getvect(num.intbit);if(!oomnum)setvect(num.intbit,l);//1elsesetvect(num.intbit,2);//2//sethardintHardinterrupt=inportb(0x21);if

6、(num)outportb(0x21,Hardinterrupt0xf7);//2,0elseoutportb(0x21,Hardinterrupt0xef);//10,}voidclearinterrupt(intnum){if(num)outportb(0x21,Hardinterrupt

7、0x08);//2elseoutportb(0x21,Hardinterrupt

8、0x10);//1setvect(num.intbit,old_num);for(i=0;imaxsize;i++)num.bufi=/0;num

9、.sendcount=num.recount=num.bufh=0;outportb(num.portadd+1,0);outportb(num.portadd+4,0x0);}voidfax2(inti)//i=o,1;i=1,2{unsignedcharmark;mark=inport(i.portadd+2);do{if(mark0x4)//receivedata{if(i.bufh==maxsize)i.bufh=0;i.bufi.bufh++=inportb(i.portadd);i.recount++;}e

10、lseif(mark0x2)//sendmand{if(*i.m)outportb(i.portadd,*i.m++);i,sendcount++;}elseoutportb(i.portadd+1,1);}}ark=inport(1.portadd+2))!=1);outportb(ox20,0x20);//hardintret

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。