1、从而控制外部两条独立的收发信号线 RXD(P3.0)、TXD(P3.1),同时发送、接收数据,实现全双工。串行口控制寄存器 SCON(见表 1) 。表 1 SCON 寄存器表中各位(从左至右为从高位到低位)含义如下。SM0 和 SM1 :串行口工作方式控制位,其定义如表 2 所示。表 2 串行口工作方式控制位其中,fOSC 为单片机的时钟频率;波特率指串行口每秒钟发送(或接收)的位数。SM2 :多机通信控制位。 该仅用于方式 2 和方式 3 的多机通信。其中发送机 SM2 1(需要程序控制设置)。接收机的串行口工作于方式 2 或 3,SM2=1 时,只有当接收到第 9 位数据(RB8)为 1
2、时,才把接收到的前 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,从而识别接
3、收到的数据特征。TI :串行口发送中断请求标志。当 CPU 发送完一串行数据后,此时SBUF 寄存器为空,硬件使 TI 置 1,请求中断。CPU 响应中断后,由软件对 TI 清零。RI :串行口接收中断请求标志。当串行口接收完一帧串行数据时,此时SBUF 寄存器为满,硬件使 RI 置 1,请求中断。CPU 响应中断后,用软件对 RI 清零。电源控制寄存器 PCON(见表 3) 。表 3 PCON 寄存器SMOD :波特率加倍位。SMOD=1,当串行口工作于方式 1、2、3 时,波特率加倍。SMOD=0,波特率不变。GF1、GF0 :通用标志位。PD(PCON.1) :掉电方式位。当 PD=1
4、时,进入掉电方式。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 的波特率是固定的。在方式
5、 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 内发生溢出的次数(
6、即溢出率)可由公式(1)所示:从而波特率的计算公式由公式(2)所示:在实际应用时,通常是先确定波特率,后根据波特率求 T1 定时初值,因此式(2)又可写为:二、电路详解下面就对图 1 所示电路进行详细说明。图 1 串行通信实验电路图最小系统部分(时钟电路、复位电路等)第一讲已经讲过,在此不再叙述。我们重点来了解下与计算机通信的 RS-232 接口电路。可以看到,在电路图中,有 TXD 和 RXD 两个接收和发送指示状态灯,此外用了一个叫MAX3232 的芯片,那它是用来实现什幺的呢?首先我们要知道计算机上的串口是具有 RS-232 标准的串行接口,而 RS-232 的标准中定义了其电气特性:高
7、电平 1 信号电压的范围为-15V-3V,低电平 0信号电压的范围为+3V+15V。可能有些读者会问,它为什幺要以这样的电气特性呢?这是因为高低电平用相反的电压表示,至少有 6V 的压差,非常好的提高了数据传输的可靠性。由于单片机的管脚电平为 TTL,单片机与RS-232 标准的串行口进行通信时,首先要解决的便是电平转换的问题。一般来说,可以选择一些专业的集成电路芯片,如图中的 MAX3232。MAX3232芯片内部集成了电压倍增电路,单电源供电即可完成电平转换,而且工作电压宽,3V5.5V 间均能正常工作。其典型应用如图中所示,其外围所接的电容对传输速率有影响,在试验套件中采用的是 0.1&
8、mu;F。值得一提的是 MAX3232 芯片拥有两对电平转换线路,图中只用了一路,因此浪费了另一路,在一些场合可以将两路并联以获得较强的驱动抗干扰能力。此外,我们有必要了解图中与计算机相连的 DB-9 型 RS-232 的引脚结构(见图 2)。图 2 DB-9 连接器接口图其各管脚定义如下(见表 4)。表 4 DB-9 型接口管脚定义三、程序设计本讲设计实例程序如下:#include AT89X52.h (1)void Init_Com(void) ( 2)TMOD = 0x20; ( 3)PCON = 0x00; ( 4)SCON = 0x50; ( 5)TH1 = 0xE8; ( 6)TL
9、1 = 0xE8; ( 7)TR1 = 1; ( 8)void main(void) ( 9)unsigned char dat; ( 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)死循环。
10、(13)如果接收到数据。(14)将接收到的数据赋给之前定义的变量。(15)将接收到的值输出到 P0 口。(16)对接收标志位清 0,准备再次接收。(17)将接收到的数据又发送出去。(18)查询是否发送完毕。(19)对发送标志位清 0。四、调试要点与实验现象接好硬件,通过冷启动方式将程序所生成的。hex 文件下载到单片机运行后,打开串口调试助手软件,设置好波特率 1200,复位单片机,然后在通过串口调试助手往单片机发送数据(见图 3),可以观察到在接收窗口有发送的数据显示,此外电路板上的串行通信指示灯也会闪烁,P0 口所接到 LED 灯会闪烁所接收到的数据。图 3 串口软件调试界面另外串口调试助
11、手软件使用时应注意的是,如果单片机开发板采用串口下载而且和串口调试助手是使用同一串口,则在打开串口软件的同时不能给单片机下载程序,如需要下载,请首先点击关闭串口,做发送实验的时候,注意如果选中 16 进制发送的就是数字或者字母的 16 进制数值,比如发送 0,实际接收的就应该是 0x00,如果不选中,默认发送的是 ASCII 码值,此时发送 0,实际接收的就应该是 0x30,这点可以通过观察板子 P0 口上的对应的 LED 指示出来。五、总结本讲介绍了单片机串口通信的原理并给出了实例,通过该讲,读者可以了解和掌握 51 单片机串口通信的原理与应用流程,利用串口通信,单片机可以与计算机相连,也可以单片机互联或者多个单片机相互通信组网等,在实际的工程应用中非常广泛。从学习的角度来说,熟练的利用串口将单片机系统中的相关信息显示在计算机上可以很直观方便的进行调试和开发。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1