STC89C52在12M晶振模式下配置串口波特率

因为需要比较精确的定时器,所以在STC89C52系统上使用了外部的12M晶振,T0/T1的1次计数就是1us。

所以,当需要做串口通信时,踩到一个小坑,网上也没什么资料说清楚了的。这里写下来记录一下,免得以后忘记了。

先上手册里面的常用波特率设置表格

好吧,常用的里面没我需要的,啃文档吧

首先明确,我的需求是9600,8n1,也就是文档里描述的串口工作在模式1

这里就有两个可变设置量,1是SMOD,2是12T/6T,最后选定SMOD=1,6T,这样就有计算式

TH1=256 - 12M/6/16/9600 = 243(0xF3)

实际波特率 = 2/32*12M/6/(256-243)=2M/16/13=9615.4

偏差为(9615.4-9600)/9600 =0.0016 = 0.16%,妥妥的能用

实际配置代码如下:

void Uart1_Init(void)    //9600bps@12.000MHz
{
  SCON=0x50; //SM0(bit7)=0,SM1(bit6)=1串口工作在模式1,8位波特率可变,SM2(bit5)=0,REN(bit4)=1允许串行接收控制位,其他位=0
  TMOD=TMOD&0X0F;//低4位是T0配置不动
  TMOD=TMOD|0x20;      //T1工作于模式2,TMOD.7=0表示不需要外部管脚控制,TMOD.6=0表示T1是定时器,TMOD.5:TMOD.4 = 10表示8位自动重装载定时器,当溢出时将TH1存放的值自动重装入TL1
   PCON |= 0x80;//波特率加倍
  TH1=243;//
  TL1=TH1;
  EA=1;
  ES=1;
  ET1=0;
  TR1=1;
}

下载软件上要勾选使能6T(双倍速)模式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值