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不熟也不知道应该怎么调试,求大牛指点

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。