完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
串行通信在通讯领域被广泛应用,标准的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) |
|
|
|
5015 浏览 0 评论
9327 浏览 3 评论
【开源资料】基于机智云的智能感应灯(原理图+PCB+源程序)
46087 浏览 4 评论
3706 浏览 0 评论
4125 浏览 0 评论
浏览过的版块 |
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-3 01:19 , Processed in 0.632055 second(s), Total 67, Slave 47 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号