📄 irctl.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 + -