stc89c51-诡异-自动进入外部中断
程序如下,本来打算的是外部中断0被触发后执行read_one_word()函数,目前的问题是,中断触发后可以执行read_one_word(),但是中断没有被触发的时候也可以执行read_one_word(),或者说进入不进入中断不受控。目前感觉问题似乎和P2.0引脚有关系,如果将P2.0引脚用导线引出,导线接触开关电源的外壳就能引发中断,但是直接将P2.0接地就不会触发中断。 所以想不通啊,到底为什么呢?#include <reg52.h>
#include<intrins.h>
sbit TRY = P1^6;
sbit SCLK= P2^0;
sbit MISO= P2^1;
sbit CS = P3^2;
bit FINT0;
void int_0(); //外部中断0
unsigned int read_one_word(void);
void DelayMs(unsigned int MS);
void initial();
void DelayMs(unsigned int MS)
{
unsigned int i;
while(MS--)
{
for(i = 1000;i!=0;i--);
}
}
void main(){
initial();
while(1){
TRY=0;
if(FINT0){ //中断0来到要做什么事情
unsigned int SetValue;
FINT0=0;
TRY=1;
SetValue=read_one_word();
}
}
}
//-------------------------------------------------------------------
void initial(){
EA=1; // CPU所有中断开(IE最高位MSB)
EX0=1; // INT0中断开
IT0=0; // INT0低电平触发(为1则为下降沿触发)
EX1=1; // INT1中断开
IT1=0; // INT1低电平触发(为1则为下降沿触发)
return;
}
void int_0() interrupt 0 using 0
{
FINT0=1;
}
unsigned int read_one_word(void)
{
unsigned int temp=0;
unsigned int temp1=0;
unsigned int BitCount=16;
do{
SCLK=0;
DelayMs(10);
SCLK=1;
DelayMs(10);
if(MISO)
temp=temp|0x0001;
else
temp=temp&0xfffe;
if (BitCount-1)
{
temp1=temp<<1;
temp=temp1;
}
BitCount--;
}
while(BitCount);
return temp;
} 判断一下,是否干扰引起的 没什么干扰啊
而且感觉和那个read_one_word()有关,如果将read_one_word()屏蔽掉,只剩下一个TRY=1(led灯灭),就不会自动进入中断。实在想不通
页:
[1]