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

📄 infrared_receive.c

📁 c8051f020+CH375读写U盘文件的程序
💻 C
字号:
/*******************************INFRARED DRIVER********************************/
/*																			  */
/*						     SYSTEM CLOCK 11.0592M							  */
/*																			  */
/******************************************************************************/

#define INFRARED_EXTERN
#include<c8051f020.h>
#include"infrared_receive.h"


sbit P37=P3^7;
unsigned char val[8]=0;
bit Head_ok=0,Got=0;	//Head_ok: 头帧正确,有新的按键  Got:接收完毕

void Timer3_Init()
{
    TMR3CN   &=0xfb;	//关定时器3
    TMR3RL    = T_3MS;  //延时3ms
    TMR3      = T_3MS;
}

void Infrared_Init()
{
 IE=0x80;  //开总中断
 EIE2|=0x21;//开中断7和定时器3中断
 Timer3_Init();
}


unsigned char   Wait_Infrared()
{		
		unsigned char  keyvalue;
	    
      while(!Got);	   //等待接收完毕
      if(val[2]+val[3]==0xff) //较验,最后两个字节相互为反码
      keyvalue=val[2]; //第三个字节为有效信息
      Got=0;
		
		return(keyvalue);	
}



void ex_interrupt() interrupt 19	 //下降沿中断,收到低电平开始 
{

if(!Head_ok)   //头帧是否检测完毕
 {
 EIE2&=0xdf;//关中断7
  P3IF&=0x7f;//清中断7的中断标志
  Timer3_Init();//定时器3初始化
  TMR3CN|=0x04;  //开定时器3
  }
 else 
 {
  while(P37==0)
  {if(TMR3CN>0x80) return;}  //等待变高  定时器3溢出则跳出  多级中断的实现
  
   P3IF&=0x7f;//清中断7的中断标志 
   TMR3      = T_0_8MS;//延时0.8ms
   TMR3CN|=0x04;  //开定时器3
  
 }
}

void T3_inter() interrupt 14
{
  static unsigned char i=0,n=0;
  static bit h=0; 
  unsigned int v;
  TMR3CN&=0x7f;  //清中断标志

 if(Head_ok==0&&h==0&&P37==0) h=1; //开始后第一个3ms处应为低
 else if(Head_ok==0&&h==1&&P37==1) // 开始后第二个3ms处应为高
 {
  EIE2|=0x20; //开中断7
  TMR3CN&=0xfb;	//关定时器3
  h=0;Head_ok=1;return;
 }
 else if(Head_ok)
   {
      TMR3CN&=0xfb;	//关定时器3
      n=i++/8;
    if(P37) 					 //每0.8ms读一次数据
        {
         val[n]=val[n]>>1;
         val[n]|=0x80;
        }
    else 
         val[n]=val[n]>>1;
//       n=++i/8;
    if(i==32)
       {
        i=0;n=0;Head_ok=0;
        EIE2&=0xdf;//关中断7
        for(v=0;v<60000;v++);	 //避开重复码
        EIE2|=0x20; //开中断7
        Got=1;
       }
    } 
 else 		//还原为最原始状态
 {
  EIE2|=0x20;//开中断7
  Timer3_Init();
  h=0;Got=0;Head_ok=0;
 } 
}

⌨️ 快捷键说明

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