打印

MSP430F5529红外模块发送程序

[复制链接]
2499|37
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
eziobro|  楼主 | 2017-6-23 00:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include <msp430.h>

#define CPU_F ((double)1000000)
#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;
volatile int iflag=0;
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 = (int)(26.3*8 + 0.5);`
  TBCCTL0 = OUTMOD_6;
  TBCCR1 = (int)(13.15*8 + 0.5);
*/
  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_end(){
  P2OUT |= BIT3;
  iflag=1;
  delay_us(300);
  P2OUT &= ~BIT3;
  iflag=0;
}

void ir_put(unsigned char c){
  ir_start();
  ir_send_byte(0x00);
  ir_send_byte(0x90);
  ir_send_byte(0x04);
  ir_send_byte(0x0A);
  ir_end();
}
int main(void)
{

  WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT

  P1DIR |=BIT0 ;                   // P1.0 output

  while(1)
  {

//yanshi 1s
/*    cnt = 1000;
    TA0CCTL0 = ~CCIE;


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

          P1OUT ^= BIT0;
          ir_open();
          __bis_SR_register(GIE);
          ir_put(0x83);


  }
}



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

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

相关帖子

沙发
dirtwillfly| | 2017-6-23 08:10 | 只看该作者
ccs的使用参考:
Code_Composer_Studio(CCS)集成开发环境(IDE)入门指导书V10.pdf (3.74 MB)

使用特权

评论回复
板凳
eziobro|  楼主 | 2017-7-3 21:50 | 只看该作者
提高时钟频率16MHZ搞定  我有空再来上传代码

使用特权

评论回复
地板
dirtwillfly| | 2017-7-4 23:17 | 只看该作者
eziobro 发表于 2017-7-3 21:50
提高时钟频率16MHZ搞定  我有空再来上传代码

请及时结帖
结帖方法:
https://bbs.21ic.com/icview-442857-1-1.html

使用特权

评论回复
5
fentianyou| | 2017-7-6 17:12 | 只看该作者
这个 MSP430F5529能用?

使用特权

评论回复
6
fentianyou| | 2017-7-6 17:15 | 只看该作者
MSP430F5529的头文件不是msp430f55xx吗?

使用特权

评论回复
7
eziobro|  楼主 | 2017-7-17 08:36 | 只看该作者
#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度开空调。

使用特权

评论回复
8
hudi008| | 2017-7-18 16:53 | 只看该作者
这个跟你接收是应该匹配的吧。

使用特权

评论回复
9
minzisc| | 2017-7-18 16:54 | 只看该作者
10
gygp| | 2017-7-18 16:54 | 只看该作者
你使用的是什么接收的信号?

使用特权

评论回复
11
wangdezhi| | 2017-7-18 16:55 | 只看该作者
中断不能执行?

使用特权

评论回复
12
uiint| | 2017-7-18 16:55 | 只看该作者
38K的时钟配置在哪里的

使用特权

评论回复
13
mituzu| | 2017-7-18 16:56 | 只看该作者
测量一下IO的电平信号

使用特权

评论回复
14
51xlf| | 2017-7-18 16:56 | 只看该作者
正常的IO信号反转不是就是几us吗?

使用特权

评论回复
15
10299823| | 2017-7-18 16:57 | 只看该作者
eziobro 发表于 2017-7-3 21:50
提高时钟频率16MHZ搞定  我有空再来上传代码

这个有什么区别?

使用特权

评论回复
16
xiaoyaozt| | 2017-7-18 16:57 | 只看该作者
fentianyou 发表于 2017-7-6 17:12
这个 MSP430F5529能用?

这个跟芯片有什么关系吗

使用特权

评论回复
17
hudi008| | 2017-7-18 16:58 | 只看该作者
提高频率了编码就能使用了吗?

使用特权

评论回复
18
minzisc| | 2017-7-18 16:58 | 只看该作者
19
gygp| | 2017-7-18 16:58 | 只看该作者
代码不能执行的话,测量IO的信号是否稳定。

使用特权

评论回复
20
wangdezhi| | 2017-7-18 16:58 | 只看该作者
这个定时器直接使用中断函数不行吗?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

7

帖子

0

粉丝