实验3 STC单片机串口通信实验-V20170317
1.实验目的
学习STC12C5A16S2单片机串口通信UART知识。
2.实验设备
硬件:实验箱12号节点,串口线;
软件:Keil u Vision4编译软件,STC下载软件STC_ISP;
芯片手册:配套光盘\\附件\\芯片手册\\STC单片机手册\\STC12C5A16S2.pdf;
源码路径:配套光盘\\源代码\\单片机原理与技术\\实验3 STC单片机串口通信实验-V20170317
hex路径:配套光盘\\源代码\\单片机原理与技术\\实验3 STC单片机串口通信实验-V20170317\\out\\UART.hex
3.实验原理
3.1 STC12C5A16S2系列单片机串口工作原理
USART是一个高度灵活的串行通讯设备。主要特点为:全双工操作 (独立的串行接收和发送寄存器)、异步或同步操作、主机或从机提供时钟的同步操作、高精度的波特率发生器、支持5、6、7、8或9个数据位和1个或2个停止位、硬件支持的奇偶校验操作、数据过速检测、帧错误检测、噪声滤波,包括错误的起始位检测,以及数字低通滤波器、三个独立的中断:发送结束中断、发送数据寄存器空中断,以及接收结束中断、多处理器通讯模式、倍速异步通讯模式。
STC12C5A16S2系列单片机具有2个采用UART工作方式的全双工串行通讯接口串口1(对应芯片引脚为:TXD/P3.1和RXD/P3.0)串行口2(对应的芯片引脚为:TXD2和RXD2)。每一个串口有4种工作方式,其中2种的工作方式波特率是可变的,另两种是不可变的。芯片可以通过查询或者中断方式来接收和发送数据。
STC12C5A16S2系列单片机在串口通信中经常使用到的寄存器主要是SCON(串行口控制寄存器)、PCON(电源控制寄存器)、AUXR(辅助寄存器)、BRT(独立波特率发生器寄存器)、SBUF(串行口缓冲寄存器)、IE(中断允许寄存器)。
3.2 定时器/计数器相关寄存器介绍
SBUF:串口数据缓冲寄存器,其地址为99H。实际是2个缓冲器,写SBUF的操作完成待发送数据的加载,读SBUF的操作可获得已接收到的数据。两个操作作用分别对应两个不同的寄存器,1个是只写寄存器,1个是只读寄存器。只不过公用一个地址。
串行通道内设有数据寄存器。在所有的串行通信方式中,在写入SBUF信号的控制下,把数据装入相同的9位移位寄存器,前面8位为数据字节,其最低位为移位寄存器的输出位。根据不同的工作方式会自动将“1”或TB8的值装入移位寄存器的第9位,并进行发送。
串行通道的接收寄存器是一个输入移位寄存器。在方式0时它的字长为8位,其它方式时为9位。当一帧接收完毕,移位寄存器中的数据字节装入串行数据缓冲器SBUF中,其第9位则装入SCON寄存器中的RB8位。如果由于SM2使得已接收到的数据无效时,RB8和SBUF中内容不变。
由于接收通道内设有输入移位寄存器和SBUF缓冲器,从而使一帧接收完将数据由移位寄存器装入SBUF后,可立即开始接收下一帧信息,主机应在该帧接收结束前从SBUF缓冲器中将数据取走,否则前一帧数据将丢失。SBUF以并行方式送往内部数据总线。
SCON:串行口1的控制寄存器。该寄存器定义如图3.1所示:
图3.1 SCON寄存器定义
Bit 7 – SM0/FE:
当PCON寄存器中的SMOD0/PCON.6位为1时,该位用于帧错误检测。当检测到一个无效停止位时,通过UART接收器设置该位。它必须由软件清零。
当PCON寄存器中的SMOD0/PCON.6位为0时,该位和SM1一起指定串行通讯的工作方式,如图3.2所示:
图3.2 串口工作方式
Bit 6 – SM1:(上面已经涉及)
Bit 5 – SM2: 允许方式2或方式3多机通信控制位。 在方式2或方式3时,如果SM2位为1且REN位为1,则接收机处于地址帧筛选状态。此时可以利用接收到的第9位(即RB8)来筛选地址帧:若RB8=1,说明该帧是地址帧,地址信息可以进入SBUF,并使RI为1,进入中断服务程序中在中断服务程序中再进行地址号比较;若RB8=0,说明该帧不是地址帧,应丢掉且保持RI=0。在方式2或方式3中,如果SM2位为0且REN位为1,接收收机处于地址帧筛选被禁止状态。不论收到的RB8为0或1,均可使接收到的信息加入SBUF,并使RI=1,此时RB8通常为校验。
方式1和方式0是非多机通信方式,在这两种方式时,要设置SM2应为0。 Bit 4 –REN:允许/禁止串行接收控制位
该位由软件置位REN,即REN= 1为允许串行接收状态,可启动串行接收器RxD,开始接收信息。软件复位REN,即REN=0,则禁止接收。
Bit 3 –TB8:
在方式2或方式3,它为要发送的第9位数据,此时需要由软件置位或清0。例如,可用作数据的校验位或多机通信中表示地址帧/数据帧的标志位。在方式0和方式1中,该位不用。
Bit 2 –RB8:
在方式2或方式3,是接收到的第9位数据,此时该位作为奇偶校验位或地址帧/数据帧的标志位。方式0中不用RB8(置SM2=0)方式1中也不用RB8(置SM2=0,RB8是接收到的停止位)。
Bit 1 –TI发送中断请求中断标志位
在方式0时,当串行发送数据第8位结束时,由内部硬件自动置位,即TI=1 ,向主机请求中断,响应中断后TI必须用软件清零,即TI=0。在其他方式中,则在停止位开始发送时由内部硬件置位,即TI=1 ,响应中断后TI必须用软件清零。
Bit 0 – RI接收中断请求标志位。
在方式0,当串行接收到第8位结束时由内部硬件自动置位RI=1,向主机请求中断,响应中断后RI必须用软件清零,即RI=0。在其它方式中,串行接收到停止位的中间时刻由内部硬件置位,即RI=1,向CPU发中断申请,响应中断后RI必须由软件清零。
PCON:电源控制寄存器。该寄存器的描述如图3.3所示:
图3.3 PCON寄存器定义
Bit 7 –SMOD:波特率选择位
当用软件置位SMOD,即SMOD=1,则使串行通信方式1、2、3的波 特率加倍;SMOD=0,则各工作方式的波特率加倍。复位时SMOD=0。 Bit 6 –SMOD0:帧错误检测有效控制位。
当SMOD0=1,SCON寄存器中的SM0/FE位用于FE(帧错误检测)功能;当SMOD0=0,SCON寄存器中的SM0/FE位用于SM0功能,和SM 一起指定串行口的工作方式。复位时SMOD0=0。
AUXR:辅助寄存器。该寄存器的定义如图3.4所示:
图3.4 AUXR寄存器定义
串口1可以选择定时器1做波特率发生器,也可以选择独立波特率发生器作为波特率发生器。当设置AUXR寄存器中的S1BRS位(串行口波特率选择位)为1时,串行口选择独立波特率发生器作为波特率发生器,此时定时器1可以释放出来作为定时器/计数器/时钟输出使用。
IE:中断允许寄存器。该寄存器的描述如表3.5所示:
图3.4 IE寄存器
EA:CPU的总中断允许控制位,EA=1,CPU开放中断,EA=0,CPU屏蔽所有的中断申请。EA的作用是使中断允许形成多级控制。即各中断源首先受EA控制;其次还受各中断源自己的中断允许控制位控制。
ES:串行口中断允许位,ES=1,允许串行口中断,ES=0,禁止串行口中断。
3.3 在晶振为11.0592MHz的基础上串口参数设置举例
我们以波特率:9600,数据位:8,校验位:N(无),停止位:1, 一般情况下我们使用的串口参数的默认值是9600-8-N-1。
波特率的计算公式如下: BAUD=fosc/16/BRT;
注意:1.波特率定义为每秒位传输的速率(bps), 波特率:BAUD(bps),fosc:系统时钟频率,BRT的数值(0---255)。
本项目电路中的晶振取11.0592MHz,fosc=11059200; 本项目以波特率9600为例子,则BAUD = 9600;
则当我们采用异步正常模式时BRT =256—(fosc / BAUD / 16)=256—72=184=0xB8 则我们要设置的参数可以如下表示: PCON |= 0x80; //SMD=1 串行通讯的波特率加倍 P265 SCON = 0x50; //当SM0/FE=0 SM1=1时组成工作方式1(8位UART, //波特率可变) AUXR |= 0x01; //S1BRS=1 使用独立波特率发生器作为串行口的波 //特率发生器 AUXR |= 0x04; //BRTx12=1波特率发生器每一个时钟计数一次 //把根据波特率计算的 定时器的溢出值,装//入波特率发生器
BRT = 256 - MAIN_Fosc / 16 / Baudrate0 ; //MAIN_Fosc=11.0592MHZ Baudrate0=9600 BRT =0xB8; AUXR |= 0x10; //BRTR=1 开启独立波特率发生器运行 ES = 1; //IE寄存器的ES位为1 串口1中断 EA = 1; //IE寄存器的EA位为1 CPU开总中断
4.实验步骤
4.1 编写实验源代码文件
4.1.1 打开Keil集成开发环境,打开配套光盘\\源代码\\单片机原理与技术\\实验3 STC单片机串口通信实验-V20170317下的工程文件,编译源码,生成UART.hex可执行文件,该可执行文件自动保存在配套光盘\\源代码\\单片机原理与技术\\实验3 STC单片机串口通信实验-V20170317\\out\\UART目录下。(注意:请根据该目录下UART.hex文件的生成时间,判断该文件是否是自己刚刚编译完成的。)
4.1.2 将12号节点的开关S1拨打到左边让STC单片机与DB9相连。
4.1.3 根据配套光盘\\第三方应用软件\\STC_ISP\\STC-ISP软件使用说明书,使用STC-ISP软件将4.1.1步中生成的可执行UART.hex文件通过STC_ISP串口下载软件,下载到12号节点的STC单片机中。
4.2 实验源代码解析
UART.c源代码 /************************************************************** * 晶振频率 :选取用RC 11.0592MHz * 文件名 :UART.c * 功能说明 :STC12C5A16S2单片机的串口通信演示实验 * 制作 :www.frotech.com * 技术支持 :020-22883196 QQ :1329958919