两个定时器冲突怎么解决


static bp_uint32_t int_count;

void delay_ms(bp_uint32_t time)
{
    //模式1,16位定时器
    TMOD |= 0x01;             
    TH0   = 0xfc;
    TL0   = 0x18;
    //打开总中断
    EA    = 1;       
    //打开定时器中断
    ET0   = 1;     
    //打开定时器
    TR0   = 1;       

    int_count = 0;
    while(int_count < time);

    EA  = 0;
    ET0 = 0;
    TR0 = 0;
}

void timer0_int(void) interrupt 1 
{
    TH0 = 0xfc;
    TL0 = 0x18;
    
    int_count++;    
}

//void delay_ms(bp_uint16_t time)
//{
//    bp_uint8_t a, b;
//    for (; time > 0; time--)
//    {
//         for (b = 199; b > 0; b--)
//         {
//              for(a = 1; a > 0; a--);
//         }      
//    }
//}

void Init_Timer0(void)
{
//**All notes can be deleted and modified**//
  TMOD |= 0x10;      //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响             
    TH0=(65536-20000)/256;          //重新赋值 20ms
    TL0=(65536-20000)%256;
    EA=1;            //总中断打开
    ET0=1;           //定时器中断打开
    TR0=1;           //定时器开关打开
}

void Timer0_isr(void) interrupt 1 
{
    TH0=(65536-20000)/256;          //重新赋值 20ms
    TL0=(65536-20000)%256;
    
    time_20ms++;
}


void UART_Init(void)
{
    SCON  = 0x50;                // SCON: 模式 1, 8-bit UART, 使能接收  
    TMOD |= 0x20;               // TMOD: timer 1, mode 2, 8-bit 重装
    TH1   = 0xFD;               // TH1:  重装值 9600 波特率 晶振 11.0592MHz
    TL1 = TH1;  
    TR1   = 1;                  // TR1:  timer 1 打开                         
    EA    = 1;                  //打开总中断
    ES    = 1;                  //打开串口中断
}


两个定时器冲突怎么解决

可以通过优先级设定,抢先中断实现两个定时器的冲突问题的!