单片机定时器问题,热诚欢迎高手们来回答

来源:百度知道 编辑:UC知道 时间:2024/06/01 07:41:48
就是我在单片机程序中要多个地方用到计时器,所以光用两个time0,time1不够用,我的问题是可不可以在不同时段用time0计数的方法来解决计数器不够用的问题,如:
static void timer0A_isr(void) interrupt 1 //定时器0中断服务函数
{
TR0=0;
TL0=0x11; //重装定时器初值
TH0=0xee;
TR0=1;
}
void timer0A_initialize(void) //定时器初始化函数
{
EA=0;
timer0_tick=0; //计数变量
TR0=0;
TMOD=0x01; //T0方式 定5MS
TL0=0x11; //装定时器初值
TH0=0xee;
TR0=1;
ET0=1;
EA=1;
}
在用过time0A后我将TR0=0;
然后:
static void timer0B_isr(void) interrupt 1 //定时器0中断服务函数
{
TR0=0;
TL0=0x11; //重装定时器初值
TH0=0xee;
TR0=1;
}
void timer0B_initialize(void) //定时器初始化函数
{
EA=0;
timer0_tick=0; //计数变量
TR0=0;
TMOD=0x01; //T0方式 定5MS
TL0=0x11; //装定时器初值
TH0=0xee;
TR0=1;
ET0=1;
EA=1;
}
在第二次启动time0的时候(就是void timer0B_initialize(void))它所调用的中断服务子函数是static void timer0A_isr(void)

定时器(计数器)只是一个定时(计数)的工具,可以由程序实现灵活应用。
比方说你有两只表都有各自的用处,但是某个时刻一只表是没在用的,当然可以拿来用作别的用处。
只要不同时在不同时段用,程序上用标志加以区分判断就可以。
用法你可以参考:
UCHAR Timer0_Function_Flg;//建立全局变量

static void timer0_isr(void) interrupt 1 //定时器0中断服务函数有且只能有一个
{
if(Timer0_Function_Flg==0)//功能timer0A
{
//功能timer0A的操作
}
else//功能timer0B
{
//功能timer0B的操作
}
}

void timer0A_initialize(void) //定时器初始化函数
{
Timer0_Function_Flg=0;////////////////////////////设置功能标志A,要确保此定时器没有被B功能占用
EA=0;
timer0_tick=0; //计数变量
TR0=0;
TMOD=0x01; //T0方式 定5MS
TL0=0x11; //装定时器初值
TH0=0xee;
TR0=1;
ET0=1;
EA=1;
}
void timer0B_initialize(void) //定时器初始化函数
{
Timer0_Function_Flg=1;////////////////////////////设置功能标志B,首先要确保此定时器没有被A功能占用
EA=0;
timer0_tick=0; //计数变量
TR0=0;
TMOD=0x01; //T0方式 定5MS
TL0=0x11; //装定时器初值
TH0=0xee;
TR0=1;
ET0=1;
EA=1