⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 msp430f2274adc10.txt

📁 MSP430F2274中ADC10 系列通道单次采样,对A0 A1 A2 三个通道进行电压检测,ADC结果存于 ad_value[3] 数组中
💻 TXT
字号:
MSP430F2274中ADC10 系列通道单次采样


      /**************************************************************************************************************
      * 功能: ADC10 多通道系列单次采样                                                      
                                   *
      * 描述: 对A0 A1 A2 三个通道进行电压检测,ADC结果存于 ad_value[3] 数组中.并              * 
      *       用 result[X]= ((Avcc * ad_value[X] )/ 1023  的公式来计算电压值 .             
                     * 
      *       程序中写到的  "*1000"  是将结果扩大1000倍,保留3位小数点                               
           *

      ***************************************************************************************************************/
      #include <MSP430x22x4.h>
      unsigned char ADC10FLAG=0;
      unsigned int  result[3],ad_value[3]; 
      void TIMER_A_SETTINGS( void )
          {
             TACTL=TASSEL1+TACLR+MC1;                 
             CCR0=50000;                              
             TACCTL0 |= CCIE;              
          }
      void ADC10_SETTINGS ( void )
          { 
            ADC10CTL0 &=~ ENC;             //  设置ADC10CTL 先将此位清0,丧失ADC10功能 才修能改  
       
            ADC10DTC0 |=  ADC10CT;         //  选择连续转移数据  
            ADC10CTL0 |=  SREF_0;          //  AVSS 为负参考电压,AVCC为正参考电压 
            ADC10CTL0 |=  ADC10SHT_3;      //  ADC10 采样保持时间为64个ADC10CLKs
            ADC10CTL0 &=~ ADC10SR;         //  采样速率 选用 200KSPS 
            ADC10CTL0 &=~ REFOUT;          //  关闭内部参考电压输出
            ADC10CTL0 &=~ REFBURST;        //  内部参考电压连续补足 
            ADC10CTL0 |=  MSC;             //  系列采样时,此位须置位 
            ADC10CTL0 &=~ REF2_5V;         //  选择内部 1.5V 参考电压 
            ADC10CTL0 &=~ REFON;           //  不启用内部参考电压 
            ADC10CTL0 |=  ADC10IE;         //  允许 ADC10 采样中断   
            ADC10CTL0 &=~ ADC10IFG;        //  初始先清楚 ADC10中断标记位
            ADC10CTL0 |=  ADC10ON;         //  开启 ADC10 采样功能 
            ADC10CTL1 |=  INCH_2;          //  AD 采样通道选择从A2开始 到A0
            ADC10CTL1 |=  SHS_0;           //  选启 ADC10 内部采样时时钟发生器 ADC10OSC 
            ADC10CTL1 &=~ ADC10DF;         //  采样结果以二进制格式存放
            ADC10CTL1 &=~ ISSH;            //  采样输入信号不反转
            ADC10CTL1 |=  ADC10DIV_1;      //  对采样时钟源进行 2分频
            ADC10CTL1 |=  CONSEQ_1;        //  多通道单次采样
            ADC10DTC1  =  3;               //  连续采样3次中断一次  
            ADC10SA    =  (unsigned int)ad_value+1; // ADC10 数据转移起始地址  
          }
      void START_ADC10( void )
          {
             ADC10CTL0 |= ADC10SC + ENC;
          }
      void FORMAT_DATA( void )
          {
             unsigned char count,j=2;
             for(count=0;count<3;count++)
               {
                 result[j] = (unsigned int)((2.99 * ad_value[count] / 1023 
      )*1000);
                 j=j-1;
               }
             _NOP();                       // 在此设断点查看 RESULT 数组的值 
          }
      void main( void )
          {
             WDTCTL=WDTPW+WDTHOLD;                   
             BCSCTL1 =CALBC1_1MHZ;                   
             DCOCTL  =CALBC1_1MHZ;
             ADC10_SETTINGS();
             TIMER_A_SETTINGS();
             _BIS_SR(GIE+LPM1_bits);                 
             while(1)
               {
                 if(ADC10FLAG==1)
                    {
                      FORMAT_DATA();
                      ADC10FLAG = 0;                   
                    }
                 _BIS_SR(GIE+LPM1_bits); 
               } 
          }
      #pragma vector = ADC10_VECTOR            
      __interrupt void ADC10_ISR(void)
          {  
             ADC10FLAG=1;       
          }     
            
      #pragma vector = TIMERA0_VECTOR
      __interrupt void TIMER_A_ISR(void)
          {  
             _BIC_SR_IRQ(LPM1_bits);      
             CCR0=50000;
             START_ADC10(); 
          }
 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -