捕获格力、海尔空调遥控器协议
红外接收管工作时处于反接状态。没有红外光照射时,电流非常小,内阻很大,输出到单片机IO的口的电压约等于5V;被红外光照射时,电流加大,内阻变小,输出低电平。 捕获思路:定一个大数组,每当IO口产生跳变沿(上升沿或下降沿)将计时时间保存下来,同时启动下一次计时。一段时间后,将时间通过串口发送到电脑,显示 相邻两次跳变沿的时间就是高电平或低电平的时间。 3.用NXP K60,写代码捕获
uint32 high[1000]; //定时数据
uint32 count=0; //跳变沿个数
void PORTA_IRQHandler(void) //PORTA中断函数
{
PORTA->ISFR = 0xffffffff;//清除中断标志位
/*把时间保存到数组,定时时间=定时器计数值/总线时钟*/
high[count++]= (0xffffffff - PIT->CHANNEL[0].CVAL)/bus_clk_mhz;
pit_time_start(pit0); //启动下一次计时
}
int main(void)
{
int i,Double=0,effective=0;
gpio_init(E26,GPO,1);//LED指示灯
gpio_init(A19,GPO,1);//红外接收引脚
uart_init(uart4,115200);//串口初始化,波特率115200
pit_init_ms(pit0,1000);//设置定时1秒
port_init(A19,ALT1|PULLUP|IRQ_FALLING);//设置接收管引脚上升沿和下降沿产生中断
while(1)
{
gpio_set(E26,1); //先让指示灯灭
while(count19000)printf("\n");//遇到连接码也空出一行
}
}
printf("effect:%d",effective/2);//编码数据长度=有效长度/2(高-低表示1位)
//为下一次测量清零
effective=0;
for(i=0;i |