目录
一、如何使用串口波特率计算器
1.以此为例:
2.生成代码如下:
void Uart1_Init(void) //9600bps@11.0592MHz
{
SCON = 0x50; //8位数据,可变波特率
AUXR |= 0x40; //定时器时钟1T模式
AUXR &= 0xFE; //串口1选择定时器1为波特率发生器
TMOD &= 0x0F; //设置定时器模式
TL1 = 0xE0; //设置定时初始值
TH1 = 0xFE; //设置定时初始值
ET1 = 0; //禁止定时器中断
TR1 = 1; //定时器1开始计时
}
3.需要手动配置中断系统
1.原理图
2.配置代码
//手动配置中断系统
ES=1;
EA=1;
PS=0;
二、如何理解软件生成的波特率
void UART_Init()
{
//由软件自动生成
SCON=0x50; //STC89C52操作手册P235方式1
PCON &= 0x7F; //波特率不倍速
TMOD &= 0x0F; //设置定时器1模式
TMOD |= 0x20; //设置定时器1模式
TL1 = 0xFA; //设置定时初始值
TH1 = 0xFA; //设置定时重载值
ET1 = 0; //禁止定时器中断
TR1 = 1; //定时器1开始计时
//需要手动配置中断系统
ES=1;
EA=1;
PS=0;
}
1.详解
由于配置是8位自动重载,TL1=TH1=0xFA ,0xFA=250;
总计八位,那么数据范围0~255(256溢出)
256-250=6
那么每计6个数溢出一次
晶体振荡器的输出经12 分频后得到输入的时钟脉冲
一个机器周期内有12 个振荡周期。故其频率为晶振频率的1/12。
此设备是11.0592M 的晶振,1.085μs为一个输入脉冲的时间
则6.51μs溢出一次
1/6.51,则0.1536098MHz就是定时器的溢出率
再看PCON=0111 1111
可知SMOD=0(参考串口模式图)
那么波特率=0.1536098MHz /2 /16
波特率为0.00480030625MHz约等于4800Hz
约等于没有误差
2.串口模式图
三、如何计算波特率
参考STC89C52手册P235
四、如何调用串口中断函数
中断函数(函数可自由命名,但是要加上中断号"interrupt 4")
void UART_Routine(void) interrupt 4
{
if (TI==1) //检测串口1发送中断
{
//功能......
TI = 0; //清除串口1发送中断请求位
}
if (RI==1) //检测串口1接收中断
{
//功能......
RI = 0; //清除串口1接收中断请求位
}
}
五、中断函数查询表