51单片机串口通讯uart笔记

我需要设计一个夜晚蓝牙开关灯设计,采用的蓝牙芯片为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即可

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值