UART串口通讯 RS232介绍

所需积分/C币:36 2018-09-08 11:58:31 833KB PDF
收藏 收藏
举报

UART串口通讯 RS232介绍,绝对是好资源,看后恍然大悟,另外看书名,推荐一下,非常不错的一本书
手把手教你学51单片机C语言版(更新:2014-5-10) 发送;、清除发送;、振铃提示。我们要让这个串口和我们单片机进行通信, 我们只需要关心其中的脚 脚 和脚 即可。 虽然这三个引脚的名字和我们单片机上的串口名字一样,但是却不能直接和单片机对连 通信,这是为什么呢?随着我们了解的内容越来越多,我们得慢慢知道,不是所有的电路都 高电平而代表低电平的。对于 标准来说,它是个反逻辑,也刪做负逻 辑。为何叫负逻辑?它的和的电压 电压代表是,~电压代 是。低电平代表的是,而高电平代表的是,所以称之为负逻辑。因此电脑的针 串口是不能和单片杌直按连接的,需要用一个电平转换芯片 釆完成,如图所 MAX232 TIIN TIOUTA14 RIOUT RIIN TO-PC-RX TXD T2IN T2OUT RXD R2OUT 工O-PC-IX3 RaIN Cl+ C2+ 16 VCC GNDL15 RS-232 C1 0.1uF 图 转接图 这个芯片就可以实现把标准 串口电平转换成我们单片机能够识别和承受的 电平。从这里大家似乎慢慢有点明白了,其实 串口和 串口,它们的协议 类型是一样的,只是电平标准不同而已,而 这个芯片起到的就是中间人的作用,它 把 电平转换成 电平,也把 电平转换成 电平,从而实现标准 接口和单片机 之间的通信连接。 1.3转串口通信 随着技术的发展,工业上还有 串口通信的大量使用,但是商业技术的应用上,已 经慢慢的使用转 技术取代了 串口,绝大多数笔记本电脑已经没有串口这 个东西了,那我们要实现单片机和电脑之间的通信该怎么办呢? 我们只需要在电路上添加一个转串口芯片,就可以成功实现通信协议和标准 串行通信协议的转换,在我们的开发板上,我们使用的是 这个芯片,如图 所示 手把手教你学51单片机C语言版(更新:2014-5-10) LED I ACT# USB-RX VCC 4148 USB-TX R232 RXD 0.1uF VAGND A4 RTS# DTR# DSR# CTS# kh JI C13 CH34DT 485TX 85-RX TXD 20p12M20p USB-TX TXD RXD 图 转串口电路 图中左下方和是两个跳线的组合,大家可以在我们板子左下方的位置找到,我们 需要用跳线帽把中间和下边的针短接在一起。右侧的 这个电路很简单,把电源、晶 振接好后,脚和脚的和分别接口的个数据引脚上去,脚和脚通过跳 线接到了我们单片机的和上去。 的电路里脚位置加了个的二极管,是一个小技巧。因为 这个 单片机下载程序时需要冷启动,就是先点下载后上电,上电瞬间单片机会先检测需要不需要 下载程序。虽然单片机的是由开关来控制,但是由于 的脚是输出引脚,如 果没有此二极管,开关后级单片机在断电的情况下, 的脚和单片机的(即 引脚连在一起,有电流会通过这个引脚流入后级电路并且给后级的电容充电,造成后级有 定幅度的电压,这个电压值虽然只有两三伏左右,但是可能会影响到正常的冷启动。加了二 极管后,一方面不影响通信,另外一个方面还可以消除这种不良影响。这个地方可以暂时作 为了解,大家如果自己做这类电路,可以参考 1.4口模拟 串口通信 为了让大家充分理解 串口通信的原理,我们先把和当做口来进行模 拟实际串口通信的过程,原理搞懂后,我们再使用寄存器配置实现串口通信过程。 对于 串口波特率,常用的值是 等速率。口模拟 串行通信程序是一个简单的演示程 序,我们使用串口调试助手下发一个数据,数据加后,再自动返回 串口调试助手,这里我们直接使用 软件自带的串口调试助手,先把串口调试助 手的使用给大家说一下,如图所示。第一步要选择串口助手菜单,第二步选择十六进制 显示,第三步选择十六进制发送,第四步选择 口,这个 口要和自己电脑设备管 理器里的那个 口一致,波特率按我们程序设定好的选择,我们程序中让一个数据位持 续时间是 秒,那这个地方选择波特率就是选,校验位选,数据位,停止位。 手把手教你学51单片机C语言版(更新:2014-5-10) Stc-Isp.exehttp:/www.mcu-memory.cOm技术支持139228051909示平Version:480 回 tepl/骤1: Select MCU Type选择单片机型号 1选择串口助手 程序文件串囗助手程文件 接收/键盘发送缓中 多字符串发送区 000-1FF 天字 ep2/步骤2: Open F1e广打开文件〔件范毛内未用区地填 起始地址0吧〕校验和 0011FO打开文件前清缓冲打开程序文件 F打开文件前清缓冲 lect CoM port, Max Baud选择串行口,最高減特 最高波特率:11520 请尝试提高最供波持幸或使最高波持率=最低威持率:p20 p4步骤4:设置本框和右下方’选项中的选项 non1 e speed双谙速:C6T/改速12T/单倍速 振荡放大器增益 2 如需低功耗 以下振荡器增益可选 下次冷启动加1.0F1.1与下载无关C等于0才可下载快速启动 内部扩展ARA:禁止访问‘允许访问媪烈推荐〕 2、选择十六进制显示 下次下载用户应用程序时将数据a区一并擦 十六进制显 C字符格式显示清接收缓邮区 自动懂环发送间同 的5岁51my下载先点下载钮用M电复位冷启动单字符串发送区 下载 d重复下 3、选择十六进制发送 每次下载前重新调入已打开在缓中区的文件,方便调试使用 六进制发送清发送缓麻区 发送字符/数据 厂当目标代码发生变化后自动词入文件,并立即发送下载命令 C字符格式发自动发法局期0秒二自动发送 打开/关闭串口 下载后打开串口 关闭串囗 按验 接收计效 发送计数:1 青空计数 EncryptOR已加密 M特率验位国口数据的“停上位! 成功计物7c请关主*w28maya啊站及时升级4、设置COM主率,校验使用位,停止位 图 串口调试助手示意图 串口调试助手的实质就是利用电脑上的 通信接口,发送数据给我们的单片机,也 可以把我们的单片机发送的数据接收到这个调试助手界面上。 因为初次接触通信方面的技术,所以我把后面的模拟串口通信程序进行一下解释, 大家可以边看我的解释边看程序,把底层原理先彻底弄懂。 变量定义部分就不用说了,直接看 主函数。首先是对通信的波特率的设定,在这 里我们配置的波特率是 那么串口调试助手也得是。配置波特率的时候,我们用 的是定时器的模式。模式中,不再是代表高位,代表低位了,而只有 在进行计数,当溢出后,不仅仅会让变,而且还会将中的内容重新自动 装到中。这样有一个好处,就是我们可以把想要的定时器初值提前存在中,当 溢出后, 自动把初值就重新送入了,全自动的,不需要程序中再给重新赋值 了,配置方式很简单,大家可以自己看下程序并且计算一下初值。 波特率设置好以后,打开中断,然后等待接收串口调试助手下发的数据。接收数据的时 候,首先要进行低电平检测 ,若没有低电平则说明没有数据,一日检测到 低电平,就进入启动接收函数 接收函数最开始启动半个波特率周期,初学可能 这里不是很明白。大家回头看一下我们的图里边的串口数据示意图,如果在数据位电平 变化的时候去读取,因为时序上的误差以及信号稳定性的问题很容易读错数据,所以我们希 望在信号最稳定的时候去读数据。除了信号变化的那个沿的位置外,其它位置都很稳定,那 么我们现在就约定在信号中间位置去读取电平状态,这样能够保证我们读的一定是正确的 手把手教你学51单片机C语言版(更新:2014-5-10) 旦读到了起始信号,我们就把当前状态设定成接收状态,并且打开定时器中断,第 次是半个周期进入中断后,对起始位进行二次判断一下,确认一下起始位是低电平,而不是 个干扰信号。以后每经过 秒进入一次中断,并且把这个引脚的状态读到 里 边。等待接收完毕之后,我们再把这个 加,再通过引脚发送出去,同样需要 先发一位起始位,然后发个数据位,再发结束位,发送完毕后,程序运行到 等待第二轮信号接收的开始。 include <reg52.h> sbit pIn rXD=P3^0;//接收引脚定义 sbit pIn TXD=P3^1;//发送引脚定义 bit rxdortxd=0;//指示当前状态为接收还是发送 bit rxdend=0;//接收结束标志 bit TxdEnd =0 //发送结束标志 unsigned char RxdBuf=0;//接收缓冲器 unsigned char TxdBuf=0;//发送缓冲器 void ConfiqUART (unsigned int baud) void startTXD (unsigned char dat) void startrXd(i void main( EA=1;//开总中断 ConfiguART(9600);/配置波特率为9600 while (1) while (PIN RXD) //等待接收引脚出现低电平,即起始位 StartrXD()i //启动接收 while ( RxdEnd) //等待接收完成 StartTXD( RxdBuf+1);//接收到的数据+1后,发送回去 hi1e(! TxdEnd);//等待发送完成 /*串口配置函数,baud-通信波特率*/ void ConfiqUART (unsigned int baud) TMOD&=0xF0;//清零T0的控制位 TMOD|=0x02;//配置T0为模式2 TH0=256-(11059200/12)/baud;//计算T0重载值 /*启动串行接收*/ 手把手教你学51单片机C语言版(更新:2014-5-10) void startRXD TL0=256-((256-TH0)>1);//接收启动时的T0定时为半个波特率周期 ET0=1; //使能T0中断 TR0=1 //启动T0 RxdEnd=0;//清零接收结束标志 RxdorTxd=0;//设置当前状态为接收 /*启动串行发送,dat-待发送字节数据*/ void StartTXD (unsigned char dat) TxdBuf= dat //待发送数据保存到发送缓冲器 TLO=THO: //T0计数初值为重载值 ET0=1 //使能T0中断 TR0=1 //启动T0 PIN TXD =0 //发送起始位 TxdEnd =0 //清零发送结束标志 Rxdortxd=1;//设置当前状态为发送 /*T0中断服务函数,处理串行发送和接收* void InterruptTimero() interrupt 1 static unsigned char cnt=0;//位接收或发送计数 f( RxdorTxd)//串行发送处理 cnt++i if(cnt<=8)//低位在先依次发送8bit数据位 PIN TXD=TxdBuf 0x01 TxdBuf>>=1 else if(cnt==9)//发送停止位 PIN TXD=1; e1se//发送结束 cnt 0 //复位bi计数器 TR0=0; //关闭T0 TxdEnd=1;//置发送结束标志 else//串行接收处理 手把手教你学51单片机C语言版(更新:2014-5-10) if(cnt==0)//处理起始位 if(! PIN RXD)//起始位为0时,清零接收缓冲器,准备接收数据位 RxdBuf =0 cnt++i e⊥se //起始位不为0时,中止接收 TRO=0;//关闭T e1sei(cnt<=8)//处理8位数据位 RxdBuf>>=1;//低位在先,所以将之前接收的位向右移 if (PIN RXD) //接收脚为1时,缓冲器最高位置1, //而为0时不处理即仍保持移位后的0 RxdBuf|=0x80 cnt++ e1se//停止位处理 cnt 0 //复位bit计数器 TR0=0; //关闭T0 if( PIN RXD)//停止位为1时,方能认为数据有效 RxdEnd=1;//置接收结束标志 串口通信的基本应用 11.5.1通信的三种基本类型 常用的通信从传输方向上可以分为单工通信、半双工通信、全双工通信三类。 单工通信就是指只允许一方向另外一方传送信息,而另一方不能回传信息。比如电视遥 控器、收音机广播等,都是单工通信技术 半双工通信是指数据可以在双方之间相互传播,但是同一时刻只能其中一方发给另外 方,比如我们的对讲机就是典型的半双工。 全双工通信就发送数据的同时也能够接收数据,两者同步进行,就如同我们的电话一样, 手把手教你学51单片机C语言版(更新:2014-5-10) 我们说话的同时也可以听到对方的声音。 11.5.2 模块介绍 口模拟串口通信,让大家了解了串口通信的本质,但是我们的单片机程序却需要不停 的检测扫描单片机口收到的数据,大量占用了单片机的运行时间。这时候就会有聪明人 想了,其实我们并不是很关心通信的过程,我们只需要一个通信的结果,最终得到接收到的 数据就行了。这样我们可以在单片机内部做一个硬件模块,让它自动接收数据,接收完了, 通知我们一下就可以了,我们的单片机内部就存在这样一个 模块,要正确使用它, 当然还得先把对应的特殊功能寄存器配置好。 单片机的 串口的结构由串行口控制寄存器 、发送和接收电路三部分构成, 先来了解一下串口控制寄存器 。如表表所示 串行控制寄存器的位分配(地址 可位寻址) 符号 复位值 表 串行控制寄存器的位描述 位符号 描述 这两位共同决定了串口通信的模式~模式共种模式。我们最常用的 就是模式,也就是 ,下边我们重点就讲模式,其它模 式从略。 多杋通信控制位(极少用),模式直接清零。 使能串行接收。由软件置位使能接收,软件清零则禁止接收。 模式和中要发送的第位数据(很少用)。 模式和中接收到的第位数据(很少用),模式用来接收停止位, 发送中断标志位,当发送电路发送到停止位的中间位置时,由硬件置 必须通过软件清零。 接收中断标志位,当接收电路接收到停止位的中间位置时,由硬件置, 必须通过软件清零。 前边学了那么多寄存器的配置,相信 这个地方,对于大多数同学来说已经不是难 点了,应该能看懂并且可以自己配置了。对于串口的四种模式,模式是最常用的,就是我 们前边提到的位起始位,位数据位和位停止位。下面我们就详细介绍模式的工作细 节和使用方法,至于其它种模式与此也是大同小异,真正遇到需要使用的时候大家再去査 阅相关资料就行了。 在我们使用口模拟串口通信的时候,串口的波特率是使用定时器的中断体现出来 的。在硬件串口模块中,有一个专门的波特率发生器用来控制发送和接收数据的速度。对于 单片机来讲,这个波特率发生器只能由定时器或定时器产生,而不能由定 时器产生,这和我们模拟的通信是完全不同的概念。 如果用定时器,需要配置额外的寄存器,默认是使用定时器的,我们本章内容主要 手把手教你学51单片机C语言版(更新:2014-5-10) 就使用定时器作为波特率发生器来讲解,方式下的波特率发生器必须使用定时器的 模式,也就是自动重装载模式,定时器的重载值计算公式为: 晶振值 波特率 和波特率有关的还有一个寄存器,是一个电源管理寄存器 ,他的最高位可以把波 特率提高一倍,也就是如果写 以后,计算公式就成了 晶振值 波特率 公式中数字的含义这里解释一下 是位定时器的溢出值,也就是的溢出值, 晶振值在我们的开发板上就是 是说个机器周期等于个时钟周期,值得关 注的是这个,我们来重点说明。在口模拟串口通信接收数据的时候,采集的是这一位 数据的中间位置,而实际上串口模块比我们模拟的要复杂和精确一些。他采取的方式是把 位信号采集次,其中第、、次取出来,这三次中其中两次如果是高电平,那么就认 定这一位数据是,如果两次是低电平,那么就认定这一位是,这样一旦受到意外千扰读 错一次数据,也依然可以保证最终数据的正确性 了解了串口采集模式,在这里要给大家留一个思考题。“晶振值 波特率”这个地 方计算的时候,出现不能除尽,或者出现小数怎么办,允许岀现多大的偏差?把这部分理解 了,也就理解了我们的晶振为何使用 串口通信的发送和接收电路在物理上有个名字相同的 寄存器,它们的地址也都 是,但是一个用来做发送缓冲,一个用来做接收缓冲。意思就是说,有个房间,两个 房间的门牌号是一样的,其中一个只出人不进人,另外一个只进人不出人,这样的话,我们 就可以实现 的全双工通信,相互之间不会产生干扰。但是在逻辑上呢,我们每次只操 作 单片机会自动根据对它执行的是“读”还是“写”操作来选择是接收 还是 发送 后边通过程序,我们就会彻底了解这个问题。 11.5.3 串口程序 般情况下,我们编写串口通信程序的基本步骤如下所示 、配置串口为模式 配置定时器为模式,即自动重装模式。 根据波特率计算和的初值,如果有需要可以使用 进行波特率加倍。 打开定时器控制寄存器,让定时器跑起来。 这里还要特别注意一下,就是在使用做波特率发生器的时候,千万不要再使能的 中断 我们先来看一下由口模拟串口通信直接改为使用硬件 模块时的程序代码,看 看程序是不是简单了很多,因为大部分的工作硬件模块都替我们做了。程序功能和口模 拟的是完全一样的 #include <reg52.h> void ConfiqUART (unsigned int baud) void main(

...展开详情
试读 17P UART串口通讯  RS232介绍
立即下载 低至0.43元/次 身份认证VIP会员低至7折
抢沙发
一个资源只可评论一次,评论内容不能少于5个字
  • 分享王者

    成功上传51个资源即可获取
关注 私信 TA的资源
上传资源赚积分,得勋章
最新推荐
UART串口通讯 RS232介绍 36积分/C币 立即下载
1/17
UART串口通讯  RS232介绍第1页
UART串口通讯  RS232介绍第2页
UART串口通讯  RS232介绍第3页
UART串口通讯  RS232介绍第4页

试读结束, 可继续读2页

36积分/C币 立即下载 >