STC89C52学习笔记(七)
综述:本文介绍了串口以及讲述了串口相关寄存器如何配置并给予相关代码。
一、修改代码注意事项
在修改代码时不要一次性加入一堆代码,不利于定位错误。可以先注释一些代码,待解决完毕问题后再去除一些注释。
二、串口
1.定义
串口是一种通讯接口,可以实现两个设备互相通信。51单片机内部自带UART(通用异步收发器),可以实现单片机的串口通信。
2.连接
①单片机上有串口,然后电脑利用串口助手,就可以实现单片机与电脑的串口通信。
②蓝牙串口模块,信号通过串口发送给他,然后通过手机上的蓝牙app,达到手机和单片机的串口通信。(单片机→蓝牙串口模块→手机蓝牙app)
3.特点
①简单的串口有两根通讯线:TXD和RXD(TXD:transimit exchange data;RXD:receive exchange data)。
②两根通讯线为交叉连接,当双向通讯时,需要两根通讯线,仅仅单项数据传输时,只需要一根通讯线。
③串口常用的电平标准有三种:TTL电平(晶体管晶体管逻辑,单片机就是用这种电平逻辑,+5V表示1,0V表示0)、RS232电平(-3~-15表示1,+3~+15表示0)、RS485电平(两线差+2~+6表示1,-2~-6表示0)。
④通讯至少需要3根线:GND、TXD和RXD。如果设备1和设备2都是独立供电的,那么可以不用VCC接线。但是,如果设备2是一个模块,不是独立供电,那么设备1需要给设备2供电。
⑤全双工:通信双方可以在同一时刻互相传输;半双工,通讯双方可以在互相通讯,但是不能同时;单工:通讯只能由一方发送到另一端。
⑥异步:通信双方各自约定通信速率;同步:通信双方用同一根时钟线约定通信速率。
4.51单片机的UART
①STC89C52的RXD端口在P3.0,TXD端口在P3.1
②STC89C52有1个UART
③STC89C52的UART有四种工作模式:模式1:同步移位寄存器。模式二:8位UART,波特率可以改变。模式三:9位UART,波特率可以改变。模式四:9位UART,波特率可以改变。
③串口参数
1)波特率:串口发送/接收数据为的间隔时间,也就是串口通信的速率
2)校验位:有奇、偶检验和0、1校验
④串口时序图
8位数据格式的时序图
9位数据格式的时序图
⑤串口模式图
时钟部分:中间部分控制收发器的采样时间来控制波特率。
发送:单片机先将数据写入寄存器SBUF(Sever buffer串口缓存寄存器)中,再通过发送控制器将数据发送出去,发送完成产生相应的中断。
接收时,通过移位寄存器即受到SBUF,再通过单片机读取数据,接收完成产生相应的中断。
⑥串口和中断系统
⑦初始化串口
1)对于寄存器SCON的配置,由于这里的串口选择工作模式二(8位UART,波特率可以改变),于是SM0 SM1应配置为0 1,于是程序应为:“SCON=0x40;”
2)对于电源控制寄存器说明如下,SMOD和SMOD0均为1,于是,PCON寄存器应该配置为:“PCON|=0x80;”
3)定时器
8位自动重装定时器和16位定时器的区别:16位记的数据多(65535),但是每次都需要自己写代码赋初值,浪费时间。双8位就是将16位分开,一个计数(255),另一个存放初值,每次计数完成后AR会自动将值赋给CNT,不用代码处理,比较快,但只有8位所以记的数少了。
于是,这里配置定时器1的模式应该为:将TMOD配置为0010 0000,也即是“TMOD &= 0x0F;TMOD |= 0x20;”
4)利用stc-isp软件自动计算波特率。
5)启动定时器1,代码为“TR1=1”
6)完整的串口初始化函数如下
void UART_Init() //4800bps@12.000MHz
{PCON|=0x80;SCON=0x40;TMOD &= 0x0F; //设置定时器模式TMOD |= 0x20; //设置定时器模式TL1 = 0xF3; //设定定时初值TH1 = 0xF3; //设定定时初值TF0 = 0; //清除TF0标志TR0 = 1; //定时器0开始计时
}
⑧发送数据
1)由之前⑤可以知道,发送数据是先写入在寄存器SBUF里面,所以,程序可以写为:“SBUF=Byte;”
2)当发送的数据过多时,不是一下子就可以完成发送的,于是需要检验是否发送完成,这里是根据检验发送完成标志位TI,程序为:“while(TI==0);”
3)由于发送完成后需要对TI进行软件复位,于是程序应为:“TI=0;”
完整的串口发送程序如下:
void UART_SendByte(unsigned char Byte)
{SBUF=Byte;while(TI==0);TI=0;
}
4)下载程序并打开串口,配置好串口的参数:串口端号、串口的波特率(4800)、校验位和停止位。
参考视频:51单片机学习.视频
侵权联系删除!