msp430g2553 adc10 序列通道多次采样.docx
msp430g2553 adc10 序列通道多次采样#include "msp430g2553.h"#include "lcd1602.h"#define uint unsigned int #define uchar unsigned charfloat P10_v,P11_v,P10,P11;uint shi,ge,shi_fen,bai_fen,i=6,j,P10_int,P11_int;uchar table="0123456789"uint a,num;/,b,num1;/P1.0电压值void display_v_P10(float P10_v)/取出每位数值P10_v=P10_v*100;/将得到的数*100为了方便取出小数部分P10_int=(uint)P10_v;/保留两位小数 转化为整型ge =P10_int/100;/取个位shi_fen=P10_int/10%10;/取十分位bai_fen=P10_int%10;/取百分位/写每位数值/ LCD_write_char(0+i,0,tableshi);LCD_write_char(1+i,0,tablege);LCD_write_char(2+i,0,'.');LCD_write_char(3+i,0,tableshi_fen);LCD_write_char(4+i,0,tablebai_fen);/伏特符号LCD_write_char(5+i,0,'V');/P1.1电压值void display_v_P11(float P11_v)/取出每位数值P11_v=P11_v*100;/将得到的数*100为了方便取出小数部分P11_int=(uint)P11_v;/保留两位小数 转化为整型ge =P11_int/100;/取个位shi_fen=P11_int/10%10;/取十分位bai_fen=P11_int%10;/取百分位/写每位数值LCD_write_char(1+i,1,tablege);LCD_write_char(2+i,1,'.');LCD_write_char(3+i,1,tableshi_fen);LCD_write_char(4+i,1,tablebai_fen);/伏特符号LCD_write_char(5+i,1,'V');/主函数void main(void)WDTCTL = WDTPW + WDTHOLD; / Stop WDTADC10CTL1 = INCH_1 + ADC10DIV_0 + CONSEQ_3; / Temp Sensor ADC10CLK/4ADC10CTL0 |= ADC10ON + ADC10IE + REFON + REF2_5V + SREF_1 + MSC + ADC10SHT_2;ADC10AE0 = 0X03; /P1.0 P1.1 analog enableADC10DTC1|=0X0a;delay_us(40); /LCD初始化LCD_init_first;LCD_init;while(1)ADC10CTL0 &= ENC;/关闭采样使能while(ADC10CTL1 & ADC10BUSY);/判断是否有采样或转换动作ADC10SA = (uint)a;ADC10CTL0 |= ADC10SC + ENC;/开始采样_EINT;/关闭CPU,开启总中断LPM0;for(num=0;num<5;num+)P10 += a1+2*num; /取采集P1.0五次的值P11 += a2*num; /取采集P1.1五次的值/取五次的平均值P10=P10/5;P11=P11/5; /根据公式换算模拟电压值P10_v=P10/1023*2.5;P11_v=P11/1023*2.5;/显示部分display_v_P10(P10_v);display_v_P11(P11_v); / ADC10 interrupt service routine#pragma vector=ADC10_VECTOR_interrupt void ADC10_ISR (void)LPM0_EXIT;/ Clear CPUOFF bit from 0(SR)/*可以了 有一条语句 顺序错了 错的ADC10CTL0 &= ENC; / ADC10 disableADC10SA = (u16)adc_temp; / Data buffer start address in RAMwhile (ADC10CTL1 & BUSY); / Wait if ADC10 core is activeADC10CTL0 |= ENC + ADC10SC; / Enable and conversion start对的 ADC10CTL0 &= ENC; / ADC10 disablewhile (ADC10CTL1 & BUSY); / Wait if ADC10 core is activeADC10SA = (u16)adc_temp; / Data buffer start address in RAMADC10CTL0 |= ENC + ADC10SC; / Enable and conversion start*/