赞
踩
目录
- 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开始计时
- }
- //手动配置中断系统
- 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;
- }
由于配置是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
约等于没有误差
- void UART_Routine(void) interrupt 4
- {
- if (TI==1) //检测串口1发送中断
- {
- //功能......
- TI = 0; //清除串口1发送中断请求位
- }
- if (RI==1) //检测串口1接收中断
- {
- //功能......
- RI = 0; //清除串口1接收中断请求位
- }
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。