51两个定时器一个用于计数一个用于精确延时的问题,用proteus仿真好像没进入中断

代码如下/**********************START**********************************/#include<reg51.h>/... 代码如下

/**********************START**********************************/
#include <reg51.h>
//参数宏定义
#define COUNTMAX 50 //计数50次
#define CYCLES0 20 //定时器0循环20圈为1s
#define CYCLES1 5 //定时器1循环5次
#define TURNLEFT P2 = 0X02
#define TURNRIGHT P2 = 0X01
#define STOP P2 = 0X00

unsigned char FLG_TIMER0 = 0;
unsigned char FLG_TIMER1 = 0;
unsigned int LOAD;
/* Timer0 定时1s */
/* Timer1 计数5次 */

void Timer0Init(void) //50毫秒@12.000MHz
{
// AUXR &= 0x7F; //定时器时钟12T模式
TMOD &= 0xF0; //设置定时器模式
TMOD |= 0x01; //设置定时器模式
TL0 = 0xB0; //设置定时初值
TH0 = 0x3C; //设置定时初值
TF0 = 0; //清除TF0标志
TR0 = 1; //定时器0开始计时
}

void Timer0Reload(void)
{
ET0 = 0;
TL0 = 0xB0; //设置定时初值
TH0 = 0x3C; //设置定时初值
TF0 = 0; //清除TF0标志
ET0 = 1;
TR0 = 1; //定时器0开始计时

}

void Timer1Init(void) //50毫秒@12.000MHz
{
LOAD = 65535 - CYCLES1;
// AUXR &= 0xBF; //定时器时钟12T模式
TMOD &= 0x0F; //设置定时器模式
TMOD |= 0x50; //设置定时器模式(计数模式)
TL1 = LOAD; //设置定时初值
TH1 = LOAD >>8; //设置定时初值
TF1 = 0; //清除TF1标志
TR1 = 1; //定时器1开始计时
ET1 = 1;
}

#ifdef RELOAD
void Timer1Reload(void)
{
ET1 = 0;
TL1 = LOAD; //设置定时初值
TH1 = LOAD >>8; //设置定时初值
TF1 = 0; //清除TF1标志
TR1 = 1; //定时器1开始计时
ET1 = 1;
}
#endif

/* Timer1 计数5次后 LED点亮 */

int main()
{
Timer1Init();
while(1);
return 0;
}

void timer0ISR() interrupt 1
{
Timer0Reload();
FLG_TIMER0 ++;
}

/*timer1计数5次后,执行timer1中断,timer0用于精确延时,时长为1s*/
void timer1ISR() interrupt 3
{
STOP;
Timer0Init();
while(FLG_TIMER0 == CYCLES0)

FLG_TIMER0 = 0;
TURNLEFT;
Timer0Init();
while(FLG_TIMER0 == CYCLES0)

FLG_TIMER0 = 0;
TURNRIGHT;
Timer0Init();
while(FLG_TIMER0 ==CYCLES0)
Timer1Init();

}
/* ************************************END**********************************/
展开
 我来答
lycdl
高粉答主

2015-06-23 · 醉心答题,欢迎关注
知道大有可为答主
回答量:2万
采纳率:94%
帮助的人:4976万
展开全部
你的程序对定时器初始化时,没有开中断EA。还有,T1计数模式,那需要在P3.5引脚外部加脉冲,才能计数的。
这个程序
void Timer1Init(void) //50毫秒@12.000MHz
{

TR1 = 1; //定时器1开始计时
ET1 = 1;
//看这里
EA=1; //在这里,要开中断总允许标志位才行
}
百度网友283d78e
2015-06-21 · 知道合伙人IT服务行家
百度网友283d78e
知道合伙人IT服务行家
采纳数:1491 获赞数:2982

向TA提问 私信TA
展开全部
用keil与Protues联调后单步就可以看出究竟进入中断没有
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式