MSP430简单的红外通讯

时间:2019-04-23 21:57:17

标签: c msp430

我是MSP430的初学者。

我想通过使用IR按下两个不同的按钮来使两个不同的LED发光(按下第一个按钮时,第一个LED闪烁,第二个LED相同)

我认为发送器工作正常,但是接收器出了点问题。我知道这不是嵌入式系统论坛,但也许有人可以提供帮助。因为我认为我的主要问题在于if语句。 最好的问候。

#include <msp430.h>

 void init(void); //RECEIVER CODE
void configClock(void);

void configTimer(void);
void startTimer(void);
void stopTimer(void);
void clearTimer(void);
unsigned int readTimer(void);
void listen_IR(void);
unsigned int time_in_low;
unsigned int time_in_high;
int A;


int main(void)
{
WDTCTL = WDTPW | WDTHOLD; // Stop watchdog timer
    P1DIR = BIT0|BIT6;   
    P1REN = BIT3;   
    P1OUT = BIT3; 
init();

while(1)
{
listen_IR();
}
}


void listen_IR(void)
{
if((P1IN & BIT3)!=BIT3) {   //falling edge
  startTimer();}
if((P1IN & BIT3)==BIT3){   //rising edge
  stopTimer();
  A=readTimer();          //read the timer to detect PWM length
  clearTimer();
  }

if (A>8000 && A<10000){ //if transmitter sends 9ms PWM 
P1OUT^=0x01;  
__delay_cycles(500000);
}
if (A>3000 && A<6000){
P1OUT^=0x40;  // if transmitter sends 4.5ms PWM 
__delay_cycles(500000);
}

}


void init(void)
{

configTimer();
configClock();

}

void configClock(void)
{
//1Mhz
BCSCTL1 = CALBC1_1MHZ; // Set range
DCOCTL = CALDCO_1MHZ; // Set DCO step + modulation
}

void configTimer(void)
{
TACCR1 = 20000;
}

void clearTimer(void)
{
TACTL |= TACLR;
}

void stopTimer(void)
{
TACTL = 0;
}

void startTimer(void)
{
TACCTL1 &= ~CCIFG; // clear the time out flag
TACTL = TASSEL_2 + MC_2; // clock source: SMCLK, mode 2: count up to 0xFFFF
}
unsigned int readTimer(void)
{
return TAR;
}
#include <msp430.h>

int main(void)
{
WDTCTL = WDTPW | WDTHOLD; // Stop watchdog timer
BCSCTL1 = CALBC1_1MHZ; // Set range
DCOCTL = CALDCO_1MHZ; 
P1DIR = 0x00;
P1REN= 0xFF;
P2DIR = BIT0;
P2OUT=0x00;

int i;

while(1)
{
 if (!(P1IN & 0x08))  { 
for(i=0;i<692;i++){   // 38kHz, 9ms %50 dutycycle PWM signal period=26us
P2OUT^=0x01;  
__delay_cycles(10);
}
}
if (!(P1IN & 0x01) ){
  for(i=0;i<381;i++){  //38kHz, 4.5ms %50 dutycycle PWM signal, period=26us
  P2OUT^=0x01;  
__delay_cycles(10);
  }
}
}
}

0 个答案:

没有答案