在线时间0 小时
UID2066008
注册时间2013-12-27
NXP金币0
该用户从未签到
新手上路

- 积分
- 38
- 最后登录
- 1970-1-1
|
#pragma CODE_SEG __NEAR_SEG NON_BANKED
void interrupt 66 PIT0 (void)
{
irtime++; //用于计数2个下降沿之间的时间
}
#pragma CODE_SEG DEFAULT
#pragma CODE_SEG __NEAR_SEG NON_BANKED
void interrupt 6 IRQ_interrupt(void)
{
static unsigned char i;
static byte startflag;
if(startflag)
{
PORTB_PB0=1;
if(irtime=33) //引导码 TC9012的头码,根据码的格式,应该等待9ms的起始码和4.5ms的结果码完成后才能读码
i=0;
irdata=irtime; //记录条边沿的时间间隔,
irtime=0;
i++;
if(i==33)
{
irok=1;
i=0;
PORTB_PB1=1;
} //引导码过后就是接受数据了,赋初值i=0
} //32位数据完成后就把标志位irok置1 表示数据接收完成
else
{
irtime=0;
startflag=1;
}
}
#pragma CODE_SEG DEFAULT
void Ircordpro(void) //红外码值处理函数
{
unsigned char i, j, k;
unsigned char cord,value;
k=1;
for(i=0;i1; //8为数据移位
}
k++; //字节数加1
}
IRcord=value;
value=0;
}
if((IRcord[2])==~IRcord[3]) //检测后两位是不是反码 如果是标志位置1
{
irpro_ok=1;//处理完毕标志位置1
}
}
void Ir_work(void)//红外键值散转程序
{
irpro_ok=0;//处理完成标志
}
void main(void)
{
DisableInterrupts;
initPIT();
DDRB=0xff;
PORTB=0x00;
IRQinit();
EnableInterrupts;
for(;;)
{
if(irok==1) //如果接收好了进行红外处理
{
// PORTB_PB2=1;
Ircordpro();
irok=0;
}
if(irpro_ok==1) //如果处理好后进行工作处理,如按对应的按键后显示对应的数字等
{
Ir_work();
}
}
}
变量声明什么的就省了,我的疑问是我按了按键以后 PB0和PB1的灯可以灭掉,从调试看按键以后irok=1了,但是为什么进不了 Ircordpro()这个函数,哪位大神求救啊
|
|