logo资料库

基于C语言的RS232串行接口通信实现.doc

第1页 / 共6页
第2页 / 共6页
第3页 / 共6页
第4页 / 共6页
第5页 / 共6页
第6页 / 共6页
资料共6页,全文预览结束
基于C语言的RS232串行接口通信实现
基于 C 语言的 RS232 串行接口通信实现 发布:2013-04-02 | 作者:-- | 来源: -- | 查看:212 次 | 用户关注: 0 前言 串行通信在通讯领域被广泛应用,标准的 RS232 接口已成为计算机、外设、交换机和许多通 讯设备的标准接口。虽然近年来随着 USB 口的日趋流行,RS232 接口串口作为一种传统的串口通信口有 被取代的趋势。然而由于它具有较高的性价比和传输的可靠性Ⅲ。在传输速率要求不是很高的情况下,串 口通信仍然具有其自身的优势。同时 RS232 标准广泛应用于微型计算机系统和大型系统中,RS232 标准 还具有连线简单、通 0 前言 串行通信在通讯领域被广泛应用,标准的 RS232 接口已成为计算机、外设、交换 机和许多通讯设备的标准接口。虽然近年来随着 USB 口的日趋流行,RS232 接口串口作为 一种传统的串口通信口有被取代的趋势。然而由于它具有较高的性价比和传输的可靠性Ⅲ。 在传输速率要求不是很高的情况下,串口通信仍然具有其自身的优势。同时 RS232 标准广 泛应用于微型计算机系统和大型系统中,RS232 标准还具有连线简单、通讯距离长等优点, 本文将着熏介绍串口通信的连接方式以及利用 C 语言编程实现串口通讯,最后以实际的工 程项目应用,验证了该通讯方式的可靠性。 1 RS232 串行接口 1.1 RS232 接口简介 RS232 串行接口属于个人计算机(PC)及电信应用领域中最为成功的串行数据标 准。它被定义为一种在低速率串行通信中增加通信距离的单端标准,是目前 PC 机与通信工 业中应用最广泛的一种串行接口嗍。现在的 Pc 机一般至少有两个串行口 COMI 和 COM2. 新一代的汁算机主要以 9 引脚的 D 型接头接出所有的 RS232 通信信号及控制线(有的计算 机的 COM2 仍为 25 引脚)。 1.2 RS232 串口引脚说明(见表 1) 表 1 引脚缩写功能说明 1.3 串口连接器的连接方式
串口连接器是两个串行接口的连接器,RS232 串口存在 9 针和 25 针两种形式,根 据连接的针数,串口通信连接方式主要分为:1)无握手连接方式;2)全握手连接方式;3)循环 握手回送方式。本文开发的软件运行在全握手连接方式下,该连接方式如表 2 所示。 表 2 全握手连接 2 C 语言串口通信软件实现 2.1 测试中的硬件设备。 2.1.1 单机测试方式 如果单机仅仅拥有一个 RS232 串口,可将 RS232 连接线的第 2 引脚(RD)与第 3 引脚(TD)短路,那么由第 3 引脚的输出信号就会被发送到第 2 引脚而送到同一串行端}1 的 输入缓冲区,即可将数据读入,进入测试过程。 如果单机拥有 COMl 和 COM2 口两个 RS232 串口,那么请选择 1 3 节表 2 中的串 口连接方式,进入测试过程。 2.1.2 近距离两台设备通信测试方式 如果要在两台 PC 计算机之间,一台嵌入式系统主控机和一台 PC 计算机之间,或 者上位机和下位机之间进行串口通信,那么请选择 1.3 节表 2 中的 RS232 串口方式连接两 台设备,进入测试过程。 2.1.3 远距离两台通信测试方式 RS232 标准规定,若不使用 Modem,在码元畸变小于 4%的情况下,Dte 和 DCE 通信两端之间最大传输距离为 15 m.若距离较远,须附加调制解调器(Modem)。其连接方式 如图 1 所示。 图 1 远距离串口通信连接方式 2.2 C 语言的串口通信软件实现 2.2.1 串口通信软件流程图
图 2 数据通信的流程图 2.2.2 C 语言函数具体实现串口通信软件过程 由于 I/O 串行通信口的速度远远低于 CPU 的速度,在查询工作方式时,CPU 长时 间处于等待状态,其效率非常低,不利于 CPU 的资源利用。解决这一矛盾的有效办法是采 取中断的通信方式,即当通信口自身准备就绪时,主动提出中断申请,一旦 CPU 响应此申 请,便暂停执行的工作,转向中断服务子程序,与外设进行数据的交换,数据交换完成后返 回到主程序中的断点继续执行未完成的任务,这样就避免了 CPU 资源的浪费㈨。 为此必须对异步通信适配器以及中断控制器进行控制。作为系统的外设,异步通信 适配器和中断控制器都有其对应的 I/O 口地址,所以本文采用 C 语言函数库中的寻址函数 outportb()和函数 inportb()对上述芯片进行直接读写操作。其控制包括对中断控制器地址的 编程,允许 IRQ3,IRQ4 中断,同时置 MODEM 控制寄存器地址为有效,这样即可实现中断 方式的通信。根据图 2 的串口通信流程图,其具体实现串口通信的过程如下: 1)初始化串口函数。 参数说明: ComPortAddr 串口端口地址(coMl 口是 03F8H COM2 口是 02F8H) IntVectNum 中断处理号(一般选择 0X0b) Baud 波特率
Data 数据位 STop 停止位 Parity 奇偶校验位 void Init-COM(int ComPortAddr,unsigned char IntVectNum,im Baud,unsigned char Data,unsigned char Stop,unsigned char Parity) { unsigned char High,Low; int f. comportaddr=ComPortAddr; intvectnum=IntVectNum; CharslnBuf=0;Circln=0;CircOut=0; /*set baud rate 设置波特率*/ f=(Baud/100): f=1152/t;High=f/256; Low=f-High*256; outportb(ComPortAddr+3,0x80); outportb(ComPortAddr,LOW); outportb(ComPortAddr+l,High); /*set data bits,stop bits,and parity 设置数据位。停止位。校验*/ Data=(Data-5)|((Stop-1)*4); if(Parity=2)Data=Data|0x18; else if(Parity==1)Data=Data|0x8; outportb(ComPortAddr+3,Data); /*set MCR(DTR,RTS=0,OUTl,OUT2=1)设置 MODEM 控制位*/ outportb(ComPortAddr+4,0xob); /*set input data ready interrupt mode 设置输入数据中断模式*/ outportb(ComPortAddr+1,Ox01); /*set OC interrupt vector 设置中断源*/ disable (); OldAsyncInt=getvect(IntVectNum); setvect(ImVectNum,AsyncInt); enable (); /*open interrupt 打开中断*/ maskb=inp(Port8259+1); if(IntVectNum 一 0x0c)outport(Port8259+1,maskb&Oxef);/*INT4*/ else outport(Port8259+1,maskb&0xf7);/*INT3*/ } 2)握手信号控制。 该函数引入递归调用的方式,很好的解决了以往串口通信过程中,在握手信号方面 选择发送指定特定字符(例如"样")所带来的误传送问题,大大提高了串口通信的成功率。 void wait(char ch)
{ if(ReceiveChar(COM232)==ch)return;//确定对方已经成功接受或者发送,就返回 空 else { SendChar(ch);//把接受或者发送出去的字符重新发送; wait(ch); //递归调用,直到对方确定接受或者发送成功为止; ) ) 3)向串行口发送一个字符 该函数的思想是先申请占有中断,后进行发送数据通信; int SendChar(unsigned char Char) { do { printf("send waiting>>>>>>>>> "): //在屏幕上提示用户正在等待中断进行。 }while((inportb(comportaddr+5)&0x20)==O);//检查发送端数据线是否准备好 outportb(comportaddr,Char://发送数据到缓冲区 return(Char);//返回发送完成的字符 } 4)从串行口接受一个字符 该函数的思想是先取得中断控制,后面进行接收数据通信; int ReceiveChar(int port) { do{ printf("receive waiting>>>>>>>> "); ∥在屏幕上提示用户正在等待中断进行。 } while((inportb(eomportaddr+5)&0x01)==0);//检查接收端数据线是否准备好 return(inportb(pONt);//从接收数据缓冲区取数据 } 3 实例 在企业产品测试平台和嵌入式控制系统之间,约定通信双方的协议相同,首先嵌入 式 EMB 主控机通过串 El 把控制消息发送给产品测试平台,让产品测试平台根据发送来的 指令进行相关操作:同时在产品测试平台上的测试结果信息,测试每个单项目的相关信息也 通过串口传输数据到嵌入式 EMB 主控机;嵌入式 EMB 主控机把测试相关的有效信息进行整 理后,通过网络上传到 Server,Server 把企业所有生产线的嵌入式 EMB 主控机发送来的信 息进行整理和分析,在企业资源管理系统 ERP 上共享,让企业的高级管理人员实时监视企 业生产的进行情况,大大提高企业的办公效率,其整体工作原理图如图 3 所示。
图 3 企业生产整体工作原理图 4 结论 本文所阐述的 RS232 串口通信软件,在具体实践中结合功能需要,综合考虑复杂 程度、灵活性等因素,选择了合适的方法,实现了串口通信过程,同时在产品测试平台和嵌 入式控制系统之间,该软件得到了充分的应用,有效地提升了企业的生产工作效率。
分享到:
收藏