东南大学MSP430LCD+ADC实验报告

时间:2024.4.9

Msp430  LCD_B/ADC_12实验操作报告

04011344   王晨

一、    实验内容

Lab17

 基本:使DAC0输出正弦波频率为300Hz,在LCD上显示频率;

提高:用按键控制DAC0输出正弦波频率为在100Hz—1000Hz循环输出,步进值为100Hz,并在LCD上显示频率;

基本部分实验代码:

#include <msp430f6638.h>

#include <math.h>

#define PI 3.1415926

void Init_lcd(void); //lcd初始化

void LcdGo(unsigned char doit); //打开或关闭液晶

void LcdBlink(unsigned char doit); //显示或者消隐显示内容

void LCD_Clear(void); //清屏

void Init_TS3A5017DR(void); //Configure TS3A5017DR IN1 and IN2

//delay

#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))

// LCD segment definitions.

#define d 0x01

#define c 0x20

#define b 0x40

#define a 0x80

#define dp 0x10

#define g 0x04

#define f 0x08

#define e 0x02

const char char_gen[] = { // As used in 430 Day Watch Demo board

a+b+c+d+e+f, // Displays "0"

b+c, // Displays "1"

a+b+d+e+g, // Displays "2"

a+b+c+d+g, // Displays "3"

b+c+f+g, // Displays "4"

a+c+d+f+g, // Displays "5"

a+c+d+e+f+g, // Displays "6"

a+b+c, // Displays "7"

a+b+c+d+e+f+g, // Displays "8"

a+b+c+d+f+g, // Displays "9"

a+b+c+e+f+g, // Displays "A"

c+d+e+f+g, // Displays "b"

a+d+e+f, // Displays "c"

b+c+d+e+g, // Displays "d"

a+d+e+f+g, // Displays "E"

a+e+f+g, // Displays "f"

a+b+c+d+f+g, // Displays "g"

c+e+f+g, // Displays "h"

b+c, // Displays "i"

b+c+d, // Displays "j"

b+c+e+f+g, // Displays "k"

d+e+f, // Displays "L"

a+b+c+e+f, // Displays "n"

a+b+c+d+e+f+g+dp // Displays "full"

};

int sin_table[180];

int *sin_data_pr;

double i=0;

int j;

void main(void)

{

  WDTCTL = WDTPW + WDTHOLD; // Stop WDT

  //8MHz

  UCSCTL3 = SELREF_2; // Set DCO FLL reference = REFO

  UCSCTL4 |= SELA_2; // Set ACLK = REFO

  UCSCTL0 = 0x0000; // Set lowest possible DCOx, MODx

  do {

        UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + DCOFFG);

        // Clear XT2,XT1,DCO fault flags

        SFRIFG1 &= ~OFIFG; // Clear fault flags

  }while (SFRIFG1&OFIFG); // Test oscillator fault flag

  __bis_SR_register(SCG0); // Disable the FLL control loop

  UCSCTL1 = DCORSEL_6; // Select DCO range 16MHz operation

  UCSCTL2 |= 610; // Set DCO Multiplier for 8MHz

  // (N + 1) * FLLRef = Fdco, (249 + 1) * 32768 = 8MHz

  __bic_SR_register(SCG0); // Enable the FLL control loop

  // Worst‐case settling time for the DCO when the DCO range bits have been

  // changed is n x 32 x 32 x f_MCLK / f_FLL_reference. See UCS chapter in 5xx UG for

  // optimization , 32 x 32 x 8 MHz / 32,768 Hz = 250000 = MCLK cycles for DCO to settle

  __delay_cycles(650000);

  //timerA

  TA0CCTL0 = CCIE; // CCR0 interrupt enabled

  TA0CCR0 = 370;

  TA0CTL = TASSEL_2 + MC_1 + TACLR; // SMCLK, up mode, clear TAR

  for(j=0;j<180;j++)

  {

    i+=PI/90;

    sin_table[j]=(int)((sin(i)+1)*2048);

  }

  sin_data_pr=&sin_table[0];

  DAC12_0CTL0 = DAC12IR + DAC12SREF_0 + DAC12AMP_5 +

  DAC12ENC + DAC12CALON+DAC12OPS;

  P5DIR=BIT1;//打开扬声器的运放

  P5OUT&=~BIT1;

  //Lcd initial

  Init_TS3A5017DR(); // Configure TS3A5017DR IN1 and IN2

  Init_lcd(); //lcd初始化

  LcdGo(1); //打开液晶模块

  LCD_Clear(); //清屏

  LCDMEM[5] = char_gen[0];

  LCDMEM[4] = char_gen[0];

  LCDMEM[3] = char_gen[3];

  for (;;)

  {

    __bis_SR_register(CPUOFF + GIE); // Enter LPM0

    DAC12_0DAT=*sin_data_pr++;

    if (sin_data_pr >= &sin_table[180])

    {

     sin_data_pr = &sin_table[0];

    }

    DAC12_0DAT &= 0xFFF; // Modulo 4096

   }

}

