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