我是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);
}
}
}
}