定时器2不能进入中断

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

解决了是初始化是应该设为向上增长

void&nbsp;&nbsp;Time2_Init()&nbsp;{<br />T2CON=0x00;//设置定时器2为自动装载模式,定时器为停止状态<br />//T2MOD=0x02;//设置定时器2为递增计时,并通过P1.0,输出<br />T2MOD=0x00;//设置定时器2为递增计时,并通过P1.0,输出<br /><br />RCAP2L=0x00;<br />RCAP2H=0x00;//设置自动装载值为0,这样每次重装一次间隔时间为5.9ms<br />ET2=1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//开定时器2中断<br />EA=1;<br />EXEN2=0;<br />TR2=1;//启动定时器2<br />}<br />
 楼主| ccwwbb76 发表于 2007-3-1 15:25 | 显示全部楼层

刚才写错了,是当T2设为从P0。1输出,时就不能用中断方式

  
原野之狼 发表于 2007-3-3 12:30 | 显示全部楼层

自导自演。。。呵呵。。。

  
bb文 发表于 2007-3-5 23:37 | 显示全部楼层

格式

楼主的程序的注释格式值得我学习。呵呵。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

11

主题

28

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部
0