大家好,我昨天碰到一个问题,一直没搞明白,想请教一下大家。问题是这样的:下面这个程序中,中断服务采用INT0时可以进去,但采用INT1时就不能进去,请问一下大家这是什么情况?谢谢!
#include <STC12C2052AD.H>
unsigned char a,b,maxv,f,i;//b为按键状态标志,a为最大输出标志
unsigned int c;//c为输出状态的第二级标记(第一级为b)
unsigned char code freq[]={0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE}; //不同输出频率对应的T1初值
sbit CLKOUT1 = P1^1;//置时钟输出口
sbit LED3 = P1^5;//扫频状态指示
sbit KEY = P3^2;
/*********************************************************************************************
函数名:毫秒级CPU延时函数
调 用:DELAY_MS (?);
参 数:1~65535(参数不可为0)
返回值:无
结 果:占用CPU方式延时与参数数值相同的毫秒时间
备 注:应用于1T单片机时i<600,应用于12T单片机时i<125
/*********************************************************************************************/
void DELAY (unsigned int a){
unsigned int i;
while( a-- != 0){
for(i = 0; i < 600; i++);
}
}
/*********************************************************************************************/
/*********************************************************************************************
函数名:主函数;STC15F104W有一个外部中断源,一个
调 用:无
参 数:无
返回值:无
结 果:程序开始处,无限循环
备 注:
/**********************************************************************************************/
void main (void){
AUXR |= 0xC0;//T0、T1时钟速度1T
TMOD =0x22;//定时器0、1置8位自动装载
TL1 = TH1 = 0xC8;//8位自动装载数256-56,1T模式下输出107kHz激励信号
TCON |= 0x45;//T1开始计时;外部中断源INT0、INT1为下降沿触发
EA = 1;//开总中断
// EX0 = 1;//开外部中断0
EX1 = 1;//开外部中断1
maxv = 0;
P1M1 = 0x01;//0000 0010,置P1.2为高阻输入
P1M0 = 0x04;//0000 0100,置P1.0为强推输出
P3M1 = 0x20;//0010 0000
P3M0 = 0x00;//0000 0000,置P3.5为强推输出
// IPH |= 0x05; //INT0、INT1设为最高优先级中断
// IP |= 0x05;
ADC_DATA = 0x00;
ADC_CONTR = 0xE2;
while(1);
}
/**********************************************************************************************/
函数名:中断处理函数0,绿灯
调 用:无
参 数:无
返回值:无
结 果:
备 注:
/**********************************************************************************************/
void inter1 () interrupt 2
{
if (KEY == 0){
DELAY (50);
if (KEY == 0){
WAKE_CLKO = 0x02;//允许T1时钟输出
for (i=0;i<11;i++) //扫频,选择最佳工作频率
{
TL1 = TH1 = freq[i];//8位自动装载数1T模式下输出激励信号
DELAY (500);
ADC_CONTR |= 0x08;
while ((ADC_CONTR & 0x10)==0);
ADC_CONTR &= 0xEF;
if(ADC_DATA>=maxv)
{
maxv = ADC_DATA;
f = freq[i];
}
LED3 = ~LED3;
}
LED3 = 0;
TL1 = TH1 = f;
WAKE_CLKO = 0x00;//不允许T1时钟输出
CLKOUT1 = 0;//输出置零
}
}
} |