打印

定时器0和定时1 同时启动 定时器1计时不准

[复制链接]
3182|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yzcook|  楼主 | 2018-6-27 09:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
定时器0初始化
void Timer0Init(void)
{
    TMOD = 0x01;                //设置定时器模式
    TH0 = 0xEE;
    TL0 = 0x00;
        EA=1;   //打开总中断
        ET0=1;   //打开定时器0中断
        TR0 = 0;
}

void tm0_isr() interrupt 1
{
    TH0 = 0xEE;
    TL0 = 0x00;   
                count++;       

   if (count>= 16)               //1ms * 1000 -> 1s
    {                       
                        TR0 = 0;   //关闭定时器1
                        count = 0;         
                        BEEP = 1;      //work LED flash
                        flag = 1;
    }

}
定时器1初始化
void Timer1Init(void)                //50毫秒@11.0592MHz
{
        AUXR &= 0xBF;                //定时器时钟12T模式
        TMOD &= 0x0F;                //设置定时器模式
        TL1 = 0x00;                //设置定时初值
        TH1 = 0x4C;                //设置定时初值
        EA= 1;
        ET1 = 1;
        TR1 = 0;               


}
void Timer1Interrupt(void) interrupt 3
{
        TL1 = 0x00;                //设置定时初值
        TH1 = 0x4C;                //设置定时初值
                tcount++;
                        if(tcount == 200)
                        {
                                switch(tim_flag)
                                {
                                        case 1:
                                                keycountABC();
                                                tcount= 0;
                                                cnt = 0;
                                        break;
                                       
                                        case 2:
                                                keycountDEF();
                                                tcount= 0;
                                                cnt = 0;
                                        break;
                                       
                                        case 3:
                                                keycountGHI();
                                                tcount= 0;
                                                cnt = 0;
                                        break;
                                       
                                        case 4:
                                                keycountJKL();
                                                tcount= 0;
                                                cnt = 0;
                                        break;
                                       
                                        case 5:
                                                keycountMNO();
                                                tcount= 0;
                                                cnt = 0;
                                        break;
                                       
                                        case 6:
                                                keycountPQR();
                                                tcount= 0;
                                                cnt = 0;
                                        break;
                                       
                                        case 7:
                                                keycountSTUV();
                                                tcount= 0;
                                                cnt = 0;
                                        break;
                                       
                                        case 8:
                                                keycountWXYZ();
                                                tcount= 0;
                                                cnt = 0;
                                        break;                                                       
                                }
                        }

}

矩阵键盘
只要有键按下就启动定时器0。
有几个特殊按键按下,在按下的时候启动定时器0和定时1
在定时器1的初始化中, 我的初始值是50MS,理论来说计数变量tcount计数到20,
就是1S,但是实际是没有1S,我把tcount改为200,则实际约为1S左右。
能否解答一下?

相关帖子

沙发
ayb_ice| | 2018-6-27 10:58 | 只看该作者
注意:模式0是13位工作模式

使用特权

评论回复
板凳
qhtflsw| | 2018-6-27 11:34 | 只看该作者
TMOD &= 0x0F;                //设置定时器模式
这里定时器是方式0,13位计数,
改为TMOD = 0x11;
或者TMOD |= 0x10;

使用特权

评论回复
地板
yzcook|  楼主 | 2018-6-27 13:49 | 只看该作者
qhtflsw 发表于 2018-6-27 11:34
TMOD &= 0x0F;                //设置定时器模式
这里定时器是方式0,13位计数,
改为TMOD = 0x11;

感谢感谢。

使用特权

评论回复
5
yzcook|  楼主 | 2018-6-27 13:49 | 只看该作者
ayb_ice 发表于 2018-6-27 10:58
注意:模式0是13位工作模式

感谢感谢

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

28

主题

84

帖子

0

粉丝