赞
踩
目录
中断函数(函数可自由命名,但是要加上中断号"interrupt 4")
- 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接收中断请求位
- }
- }
- #include <REGX52.H>
- #include "UART.h"
-
- unsigned char Sec=0;
-
- void main()
- {
- UART_Init();
-
- while(1)
- {
-
- }
-
- }
-
- /**
- * @brief 中断函数查询P166,函数命名可自由,但是要更上中断号"interrupt 4"
- * @param 无
- * @retval 无
- */
- void UART_Routine(void) interrupt 4
- {
- if(RI==1)
- {
- P2=~SBUF;
- RI=0;
- }
- }
- #include <REGX52.H>
-
- /**
- * @brief 串口初始化//4800bps@11.0592MHz
- * @param 无
- * @retval 无
- */
-
-
-
- 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;
- }
-
- /**
- * @brief 串口发送一个字节的数据
- * @param Byte 要发送的一个字节数据
- * @retval 无
- */
-
- void UART_SendByte(unsigned char Byte)
- {
- SBUF=Byte;
- while(TI==0); //TI=0,数据完整发送出去,TI=1,跳出循环
- TI=0; //TI=0,使用软件复位
-
- }
-
-
- #ifndef __UART_H__
- #define __UART_H__
-
-
- void UART_Init();
- void UART_SendByte(unsigned char Byte);
-
- #endif
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。