#pragma vector=TIMER0_A0_VECTOR

__interrupt void TIMER0_A0_ISR(void)

{

  static unsigned int ch=0;

  ch++;

  if(ch>=50000)//0.93s

  {

    LCDMEM[5] = char_gen[0];

    LCDMEM[4] = char_gen[0];

    LCDMEM[3] = char_gen[3];

    ch=0;

  }

  __bic_SR_register_on_exit(CPUOFF); // Clear LPM0 bits from 0(SR)

}

//LCD初始化

void Init_lcd(void)

{

  LCDBCTL0 =LCDDIV0 + LCDPRE0 + LCDMX1 + LCDSSEL + LCDMX1 + LCD4MUX ;

  LCDBPCTL0 = LCDS0 + LCDS1 + LCDS2 + LCDS3 + LCDS4 + LCDS5 + LCDS6+ LCDS7 + LCDS8 +

  LCDS9 + LCDS10 + LCDS11 ;

  P5SEL = 0xfc;//用作LCD驱动

}

/****************************************************************

打开或关闭液晶

1:打开 0:关闭

****************************************************************/

void LcdGo(unsigned char doit)

{

if(doit==1)

{

//打开液晶显示

  LCDBCTL0 |= LCDON;

}

else if(doit==0)

{

//关闭液晶显示

  LCDBCTL0 &= ~LCDON;

}

}

/****************************************************************

显示或者消隐显示内容

doit:0:消隐 1:显示

****************************************************************/

void LcdBlink(unsigned char doit)

{

  if(doit==0)

  {

    LCDBCTL0 &= ~LCDSON;

  }

  else if(doit==1)

  {

    LCDBCTL0 |= LCDSON;

  }

  }

  void LCD_Clear(void)//清屏

  {

     unsigned char index;

    for (index=0; index<12; index++)

  {

    LCDMEM[index] = 0;

  }

  }

  void Init_TS3A5017DR(void)

  {

    P3DIR |= BIT4 + BIT5; //P3.4:IN1;P3.5:IN2 set as output

    P3OUT &= ~BIT4; //IN1 = 0

    P3OUT |= BIT5; //IN2 = 1

}

提高部分实验代码:

#include <msp430f6638.h>

#include <math.h>

#define uint unsigned int

#define uchar unsigned char

#define PI 3.1416

#define d 0x01

#define c 0x20

#define b 0x40

#define a 0x80

#define dp 0x10

#define g 0x04

#define f 0x08

#define e 0x02

int sin_table[100];

int *sin_data_pr;

uint fre_term_pr;

int j;

double i=0;

#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))

const char char_gen[] = {               // As used in 430 Day Watch Demo board

  a+b+c+d+e+f,                          // Displays "0"

  b+c,                                  // Displays "1"

  a+b+d+e+g,                            // Displays "2"

  a+b+c+d+g,                            // Displays "3"

  b+c+f+g,                              // Displays "4"

  a+c+d+f+g,                            // Displays "5"

  a+c+d+e+f+g,                          // Displays "6"

  a+b+c,                                // Displays "7"

  a+b+c+d+e+f+g,                        // Displays "8"

  a+b+c+d+f+g,                          // Displays "9"

  a+b+c+e+f+g,                          // Displays "A"

  c+d+e+f+g,                            // Displays "b"

  a+d+e+f,                              // Displays "c"

  b+c+d+e+g,                            // Displays "d"

  a+d+e+f+g,                            // Displays "E"

  a+e+f+g,                              // Displays "f"

  a+b+c+d+f+g,                          // Displays "g"

  c+e+f+g,                              // Displays "h"

  b+c,                                  // Displays "i"

  b+c+d,                                // Displays "j"

  b+c+e+f+g,                            // Displays "k"

  d+e+f,                                // Displays "L"

  a+b+c+e+f,                            // Displays "n"

  a+b+c+d+e+f+g+dp                      // Displays "full"

};

/* Private function prototypes -----------------------------------------------*/

void Init_lcd(void);                // LCD初始化

void LcdGo(unsigned char Dot);     // 打开或关闭液晶

void LcdBlink(unsigned char doit); // 显示或者消隐显示内容

void LCD_Clear(void);               // 清屏

void Init_TS3A5017DR(void);        // Configure TS3A5017DR  IN1 and IN2

void Backlight_Enable(void);       // 打开背光

void Init_lcd(void)

{

       LCDBCTL0 =LCDDIV0 + LCDPRE0 +  LCDMX1 + LCDSSEL + LCDMX1 + LCD4MUX ;

            LCDBPCTL0 = LCDS0 + LCDS1 + LCDS2 + LCDS3 + LCDS4 + LCDS5+LCDS6+LCDS7+LCDS8+LCDS9+LCDS10+LCDS11;

        P5SEL  = 0xfc;

}

void LcdGo(unsigned char Dot)

{

       if(Dot==1)

       {

                //打开液晶显示

                LCDBCTL0 |= LCDON;

       }

       else if(Dot==0)

       {

                //关闭液晶显示

                LCDBCTL0 &= ~LCDON;

       }

}

void LcdBlink(unsigned char doit)

{

       if(doit==0)

       {

                LCDBCTL0 &= ~LCDSON;

       }

       else if(doit==1)

       {

                LCDBCTL0 |= LCDSON;

       }

}

void LCD_Clear(void)//清屏

{

     unsigned char index;

     for (index=0; index<12; index++)

     {

             LCDMEM[index] = 0;

     }

}

void Init_TS3A5017DR(void)

{

    // Configure TS3A5017DR  IN1 and IN2

    P3DIR |= BIT4 + BIT5;    //P3.4 : IN1 ; P3.5 : IN2   set as output

    P3OUT &= ~BIT4;          //IN1 = 0

    P3OUT |= BIT5;           //IN2 = 1

}

void Backlight_Enable(void)

{

  P5DIR |= BIT7;

  P5OUT &= ~BIT7;

}

uint fre_term[10]={977,488,326,244,195,163,140,122,109,98};

void DAC_Init()                                      //DAC初始化

{

         DAC12_0CTL0|=DAC12CALON;             //启动校验

         while((DAC12_0CTL0 & DAC12CALON)!=0);

         DAC12_0CTL0|=DAC12SREF_0+DAC12LSEL_0+DAC12IR+DAC12AMP_5+DAC12OPS;

         DAC12_0DAT=0x0000;

}

void Clock_Init()                            //MCLK 16MHZ   ,SMCLK 16MHz

{

       UCSCTL3 |= SELREF_2;                      // Set DCO FLL reference = REFO

         UCSCTL4 |= SELA_2;                        // Set ACLK = REFO

         UCSCTL5 |=DIVS_1;                          //SMCLK 2fenpin

         __bis_SR_register(SCG0);                  // Disable the FLL control loop

         UCSCTL0 = 0x0000;                         // Set lowest possible DCOx, MODx

         UCSCTL1 = DCORSEL_5;                      // Select DCO range 24MHz operation

         UCSCTL2 = FLLD_1 + 243;                   // Set DCO Multiplier for 12MHz

                                                   // (N + 1) * FLLRef = Fdco

                                                   // (243 + 1) * 32768 = 8MHz

                                                   // Set FLL Div = fDCOCLK/2=4MHz

         __bic_SR_register(SCG0);                  // Enable the FLL control loop

         __delay_cycles(375000);

         // Loop until XT1,XT2 & DCO fault flag is cleared

         do

         {

           UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + DCOFFG);

                                                   // Clear XT2,XT1,DCO fault flags

           SFRIFG1 &= ~OFIFG;                      // Clear fault flags

         }while (SFRIFG1&OFIFG);                   //

}

int main(void) {

     WDTCTL = WDTPW | WDTHOLD;       // Stop watchdog timer

    Init_TS3A5017DR();       // Configure TS3A5017DR  IN1 and IN2

    Init_lcd();              // LCD初始化

          Clock_Init();

       //TA0_Init();

        TA0CCR0=fre_term[0];

        TA0CCTL0|=CCIE;

        TA0CTL|=TASSEL_2+MC_1+ID_0+TACLR;//SMCLK=DCO

       DAC_Init();

       Backlight_Enable();      // 打开背光

       LcdGo(1);                // 打开液晶模块

       LCD_Clear();             // 清屏

       LcdBlink(1);

      delay_ms(1000);

    for(j=0;j<100;j++)

      {

              i+=PI/50;

              sin_table[j]=(int)((sin(i)+1)*2048);

      }

    LCDMEM[3] = char_gen[1];

    delay_ms(1000);

    LCDMEM[4]=char_gen[0];

    delay_ms(1000);

    LCDMEM[5]=char_gen[0];

    delay_ms(1000);

      //Port_Init();

       P2IE|=BIT6+BIT7;

      P2IFG&=~(BIT6+BIT7);

      P5DIR|=BIT1;//打开扬声器的运放

      P5OUT&=~BIT1;

    __bis_SR_register(GIE);

    while(1)

    {

    }

}

#pragma vector=PORT2_VECTOR

__interrupt void PortISR(void)

{

       switch(__even_in_range(P2IV,16))

         {

       case 0:break;

       case 2:break;

       case 4:break;

       case 6:break;

       case 8:break;

       case 10:break;

       case 12:break;

       case 14:                           //p2.6

                if(fre_term_pr<9)

                {

                fre_term_pr++;

                }

                else

                          fre_term_pr=0;

                TA0CCR0=fre_term[fre_term_pr];

                if(fre_term_pr==9)

                {

                           LCDMEM[2] = char_gen[1];

                           LCDMEM[3] = char_gen[0];

                }

                else

                {

          LCDMEM[3] = char_gen[fre_term_pr+1];

          LCDMEM[2] = 0;

                }

                P2IFG&=~BIT6;

                break;

       case 16:                            //p2.7

                if(fre_term_pr>0)

                                   {

                                   fre_term_pr--;

                                   }

                                   else

                                            fre_term_pr=9;

                                   TA0CCR0=fre_term[fre_term_pr];

                                                               if(fre_term_pr==9)

                                            {

                                                       LCDMEM[2] = char_gen[1];

                                                       LCDMEM[3] = char_gen[0];

                                            }

                                            else

                                            {

                                    LCDMEM[3] = char_gen[fre_term_pr+1];

                                    LCDMEM[2] = 0;

                                            }

                                   P2IFG&=~BIT7;

                break;

         }

}

