摘要:串口通信是一种广泛使用且实用的通信方式,介绍RS232串行通信的联结方式,研究利用c语言编程实现RS232串行通信的过程。结合实际应用,在约定双方串行通信协议的基础上,运用C语言开发的串行通信软件,实现了企业生产线产品测试平台和嵌入式EMB主控机的串行数据通信。

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>>>>>>>>>\n”):

//在屏幕上提示用户正在等待中断进行。

}while((inportb(comportaddr+5)&0x20)==O);//检查发送端数据线是否准备好

outportb(comportaddr,Char://发送数据到缓冲区

return(Char);//返回发送完成的字符

}

4)从串行口接受一个字符

该函数的思想是先取得中断控制,后面进行接收数据通信;

int ReceiveChar(int port)

{

do{

printf(“receive waiting>>>>>>>>\n”);

∥在屏幕上提示用户正在等待中断进行。

}

while((inportb(eomportaddr+5)&0x01)==0);//检查接收端数据线是否准备好

return(inportb(pONt);//从接收数据缓冲区取数据

}

3 实例

在企业产品测试平台和嵌入式控制系统之间,约定通信双方的协议相同,首先嵌入式EMB主控机通过串El把控制消息发送给产品测试平台,让产品测试平台根据发送来的指令进行相关操作:同时在产品测试平台上的测试结果信息,测试每个单项目的相关信息也通过串口传输数据到嵌入式EMB主控机;嵌入式EMB主控机把测试相关的有效信息进行整理后,通过网络上传到Server,Server把企业所有生产线的嵌入式EMB主控机发送来的信息进行整理和分析,在企业资源管理系统ERP上共享,让企业的高级管理人员实时监视企业生产的进行情况,大大提高企业的办公效率,其整体工作原理图如图3所示。

图3企业生产整体工作原理图

4结论

本文所阐述的RS232串口通信软件,在具体实践中结合功能需要,综合考虑复杂程度、灵活性等因素,选择了合适的方法,实现了串口通信过程,同时在产品测试平台和嵌入式控制系统之间,该软件得到了充分的应用,有效地提升了企业的生产工作效率。

232通信c语言设计,基于C语言的RS232串行接口通信设计与实现相关推荐

  1. dsp课程设计c语言源码,DSP课程设计-基于C语言实现256点的FFT精选.pdf

    DSP课程设计-基于C语言实现256点的FFT精选 XX 大学 J1111111 UNIVERSITY DSP 课 程 设 计 基于CCS 的FFT 算法的C 语言实现和验证 学院名称: 专业班级: ...

  2. 对南京地铁计价模型分析及最佳路径设计基于Python语言

    离散数学技术报告(该报告不完整) 实验题目:对南京地铁计价模型分析及最佳路径设计基于Python语言 关键词: 城市交通; 地理信息系统; Dijkstra算法; 约束条件; 路径分析 一.引言 截至 ...

  3. 单片机课程设计数字心率计_课程设计-基于单片机的数字人体心率计设计.doc

    课程设计-基于单片机的数字人体心率计设计 中北大学 基于单片机的心率计设计 课 程 设 计 说 明 书 2017年 6月30日 课 程 设 计 任 务 书 1.设计目的:通过本课程设计的学习,学生将复 ...

  4. 无线电能传输 wpt 磁耦合谐振 过零检测 基于二极管整流的无线电能传输设计 基于同步整流的无线电能传输设计

    无线电能传输 wpt 磁耦合谐振 过零检测 matlab simulink仿真 pwm MOSFET,过零检测模块 基于二极管整流的无线电能传输设计 基于同步整流的无线电能传输设计(含过零比较) 两个 ...

  5. 教务处管理系统c语言编程,基于C语言的教务管理系统的设计

    基于C语言的教务管理系统的设计(任务书,开题报告,论文12000字,程序代码) 摘要 教务管理系统是现代化教育的重要组成部分,在现代高校管理中,一个高效的.准确的教务系统不仅能大大提高教学管理效率,还 ...

  6. 将 改为c语言表达式,基于c语言表达式求解课程设计修改.doc

    基于c语言表达式求解课程设计修改 摘 要 通过数据结构这门课程,我们较深入的了解到了栈,栈是一种重要的线性结构,它广泛应用于各种软件系统中,因此在面向对象的程序设计中,它们是多型数据类型. 本次试验我 ...

  7. c语言语音控制游戏文献,C语言课程设计-基于C语言推箱子游戏设计-毕业论文文献.doc...

    gd工程职业技术学院毕业论文 基于C语言的推箱子游戏设计 Design of the push box Based on Combined Language 作者姓名: 学科专业: 应用电子技术 学院 ...

  8. c语言六位抢答器课程设计,基于c语言单片机8位竞赛抢答器设计课程设计.docx

    基于c语言单片机8位竞赛抢答器设计课程设计 课程设计报告课程名称:单片机课程设计报告题目:8位竞赛抢答器的设计学生姓名:所在学院:信息科学与工程学院专业班级:学生学号:指导教师:2013 年12月25 ...

  9. lcd显示屏c语言程序设计,基于单片机的LCD显示器控制的设计.doc

    基于单片机的LCD显示器控制的设计 PAGE 17基于单片机的LCD显示器控制设计摘要:LCD液晶显示已经是人机界面的关键技术.本文对基于单片机的LCM液晶显示模块控制系统进行了研究.首先在绪论中介绍 ...

最新文章

  1. mysql 连接池的作用,数据库连接池介绍、主要参数设置、作用
  2. maven中tomcat7-maven-plugin插件的使用
  3. java 快速构建ssm项目_SSM快速搭建
  4. Android高手的六大境界
  5. linux 打开db文件怎么打开方式,linux服务器打开数据库文件
  6. virtualbox安装增强功能时【未能加载虚拟光盘】
  7. Docker Compose安装与简介
  8. 04_用户注册与自定义数据转换器Conventer
  9. arm-4-裸板开发
  10. Protel 99 SE库文件添加时“file is not recognized”
  11. 科技论文写作常用句式结构
  12. java field 赋值_Java Field.set()向对象的这个Field属性设置新值value
  13. 再探https与重放攻击
  14. Python求均值,方差,标准差
  15. 2023年产品经理需要考的证书,NPDP含金量真高
  16. mysql导入wps_WpS数据数据库导入
  17. 线性方程组的解个数与秩的关系
  18. Linux系统NAT实现机制的升级改进
  19. ES6学习笔记:箭头函数
  20. SpringCloud Alibaba实战第八课 缓存设计、网关认证、重构策略

热门文章

  1. 实验吧/隐写术/男神一般都很低调很低调的
  2. 使用Python模拟登陆12306并全自动下单
  3. IDEA中使用GsonFormat插件
  4. html学校代码怎么弄,学校代码怎么查 方法是什么
  5. 高级数据分析师仅用这个模型,就能将业务从1增长至10
  6. 24-爬虫-scrapy-Item Pipeline
  7. (附源码)Python超市管理系统 毕业设计111042
  8. HTML 单击选中文本
  9. xfce4解决中文输入、无声音问题
  10. 漫画 | Code Review的巅峰