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

📄 receive.c

📁 红外解码
💻 C
字号:
#include<c8051f020.h>

/*SET 16bit REGISTER*/
sfr16 TMR3   = 0x94;
sfr16 TMR3RL = 0x92;

#define EXT_OSCIL 1
#define INFRA_IN P3^7
#define T_3MS 0xf533
#define T_0_8MS 0xfd1f


void Port_IO_Init()
{
    // P0.0  -  TX0 (UART0), Open-Drain, Digital
    // P0.1  -  RX0 (UART0), Open-Drain, Digital
    // P0.2  -  SCK  (SPI0), Open-Drain, Digital
    // P0.3  -  MISO (SPI0), Open-Drain, Digital
    // P0.4  -  MOSI (SPI0), Open-Drain, Digital
    // P0.5  -  NSS  (SPI0), Open-Drain, Digital
    // P0.6  -  SDA (SMBus), Open-Drain, Digital
    // P0.7  -  SCL (SMBus), Open-Drain, Digital

    // P1.0  -  TX1 (UART1), Open-Drain, Digital
    // P1.1  -  RX1 (UART1), Open-Drain, Digital
    // P1.2  -  CEX0 (PCA),  Open-Drain, Digital
    // P1.3  -  CEX1 (PCA),  Open-Drain, Digital
    // P1.4  -  CEX2 (PCA),  Open-Drain, Digital
    // P1.5  -  CEX3 (PCA),  Open-Drain, Digital
    // P1.6  -  CEX4 (PCA),  Open-Drain, Digital
    // P1.7  -  CP1 (Cmpr1), Open-Drain, Digital

    // P2.0  -  T0 (Timer0), Open-Drain, Digital
    // P2.1  -  INT0 (Tmr0), Open-Drain, Digital
    // P2.2  -  T2EX (Tmr2), Open-Drain, Digital
    // P2.3  -  Unassigned,  Open-Drain, Digital
    XBR0      = 0x2F;
    XBR1      = 0x47;
    XBR2      = 0x44;
}

void Reset_Sources_Init()
{
    WDTCN     = 0xDE;
    WDTCN     = 0xAD;
}

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


void Oscillator_Init()
{
    int i = 0;
    OSCXCN    = 0x77;
    for (i = 0; i < 3000; i++);  // Wait 1ms for initialization
    while ((OSCXCN & 0x80) == 0);
    OSCICN    = 0x08;
}


void Init_Device(void)
{
    Reset_Sources_Init();
	Port_IO_Init();
    Timer3_Init();


#if EXT_OSCIL
    Oscillator_Init();
#endif
}

sbit P37=P3^7;
unsigned char val[8]=0,i=0,j=0,n=0;
bit h=0,new=0,head_ok=0,got=0;

void main()
{
 unsigned char num;
 Init_Device();
 IE=0x80;  //开总中断
 EIE2|=0x21;//开中断7和定时器3中断
 while(1)
 {
  while(!got);
  if(val[2]+val[3]==0xff)
  num=val[2];
  got=0;
 }
}


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

if(!new)
 {
 EIE2&=0xdf;//关中断7
  P3IF&=0x7f;//清中断7的中断标志
  Timer3_Init();//定时器3初始化
  TMR3CN|=0x04;  //开定时器3
  }
 else 
 {
  while(P37==0&&TMR3CN<0x80);  //等待变高
  if(TMR3CN<0x80)
  {
   P3IF&=0x7f;//清中断7的中断标志 
   TMR3      = T_0_8MS;//延时0.8ms
   TMR3CN|=0x04;  //开定时器3
  }
 }
}

void T3_inter() interrupt 14
{
  TMR3CN&=0x7f;  //清中断标志

 if(head_ok==0&&h==0&&P37==0) h=1;
 else if(head_ok==0&&h==1&&P37==1)
 {
  EIE2|=0x20; //开中断7
  TMR3CN&=0xfb;	//关定时器3
  new=1;h=0;head_ok=1;return;
 }
 else if(head_ok)
 {
  TMR3CN&=0xfb;	//关定时器3
  
  if(P37) 
  {
   val[n]=val[n]>>1;
   val[n]|=0x80;
  }
 else 
  val[n]=val[n]>>1;
  n=++i/8;
 if(n==4)
  {
   i=0;n=0;new=0; head_ok=0;
   got=1;
  }
 } 
 else 		//还原为最原始状态
 {
  EIE2|=0x20;//开中断7
  Timer3_Init();
  h=0;new=0;
 } 
}

⌨️ 快捷键说明

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