|

楼主 |
发表于 2024-11-30 03:36:01
|
显示全部楼层
上面写错了个if,应该是if(FLAG ==1),感觉好像应该把判断执行放在中断里面?
#include "reg51.h"
#include "intrins.h"
//-----------------------------------------------
bit FLAG; //1:上升沿中断 0:下降沿中断
sfr P3M0=0xB2;
sfr P3M1=0xB1;
sbit sheng=P3^0;
sbit jiang=P3^1;
sbit dianping=P3^5;
void Delay200ms() //@12.000MHz
{
unsigned char i, j, k;
_nop_();
i = 2;
j = 134;
k = 20;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
void DelayMs(unsigned int n)
{
do
{
Delay200ms();
}
while(n--);
}
//-----------------------------------------
//中断服务程序
void exint0() interrupt 0 //INT0中断入口
{
FLAG = dianping; //保存INT0口的状态, INT0=0(下降沿); INT0=1(上升沿)
if(FLAG ==1)
{
sheng=1;
DelayMs(1);
sheng=0;
DelayMs(5);
sheng=1;
DelayMs(1);
sheng=0;
}
else
{ jiang=1;
DelayMs(1);
jiang=0;
DelayMs(5);
jiang=1;
DelayMs(1);
jiang=0;
}
}
//-----------------------------------------------
void main()
{
P3M0 = 0x03;
P3M1 = 0x00;
sheng=0;
jiang=0;
dianping=1;
DelayMs(10);
sheng=1;
DelayMs(1);
sheng=0;
IT0 = 0; //设置INT0的中断类型为上升沿和下降沿,上升沿和下降沿均可唤醒
EX0 = 1; //使能INT0中断
EA = 1;
while (1)
{
PCON = 0x02; //MCU进入掉电模式
_nop_(); //掉电模式被唤醒后,首先执行此语句,然后再进入中断服务程序
_nop_();
}
}
|
|