单片机电子钟,外部中断进不去的原因求指导
#include <reg52.h>
#include <sure.h>
extern void GetTimer();
extern void InitTimer();
extern void delay(unsigned int i);
extern void TS();
void display();
unsigned char code Disp_Tab[] = { 0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xff};
unsigned long idata D[6], Led[8];
unsigned int z=0;
unsigned int TIM;
void system_Ini()
{
TMOD = 0x11;
TH0 = 0xFE; //11.0592M
TL0 = 0x0B;
IE = 0x8B;//开启T0,T1,外部中断1
TR0 = 1;
TH1=0xc1;
TL1=0x7f;
TCON=0xf2;//开启T0,T1,IE1(低电平有效)
}
void display()
{
unsigned int i,j;
/********以下将分/秒中数据送到LED数码管显示*************/
//D[0]秒 D[1]分 D[2]时
Led[0]=Disp_Tab[10];
Led[1]=Disp_Tab[10];
Led[2]=Disp_Tab[D[2]%100/10];
Led[3]=Disp_Tab[D[2]%10]&0x7f;
Led[4]=Disp_Tab[D[1]%100/10];
Led[5]=Disp_Tab[D[1]%10]&0x7f;
Led[6]=Disp_Tab[D[0]%100/10];
Led[7]=Disp_Tab[D[0]%10];
for( i=0; i<8; i++)
{ P1 = Led[i];
switch(i)
{
case 0:LS138A=0; LS138B=0; LS138C=0; break;
case 1:LS138A=1; LS138B=0; LS138C=0; break;
case 2:LS138A=0; LS138B=1; LS138C=0; break;
case 3:LS138A=1; LS138B=1; LS138C=0; break;
case 4:LS138A=0; LS138B=0; LS138C=1; break;
case 5:LS138A=1; LS138B=0; LS138C=1; break;
case 6:LS138A=0; LS138B=1; LS138C=1; break;
case 7:LS138A=1; LS138B=1; LS138C=1; break;
}
for (j = 0 ; j<250 ;j++) { ;}
}
P1 = 0XFF;
}
main()
{
system_Ini();
InitTimer();
while(1);
{
}
}
void int0() interrupt 0 //外部中断0
{
EX0=0;
if(change==0) //按键是否按下
{
if(change==0)
{
z++;
TS(); //调整函数
while(!change); //按键是否抬起
}
}
EX0=1;
}
/*************************************
[ t1 (0.5ms)中断] 中断
------------1000/(0.02ms*250)=200Hz
*************************************/
void T1zd(void) interrupt 1 //3定时器1的中断号 1定时器0的中断号 0外部中断0 2外部中断1 4串口中断
{
TH0 = 0xfe; //机器周期=12/12MHz(晶振)=1μs TH0+TL0=0xfe33=65075 定时时间=65535-65035= 500ms
TL0 = 0x0b;
TIM=1;
}
void timer1() interrupt 3 //定时器中断1
{
TH1=0xC1; //1s 60帧 16ms 初值=65535-16000=C17F
TL1=0x7f;
GetTimer();
display();
} 单片机 外部中断
[解决办法]
中断无法进入,首先需要用示波器观测外部中断引脚是否有触发中断的信号进来,其次再用调试器看看中断寄存器的值是否有设定好。
[解决办法]
你的全局中断开了么???貌似没有找到EA=1这句话。