我用c51写单片机程序,对定时器2操作让它工作在自装载模式,但是不能进入中断,我的程序为: #include "STC89C516RD+.H" sbit TestLed=P1^3; //测试灯 /****************************************************************************************** ** 函数名称:T2_Init() ** 功能描述:初始化定时器2为自装载模式 ** 输 入: ** 输 出: ** 全局变量: ** 调用模块: ** ** 作者: ** 日期: 2007年2月5日 **----------------------------------------------------------------------------------------- ** 修改者: ** 日期: **----------------------------------------------------------------------------------------- ********************************************************************************************/ void Time2_Init() { T2CON=0x00;//设置定时器2为自动装载模式,定时器为停止状态 T2MOD=0x02;//设置定时器2为递增计时,并通过P1.0,输出 RCAP2L=0x00; RCAP2H=0x00;//设置自动装载值为0,这样每次重装一次间隔时间为5.9ms ET2=1; //开定时器2中断 EA=1; EXEN2=0; TR2=1;//启动定时器2 } /****************************************************************************************** ** 函数名称:T2() ** 功能描述:在中断函数中对要定时的地方,对变量进行加1 ** 输 入: ** 输 出: ** 全局变量: ** 调用模块: ** ** 作者: ** 日期: 2007年2月5日 **----------------------------------------------------------------------------------------- ** 修改者: ** 日期: **----------------------------------------------------------------------------------------- ********************************************************************************************/ void Time2Int() interrupt 5 { //定时器2中断响应函数,对要定时的可以在该函数中给相应的变量加1 ET2=0; //关闭定时器2中断 TF2=0; //清定时器2中断 EXF2=0; //清定时器2外部中断 //TimeCounnt1Minute++; //比赛时间定时计数器加1 //TimeCounnt300ms++;//点灯时间计数器 //TimeCounnt++; //延时定时计数器 TestLed=1; while(1); ET2=1; //开定时器2中断 } /****************************************************************************************** ** 函数名称:SetPriority() ** 功能描述:设置优先级,中断0最高,中断1第二,定时器2中断第三 ** 输 入: ** 输 出: ** 全局变量: ** 调用模块: ** ** 作者: ** 日期: 2007年2月5日 **----------------------------------------------------------------------------------------- ** 修改者: ** 日期: **----------------------------------------------------------------------------------------- ********************************************************************************************/ void SetPriority() { EA=0; IPH|=0x01; PX0=1; //外部中断0优先级最高3 IPH|=0x02; PX1=0; //外部中断0优先级2 IPH|=0x00; PT2=1; //定时器2优先级1 EA=1; } /****************************************************************************************** ** 函数名称:main() ** 功能描述:主程序 ** 输 入: ** 输 出: ** 全局变量: ** 调用模块: ** ** 作者: ** 日期: 2007年2月5日 **----------------------------------------------------------------------------------------- ** 修改者: ** 日期: **----------------------------------------------------------------------------------------- ********************************************************************************************/ void main(){ //SetPriority(); //设置优先级 Time2_Init(); //初始化定时器2,让它工作在自装载模式 ET2=1; //开定时器2中断 AUXR=0x01; P3=0x0F; TestLed=0; //灭测试灯 while(1) { if (TF2==1) TestLed=1; } } |