#pragma vector=TIMER0_A0_VECTOR

__interrupt void TIMER0_A0_ISR(void)

{

  DAC12_0DAT=*sin_data_pr++;

  if (sin_data_pr >= &sin_table[100])

  {

  sin_data_pr = &sin_table[0];

  }

  DAC12_0DAT &= 0xFFF; // Modulo 4096

  //__bic_SR_register_on_exit(CPUOFF); // Clear LPM0 bits from 0(SR)

}

实验现象:可以实现频率的加减切换,频率值为100Hz至1kHz,必进1为100Hz。同时通过扬声器输出。

Lab20  温度采集与显示

Lab19实验中的实测温度值以摄氏度数值显示在段码LCD上。

实验代码如下:

#include <msp430f6638.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))

// LCD segment definitions.

#define d 0x01

#define c 0x20

#define b 0x40

#define a 0x80

#define dp 0x10

#define g 0x04

#define f 0x08

#define e 0x02

#define CALADC12_15V_30C  *((unsigned int *)0x1A1A)   // Temperature Sensor Calibration-30 C

                                                     //See device datasheet for TLV table memory mapping

#define CALADC12_15V_85C  *((unsigned int *)0x1A1C)   // Temperature Sensor Calibration-85 C

/* Private macro -------------------------------------------------------------*/

/* Private variables ---------------------------------------------------------*/

const char char_gen[] = {               // As used in 430 Day Watch Demo board

  a+b+c+d+e+f,                          // Displays "0"

  b+c,                                  // Displays "1"

  a+b+d+e+g,                            // Displays "2"

  a+b+c+d+g,                            // Displays "3"

  b+c+f+g,                              // Displays "4"

  a+c+d+f+g,                            // Displays "5"

  a+c+d+e+f+g,                          // Displays "6"

  a+b+c,                                // Displays "7"

  a+b+c+d+e+f+g,                        // Displays "8"

  a+b+c+d+f+g,                          // Displays "9"

  dp,                                   // Displays "."

  a+b+c+e+f+g,                          // Displays "A"

  c+d+e+f+g,                            // Displays "b"

  a+d+e+f,                              // Displays "c"

  b+c+d+e+g,                            // Displays "d"

  a+d+e+f+g,                            // Displays "E"

  a+e+f+g,                              // Displays "f"

  a+b+c+d+f+g,                          // Displays "g"

  c+e+f+g,                              // Displays "h"

  b+c,                                  // Displays "i"

  b+c+d,                                // Displays "j"

  b+c+e+f+g,                            // Displays "k"

  d+e+f,                                // Displays "L"

  a+b+c+e+f,                            // Displays "n"

  a+b+c+d+e+f+g+dp                      // Displays "full"

};

//int qian,bai,shi,ge,dot1,dot2;

int shi,ge,dot1,dot2;

unsigned int temp;

volatile float temperatureDegC;

char answer;

//volatile float temperatureDegF;

/* Private function prototypes -----------------------------------------------*/

void Init_lcd(void);                // LCD初始化

void LcdGo(unsigned char Dot);     // 打开或关闭液晶

void LcdBlink(unsigned char doit); // 显示或者消隐显示内容

void LCD_Clear(void);               // 清屏

void Init_TS3A5017DR(void);        // Configure TS3A5017DR  IN1 and IN2

void Backlight_Enable(void);       // 打开背光

/* Private functions ---------------------------------------------------------*/

void Init_lcd(void)

{

         LCDBCTL0 =LCDDIV0 + LCDPRE0 +  LCDMX1 + LCDSSEL + LCDMX1 + LCD4MUX ;

         LCDBPCTL0 = LCDS0 + LCDS1 + LCDS2 + LCDS3 + LCDS4 + LCDS5 + LCDS6+ LCDS7 + LCDS8 \

                       + LCDS9 + LCDS10 + LCDS11 ;

        P5SEL  = 0xfc;

}

void LcdGo(unsigned char Dot)

{

     if(Dot==1)

     {

            //打开液晶显示

            LCDBCTL0 |= LCDON;

     }

     else if(Dot==0)

     {

            //关闭液晶显示

            LCDBCTL0 &= ~LCDON;

     }

}

void LcdBlink(unsigned char doit)

{

     if(doit==0)

     {

            LCDBCTL0 &= ~LCDSON;

     }

     else if(doit==1)

     {

            LCDBCTL0 |= LCDSON;

     }

}

void LCD_Clear(void)//清屏

{

     unsigned char index;

     for (index=0; index<12; index++)

     {

          LCDMEM[index] = 0;

     }

}

void Init_TS3A5017DR(void)

{

    // Configure TS3A5017DR  IN1 and IN2

    P3DIR |= BIT4 + BIT5;    //P3.4 : IN1 ; P3.5 : IN2   set as output

    P3OUT &= ~BIT4;          //IN1 = 0

    P3OUT |= BIT5;           //IN2 = 1

}

void Backlight_Enable(void)

{

  P5DIR |= BIT7;

  P5OUT &= ~BIT7;

}

void change (float tem)  //temperatureDegF

{

//qian=(int)tem/1000;//千

//bai=(int)tem%1000/100;//百

shi=(int)(tem)%100/10;  //十

ge=(int)tem%10;//个

dot1=(int)(tem*10)%10;

dot2=(int)(tem*100)%100;

}

char display(int mm)

{

if(mm==0) answer=char_gen[0];

else if(mm==1) answer=char_gen[1];

else if(mm==2) answer=char_gen[2];

else if(mm==3) answer=char_gen[3];

else if(mm==4) answer=char_gen[4];

else if(mm==5) answer=char_gen[5];

else if(mm==6) answer=char_gen[6];

else if(mm==7) answer=char_gen[7];

else if(mm==8) answer=char_gen[8];

else   answer=char_gen[9];

return answer;

}

int main()

{

     WDTCTL = WDTPW + WDTHOLD;// Stop WDT

     Init_TS3A5017DR();       // Configure TS3A5017DR  IN1 and IN2

     Init_lcd();              // LCD初始化

     Backlight_Enable();      // 打开背光

     LcdGo(1);                // 打开液晶模块

     LCD_Clear();   // 清屏

      REFCTL0 &= ~REFMSTR;                      // Reset REFMSTR to hand over control to

                                                     // ADC12_A ref control registers

      ADC12CTL0 = ADC12SHT0_8 + ADC12REFON + ADC12ON;

                                                     // Internal ref = 1.5V

      ADC12CTL1 = ADC12SHP;                     // enable sample timer

      ADC12MCTL0 = ADC12SREF_1 + ADC12INCH_10;  // ADC i/p ch A10 = temp sense i/p

      ADC12IE = 0x001;                          // ADC_IFG upon conv result-ADCMEMO

      __delay_cycles(100);                      // Allow ~100us (at default UCS settings)

                                                     // for REF to settle

     ADC12CTL0 |= ADC12ENC;

    while(1)

       {

       ADC12CTL0 &= ~ADC12SC;

       ADC12CTL0 |= ADC12SC;                   // Sampling and conversion start

                     // Temperature in Celsius. See the Device Descriptor Table section in the

                  // System Resets, Interrupts, and Operating Modes, System Control Module

                  // chapter in the device user's guide for background information on the

                  // used formula.

       __bis_SR_register(LPM4_bits + GIE);     // LPM0 with interrupts enabled

                      __no_operation();

   temperatureDegC=(float)(((long)temp-CALADC12_15V_30C)*(85-30))/(CALADC12_15V_85C-CALADC12_15V_30C)+30.0f;

   //temperatureDegF = temperatureDegC * 9.0f / 5.0f + 32.0f;  // Temperature in Fahrenheit Tf = (9/5)*Tc + 32

         change(temperatureDegC);

         LCDMEM[5] = display(dot2);

         LCDMEM[4] = display(dot1)+dp;

        // LCDMEM[3] = char_gen[10];

         LCDMEM[3] = display(ge);

         LCDMEM[2] = display(shi);

        //LCDMEM[1] = display(bai);

       // LCDMEM[0]= display(bai);

         __no_operation();                       // SET BREAKPOINT HERE

     }

   }

#pragma vector=ADC12_VECTOR

__interrupt void ADC12ISR (void)

{

  switch(__even_in_range(ADC12IV,34))

  {

  case  0: break;                           // Vector  0:  No interrupt

  case  2: break;                           // Vector  2:  ADC overflow

  case  4: break;                           // Vector  4:  ADC timing overflow

  case  6:                                  // Vector  6:  ADC12IFG0

    temp = ADC12MEM0;                       // Move results, IFG is cleared

    __bic_SR_register_on_exit(LPM4_bits);   // Exit active CPU

  case  8: break;                           // Vector  8:  ADC12IFG1

  case 10: break;                           // Vector 10:  ADC12IFG2

  case 12: break;                           // Vector 12:  ADC12IFG3

  case 14: break;                           // Vector 14:  ADC12IFG4

  case 16: break;                           // Vector 16:  ADC12IFG5

  case 18: break;                           // Vector 18:  ADC12IFG6

  case 20: break;                           // Vector 20:  ADC12IFG7

  case 22: break;                           // Vector 22:  ADC12IFG8

  case 24: break;                           // Vector 24:  ADC12IFG9

  case 26: break;                           // Vector 26:  ADC12IFG10

  case 28: break;                           // Vector 28:  ADC12IFG11

  case 30: break;                           // Vector 30:  ADC12IFG12

  case 32: break;                           // Vector 32:  ADC12IFG13

  case 34: break;                           // Vector 34:  ADC12IFG14

  default: break;

  }

}

实验现象:测试得到温度值为319℃,显然知温度值算式有错误。

二、  思考题

1.  简述ADC常用性能指标。

答:主要常用的有以下几点:(1)分辨率 (2)量化误差 (3)转换精度 (4)转换时间

2.  MSP430 ADC12有几种内部参考源?应如何选择?

答: 有四种内部参考时钟源:SMCLK,ACLK,MCLK,ADC12OSC。 ADC12_A的时钟源由ADC12PDIV位控制的预分频器和ADC12SSELx位控制的除法器选择,输入时钟由DC12DIVx位和ADC12PDIV位进行1-32分频。

3.  MSP430 ADC12 转换内核为什么需要有采样保持电路?

答: 因为A/D转换需要一定的时间来完成量化及编码操作,对高速变化的信号进行瞬时采样时,A/D未转换完毕,采样值已经改变。为了保证转换精度,ADC12 转换内核具有采样与保持功能,即使现场模拟信号变化比较快,也不会影响ADC12的转化。

4.MSP430 ADC12 有哪些转换方式,各自特点是什么?

答: 转换模式有:(1)单通道单次转换  (2)序列通道单次转换 (3)单通道多次转换  (4)序列通道多次转换

转换方式:  ①逐次逼近型:它由比较器、D/A转换器、比较寄存器SAR、时钟发生器以及控制逻辑电路组成,将采样输入信号与已知电压不断进行比较,然后转换成二进制数。②并行比较型:转换速度最高。③积分型:通过两次积分将输入的模拟电压转换成与其平均值成正比的时间间隔。在此时间间隔内利用计数器对时钟脉冲进行计数,从而实现A/D转换。

5、MSP430 数模转换模块是如何支持低功耗特性的?

  答:ADC12_A内部参考发生器是为低功耗应用设计的。参考电压发生器包括一个带隙电压源和一个单独的缓存器(电流消耗和建立的时间分别在设备数据表中说明)。当ADC12REFON=1时两者同时启用;当ADC12REFON=0时两者都被禁用。当ADC12REFON=1和REFBURST=1,且没有任何转换被激活时,则缓存器自动禁用,并在需要时自动重新启用。当缓存器被禁用时不消耗电流,此时带隙电压源保持使能。

更多相关推荐:
东南大学高等数学实验报告

高等数学数学实验报告实验人员院系学号姓名实验地点计算机中心机房实验一一实验题目设数列xn由下列递推关系式给出x观察数列1x111x211xn1112xn1xnxnn122的极限二实验目的和意义利用数形结合的方法...

东南大学高等数学数学实验报告

高等数学A下册数学实验实验报告姓名刘川学号02A13306实验一空间曲线与曲面的绘制实验题目利用参数方程作图作出由下列曲面所围成的立体1Z22x及xOy面2zxyxy10及z0实验方案1输入如下命令s1Para...

东南大学数学建模实验报告

东南大学数学建模实验报告学号姓名成绩一实验名称中国近30年的人口马尔萨斯模型一实验目的1掌握matlab绘制拟合图的方法2掌握马尔萨斯模型建立的方法3通过实验了解马尔萨斯模型的有点和缺陷二在网上收集相关的资料三...

东南大学高等数学A(上册)数学实验报告

高等数学数学实验报告实验人员院系计算机学号姓名成绩实验时间20xx年12月25日9001130实验一观察数列的极限一实验题目一1nlim1e根据上面的实验步骤通过作图观察重要极限nn二实验目的和意义从点图上看出...

东南大学大一下高等数学实验报告

高等数学数学实验报告实验人员院系电子学号姓名成绩实验一一实验题目观察级数n1nnn的部分和序列的变化趋势并求和二实验目的和意义学会利用Mathematics显示级数部分和的变化趋势并且通过实验中得到的部分和图像...

东南大学高等数学(下册)数学实验报告

10113学期高等数学数学实验报告实验人员院系学号姓名成绩实验时间20xx年5月28日1作出各种标准二次曲面的图形1球面程序设计程序运行结果实验一2椭圆抛物面程序设计程序运行结果Plot3Dxyx1010y10...

东南大学《数学实验》报告

东南大学数学实验报告学号姓名成绩实验内容曲线拟合与插值一实验目的用最小二乘法实现多项式拟合3次样条函数的应用二预备知识1熟悉一般的曲线拟合的最小二乘法原则2熟悉正规方程差分表均差表的概念3熟悉polyfitpo...

东南大学高数实验报告

高数实验报告实验七21data1ParametricPlot3DCosuSinvSinuSinvCosvu02Piv02PiPlotPointsgt30data2ParametricPlot3Duu2uvu01...

东南大学数学建模实验报告

数学建模实验报告学号220xx313姓名王璞曲线插值一实验目的1熟悉一般的曲线插值方法2熟悉polyfitpolyvalinterp1splinecscvn等Matlab命令3掌握常见插值函数的求解及应用二实验...

东南大学高等数学实验报告1

高等数学实验报告交通学院学号21A10333姓名张进实验地点计算机中心机房实验人员院系实验一一实验题目用数形结合的方法观察重要极限二实验目的和意义利用数学软件Mathematica来计算数列an足够多项的值从而...

东南大学高等数学(下)实验报告

高等数学下实验报告姓名洪彬龙学号03A12219实验习题71利用参数方程作图作出由下列曲面所围成的立体2zxyxy10及z0解s1ParametricPlot3Duvuvu11v11PlotPoints30s2...

东南大学数模实验报告

实验53样条差值法绘制公路求解一实验目的利用样条差值法根据已知坐标绘制整条曲线二实验原理估测公路函数满足三次样条差值条件公路在478296处折返因而整条曲线不是函数曲线故将公路在折点处分段由于gx未知根据表中数...

东南大学数学实验报告(33篇)