单片机中断问题,初学中断,编了以下程序,可是为什么每次按下开关二极管没有一直暗下去,而是

而是不断的明暗闪烁。。。电路图就是简单的单个发光二极管电路,然后在P3^2口接上开关,接地 程序如下 请求指引 个人觉得没错了 可是灯就是不断的闪 用的AT89C51
#include<reg52.h>
#define A unsigned int
sbit d1=P1^0;
void main()
{
d1=0;
EA=1;/*开总中断*/
EX0=1;/*外部中断0*/
IT0=0; /*中断0的触发方式为低电平触发*/
while(1);
}
void temp() interrupt 0
{
d1=1;

}
谢谢,我学定时器,同样使一发光二级管亮,定时200毫秒就要使其进入中断4次,每次50毫秒对吧 我的程序如下 : 我不知道怎么让它进入中断4次,请帮我改一下 谢谢
#include<reg51.h>
sbit d1=P1^0;
unsigned int i=0,a=0;
void main()
{TMOD=0X01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1; /*总中断*/
ET0=1; /*定时器0中断打开*/
d1=0;
for(i=0;i<=3;i++)
{TR0=1;/*启动定时器0,50毫秒一到,便进入中断程序!*/
}
if(a==3)d1=~d1;
}
void temp() interrupt 1
{TH0=(65536-50000)/256; TL0=(65536-50000)%256; a++;}

程序没错,按下按键,灯就长灭了。
只是:while(1);//是中文括号和分号,可能你原程序不是那样的吧
要改成:while(1);
不太明白你说的,是不是200ms灯亮或灭一次?如果是……。
#include<reg51.h>
sbit d1=P1^0;
unsigned int i=0,a=0;
void main()
{
TMOD=0X01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1; /*总中断*/
ET0=1; /*定时器0中断打开*/
TR0=1;
while(1)
{
if(a==4)
{
a=0;
d1=~d1;
}
}
}
void temp() interrupt 1
{TH0=(65536-50000)/256; TL0=(65536-50000)%256; a++;}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-07-28
#include<reg52.h> // 试试这个
#define A unsigned int
sbit d1=P1^0;
void main()
{
EA=1; /*开总中断*/
EX0=1; /*外部中断0*/
EX1=1; /*外部中断1*/
IT0=0; /*中断0的触发方式为低电平触发*/
IT1=0; /*中断1的触发方式为低电平触发*/
while(1);
{
}
}
void int0() interrupt 0 // P3.2 开关
{
d1=1;
}
void int1() interrupt 2 // P3.3 开关
{
d1=0;
}

#include<reg51.h> // 试试这个
sbit d1=P1^0;
unsigned int a=0;
void main()
{
TMOD=0X01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1; /*总中断*/
ET0=1; /*定时器0中断打开*/
TR0=1;/*启动定时器0,50毫秒一到,便进入中断程序!*/
while(1)
{
if(a==5)
{
a=0;
d1=~d1;
}
}
}
void temp() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
a=a++;
}
第2个回答  2012-08-02
for(i=0;i<=3;i++)
{TR0=1;/*启动定时器0,50毫秒一到,便进入中断程序!*/
}
无意义 你只要启动了 定义器就一直工作的 没有必要循环三次启动
if(a==3)d1=~d1; 还有你这样是主程序循环检测a==3 那么假设a=3的时候 没有执行到判断a=3的地方 到时a=4了怎么办 改成a>=3 a=0;
相似回答