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

📄 irctl.c

📁 一个基于AD9954的430单片机编程
💻 C
字号:
/*-------------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------------------*/
#include "includes.h"

/*-------------------------------------------------------------------------------------------------------------
变量
-------------------------------------------------------------------------------------------------------------*/
char IRCode[4];
char IRBitn;
unsigned int temp1,temp2;

/*-------------------------------------------------------------------------------------------------------------
功能:初始化接收所需用的TA和捕捉寄存器CCR1,CCR2
入口:
出口:
-------------------------------------------------------------------------------------------------------------*/
void IRInit(void)
{
  TACCTL1= CM_1 | CAP | CCIE ;        //上升延捕捉中断模式
  TACCTL2= CM_2 | CAP ;              //下降延捕捉模式
  TACTL|= TASSEL_1 | MC_2 ;           //ACLK时钟源,连续计时方式;
  P1SEL|=0x04;
  P2SEL|=0x01;
}

/*-------------------------------------------------------------------------------------------------------------
功能:中断服务,处理捕捉到的时间并记录成键值
入口:
出口:
-------------------------------------------------------------------------------------------------------------*/
#pragma vector=TIMERA1_VECTOR
__interrupt void IRInt(void)
{
  if((TAIV&0x0002)!=0)
  {
    TACCTL2&=~CCIFG;  //清中断
    TACCTL2|=CCIE;   //使能捕捉2中断
    temp1=TACCR1;
    TACCR0=TACCR1+300;
    TACCTL0&=~CCIFG;                     //清中断
    TACCTL0|=CCIE;                      //使用比较0中断模式
  }
  else
  {
    TACCTL2&=~CCIE;                   //禁止捕捉2中断
    temp2=TACCR2;
    if((temp2-temp1)>213)           //起始标志
    {
      IRBitn++;
    }
    else if((temp2-temp1)>35)       //收到1
    {
      IRCode[IRBitn>>3]|=(0x80>>(IRBitn&0x07));
      IRBitn++;
    }
    else                              //收到0
    {
      IRCode[IRBitn>>3]&=~(0x80>>(IRBitn&0x07));
      IRBitn++;
    }
  }
}

/*-------------------------------------------------------------------------------------------------------------
功能:中断服务,处理接收超时的情况
入口:
出口:
-------------------------------------------------------------------------------------------------------------*/
#pragma vector=TIMERA0_VECTOR
__interrupt void IRTimeout(void)
{
  TACCTL2&=~CCIE;                   //禁止捕捉2中断
  TACCTL0&=~CCIE;
  if(IRBitn&&IRCode[0]==129) KeyBuf=IRCode[2];
  IRBitn=0;
}

⌨️ 快捷键说明

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