📄 ir.c
字号:
#include "includes.h"
unsigned char CommParity;
unsigned char UartRxByte;
unsigned char UartBitCount;
unsigned char RcKeyCode;
void _ir_start_to_rx(void)
{
UartBitCount=9;
UartRxByte=0;
CommParity=UART_BIT_9_L;
IR_RX_IFG&=~(IR_RX);
IR_RX_IE|=IR_RX;
}
#pragma vector=PORT1_VECTOR
__interrupt void Port1(void)
{
if(P1IFG&IR_RX)
{
if( !CommPortChose )
CommPortChose=IR_PORT;
_wait_time=COMM_TIMEOUT;
if( CommPortChose == IR_PORT )
{
CCR0=TAR+UART_BIT_TIME_1200+(unsigned char)(UART_BIT_TIME_1200/2);
TACTL=TASSEL_1+MC_2; //ACLK+Contious mode
TACCTL0=CCIE;
P1IE&=~(IR_RX);
}
else if( CommPortChose == IR_RC )
{
if(PowerStateFlag&PS_BREAKPOWER_FLAG)
{
_ir_on(15);
}
else
{
IR_OFF();
}
if(rx_frame()==OK)
{
CommPortChose |= COMM_RX_FINISH;
_BIC_SR_IRQ(LPM3_bits);
}
}
}
if(P1IFG&PWR_F0)
{
if(!IsPowerOn())
{
SystemIndication|=EVT_POWER_DOWN;
_BIC_SR_IRQ(LPM3_bits);
}
}
P1IFG=0;
}
#pragma vector=TIMERA0_VECTOR
__interrupt void TimerA (void)
{
unsigned char timerAtemp1;
CCR0+=UART_BIT_TIME_1200;
//read bit value here
timerAtemp1=IR_RX_IN&IR_RX;
if(UartBitCount>1)
{
UartRxByte>>=1;
if(timerAtemp1)
{
UartRxByte|=0x80;
CommParity=~CommParity;
}
UartBitCount--;
}
else
{
if(timerAtemp1)
{
if(!(UART_BIT_9_H==CommParity)) FrameBuffer[0]=0;
}
else
{
if(!(UART_BIT_9_L==CommParity)) FrameBuffer[0]=0;
}
TACCTL0=0;
TACTL=MC_0;
if(rx_frame()==OK)
{
CommPortChose |= COMM_RX_FINISH;
_BIC_SR_IRQ(LPM3_bits);
}
if(FramePointer==0)
{
if(UartRxByte==0)
{
if(timerAtemp1==0)
{
CommPortChose = IR_RC;
}
}
}
_ir_start_to_rx();
}
}
void _ir_tx_low(void)
{
TACTL |=MC0;
P2SEL |= IR_TX;
}
void _ir_tx_high(void)
{
TACTL &=(~MC0);
P2OUT |= IR_TX;
P2SEL &= ~IR_TX;
CommParity=~CommParity;
}
/*Send one byte(11bits)*/
void _ir_send_byte(unsigned short sData)
{
unsigned char sBitCount;
CommParity=UART_BIT_9_L;
sData<<=1;
sData|=0x0400;
sBitCount=11;
_DINT();
CCR0=(unsigned short)(IR_CAR_GEN/2);
IR_TX_CCR=(unsigned short)(CCR0/2);
TACTL=TASSEL_2+TACLR;
IR_TX_TACCTL=OUTMOD_4;
do{
if(sBitCount!=2)
{
if(sData&0x0001)
_ir_tx_high();
else
_ir_tx_low();
}else{
if(CommParity==UART_BIT_9_H)
_ir_tx_high();
else
_ir_tx_low();
}
sData>>=1;
Delay(865);
}while(--sBitCount);
_EINT();
}
void _ir_start_to_tx(void)
{
unsigned char i;
_ir_send_byte(0xFE);
for( i = 0; i < FrameBuffer[FRM_DATALEN]+12; i++ )
{
_ir_send_byte( FrameBuffer[i] );
}
_sys_evt_add(EVT_INIT_COMM);
}
void _ir_off(void)
{
IR_OFF_PD();
}
void _ir_on(unsigned char tt)
{
TimerCounter[TIMER_PROC_IR_TOGGLE]=tt;
LCD_LIGHT_ON();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -