2067|4

77

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

单片机定时中断 [复制链接]

一段定时显示程序
void Time0()interrupt 1
{
unsigned idata i =1;
TR0 = 0;
TH0  = 0xB8; //20ms定时
TL0  = 0x00;
i++;
if(i==500)//10s
{
timing = 1;
}
TR0 = 1;
}


void main()
{
timing=0;
delayms(50);
VFD_init();
VFD_string(LOADING);//显示字符串
delayms(50);
TMOD = 0x01;
TH0  = 0xB8;
TL0  = 0x00;
TR0 = 1;
ET0 = 1;
EA = 1;
while(1)
{
  if(timing == 1)
  disp();//显示函数
}
}

请问哪里有问题,这个一直停在显示字符串,不会进到显示函数里面。

最新回复

对。首先是变量i的生存周期问题,可以把它声明成静态变量,即static unsigned idata i =1; 另外,timing 要声明成volatile   详情 回复 发表于 2009-8-28 06:34
点赞 关注

回复
举报

71

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
你的delay函数的定义去哪了?
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
void Time0()interrupt 1
{
unsigned idata i =1; // 局部变量,每次进入ISR它会被初始化一次,变成1
TR0 = 0;
TH0  = 0xB8; //20ms定时
TL0  = 0x00;
i++;
if(i==500)//10s .....所以它永远到不了500(总是2)
{
timing = 1;
}
TR0 = 1;
}
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

4
 
并且,一旦从ISR返回,你的i就结束的生存期,它的存储可能会被分配给其它变量
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

5
 
对。首先是变量i的生存周期问题,可以把它声明成静态变量,即static unsigned idata i =1;
另外,timing 要声明成volatile
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表