21ic问答首页 - 求助keilC51用定时中断问题
求助keilC51用定时中断问题
jumpio2024-03-11
在定时中断中用一个全局变量tms来计时,然后在延时子程序中利用tms做延时,程序如下:u8 tms;
void Delay(u8 ms);
void main(void)
{
WTST = 0; //设置程序指令延时参数,赋值为0可将CPU执行指令的速度设置为最快
EAXSFR(); //扩展SFR(XFR)访问使能
CKCON = 0; //提高访问XRAM速度
GPIO_config();
Timer_config();
EA = 1;
Delay(10);
while (1);
}
void Timer0_ISR_Handler (void) interrupt TMR0_VECTOR //进中断时已经清除标志
{
// TODO: 在此处添加用户代码
++tms;
}
void Delay(u8 ms)
{
tms=0;
while(tms<ms);
}
仿真时发现程序死在Delay中,查看tms正常计时,也已超过设定的ms值,但就是无法跳出while(tms<ms)循环。请教该如何解决?
void Delay(u8 ms);
void main(void)
{
WTST = 0; //设置程序指令延时参数,赋值为0可将CPU执行指令的速度设置为最快
EAXSFR(); //扩展SFR(XFR)访问使能
CKCON = 0; //提高访问XRAM速度
GPIO_config();
Timer_config();
EA = 1;
Delay(10);
while (1);
}
void Timer0_ISR_Handler (void) interrupt TMR0_VECTOR //进中断时已经清除标志
{
// TODO: 在此处添加用户代码
++tms;
}
void Delay(u8 ms)
{
tms=0;
while(tms<ms);
}
仿真时发现程序死在Delay中,查看tms正常计时,也已超过设定的ms值,但就是无法跳出while(tms<ms)循环。请教该如何解决?
赞0
正解,谢谢
评论
2024-03-15
赞0
正解,谢谢.之前用ARM好像不用这个声明也可以, c51第一次遇到这个问题
评论
2024-03-15
赞0
变量添加volatile声明即可
评论
2024-03-15
赞0
void main(void)
{
WTST = 0; //设置程序指令延时参数,赋值为0可将CPU执行指令的速度设置为最快
EAXSFR(); //扩展SFR(XFR)访问使能
CKCON = 0; //提高访问XRAM速度
GPIO_config();
Timer_config();
EA = 1;
tms=0;
Delay(10);
while (1);
}
void Delay(u8 ms)
{
while(tms<ms);
}
评论
2024-03-15
赞0
定时器确认已启动,仿真时查看tms已开始计时,只是tms大于ms了还是跳不出while(tyms<ms)
评论
2024-03-15
赞0
delay中有一个while(tms<ms)的循环
评论
2024-03-15
赞0
tms=0;
while(tms<ms);
你这是要做什么操作呢?定时器启动了吗?定时器中断取反个IO,示波器看看吧。
评论
2024-03-13
赞0
评论
2024-03-13
赞0
评论
2024-03-12
您需要登录后才可以回复 登录 | 注册