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

📄 int_timer.c

📁 一个用MCU将SHARP 遥控码转为NEC码的小程序
💻 C
字号:
#include <reg51.h>
#include <stdio.h>
#include <main_define.h>

 uint IR_RECEIVE_COMMAND=0x00;
 bit IR_STATS;// static bit IR_STATS;


// ------------IR 外部 INT0 中断服务程序------------------
#if(NEC_IR_TYPE)
void int0Remote() interrupt 0 // IR 外部 INT0 中断服务程序
{
static uint oldFall;
uint temp,newFall,times;

static char bitcnt;
static uint data0=0,data1;// data0 存用户码,data1 存IR命令

times=(TH0<<8)+TL0;
newFall=times;
temp=newFall-oldFall; //计算脉冲加间隔的时间
oldFall=newFall;
//printf("t=%d,w=%d\n",times,temp);
if(temp>1024 && temp<1225) // "0"信号
	{
	temp=0;
//	printf("zero\n");
	}
else if(temp>2145 && temp<2345) //"1"信号
	{
	temp=1;
//	printf("one\n");
	}
	else if(temp>13400 && temp<13600) //header信号
		{
		bitcnt=0;
		data0=0;
		data1=0;
		return; //返回,等待下次开始接收
	}
else ///干扰信号
{
    return;
}
bitcnt++;
if(bitcnt<16) //开始接收前16位
{
data0=data0|(uint)temp;
data0=data0<<1;
}
else if(bitcnt==16)
{
data0=data0|(uint)temp;
}
else if(bitcnt<32) //开始接收后16位
{
data1=data1|(uint)temp;
data1=data1<<1;
}
else if(bitcnt==32) //接收完最后一位
{
data1=data1|(uint)temp;
//printf("ir=%x,%x\n",data0,data1);
}

}
#endif

#if(SHARP_IR_TYPE)
void int0Remote() interrupt 0 // IR 外部 INT0 中断服务程序
{
static uint oldFall;
uint temp,newFall,times;

static char bitcnt;
static uint data0=0,data1;// data0 存用户码,data1 存IR命令

times=(TH0<<8)+TL0;
newFall=times;
temp=newFall-oldFall; //计算脉冲加间隔的时间
oldFall=newFall;
if(temp>730 && temp<1330) // "0"信号1.03ms
	{
	temp=0;
	}
	else if(temp>1770 && temp<2370) //"1"信号 2.07ms
		{
		temp=1;
		}
		else ///干扰信号
			{
 			   return;
			}
bitcnt++;
//printf("bit%d\n",bitcnt);
if(bitcnt<5) //开始接收前5位用户码
	{
	data0=data0|(uint)temp;
	data0=data0<<1;
	}
else if(bitcnt==5)//将5位用户码存到data0
		{
		data0=data0|(uint)temp;
		}
	else if(bitcnt<13) //开始接收后8位命令
			{
			data1=data1|(uint)temp;
			data1=data1<<1;
			}
		else if(bitcnt==13) //接收完最后一位命令,将8位命令存到data1
				{
				data1=data1|(uint)temp;
				}
			else if(bitcnt==15) //接收完最后两位尾缀
					{
					if (IR_RECEIVE_SYS_CODE==data0)
						{
						IR_RECEIVE_COMMAND=data1;
//						printf("in_ir=%x\n",IR_RECEIVE_COMMAND);
						IR_STATS=IR_OK;
						}
					data0=0;
					data1=0;
					bitcnt=0;
					delay_xms(40);    // 连发码间隔时间
					}

}
#endif
// ------------IR 外部 INT0 中断服务程序------------------

// ------------ 外部 INT1 中断服务程序------------------
#if SUPPORT_INT1
void int1() interrupt 2// INT1 外部中断服务程序
{
LED_RED=1;
delay_xms(200);
LED_RED=0;
delay_xms(200);
printf("int1\n");
}
#endif
// ------------ 外部 INT1 中断服务程序------------------

⌨️ 快捷键说明

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