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

串行通信在通讯领域被广泛应用,标准的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)

c语言usb串口通信程序,C语言在RS232串行接口通信中的实现相关推荐

  1. c语言接收rs232串口速率,C语言在RS232串行接口通信中的实现

    串口通信是一种广泛使用且实用的通信方式,介绍RS232串行通信的联结方式,研究利用c语言编程实现RS232串行通信的过程.结合实际应用,在约定双方串行通信协议的基础上,运用C语言开发的串行通信软件,实 ...

  2. plc通信程序 c语言,plc用什么语言编程?plc可以用c语言编程吗

    plc用什么语言编程?plc可以用c语言编程吗 plc能用C语言编程吗? 不能 每个PLC都有自己的编程语言但用法基本上和C语言差不多PLC编程不是单一的 有很多种方法 我一般是梯形图,也有语句法就是 ...

  3. c语言单片机串口通讯,单片机C语言之串口通信协议

    串口通信概述 串口通信指串口按位(bit)发送和接收字节.尽管比按字节(byte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据. 常用三种串口通信协议 1.RS-232 RS ...

  4. 串行口发送子程序C语言,基于C语言的RS232串行接口通信实现

    摘要:串口通信是一种广泛使用且实用的通信方式,介绍RS232串行通信的联结方式,研究利用c语言编程实现RS232串行通信的过程.结合实际应用,在约定双方串行通信协议的基础上,运用C语言开发的串行通信软 ...

  5. 232通信c语言设计,基于C语言的RS232串行接口通信设计与实现

    摘要:串口通信是一种广泛使用且实用的通信方式,介绍RS232串行通信的联结方式,研究利用c语言编程实现RS232串行通信的过程.结合实际应用,在约定双方串行通信协议的基础上,运用C语言开发的串行通信软 ...

  6. c语言课程设计加密程序,C语言课程设计文件加密解密.doc

    C语言课程设计文件加密解密 C语言程序设计 课程设计 学 院 计算机工程 班 级 计算1313 姓 名 学 号 201321121089 成 绩 指导老师 2014年6月26日 计算1313班C语言程 ...

  7. python是语言还是软件_程序开发语言之Python:是追逐还是坚守?

    Python作为计算机程序设计语言的其中一种,最初是被设计用于编写自动化脚本(shell),随着版本的不断更新.语言新功能的添加和机器学习的兴起,Python从2017年开始受到广泛关注. Pytho ...

  8. c语言经典解决实际程序,C语言经典教程1讲.ppt

    <C语言经典教程1讲.ppt>由会员分享,可在线阅读,更多相关<C语言经典教程1讲.ppt(48页珍藏版)>请在人人文库网上搜索. 1.C程序设计,主讲人:任祖华,2,本课程学 ...

  9. c语言怎么返回前一个程序,c语言return返回到哪

    c语言return返回到哪 c语言return,返回给了上一级,比如一个递归程序,从第三层返回到第二层:又比如一个普通的子程序,那就返回到主程序中去. 主程序中return返回给了操作系统. 比如下面 ...

  10. 用c语言做一个五子棋程序,C语言制作简单五子棋游戏

    原标题:C语言制作简单五子棋游戏 C语言制作简单的五子棋游戏 学习C语言的人很多,但是用C语言很少,而用来为自己所用,来做游戏的人就更少了,很多人都是跟着学校学习,学校讲到哪就坐到哪,但是以后却还是不 ...

最新文章

  1. python给函数设置超时时间_在 Linux/Mac 下为Python函数添加超时时间的方法
  2. POJ 2054 Color a Tree
  3. 给单文档框架添加背景图
  4. Zookeeper .Net Client 使用
  5. python做定时任务api_Python—定时任务(APScheduler实现)
  6. jsp中的四种对象作用域
  7. Fedora server wifi
  8. OPENCV3.0 双目立体标定
  9. go语言设计初衷和优势
  10. Git版本控制:Git查阅、撤销文件修改和撤销文件追踪
  11. Oracle1518,redhat 5.4 Oracle 10g r2
  12. RDV需要什么服务器系统,锐起RDV的教程
  13. Phase2 Day22 JDBC
  14. VR游戏与传统游戏开发区别 和 Unite 2016关于VR/AR的消息
  15. 药品质量检测的方法之一:质谱分析法
  16. 基于STM32F407的测距模块HY-SRF05轮询开发
  17. 屏蔽第三方SDK权限
  18. C语言求一元二次方程的根,这题很简单嘛?看看这种想法很惊奇!
  19. Mac/OSX 系统如何采集扬声器(代码实现 附源码)
  20. 汇编 二进制拆炸弹 r -t 3 -x 124

热门文章

  1. 麦克斯韦方程组(彩图完美解释版)
  2. server宕机监控、检測、报警程序(139绑定手机短信报警)monitor_down.sh
  3. Linux聊天服务器
  4. iOS 15 H264硬编码码率变小,图像模糊
  5. java strut2通配符_Struts2的通配符
  6. 御剑端口扫描工具2020下载
  7. 局域网(网上邻居)共享问题全方位解决
  8. 安装系统不求人 就算没有光驱和软驱也能行
  9. python3 数据挖掘 之 爬取 智联招聘网站来巩固pandas
  10. 学习笔记(01):2020软考网络工程师--基础知识视频教程-计算机硬件基础(一)