51单片机串口通信Word文档格式.docx
《51单片机串口通信Word文档格式.docx》由会员分享,可在线阅读,更多相关《51单片机串口通信Word文档格式.docx(9页珍藏版)》请在冰豆网上搜索。
从而控制外部两条独立的收发信号线RXD
(P3.0)、TXD(P3.1),同时发送、接收数据,实现全双工。
串行口控制寄存器SCON(见表1)。
表1SCON寄存器
表中各位(从左至右为从高位到低位)含义如下。
SM0和SM1:
串行口工作方式控制位,其定义如表2所示。
表2串行口工作方式控制位
其中,fOSC为单片机的时钟频率;
波特率指串行口每秒钟发送(或接
收)的位数。
SM2:
多机通信控制位。
该仅用于方式2和方式3的多机通信。
其中发
送机SM2=1(需要程序控制设置)。
接收机的串行口工作于方式2或3,
SM2=1时,只有当接收到第9位数据(RB8)为1时,才把接收到的前8
位数据送入SBUF,且置位RI发出中断申请引发串行接收中断,否则会将接
受到的数据放弃。
当SM2=0时,就不管第位数据是0还是1,都将数据送
入SBUF,并置位RI发出中断申请。
工作于方式0时,SM2必须为0。
REN:
串行接收允许位:
REN=0时,禁止接收;
REN=1时,允许接
收。
TB8:
在方式2、3中,TB8是发送机要发送的第9位数据。
在多机通信
中它代表传输的地址或数据,TB8=0为数据,TB8=1时为地址。
RB8:
在方式2、3中,RB8是接收机接收到的第9位数据,该数据正
好来自发送机的TB8,从而识别接收到的数据特征。
TI:
串行口发送中断请求标志。
当CPU发送完一串行数据后,此时
SBUF寄存器为空,硬件使TI置1,请求中断。
CPU响应中断后,由软件
对TI清零。
RI:
串行口接收中断请求标志。
当串行口接收完一帧串行数据时,此时
SBUF寄存器为满,硬件使RI置1,请求中断。
CPU响应中断后,用软件
对RI清零。
电源控制寄存器PCON(见表3)。
表3PCON寄存器
SMOD:
波特率加倍位。
SMOD=1,当串行口工作于方式1、2、3时,
波特率加倍。
SMOD=0,波特率不变。
GF1、GF0:
通用标志位。
PD(PCON.1):
掉电方式位。
当PD=1时,进入掉电方式。
IDL(PCON.0):
待机方式位。
当IDL=1时,进入待机方式。
另外与串行口相关的寄存器有前面文章叙述的定时器相关寄存器和中断寄
存器。
定时器寄存器用来设定波特率。
中断允许寄存器IE中的ES位也用
来作为串行I/O中断允许位。
当ES=1,允许串行I/O中断;
当ES=
0,禁止串行I/O中断。
中断优先级寄存器IP的PS位则用作串行I/O中断
优先级控制位。
当PS=1,设定为高优先级;
当PS=0,设定为低优先级。
波特率计算:
在了解了串行口相关的寄存器之后,我们可得出其通信波特
率的一些结论:
①方式0和方式2的波特率是固定的。
在方式0中,波特率为时钟频率的1/12,即fOSC/12,固定不变。
在方式2中,波特率取决于PCON中的SMOD值,即波特率为:
当SMOD=0时,波特率为fosc/64;
当SMOD=1时,波特率为fosc/32。
②方式1和方式3的波特率可变,由定时器1的溢出率决定。
当定时器T1用作波特率发生器时,通常选用定时初值自动重装的工作方
式2(注意:
不要把定时器的工作方式与串行口的工作方式搞混淆了)。
其
计数结构为8位,假定计数初值为Count,单片机的机器周期为T,则定时
时间为(256?
Count)乘以T。
从而在1s内发生溢出的次数(即溢出率)可
由公式
(1)所示:
从而波特率的计算公式由公式
(2)所示:
在实际应用时,通常是先确定波特率,后根据波特率求T1定时初值,因
此式
(2)又可写为:
二、电路详解
下面就对图1所示电路进行详细说明。
图1串行通信实验电路图
最小系统部分(时钟电路、复位电路等)第一讲已经讲过,在此不再叙
述。
我们重点来了解下与计算机通信的RS-232接口电路。
可以看到,在电
路图中,有TXD和RXD两个接收和发送指示状态灯,此外用了一个叫
MAX3232的芯片,那它是用来实现什幺的呢?
首先我们要知道计算机上的
串口是具有RS-232标准的串行接口,而RS-232的标准中定义了其电气特
性:
高电平1信号电压的范围为-15V~-3V,低电平0
信号电压的范围为+3V~+15V。
可能有些读者会问,它为什幺要以这样的
电气特性呢?
这是因为高低电平用相反的电压表示,至少有6V的压差,非
常好的提高了数据传输的可靠性。
由于单片机的管脚电平为TTL,单片机与
RS-232标准的串行口进行通信时,首先要解决的便是电平转换的问题。
一般
来说,可以选择一些专业的集成电路芯片,如图中的MAX3232。
MAX3232
芯片内部集成了电压倍增电路,单电源供电即可完成电平转换,而且工作电
压宽,3V~5.5V间均能正常工作。
其典型应用如图中所示,其外围所接的电
容对传输速率有影响,在试验套件中采用的是0.1&
mu;
F。
值得一提的是MAX3232芯片拥有两对电平转换线路,图中只用了一路,
因此浪费了另一路,在一些场合可以将两路并联以获得较强的驱动抗干扰能
力。
此外,我们有必要了解图中与计算机相连的DB-9型RS-232的引脚结构
(见图2)。
图2DB-9连接器接口图
其各管脚定义如下(见表4)。
表4DB-9型接口管脚定义
三、程序设计
本讲设计实例程序如下:
#includeAT89X52.h
(1)
voidInit_Com(void)
(2)
{
TMOD=0x20;
(3)
PCON=0x00;
(4)
SCON=0x50;
(5)
TH1=0xE8;
(6)
TL1=0xE8;
(7)
TR1=1;
(8)
}
voidmain(void)(9)
unsignedchardat;
(10)
Init_Com();
(11)
while
(1)(12)
程序详细说明:
(1)头文件包含。
(2)声明串口初始化程序。
(3)设置定时器1工作在模式2,自动装载初值(详见第二讲)。
(4)SMOD位清0,波特率不加倍。
(5)串行口工作在方式1,并允许接收。
(6)定时器1高8位赋初值。
波特率为1200b/s(7)定时器1低8位赋
初值。
(8)启动定时器。
(9)主函数。
(10)定义一个字符型变量。
(11)初始化串口。
(12)死循环。
(13)如果接收到数据。
(14)将接收到的数据赋给之前定义的变量。
(15)将接收到的值输出到P0口。
(16)对接收标志位清0,准备再次接收。
(17)将接收到的数据又发送出去。
(18)查询是否发送完毕。
(19)对发送标志位清0。
四、调试要点与实验现象
接好硬件,通过冷启动方式将程序所生成的。
hex文件下载到单片机运行
后,打开串口调试助手软件,设置好波特率1200,复位单片机,然后在通过
串口调试助手往单片机发送数据(见图3),可以观察到在接收窗口有发送的
数据显示,此外电路板上的串行通信指示灯也会闪烁,P0口所接到LED灯
会闪烁所接收到的数据。
图3串口软件调试界面
另外串口调试助手软件使用时应注意的是,如果单片机开发板采用串口下
载而且和串口调试助手是使用同一串口,则在打开串口软件的同时不能给单
片机下载程序,如需要下载,请首先点击关闭串口,做发送实验的时候,注
意如果选中16进制发送的就是数字或者字母的16进制数值,比如发送0,
实际接收的就应该是0x00,如果不选中,默认发送的是ASCII码值,此时
发送0,实际接收的就应该是0x30,这点可以通过观察板子P0口上的对应
的LED指示出来。
五、总结
本讲介绍了单片机串口通信的原理并给出了实例,通过该讲,读者可以了
解和掌握51单片机串口通信的原理与应用流程,利用串口通信,单片机可
以与计算机相连,也可以单片机互联或者多个单片机相互通信组网等,在实
际的工程应用中非常广泛。
从学习的角度来说,熟练的利用串口将单片机系
统中的相关信息显示在计算机上可以很直观方便的进行调试和开发。