在学红外解码,正打算读取遥控器上各位的码值,下载程序后只显示初值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);//数码管显示
}
|