| 
 在学红外解码,正打算读取遥控器上各位的码值,下载程序后只显示初值0,怎么按都没反应…………求指点  
 
#include"STC12C5A.h" 
sbit IRIN=P3^3;//红外接收脚与INT1相连,即外部中断1 
double num1=0;//定时器0计时用数 
int IM[32]=0;//存贮16位地址码与8位数据码与8位反码 
/*四个函数均为数码管里的函数,放在另一个c文件*/ 
void delay_ms(unsigned int time);  
void HC595_send_byte(int byte); 
void HC595_show_num(int num) ; 
void SMG_display(int dat) ; 
/*定时器0初始化函数*/ 
void delay_MS_Timer0_INit() 
{ 
 TMOD=0x02;//模式2:8位自动重装 
 TH0=6; 
 TL0=6; 
 EA=1;//总中断 
 ET0=1;//定时器0中断 
  TR0=1; //开始计时 
} 
/*定时器0中断函数*/ 
void Timer0_Isp() interrupt 1 
{ 
  num1++; 
} 
/*红外初始化*/ 
void red_Init() 
{ 
   IRIN=1; 
  IT1=1;//外部中断1下降沿触发 
    EX1=1;//允许外部中断1 
} 
/*延时n毫秒*/ 
 
void delay_MSS(double n) 
{ 
 delay_MS_Timer0_INit(); 
 while(num1<n*8); 
 TR0=0;//关闭计时器 
 num1=0;//清零num1 
} 
/*从32位码波中获取一个位*/ 
int Get_bit(void) 
{ 
  while(!IRIN);//等待0.56毫秒后的低电平过后高电平的到来 
    delay_MSS(0.84);//高电平到来后延时0.84毫秒判断是否仍为高电平 
 if(IRIN==1) 
 { 
   return 1; 
 } 
 else 
 { 
   return 0; 
 } 
} 
void red_Isp() interrupt 2 
{ 
  int i=0; 
 EX1=0;//关中断,防止接受波形中众多下降沿的干扰 
 delay_MSS(9);//跳过开始码 
 while(!IRIN);//等待4.5毫秒的高电平的到来 
 delay_MSS(4.5);//延时4.5毫秒,跳过结果码 
/*把32位码波写入数组IM*/ 
 for(i=0;i<32;i++) 
 { 
   IM=Get_bit(); 
 } 
} 
void main() 
{   
 int rednum,s; 
  red_Init();//初始化 
 rednum=IM[31]+IM[30]*10+IM[29]*100+IM[28]*1000;//取数组后四位 
 s=100; 
 while(s--) 
 SMG_display(rednum);//数码管显示 
} 
  |