本人新学51单片机,写个红外遥控接收,调试总是不行,以下我只上了遥控接收部分。处理与显示我没上传,请高手指点错在那里!
谢谢!
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit ir_pin = p3^3; //由于我的mcu p3^2烧了,只能用暂时代用p3^3
void delay_850us(n) //延时函数 使用11.0592mhz
{
uint i;
for(;n!=0;n--)
for(i=95;i!=0;i--);
}
uchar ir() //译码函数
{
uchar tempcode[4],i,j; //遥控码临时存放区
while(ir_pin==0); //等待4.5ms高电平出现
delay_850us(5);
while(ir_pin==1); //等待0.56ms低平出现
for(i=0;i<4;i++)
{
for(j=8;j!=0;j--)
{
tempcode>>=1;
while(ir_pin==0); //等待0.56高平出现
delay_850us(1);
if(ir_pin==1)
{
tempcode|=0x80; //1处理
while(ir_pin==1); //等待1的高平消失
}
else if(ir_pin==0)
tempcode|=0x00; //0处理
} //end j
}//end i
if((tempcode[2]==~tempcode[3])&&(tempcode[0]==~tempcode[1])) return tempcode[2]; //比较是否正确,如正确返回遥控码
else return 0; //错误则返回0
}
int_0()interrupt 2 using 3 //中断函数
{
uchar i;
ea=0;
for(i=10;i!=0;i--) //确认是遥控不是干扰,重复检测10次
{
if(ir_pin==0)
delay_850us(1);
else
{ea=1;return;} //如9ms有高电平就退出,认定是干扰
}
p0=ir(); //调用译码函数
ea=1;
return;
}
void main() //主函数
{
ex1=1; //开外部1中断
ea =1; //开总中断
// delay_850us(1);
while(1);
}