|
本帖最后由 墨逸、 于 2017-4-30 21:44 编辑
如题 在同时使用串口一串口二和定时器0时遇到问题,定时器0无法正常进入中断,求问是哪里配置错了呢?
//串口一初始化函数
- void InitUart1() //初始化串口1
- {
- PCON &= 0x7F; //波特率不倍速
- SCON = 0x50; //8位数据,可变波特率
- AUXR |= 0x40; //定时器1时钟为Fosc,即1T
- AUXR &= 0xFE; //串口1选择定时器1为波特率发生器
- TMOD &= 0x0F; //清除定时器1模式位
- TMOD |= 0x20; //设定定时器1为8位自动重装方式
- TL1 = 0xFA; //设定定时初值
- TH1 = 0xFA; //设定定时器重装值
- ET1 = 0; //禁止定时器1中断
- TR1 = 1; //启动定时器1
- ES = 1; //Enable UART1 interrupt
- }
复制代码
- //串口2初始化函数
- void InitUart2(void)
- {
- AUXR &= 0xF7; //波特率不倍速
- S2CON = 0x50; //8位数据,可变波特率
- AUXR |= 0x04; //独立波特率发生器时钟为Fosc,即1T
- BRT = 0xFA; //设定独立波特率发生器重装值
- AUXR |= 0x10; //启动独立波特率发生器
- IE2 = 0x01; //Enable UART2 interrupt
- }
复制代码
- //定时器0初始化函数
- void Timer0Init(void) //10毫秒@22.1184MHz
- {
- AUXR |= 0x80; //定时器时钟1T模式
- TMOD &= 0xF0; //设置定时器模式
- TMOD |= 0x01; //设置定时器模式
- TL0 = 0xCD; //设置定时初值
- TH0 = 0xD4; //设置定时初值
- TF0 = 0; //清除TF0标志
- TR0 = 1; //定时器0开始计时
- EA=1;
- }
复制代码- //系统初始化函数
- void Sys_Init()
- {
- LED=LED_CLOSE;
-
- LCD_Init();
- DelayMs(100);
- LCD_Clear();
- DelayMs(100);
- LCD_Write_String(7,0,"OK");
- InitUart1(); //初始化串口1
- DelayMs(10); //该延时不可去掉,否则程序卡死
- InitUart2(); //初始化串口2
- DelayMs(10); //该延时不可去掉,否则程序卡死
- Timer0Init();
- EA=1;
- }
复制代码
目前大致知道是AUXR和寄存器TMOD配置有问题,可能是出在那个 TMOD &= 0x0F; 和AUXR &= 0xF7;
但是不知道怎么配置才是正确的 |
阿莫论坛20周年了!感谢大家的支持与爱护!!
一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。
|