STC89C52单片机在流水灯程序中使用外部中断0

单片机P1口接8盏发光二级管,要求没有中断时8盏等由低位到高位一次点亮,当按下外部中断0(设为边沿触发)时,灯由高位到低位一次亮。
以下是我编的程序,为什么当有外部中断0时,8盏灯没有反向点亮呢?#include<reg52.h>
int a;
void delay(unsigned i)
{
while(--i);
}
int main()
{
a=0;
EA=1;
EX0=1;
IT0=1;
P1=0xfe;
while(1)
{
if(a==0)
{delay(30000);
P1<<=1;
P1|=0x01;
if(P1==0x7f)
{
delay(30000);
P1=0xfe;
}
}

if(a==1)
{delay(30000);
P1>>=1;
P1|=0x80;
if(P1==0xfe)
{
delay(30000);
P1=0x7f;
}
}
}
}
void ISR_Key(void) interrupt 0 using 1
{
EX0=0;
if(a==0){P1=0x7f;a=1;};
if(a==1){P1=0xfe;a=0;};
EX0=1;
}

第1个回答  2011-03-28
void ISR_Key(void) interrupt 0 using 1
{
EX0=0;
if(a==0){P1=0x7f;a=1;}; //在这一行,令a=1,马上就符合下面的条件了
if(a==1){P1=0xfe;a=0;}; //在这一行,又把a改成了0
EX0=1; //经过上面的两行,a永远是0
}
如下改动比较简单:
if(a==0){P1=0x7f;a=1;}; //这一行,不变
else{P1=0xfe;a=0;};
第2个回答  2011-03-26
void ISR_Key(void) interrupt 0 using 1
{
EX0=0;
if(a==0){P1=0x7f;a=1;} 这里有问题了
else if(a==1){P1=0xfe;a=0;}
EX0=1;
}本回答被提问者采纳

STC89C52空闲与掉电唤醒问题
空闲模式可以通过中断唤醒,掉电模式只可以通过外部中断唤醒。你可以把按键接在外部中断引脚,用按键触发外部中断唤醒单片机(在外部中断服务函数中添加PCON=0x00;)。在中断中将PCON清0,唤醒单片机。进入空闲模式或掉电模式,程序就不运行了,停止在你进入空闲模式或掉电模式处,待重新唤醒又从停止处继续...

51单片机中断唤醒
完全可以呀,可以在进入休眠状态前设置一个标志,唤醒后在按键释放状态清该标志。

求用STC89C52RC单片机实现流水灯(C语言)
用STC89C52RC单片机实现流水灯,这是最简单的程序,用左移函数_corl_( )实现很容易。P0口接8个LED灯,用proteus 仿真时的仿真图和仿真效果如下。

求STC89C52单片机的详细资料?包括引脚功能,存储器等等的详细介绍,越...
如有必要,可通过对特殊功能寄存器(sfr)区中的8eh单元的d0位置位,可禁止ale操作。该位置位后,只有一条movx和movc指令才能将ale激活。此外,该引脚会被微弱拉高,单片机执行外部程序时,应设置ale禁止位无效。psen——程序储存允许(psen)输出是外部程序存储器的读选通信号,当stc89c52由外部程序存储器...

stc89c52不用复位电路也能运行吗
stc89c52没有复位电路也可以的,但是at89c52或at89s52就不行咯

STC89C52 的单片机用C语言如何用循环移位、位操作和调用函数来实现流水...
void main (void){ unsigned char mask = 1, j = 0;unsigned int i;while (1) { if (j < 7) mask = _crol_(mask, 1);else mask = _cror_(mask, 1);P1 = ~mask; for(i = 0; i < 30000; i++);P1 = 0xff; \/\/for(i = 0; i < 10000; i++);j++...

STC89C52单片机音乐盒程序问题
一个键做两个事情时假如播放为《播放控制=0》,那么暂停就是《播放控制=1》在按键检测那里执行按键key1时,检查有按下就进行取反就行了。播放控制为一个寄存器或标志位,程序不全,不知道你的p是干嘛的

stc89c52是什么?
STC89C52单片机是STC公司生产的一种低功耗、高性能CMOS8位微控制器,具有8K字节系统可编程Flash存储器。STC89C52使用经典的MCS-51内核,但做了很多的改进使得芯片具有传统51单片机不具备的功能。在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的...

做流水灯需要的元器件?
1 5V电源。2 1K电阻。3 LED发光二极管。4 STC89C52RC单片机。就是通过这四个部分,就可以组成流水灯版的单片机最小系统了,对于实物的话,加上一个振荡电路,一样可以运行上面这个效果的。单片机确实挺好玩的,如果你想学习更多单片机和程序的知识,可以看看我整理好的“17个实验学会单片机”,百度一下...

...用STC89C52单片机的外部中断采集编码器的信号。
40微秒。用中断有问题的,STC有个定时器\/计数器有捕获功能,用那个应该是可以的。建议用STM32

相似回答