MSP430F5529红外模块发送程序

2019-07-16 15:15发布

  1. #include <msp430.h>

  2. #define CPU_F ((double)1000000)
  3. #define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0))
  4. #define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0))
  5. int cnt;
  6. volatile int iflag=0;
  7. void ir_open(){
  8.         iflag=0;
  9.   P2DIR |=  BIT3;//P2.2, P2.3输出
  10.   P2SEL &= ~BIT3; //P2.2:IO P2.3:TA0
  11.   P2OUT &= ~BIT3;

  12. //38K->P2.3
  13.   TBCCR0=15;

  14. /*TBCCR0 = (int)(26.3*8 + 0.5);`
  15.   TBCCTL0 = OUTMOD_6;
  16.   TBCCR1 = (int)(13.15*8 + 0.5);
  17. */
  18.   TBCTL = TASSEL_2+MC_1+TACLR;
  19.   TBCCTL0=CCIE;
  20. }

  21. void ir_start(){
  22.   P2OUT |= BIT3;
  23.   iflag=1;
  24.   delay_us(9000);
  25.   TBCTL =MC_1;

  26.   P2OUT &= ~BIT3;
  27.   iflag=0;
  28.   delay_us(4500);
  29.   TBCTL =MC_0;
  30. }

  31. void ir_next(){
  32.   P2OUT |= BIT3;
  33.   iflag=1;
  34.   delay_us(9000);

  35.   P2OUT &= ~BIT3;
  36.   iflag=0;
  37.   delay_us(2250);
  38. }

  39. void ir_send_byte(unsigned char c){
  40.   unsigned char i;

  41.   for(i = 0; i != 8; ++i){
  42.     P2OUT |= BIT3;
  43.     iflag=1;
  44.     delay_us(560);

  45.     P2OUT &= ~BIT3;
  46.     iflag=0;
  47.     if(c&0x01){
  48.       delay_us(1685);
  49.     }
  50.     else{
  51.       delay_us(565);
  52.     }

  53.     c >>= 1;
  54.   }
  55. }

  56. void ir_end(){
  57.   P2OUT |= BIT3;
  58.   iflag=1;
  59.   delay_us(300);
  60.   P2OUT &= ~BIT3;
  61.   iflag=0;
  62. }

  63. void ir_put(unsigned char c){
  64.   ir_start();
  65.   ir_send_byte(0x00);
  66.   ir_send_byte(0x90);
  67.   ir_send_byte(0x04);
  68.   ir_send_byte(0x0A);
  69.   ir_end();
  70. }
  71. int main(void)
  72. {

  73.   WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT

  74.   P1DIR |=BIT0 ;                   // P1.0 output

  75.   while(1)
  76.   {

  77. //yanshi 1s
  78. /*    cnt = 1000;
  79.     TA0CCTL0 = ~CCIE;


  80.     while(cnt!= 0);
  81.     P1OUT ^= BIT0;
  82.     TA1CTL = MC_0;  //mc_0=stop*/

  83.           P1OUT ^= BIT0;
  84.           ir_open();
  85.           __bis_SR_register(GIE);
  86.           ir_put(0x83);


  87.   }
  88. }



  89. //#pragma vector = TIMERB_A0_VECTOR
  90. #pragma vector=TIMERB0_VECTOR
  91. __interrupt void TIMERB0_ISR()
  92. {
  93. if(iflag==1);
  94.                 P2OUT ^= BIT3;
  95.        
  96. }

复制代码请问问这程序有什么问题,38KHZ,我的定时器计时应该是13.8usIO电平翻转一次,但是
定时15之后进了中断之后就出不了,css不熟也不知道应该怎么调试,求大牛指点

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
19条回答
dirtwillfly
1楼-- · 2019-07-16 20:57
ccs的使用参考:
Code_Composer_Studio(CCS)集成开发环境(IDE)入门指导书V10.pdf (3.74 MB, 下载次数: 8) 2017-6-23 08:10 上传 点击文件名下载附件
eziobro
2楼-- · 2019-07-16 23:16
提高时钟频率16MHZ搞定  我有空再来上传代码
dirtwillfly
3楼-- · 2019-07-17 00:13
 精彩回答 2  元偷偷看……
fentianyou
4楼-- · 2019-07-17 02:59
这个 MSP430F5529能用?
fentianyou
5楼-- · 2019-07-17 07:13
MSP430F5529的头文件不是msp430f55xx吗?
eziobro
6楼-- · 2019-07-17 10:57
#include <msp430.h>
#define CPU_F ((double)16000000)
#define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0))
#define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0))
int cnt,key=0,TEMP=0,times=0;
volatile int iflag=0;
void key_init(){
        P1DIR |= BIT7;
        P1REN |= BIT7;
        P1IFG &= ~ BIT7;
        P1IES |= BIT7;
        P1IE |= BIT7;
P2DIR &= ~ BIT2 ;
P2REN |= BIT2;//Connects to the resistance
P2OUT |= BIT2;//Pull-Up Resistance
P2IES |= BIT2;
P2IFG &= ~ BIT2;
P2IE |= BIT2;
}
void ir_open(){
        iflag=0;
  P2DIR |=  BIT3;//P2.2, P2.3Êä³ö
  P2SEL &= ~BIT3; //P2.2:IO P2.3:TA0
  P2OUT &= ~BIT3;

//38K->P2.3
  //TBCCR0=15;
  TBCCR0=210;

  TBCTL = TASSEL_2+MC_1+TACLR;
  TBCCTL0=CCIE;
}

void ir_start(){
  P2OUT |= BIT3;
  iflag=1;
  delay_us(9000);
  //TBCTL =MC_1;

  P2OUT &= ~BIT3;
  iflag=0;
  delay_us(4500);
  //TBCTL =MC_0;
}

void ir_next(){
        P2OUT |= BIT3;
  iflag=1;
  delay_us(9000);

  P2OUT &= ~BIT3;
  iflag=0;
  delay_us(2250);
}

void ir_send_byte(unsigned char c){
  unsigned char i;

  for(i = 0; i != 8; ++i){
    P2OUT |= BIT3;
    iflag=1;
    delay_us(560);

    P2OUT &= ~BIT3;
    iflag=0;
    if(c&0x01){
      delay_us(1685);
    }
    else{
      delay_us(565);
    }

    c >>= 1;
  }
}
void ir_send_3byte(unsigned char c){
  unsigned char i;

  for(i = 0; i !=3; ++i){
    P2OUT |= BIT3;
    iflag=1;
    delay_us(560);

    P2OUT &= ~BIT3;
    iflag=0;
    if(c&0x01){
      delay_us(1685);
    }
    else{
      delay_us(565);
    }

    c >>= 1;
  }
}
void ir_end(){
  P2OUT &= ~BIT3;
  iflag=0;
  delay_us(300);
  P2OUT |= BIT3;
  iflag=1;
}
void ir_put_temp(unsigned char c){
  ir_start();
  ir_send_byte(0x79);
  ir_send_byte(0x0e);
  ir_send_byte(0x30);
  ir_send_byte(0x50);

  ir_send_3byte(0x02);
  P2OUT |= BIT3;
  iflag=1;
  delay_us(600);
  P2OUT &= ~BIT3;
  iflag=0;
  delay_us(19700);
  ir_send_byte(0x10);
  ir_send_byte(0x21);
  ir_send_byte(0x00);
  ir_send_byte(0x10);

  //P2OUT |= BIT3;
  //iflag=1;
  //delay_us(600);
  P2OUT &= ~BIT3;
  iflag=0;
  delay_ms(2000);



  //ir_end();
}
void ir_put(unsigned char c){
  ir_start();
  ir_send_byte(0x00);
  ir_send_byte(0x09);
  ir_send_byte(0x20);
  ir_send_byte(0x50);

  ir_send_3byte(0x02);
  P2OUT |= BIT3;
  iflag=1;
  delay_us(600);
  P2OUT &= ~BIT3;
  iflag=0;
  delay_us(19700);
  ir_send_byte(0x00);
  ir_send_byte(0x20);
  ir_send_byte(0x00);
  ir_send_byte(c);

  P2OUT |= BIT3;
  iflag=1;
  delay_us(600);
  P2OUT &= ~BIT3;
  iflag=0;
  delay_ms(2000);



  //ir_end();
}
void ir_put_on(unsigned char c){
  ir_start();
  ir_send_byte(0x79);
  ir_send_byte(0x00);
  ir_send_byte(0x30);
  ir_send_byte(0x50);

  ir_send_3byte(0x02);
  P2OUT |= BIT3;
  iflag=1;
  delay_us(600);
  P2OUT &= ~BIT3;
  iflag=0;
  delay_us(19700);//19700
  ir_send_byte(0x10);
  ir_send_byte(0x21);
  ir_send_byte(0x00);
  ir_send_byte(0x30);

  P2OUT &= ~BIT3;
  iflag=0;
  delay_ms(2000);



  //ir_end();
}
int main(void)
{
        __bis_SR_register(SCG0);                  // Disable the FLL control loop
        UCSCTL1 = DCORSEL_5;                      // Select DCO range 16MHz operation
        UCSCTL2 |= 499;                  // Set DCO Multiplier for 16MHz
                                                    // (N + 1) * FLLRef = Fdco
                                                    // (249 + 1) * 32768 = 8MHz
        __bic_SR_register(SCG0);
          WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT
          P1DIR |=BIT0 ;                   // P1.0 output
    key_init();

          ir_open();
         __bis_SR_register(GIE);
          while(1)
          {



                P1OUT ^= BIT0;

                ir_put_on(16);//work!
                times=1;
                }
                  
}


//#pragma vector = TIMERB_A0_VECTOR
#pragma vector=TIMERB0_VECTOR
__interrupt void TIMERB0_ISR()
{
        if(iflag==1)
        {
        P2OUT ^= BIT3;
         //P1OUT ^= BIT0;
        }

}


#pragma vector = PORT1_VECTOR
__interrupt void Port1_IRS()
{
        int state;

        state=P1IN&BIT7;
        delay_ms(500);
        if(state==(P1IN&BIT7))
        //irda_receive();
        {
        times=0;
        P1OUT ^=BIT0;
        TEMP=20;

        }
                P1IFG &= ~ BIT7 ;

}
#pragma vector = PORT2_VECTOR
__interrupt void Port2_IRS()
{
        int state;

        state=P2IN&BIT2;
        delay_ms(500);
        if(state==(P2IN&BIT2))
        //irda_receive();

        {
        times=0;
        P1OUT ^=BIT0;
        key++;
        if(key==3)
                key=1;

        }
                P2IFG &= ~ BIT2 ;

}

//格力YBOF2,实现16度开空调。

一周热门 更多>