脉宽调制信号的基础知识:
占空比:高电平在整个周期中所占的比例
利用定时器来改变占空比
利用stat变量来控制PWM的选择状态
串行通信
1.概述
•微控制器与外部设备的数据通信,根据连接结构和传送方式的不同,可以分为两种:并行通信和串行通信。
•并行通信:指数据的各位同时发送或接收,每个数据位使用一条导线。
•串行通信:指数据一位接一位地顺序发送或接收。
•串行通信有SPI、IIC、UART等多种,最常见最通用的是指UART,大多数情况下,串口通信指的就是UART。
•串行通信的制式有:单工、半双工、全双工三种。
RS485总线是半双工的通信制式。
•串行通信的主要方式有两种:同步和异步。
•同步串行通信:需要使用同一个时钟,以数据块为单位传送数据。
•异步串行通信:每个设备都有自己的时钟信号,通信中双方的波特率要保持一致,以字符为单位进行数据帧传送,一次传送一个帧
2.波特率的计算
•波特率:串口每秒钟传输的位数
•在51单片机的串口通信中,模式1和模式3的波特率是可变的,取决于定时器1的溢出率,也就是说定时器1每溢出一次,串口就发送一次数据。
•通常使用定时器1的工作模式2(8位自动重装)来产生波特率,TL1作为脉冲计数寄存器,TH1作为自动重装寄存器,当计数到最大值溢出时,TH1的值会自动装到TL1中。
•波特率的计算公式:
SMOD=0时:
SMOD=1时:
12M(误差小可接受)晶振或11.0592M(无误差)晶振的情况下,要产生9600BPS的波特率,
SMOD=0时,参数为0xfd;SMOD=1时,参数为0xfa。
3.UART口的数据发送与接收
•串行口中有两个缓冲寄存器SBUF,一个是发送寄存器,一个是接收寄存器,在物理结构上是完全独立的。它们都是字节寻址的寄存器,字节地址均为99H。
•这个重叠的地址靠读/写指令区分:
•串行发送时,CPU向SBUF写入数据,此时99H表示发送缓存SBUF。
•串行接收时,CPU从SBUF读出数据,此时99H表示接收缓存SBUF。
•数据发送:把数据扔进SBUF后,内核会自动将数据发送出去,内容发生完成后TI标志位置1.
•发送数据程序:SBUF = 数据/变量;如:SBUF = 0x58;
•数据接收:内核从串口接收到一个完整的数据后,会将RI标志位置1,用户用SBUF直接读取即可。
•数据接收程序:变量 = SBUF;如:dat = SBUF;
注意:如果利用中断来查询发送或接收,要判断是数据发送完毕产生的中断还是数据被完整接收产生的中断
4.串口控制寄存器SCON
解释:
•前三位,设定串口的工作模式,大多数情况下只用01
•REN位是决定是否允许接收的,大多数情况下都为1
•TB8和RB8是用于G8检验的,不用则置0
•TI和RI是中断标志位,不需要操作。
•异步8位UART并且允许接收:SCON = 0x50;
•对于IAP15F2K61S2单片机,还要对辅助寄存器AUXR(0x8e)进行设置