只用了一个外部0中断
问题我的数据码和反码总是不对
发我的部分代码上来:
void Infr(void) interrupt 0 using 2
{
uchar i;
i=15;
KeyData=0;//清除数据码和反码
KeyData2=0;
//*********************************************** 判断引导码
while(i&&InfData==0)//查看在7500us内有没有高电平 有就为干扰信号
{
Delay_500us();
i--;
}
if(i!=0) //说明在7500us内有高电平 则为干扰信号
{
Error_LED0=0; //just for test 干扰码指示灯 亮
goto Error_Infr;//Error_Infr();
}
while(InfData==0);//跳过9ms的引导低电平 //这个也起到纠正同步作用
i=5;//2500后判断电平 看这个信号是引导 还是连发信号
while(i--)
{
Delay_500us();
}
if(InfData==0)//如果电平为低 那么这个信号为连发信号
{
ReSend_Inf(); //这个连发信号函数里只有一个us的延时语句
}
while(InfData==1);//跳过引导高电平 //这个也起到纠正同步作用
//********************************************以下为接受32bit的数据码 低系统码SysNOL
for(i=0;i <8;i++) //接收8位bit 变成为一个uchar
{
while(InfData==0);//跳过低电平
Delay_500us();
Delay_150us();
//跳到650us后判断电平 是数据0还是1
if(InfData==0)
{
SysNOL=SysNOL&0x7f;//对最高位清0 其他位不变
}
else
{
SysNOL=SysNOL|0x80; //对最高位置1 其他位不变
}
if(i!=7) //接收最后一位不用移位
{
SysNOL=SysNOL> > 1; //移位 空出最高位 准备接收下一个高位
}
while(InfData==1);//如果SysNOL为1 则跳过其他的高电平 准备另一个位的低电平到来 如果SysNOL为0也就直接跳出来了
}
//********************************************以下为接受32bit的数据码 高系统码SysNOH
for(i=0;i <8;i++) //接收8位bit 成为一个uchar
{
while(InfData==0);//跳过低电平
Delay_500us();
Delay_150us();
//跳到650us后判断电平 是数据0还是1
if(InfData==0)
{
SysNOH=SysNOH&0x7f;//对最高位清0
}
else
{
SysNOH=SysNOH|0x80; //对最高位置1
}
if(i!=7)
{
SysNOH=SysNOH> > 1; //移位 准备接收下一个高位
}
while(InfData==1);//跳过其他的高电平 准备另一个位的到来
}
//********************************************以下为接受32bit的数据码 数据码KeyData
for(i=0;i <8;i++) //接收8位bit 成为一个uchar
{
while(InfData==0);//跳过低电平
Delay_500us();
Delay_150us();
//跳到650us后判断电平 是数据0还是1
if(InfData==0)
{
KeyData=KeyData&0x7f;//对最高位清0
}
else
{
KeyData=KeyData|0x80; //对最高位置1
}
if(i!=7)
{
KeyData=KeyData> > 1; //移位 准备接收下一个高位
}
while(InfData==1);//跳过其他的高电平 准备另一个位的到来
}
//********************************************以下为接受32bit的数据码 数据反码KeyData2
for(i=0;i <8;i++) //接收8位bit 成为一个uchar
{
while(InfData==0);//跳过低电平
Delay_500us();
Delay_150us();
//跳到650us后判断电平 是数据0还是1
if(InfData==0)
{
KeyData2=KeyData2&0x7f;//对最高位清0
}
else
{
KeyData2=KeyData2|0x80; //对最高位置1
}
if(i!=7)
{
KeyData2=KeyData2> > 1; //移位 准备接收下一个高位
}
while(InfData==1);//跳过其他的高电平 准备另一个位的到来
}
ReInf=1; //说明不是干扰信号 有遥控按键接收
Error_LED0=1;//说明不是干扰信号 灭Error_LED0灯
Error_Infr:
Re_LED1=1; //just for test有按键 灭掉有接收的灯 延时1s