打印

定时器2不能进入中断

[复制链接]
2066|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ccwwbb76|  楼主 | 2007-3-1 14:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我用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; 
 }
}

相关帖子

沙发
ccwwbb76|  楼主 | 2007-3-1 15:18 | 只看该作者

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

void  Time2_Init() {
T2CON=0x00;//设置定时器2为自动装载模式,定时器为停止状态
//T2MOD=0x02;//设置定时器2为递增计时,并通过P1.0,输出
T2MOD=0x00;//设置定时器2为递增计时,并通过P1.0,输出

RCAP2L=0x00;
RCAP2H=0x00;//设置自动装载值为0,这样每次重装一次间隔时间为5.9ms
ET2=1;              //开定时器2中断
EA=1;
EXEN2=0;
TR2=1;//启动定时器2
}

使用特权

评论回复
板凳
ccwwbb76|  楼主 | 2007-3-1 15:25 | 只看该作者

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

使用特权

评论回复
地板
原野之狼| | 2007-3-3 12:30 | 只看该作者

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

使用特权

评论回复
5
bb文| | 2007-3-5 23:37 | 只看该作者

格式

楼主的程序的注释格式值得我学习。呵呵。

使用特权

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

本版积分规则

11

主题

28

帖子

0

粉丝