⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ir.c

📁 红外接收C库文件, 晶振:11.0592,中断方式
💻 C
字号:
void delayIR(unsigned char x)//x*0.14MS
{
	unsigned char i;

	while(x--)
	{
		for (i = 0; i<13; i++);
	}
}

void IR_ini()
{
	IE  |= 0x81;    //允许总中断中断,使能 INT0 外部中断
	TCON|= 0x01;   //触发方式为脉冲负边沿触发

}
void INT_0() interrupt 0 using 0
{
	unsigned char IRCOM[4];
	unsigned char i,j,k,N=0;
	EA = 0;
I1:
	for (i=0;i<4;i++)
	{
		if (!IRIN) break;
		if (i==3) {goto IRERR;}
	}
	delayIR(20);
	if (IRIN) goto I1;  //确认IR信号出现
	while (!IRIN)            //等 IR 变为高电平
	{delayIR(1);}
	
	for (j=0;j<4;j++)
	{ 
		for (k=8;k>0;k--)
		{
			while (IRIN)         //等 IR 变为低电平
			{
				delayIR(1);
			}
			while (!IRIN)        //等 IR 变为高电平
			{
				delayIR(1);
			}
			while (IRIN)          //计算IR高电平时长
			{
				delayIR(1);
				N++;           
				if (N>=30) {goto IRERR;}
			}
			IRCOM[j]=IRCOM[j] >> 1;
			if (N>=8)
				IRCOM[j] = IRCOM[j] | 0x80;
			N=0;
		}//end for k
	}//end for j
	if (IRCOM[2]!=~IRCOM[3]) {goto IRERR;}
	IR_data=IRCOM[2];		//将红外接收到的值放入IR_data中
	IROK=1;
IRERR:EA = 1;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -