MSP430F5529多通道采样的问题

2019-03-24 11:32发布

我编的一段两路的AD采集电压的程序,可是一直显示不对,求教是哪里的问题
  1. #include
  2. #include
  3. #include "msp430.h"
  4. #include "HAL_Dogs102x6.h"

  5. void lcd_int(void);
  6. void time_1_int(void);
  7. void display_time(void);
  8. void display_style(void);
  9. void button_init(void);
  10. void key_scan(void);
  11. void clock_check(void);
  12. void display_ADC(void);
  13. void ADC_init(void);


  14. char hour=0,min=0,sec=0;



  15. unsigned int  time_counter=0;

  16. volatile long temp;
  17. uint32_t sum1=0,com1,sum2=0,com2,flag=0;
  18. uint32_t tempData1[10];
  19. uint32_t tempData2[10];
  20. uint32_t cap,newdata,olddata,data;
  21. uint32_t num;

  22. uint8_t time_hour_style=0;
  23. uint8_t time_min_style=0;


  24. char time[] ="time: 00:00:00";

  25. char time_hour[]="00";
  26. char time_min[]="00";
  27. char time_sec[]="00";



  28. void main( void )
  29. {
  30.         WDTCTL = WDTPW + WDTHOLD;

  31.         time_1_int();
  32.         lcd_int();


  33.         button_init();
  34.         Dogs102x6_stringDraw(1,0,"==Battery power==", DOGS102x6_DRAW_NORMAL);
  35.         Dogs102x6_stringDraw(3,8,time,DOGS102x6_DRAW_NORMAL);         // write data to LCD
  36.         //Dogs102x6_stringDraw(3,0,clock,DOGS102x6_DRAW_NORMAL);        // write data to LCD
  37.         ADC_init();
  38.     P1DIR |= (0x01<<0);
  39.     P8DIR |= (0x01<<2);

  40.    while(1)
  41.     {
  42.             ADC12CTL0 |= ADC12SC;
  43.             display_ADC();
  44.                 display_time();
  45.                
  46.     }
  47. }

  48. void display_ADC(void)
  49. {
  50.         if(flag==1)
  51.                     {
  52.                                char string1[20];
  53.                                string1[0]=com1/1000+'0';
  54.                                string1[1]=46;
  55.                                string1[2]=com1/100%10+'0';
  56.                                string1[3]=com1/10%10+'0';
  57.                                string1[4]=com1%10+'0';
  58.                                string1[5]='';
  59.                                char string2[20];
  60.                                string2[0]=com2/1000+'0';
  61.                                string2[1]=46;
  62.                                string2[2]=com2/100%10+'0';
  63.                                string2[3]=com2/10%10+'0';
  64.                                string2[4]=com2%10+'0';
  65.                                string2[5]='';

  66.                                Dogs102x6_stringDraw(5, 8, "value1=", DOGS102x6_DRAW_NORMAL);
  67.                                Dogs102x6_stringDraw(5, 48, string1, DOGS102x6_DRAW_NORMAL);
  68.                                Dogs102x6_stringDraw(5, 78, "(V)", DOGS102x6_DRAW_NORMAL);
  69.                                Dogs102x6_stringDraw(6, 8, "value2=", DOGS102x6_DRAW_NORMAL);
  70.                                Dogs102x6_stringDraw(6, 48, string2, DOGS102x6_DRAW_NORMAL);
  71.                                Dogs102x6_stringDraw(6, 78, "(V)", DOGS102x6_DRAW_NORMAL);
  72.                     }
  73.        
  74. }

  75. void ADC_init(void)
  76. {
  77.           
  78.           ADC12CTL0 = ADC12ON+ADC12SHT0_8+ADC12MSC;
  79.           
  80.           ADC12CTL1 = ADC12SHP+ADC12CONSEQ_3;       // Use sampling timer,  sequence

  81.           ADC12MCTL0 = ADC12SREF_0+ADC12INCH_6;                 // ref+=AVcc, channel = A6
  82.           ADC12MCTL1 = ADC12SREF_0+ADC12INCH_7+ADC12EOS;       // ref+=AVcc, channel = A7

  83.                                                                  // Enable A/D channel inputs
  84.       P6SEL |=BIT6;
  85.       P6SEL |=BIT7;

  86.           ADC12IE = 0x02;                           // Enable ADC12IFG.1
  87.           //__delay_cycles(75);                       // 75us delay to allow Ref to settle
  88.           ADC12CTL0 |= ADC12ENC;                    // Enable conversions
  89. }


  90. void display_time(void)
  91. {
  92.         time_hour[0]=hour/10+'0';
  93.         time_hour[1]=hour%10+'0';
  94.         time_min[0]=min/10+'0';
  95.         time_min[1]=min%10+'0';
  96.         time_sec[0]=sec/10+'0';
  97.         time_sec[1]=sec%10+'0';

  98.        
  99.         Dogs102x6_stringDraw(3,44,time_hour,time_hour_style);
  100.         Dogs102x6_stringDraw(3,62,time_min,time_min_style);
  101.         Dogs102x6_stringDraw(3,80,time_sec,DOGS102x6_DRAW_NORMAL);
  102.        
  103. }

  104. void lcd_int(void)
  105. {
  106.         Board_init();                                              // GPIO initialization
  107.         Dogs102x6_init();                                          // initialize LCD
  108.         Dogs102x6_clearScreen();                                   // clear screen of LCD
  109.         Dogs102x6_backlightInit();                                 // initialize the backlight of LCD
  110.         Dogs102x6_setBacklight(20);                                // set up the backlight of LCD
  111.         __enable_interrupt();//enable globle interrupt
  112. }
  113. void time_1_int(void)
  114. {
  115.         TA1CCTL0 = CCIE;                          // CCR0 interrupt enabled
  116.         TA1CCR0 = 1045;                                                          //周期为1ms
  117.         TA1CTL = TASSEL_2 + MC_2 + TACLR;         // SMCLK ~= 1.045MHz, contmode, clear TAR
  118.         __enable_interrupt();//enable globle interrupt
  119. }
  120. void button_init(void)
  121. {
  122.         P1DIR &= ~(0x01<<7); //set P1.7 as input
  123.         P1REN |= (0x01<<7);  //enable resistor
  124.         P1OUT |= (0x01<<7);  //pull up

  125.         P2DIR &= ~(0x01<<2); //set P2.2 as input
  126.         P2REN |= (0x01<<2);  //enable resistor
  127.         P2OUT |= (0x01<<2);  //pull up
  128. }


  129. #pragma vector=TIMER1_A0_VECTOR
  130. __interrupt void TIMER1_A0_ISR(void)
  131. {
  132.         ++time_counter;
  133.         TA1CCR0 += 1045;
  134.         if (time_counter>=1000)
  135.         {
  136.                 time_counter = 0;
  137.             sec++;
  138.             //P1OUT ^= BIT0;
  139.             if(sec==60)
  140.             {
  141.                     sec=0;
  142.                     min++;
  143.                     if(min==60)
  144.                     {
  145.                             min=0;
  146.                             hour++;
  147.                             if(hour==24)
  148.                             {
  149.                                     hour=0;
  150.                             }
  151.                     }
  152.             }

  153.         }
  154. }
  155. #pragma vector=ADC12_VECTOR
  156. __interrupt void ADC12ISR (void)
  157. {
  158.         static unsigned int count = 0;
  159.     float factor=0.80566;//3300/4095
  160.     switch(__even_in_range(ADC12IV,34))
  161.   {
  162.   case  0: break;                           // Vector  0:  No interrupt
  163.   case  2: break;                           // Vector  2:  ADC overflow
  164.   case  4: break;                           // Vector  4:  ADC timing overflow
  165.   case  6: break;                           // Vector  6:  ADC12IFG0
  166.   case  8:                                      // Vector  8:  ADC12IFG1
  167.           tempData1[count] = ADC12MEM0;
  168.           tempData2[count] = ADC12MEM1;// Move results, IFG is cleared
  169.                                             // Move results, IFG is cleared

  170.                                       count++;
  171.                                       com1=tempData1[count];
  172.                                       //com1=com1*factor;
  173.                                       com2=tempData2[count];
  174.                                       //com2=com2*factor;
  175.                                         if (count == 12)
  176.                                               {
  177.                                                 count = 0;
  178.                                                 flag=1;
  179.                                                 ADC12IE = 0x00;
  180.                                               }
  181.                         // Move results, IFG is cleared
  182.            //   __bic_SR_register_on_exit(LPM4_bits);   // Exit active CPU
  183.               break;
  184.   case 10: break;                           // Vector 10:  ADC12IFG2
  185.   case 12:break;                            // Vector 12:  ADC12IFG3
  186.   case 14: break;                           // Vector 14:  ADC12IFG4
  187.   case 16: break;                           // Vector 16:  ADC12IFG5
  188.   case 18: break;                           // Vector 18:  ADC12IFG6
  189.   case 20: break;                           // Vector 20:  ADC12IFG7
  190.   case 22: break;                           // Vector 22:  ADC12IFG8
  191.   case 24: break;                           // Vector 24:  ADC12IFG9
  192.   case 26: break;                           // Vector 26:  ADC12IFG10
  193.   case 28: break;                           // Vector 28:  ADC12IFG11
  194.   case 30: break;                           // Vector 30:  ADC12IFG12
  195.   case 32: break;                           // Vector 32:  ADC12IFG13
  196.   case 34: break;                           // Vector 34:  ADC12IFG14
  197.   default: break;
  198.   }
  199. }

  200. #pragma vector=TIMER1_A1_VECTOR
  201. __interrupt void TIMER1_A1_ISR(void)
  202. {
  203.   switch(__even_in_range(TA1IV,14))
  204.   {
  205. case  0: break;                          // No interrupt
  206.   case  2:
  207.              if(TA1CCTL1&CM0)
  208.          {
  209.                newdata=TA1R;
  210.                if(newdata
  211.                {
  212.                        data=65536+newdata-olddata;
  213.                }
  214.                else
  215.                {
  216.                        data=newdata-olddata;
  217.                }
  218.                olddata=newdata;
  219.                num=data;
  220.          }
  221.                P1OUT ^= BIT3;
  222.                break;                                      // CCR1 not used
  223.     case  4: break;                                    // CCR2 not used
  224.     case  6: break;           // reserved
  225.     case  8: break;           // reserved
  226.     case 10: break;           // reserved
  227.     case 12: break;           // reserved
  228.     case 14: break;           // overflow
  229.     default: break;
  230.   }
  231. }

复制代码

此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
2条回答
shudct
2019-03-24 20:19
 精彩回答 2  元偷偷看……0人看过

一周热门 更多>

相关问题

    相关文章