我需要设计一个夜晚蓝牙开关灯设计,采用的蓝牙芯片为JDY-30,刚开始不知道具体型号,后来连接蓝牙之后发现是JDY-30,查手册发现采用的是uart通讯,所以就进行了重新的温习。下面是uart串口通讯的笔记
使用串口通讯需要对相关寄存器进行配置
我这里需要将串口通讯工作在中断方式,那我肯定要用到中断有关的寄存器IE
还需要设置定时/计数器T1,可能有人会有疑问,为什么要用定时器呢,波特率是每秒传输二进制代码的位数,单位是 位/秒 即bps 而定时器是用来确定发送和发送执行每一位的时间的,所以需要对TCON与TMOD寄存器进行配置
使用串行通讯的话还需要确定串行通信的工作方式与控制功能,这就需要对SCON与PCON寄存器进行配置
SCON寄存器的各位如下:
(这里要注意是不是可位寻址的寄存器,如果是我们就可以直接写TI=1;如果不可以,写代码时我们必须要写SCON=0X02)
SM0与SM1是工作方式选择位
我们要让它工作在8位UART,波特率可变的情况,所以SM0与SM1为01,在方式1时,SM2是多机通讯控制位,这里把它置零。
REN是允许接收控制位 REN为1允许接收
TB8与RB8方式2/3才用到,这里给他置零
TI是发送中断请求标志位 TI=1向主机请求中断 方式一下必须由软件置位
RI是接收中断请求标志位,接收到停止位中间时刻由内部硬件置位,即RI=1,RI也必须由软件置位。
所以串口初始化时,SCON寄存器为 0101 0000
当对串口控制寄存器进行设置之后,就需要对PCON波特率加倍寄存器进行配置
SMOD为1时,串口波特率加倍,为0时不加倍,正常情况下系统默认为0
然后我们对定时器/计数器控制寄存器进行配置
TR1是定时器T1的运行控制位
接下来对定时/计数器工作模式寄存器TMOD进行配置,我们将T1工作在定时器状态下,模式选择为8位自动重装。
TMOD刚开始配置为 0010 0000
最后最重要的 我们这里用到了定时中断,所以一定要打开总中断
EA=1 CPU开放中断 ES是串行口1中断允许位 所以ES=1
中断级别如下图所示:所以中断函数写的时候需要写void Uart() interrupt 4
串口初始化函数
void UART_Init(void)
{
SCON = 0x50; // SCON: 模式 1, 8-bit UART, 使能接收
TMOD |= 0x20; // TMOD: timer 1, mode 2, 8-bit 重装
TH1 = 0xFD; // TH1: 重装值 9600 波特率 晶振 11.0592MHz
TL1 = TH1;
TR1 = 1; // TR1: timer 1 打开
EA = 1; //打开总中断
ES = 1; //打开串口中断
}
放入初值的计算公式;
TH1=256-(11059200/12/32)/(需要的波特率)
(这里默认是11.0593MHZ的晶振)
因为是8位自动重装的 当溢出的时候 将TH1的值重装进TL1所以直接令TL1=TH1即可
上一篇:#51单片机#UART串口通信的初步认识
下一篇:80C51