微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 红外遥控程序请教

红外遥控程序请教

时间:10-02 整理:3721RD 点击:
我是用的普中科技的51学习板,但是看不懂他写的红外遥控程序,希望大神们能帮忙翻译一下他的程序。谢谢各位了(特别是外部中断里的那一些程序)
#include <reg51.h>
sbit IRIN = P3^2;         //红外接收器数据线

void IRdelay(char x);  //x*0.14MS
void beep();
unsigned char  IRCOM[7];
extern unsigned char Y0;
extern void display(unsigned char Key_Val);
/*******************************************************************/
void IRInit()
{
    IE |= 0x81;                 //允许总中断中断,使能 INT0 外部中断
    TCON |= 0x01;               //触发方式为脉冲负边沿触发
    IRIN=1;                    //I/O口初始化
}
/**********************************************************/
void IR_IN(void) interrupt 0
{
  unsigned char j,k,N=0;
     EX0 = 0;  
          
         IRdelay(5);
         if (IRIN==1)
     { EX0 =1;
           return;
          }
                           //确认IR信号出现
  while (!IRIN)            //等IR变为高电平,跳过9ms的前导低电平信号。
  {IRdelay(1);}
for (j=0;j<4;j++)         //收集四组数据
{
  for (k=0;k<8;k++)        //每组数据有8位
  {
   while (IRIN)            //等 IR 变为低电平,跳过4.5ms的前导高电平信号。
     {IRdelay(1);}
    while (!IRIN)          //等 IR 变为高电平
     {IRdelay(1);}
     while (IRIN)           //计算IR高电平时长
      {
    IRdelay(1);
    N++;           
    if (N>=30)
         { EX0=1;
         return;}                  //0.14ms计数过长自动离开。
      }                        //高电平计数完毕               
     IRCOM[j]=IRCOM[j] >> 1;                  //数据最高位补“0”
     if (N>=8) {IRCOM[j] = IRCOM[j] | 0x80;}  //数据最高位补“1”
     N=0;
  }//end for k
          
}//end for j
   if (IRCOM[2]!=~IRCOM[3])
   { EX0=1;
     return;
         
        }
       EX0 = 1;
}

/**********************************************************/
void IRdelay(unsigned char x)    //x*0.14MS
{
unsigned char i;
  while(x--)
{
  for (i = 0; i<13; i++) {}
}
}


这很简单啊,建议先去看看C语法,就明白了

哪里看不懂呢?

c学过一段时间了    就是不知道这个程序中断里的思路啊··

就是外部中断0里面的那一段   看的雨里雾里的  能不能详细解读一下啊··谢谢

你这个应该是6222的编码格式(具体格式请查阅相关技术手册),程序中9+4.5ms是引导码,后面跟16位用户码+16位数据码,IR口电平变换进中断,依次接收9ms+4.5ms+32位编码,其中两个for循环嵌套是接收32位编码的,数据码通过高电平的时间长度判断接收到的是“0”或者“1”,数据码高8位与低8为互为反码,所以32位码收完要判断IRCOM[2]!=~IRCOM[3],,这个程序红外接收过程是使用查询死等的方式,收码的时候系统就干不了其它的事儿了,不建议使用的

纠正一点,这应该是NEC编码格式,6222只是用这种编码格式的一款专用芯片,如HT6222/CMS6222

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top