新手求助,实在一个人搞不懂了

2019-07-15 14:05发布

本帖最后由 puptong 于 2016-5-6 09:10 编辑

用的是STC的单片机,串口波特率是使用独立发生器的,然后想用定时器0和定时器1分别做延时,也就是定时器0 一个延时,定时器1一个延时,下面是初始化代码,以及定时器延时代码, 问题是定时器0 的延时正确,但是定时器1的延时就不对了。问下这是什么原因。void UART_Init(void)     
{
        PCON &= 0x7F;                //波特率不倍速
        SCON = 0x50;                //8位数据,可变波特率
        AUXR |= 0x04;                //独立波特率发生器时钟为Fosc,即1T
        BRT = 0xDC;                    //设定独立波特率发生器重装值0xdc
        AUXR |= 0x01;                //串口1选择独立波特率发生器为波特率发生器
        AUXR |= 0x10;                //启动独立波特率发生器
        EA=1;   //打开所有中断
        ES=1;   //使能串口接收中断,

}
void  timer0_Init(void)           //1毫秒@11.0592MHz
{
    AUXR &= 0x7F;                //定时器时钟12T模式
        TMOD &= 0xF0;                //设置定时器模式
        TMOD |= 0x01;                //设置定时器模式  16位
        TL0 = 0x66;                //设置定时初值
        TH0 = 0xfc;                //设置定时初值 1ms
        TF0 = 0;                //清除TF0标志
        TR0 = 0;                //定时器0 no 开始计时
        ET0 = 0;                // 1使能定时器0中断        
}

void  Timer1_Init(void)           //1毫秒@11.0592MHz
{
    AUXR &= 0xBF;                //定时器时钟12T模式
        TMOD &= 0x0F;                //设置定时器模式
        TMOD |= 0x10;                //设置定时器模式  16位
        TL0 = 0x66;                //设置定时初值
        TH0 = 0xfc;                //设置定时初值 1ms
        TF1 = 0;                //清除TF0标志
        TR1 = 0;            //定时器0 no 开始计时
        ET1 = 0;                // 1使能定时器0中断
        
}

void tm0_isr() interrupt 1 using 1
{
    TL0 = 0x66;                //设置定时初值
     TH0 = 0xFc;                //设置定时初值
    timer0_cont_tem++;
    if(timer0_cont_tem>=500)
        {
         TR0 = 0;        ET0 = 0;
         flag_1=1;

         timer0_cont_tem=0;         
        }
}

void tm1_isr() interrupt 3         using 1
{
    TL0 = 0x66;                //设置定时初值
        TH0 = 0xFc;                //设置定时初值
    timer1_cont_tem++;
    if(timer1_cont_tem>=500)
        {
          TR1=0; ET1=0;
          timer1_cont_tem=0;
          flag_2=1;
        }         
}

定时器1的延时调试出来不为500MS,而且误差很大。

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。