×
嵌入式 > 技术百科 > 详情

msp430 ADC10单通道多次转换

发布时间:2020-06-02 发布时间:
|

MSP430 ADC10单通道多次转换


#include "msp430x22x4.h" 

#define uchar unsigned char 
#define uint unsigned int 

#define LCDen 0X80;       //P3的高三位做控制线

#define lcdrw 0X40; 
#define lcdrs 0X20; 


void delay(uint z)                          //延时程序 

    uint x,y; 
    for(x=z;x>0;x--) 
        for(y=100;y>0;y--); 

void write_com(uchar com)                  //写指令 

    P3OUT&=~lcdrs; 
    P4OUT=com; 
    delay(5); 
    P3OUT |= lcden; 
    delay(5); 
    P3OUT &= ~lcden; 


void write_data(uchar date)                 //写数据 

    P3OUT|=lcdrs; 
    P4OUT=date; 
    delay(5); 
    P3OUT|=lcden; 
    delay(5); 
    P3OUT &= ~lcden; 


void init()                                //初始化 


    P3OUT &= ~lcdrw; 
    P3OUT &= ~lcden; 
    write_com(0x38);//显示模式设置 
    write_com(0x0f);// 
    write_com(0x06);// 
    write_com(0x01);// 
    write_com(0x80+0x00);// 

        uchar num; 
        uchar  table[]="0123456789"; 
        uint dada[5]; 
         
         
volatile float ad_value; 
void main( void ) 

WDTCTL=WDTPW+WDTHOLD; //关看门狗 
BCSCTL1 =CALBC1_1MHz; //设定DCO 为1MHZ 
DCOCTL =CALBC1_1MHZ; 

P2SEL = 0X01; 
P3SEL=0X00; 
P3DIR=0XFF; 
P3OUT=0X00; 
P4SEL=0X00; 
P4DIR=0XFF; 
P4OUT=0X00; 
init(); 

//时钟源选AD 内部时钟并4 分频,选通道10,AD 启动信号来源选TA.OUT1,选单通道连续采样 
ADC10CTL1=ADC10DIV_3+INCH_0+SHS_1+CONSEQ_2; 
//选1.5V 为正向参考,地为负参考,AD 中断使能,打开参考,启动AD 模块(不是启动AD 转换) 
ADC10CTL0=SREF_1+ADC10SHT_3+ADC10IE+REFON+ADC10ON+REF2_5V; 
TACCR0=30; //延时等待参考稳定 
TACCTL0 |=CCIE; //CCR0 中断使能 
TACTL=TACLR+MC_1+TASSEL_2; //TA 增计数,时钟源为smclk 
_BIS_SR(LPM0_bits+GIE); //进入低功耗0,使能总中断,等待参考稳定 
TACCTL0 &=~CCIE; //CCR0 中断禁止 
_BIC_SR(GIE); //关总中断 
ADC10CTL0 |=ENC; //AD 转换使能 
TACCTL1=OUTMOD_4; //CCR1 选输出模式4,当TAR=0 时,输出高电平 
TACTL =TASSEL_2+MC_2; //TA 改为连续计数,smclk 时钟源 
while(1) 

  _BIS_SR(LPM0_bits+GIE); //进入低功耗0,使能总中断,等待10AD 完成 
   
 write_com(0x80+0x00); 
 for(num=0;num<5;num++) 
 { 
   write_data(table[dada[num]]); 
   delay(5); 
 } 
 _BIS_SR(GIE); 








#pragma vector = TIMERA0_VECTOR //TA0 中断服务,用来参考稳定 
__interrupt void ta0_isr(void) 

TACTL=0; //关TA 
_BIC_SR_IRQ(LPM0_bits); //退出低功耗 





#pragma vector = ADC10_VECTOR //ADC10 中断服务 
__interrupt void adc_isr(void) 

_BIC_SR_IRQ(LPM0_bits); 
ad_value=ADC10MEM/409.2; //保存AD 结果 
for(uchar i=0;i<5;i++) 

  dada[i]=ad_value; 
  ad_value=ad_value-dada[i]; 
  ad_value=ad_value*10; 

 _BIC_SR(GIE); 


 

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
中国国产第三代核电实现并网发电