微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 新手求助,实在一个人搞不懂了

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

时间:10-02 整理:3721RD 点击:

用的是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,而且误差很大。

定时器1的初始化和中断里的TH0和TL0改为TH1和TL1,另外把using1去掉

把串口关了试试,是不是串口的问题

还是你心细,我写的时候为了方便直接复制了定时器0的代码改的,结果没改寄存器,谢谢,现在解决了,还是要细心啊

谢谢了哈,还是不够细心的原因,已经解决了

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top