标题: 我的这个单片机程序 同时启用定时器0和1 怎么不能实现呢个,单个使用正常 [打印本页]

作者: jinni_wu    时间: 2021-1-29 17:46
标题: 我的这个单片机程序 同时启用定时器0和1 怎么不能实现呢个,单个使用正常
同时启用定时器0和1 定时1用于串口中断 ,定时0用于定时1MS中断 求助前辈们指导指导一下 是怎么回事呢?把我给搞蒙了

单片机源程序如下:


void ConfigSUART(unsigned int baud)
{
    ACC = P_SW1;
    ACC &= ~(S1_S0 | S1_S1);    //S1_S0=0 S1_S1=0
    //ACC |= S1_S1;               //(P1.6/RxD_3, P1.7/TxD_3)
    //ACC |= S1_S0;               //(P3.6/RxD_2, P3.7/TxD_2)
    P_SW1 = ACC;                //(P3.0/RxD, P3.1/TxD)
   
  
   SCON = 0x50;                //8位可变波特率
    AUXR |= 0x40;                //定时器1为1T模式
    AUXR &= 0xFE;   
    TMOD &= 0x80;                //定时器1为模式0(16位自动重载)
    TL1 = (65536 - (FOSC/4/BAUD));   //设置波特率重装值
    TH1 = (65536 - (FOSC/4/BAUD))>>8;
    TR1 = 1;                    //定时器1开始启动
    ET1=1;
    TI = 1;   //在串口使用printf的时候,需要将T1=1;
    ES = 1;                     //使能串口中断
    printf("\n 串口初始化\n");   
}

/* 配置并启动T0,ms-T0定时时间 */
void ConfigTimer0(unsigned int ms)
{
    unsigned long tmp;  //临时变量
   
    tmp = 11059200 / 12;      //定时器计数频率
    tmp = (tmp * ms) / 1000;  //计算所需的计数值
    tmp = 65536 - tmp;        //计算定时器重载值
    tmp = tmp + 33;           //补偿中断响应延时造成的误差
   
   //AUXR |= 0x80;                   //定时器0为1T模式
    AUXR &= 0xFE;                   //定时器0为12T模式
    TMOD &= 0xF8;                    //设置定时器为模式0(16位自动重装载)
    TH0 = (unsigned char)(tmp>>8);  //定时器重载值拆分为高低字节
    TL0 = (unsigned char)tmp;

    ET0 = 1;        //使能T0中断
    TR0 = 1;        //启动T0
}


void main()
{
    P0M1 = 0;    P0M0 = 0;    //设置为准双向口
    P1M1 = 0;    P1M0 = 0;    //设置为准双向口
    P2M1 = 0;    P2M0 = 0;    //设置为准双向口
    P3M1 = 0;    P3M0 = 0;    //设置为准双向口
    P4M1 = 0;    P4M0 = 0;    //设置为准双向口
    P5M1 = 0;    P5M0 = 0;    //设置为准双向口
    P6M1 = 0;    P6M0 = 0;    //设置为准双向口
    P7M1 = 0;    P7M0 = 0;    //设置为准双向口
    //上面这些是必要的,除非用到PWM
   
  

  ConfigSUART(115200);

    ConfigTimer0(1);   //配置T0定时1ms

     EA = 1;            //开总中断
     
    while (1)
    {

    }
}





作者: wulin    时间: 2021-1-30 08:11
1275109681 发表于 2021-1-29 22:53
顶一下

    AUXR   TMOD  重复配置不当。
作者: 人人学会单片机    时间: 2021-1-30 09:45
AUXR   TMOD 要按位与和按位或  不能赋值

作者: munuc_w    时间: 2021-1-30 10:15
T1用作波特率不能开中断吧。
作者: sync763    时间: 2021-1-30 12:55
AUXR &= 0xFE;                   //定时器0为12T模式
TMOD &= 0xF8;                    //设置定时器为模式0(16位自动重装载)
这种写法会影响其它位的值。
作者: jinni_wu    时间: 2021-1-30 15:26
已解决,谢谢各位大神的指导!




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1