用中断程序写的闪烁灯问题,求高手指导拜谢

2019-07-16 06:54发布

#include "reg51.h"
sbit led=P0^1;
static unsigned int counts;
bit s=0; //变量声明//
void  INT_timer0 (void) interrupt 1
{
   led=s;   
  counts=counts+1;
if (counts==20)
{s=~s;
  led=s;
counts=0;}
return;
}//计时1S //
void main()
{
counts=0;
TMOD=0x01;
  TH0=0;
TL0=0;
EA=1;
ET0=1;
  TR0=1;
return;
}
这是我用中断写的一个P0.1口每隔1秒闪烁一次的闪烁灯,可是我下载到开发板上运行时却什么灯都不能亮。我试过把led=s放到主程序里面运行结果灯能亮一盏可是还是没有闪烁的效果。我怀疑是中断程序没法运行,可是为什么没法运行我却找不出原因来,这个问题已经困扰了我一整天,怎么调试都没调试出来,所以想请论坛里面的高手指正一下,小弟万分感激。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
13条回答
Flying_Heat
1楼-- · 2019-07-17 01:41
szndq 发表于 2011-7-31 12:03
将主函数中的“return;"去掉,改为“while(1);"

是while(1)的话,程序不就在此一直循环了吗?
Flying_Heat
2楼-- · 2019-07-17 05:31
中断函数既然是void,就不要返回值的啊,你加return干吗?
szndq
3楼-- · 2019-07-17 06:18
Flying_Heat 发表于 2011-7-31 22:05
是while(1)的话,程序不就在此一直循环了吗?

一般在while()里还有要执行的程序,而该例程没有,故只能是while(1).

szndq
4楼-- · 2019-07-17 09:56
 精彩回答 2  元偷偷看……
keywords
5楼-- · 2019-07-17 13:12
Flying_Heat 发表于 2011-7-31 22:06
中断函数既然是void,就不要返回值的啊,你加return干吗?

这个是因为书上的例程都是这么写的
keywords
6楼-- · 2019-07-17 15:28
谢谢大家了这个问题我已经想通了,主要是当时没考虑到主程序和定时程序是两个独立的系统,因此没有加while(1)使主程序中断

一周热门 更多>