亚博智能论坛  
  
查看: 557|回复: 0

51的定时器0无法在使用2个串口时起效

  [复制链接]

该用户从未签到

7

主题

7

帖子

28

积分

新手上路

Rank: 1

积分
28
发表于 2017-6-20 17:36:48 | 显示全部楼层 |阅读模式
单片机型号是  STC12C5A60S2。
在同时使用串口一串口二和定时器0时遇到问题,定时器0无法正常进入中断,求问是哪里配置错了呢?

  1. //串口一初始化函数
  2.     void InitUart1()                //初始化串口1
  3.     {
  4.             PCON &= 0x7F;                //波特率不倍速
  5.             SCON = 0x50;                //8位数据,可变波特率
  6.             AUXR |= 0x40;                //定时器1时钟为Fosc,即1T
  7.             AUXR &= 0xFE;                //串口1选择定时器1为波特率发生器
  8.             TMOD &= 0x0F;                //清除定时器1模式位
  9.             TMOD |= 0x20;                //设定定时器1为8位自动重装方式
  10.             TL1 = 0xFA;                //设定定时初值
  11.             TH1 = 0xFA;                //设定定时器重装值
  12.             ET1 = 0;                //禁止定时器1中断
  13.             TR1 = 1;                //启动定时器1
  14.       ES = 1;                 //Enable UART1 interrupt
  15.     }
复制代码
  1.     //串口2初始化函数
  2.     void InitUart2(void)
  3.     {
  4.                     AUXR &= 0xF7;                //波特率不倍速
  5.                     S2CON = 0x50;                //8位数据,可变波特率
  6.                     AUXR |= 0x04;                //独立波特率发生器时钟为Fosc,即1T
  7.                     BRT = 0xFA;                //设定独立波特率发生器重装值
  8.                     AUXR |= 0x10;                //启动独立波特率发生器
  9.                     IE2 = 0x01;             //Enable UART2 interrupt
  10.     }
复制代码
  1.     //定时器0初始化函数
  2.     void Timer0Init(void)                //10毫秒@22.1184MHz
  3.     {
  4.             AUXR |= 0x80;                //定时器时钟1T模式
  5.             TMOD &= 0xF0;                //设置定时器模式
  6.             TMOD |= 0x01;                //设置定时器模式
  7.             TL0 = 0xCD;                //设置定时初值
  8.             TH0 = 0xD4;                //设置定时初值
  9.             TF0 = 0;                //清除TF0标志
  10.             TR0 = 1;                //定时器0开始计时
  11.             EA=1;
  12.     }
复制代码
  1.     //系统初始化函数
  2.     void Sys_Init()
  3.     {
  4.             LED=LED_CLOSE;
  5.            
  6.             LCD_Init();
  7.             DelayMs(100);
  8.             LCD_Clear();
  9.             DelayMs(100);
  10.             LCD_Write_String(7,0,"OK");
  11.             InitUart1();                        //初始化串口1
  12.             DelayMs(10);                                                //该延时不可去掉,否则程序卡死
  13.             InitUart2();                        //初始化串口2
  14.             DelayMs(10);                                                //该延时不可去掉,否则程序卡死
  15.             Timer0Init();
  16.             EA=1;
  17.     }
复制代码

目前大致知道是AUXR和寄存器TMOD配置有问题,可能是出在那个  TMOD &= 0x0F;  和AUXR &= 0xF7;
但是不知道怎么配置才是正确的
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表