新手上路,求高手指教、、

2019-07-16 04:36发布

#include <at89x52.h>
#define A 0x9e
#define B 0x58
#define C TR0=1
#define D 40
#define E P0
#define F P1&=0xf0;P1|=0x01
unsigned char G=0;
void timer() interrupt 1
{
static unsigned char H=0;
TH0=A;
TL0=B;
F;
if(H!=D)
{
  H++;
}
else
{
  H=0;
  if(G!=9)
  {
   G++;
  }
  else
  {
   G=0;
  }
}
void Initial(void)
{
IE=0x82;
TMOD=0x01;
TH0=A;
TL0=B;
C;
F;
}
void main()
{
unsigned char code L[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
Initial();
while(1)
{
  E=L[G];
}
}

这是我遇到的第一个关于中断的源代码,小弟的理解是这样的。首先在main函数里开始设好初始值,开启内部中断,然后到了E=L[G]这里,不停的循环,到了计数器溢出了就开始执行中断函数,跳动了子函数timer() 里,但是问题来了,这里设计计数器加四十次就算一秒,但是在函数timer() 里执行if语句一次后不就是会跳出这个函数吗?就是H就加到1就跳出了timer() 函数了吗?然后又回main()函数里的E=L[G]不是吗,但是这时G也不变啊!数码管不是一样显示原来的数吗?怎么会每隔一秒变一个数呢?小弟实在是想不懂、、、、求指教,最好是教懂小弟怎么看懂这个源代码,这跟小弟的理解有什么不同、、、、、
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
3条回答
lovezjf234
1楼-- · 2019-07-16 06:06
中断时硬件计数。和软件没关系。硬件时计数变量增加1,E=L[G],只是个显示函数,
卩、楓の葉へ
2楼-- · 2019-07-16 07:53
lovezjf234 发表于 2012-9-19 12:11
中断时硬件计数。和软件没关系。硬件时计数变量增加1,E=L[G],只是个显示函数, ...

那怎么样才能跳出timer()函数,小弟实在不懂,请指教、谢谢、、
xtx321
3楼-- · 2019-07-16 09:35
 精彩回答 2  元偷偷看……

一周热门 更多>