166|0

1119

帖子

0

资源

纯净的硅(中级)

msp430g2553的ADC10多通道输入 [复制链接]

本帖最后由 火辣西米秀 于 2020-12-1 22:05 编辑

msp430g2553有8个外部通道可以输入,下面将完成3路输入控制3个LED亮灭的程序。
寄存器说明
msp430g2553的ADC10寄存器
代码说明
在熟悉adc10的几个寄存器后,来看代码
1、ADC10CTL1 = INCH_5+CONSEQ_1;控制寄存器设置了最高的通道和转换模式。
2、ADC10AE0|= BIT5+BIT4+BIT3;输入使能寄存器设置了要输入的引脚。
3、采样次数和存放位置:
ADC10DTC1 = 0x03;设置采样次数
unsigned int a[]={0};
ADC10SA = (unsigned int)a; 存放地址
若p1.5,p1.4,p1.3输入,采样3次,通道序列单次(转换模式)
则a[0]存放p1.5采样结果,则a[1]存放p1.4采样结果,则a[2]存放p1.3采样结果
若p1.5,p1.4,p1.3输入,采样6次,通道序重复(转换模式)
则a[0]存放p1.5采样结果,则a[1]存放p1.4采样结果,则a[2]存放p1.3采样结果
则a[3]存放p1.5采样结果,则a[4]存放p1.4采样结果,则a[5]存放p1.3采样结果
eg:4通道4次重复采样
unsigned int adc[4];
unsigned int adc_temp[16];
for(i=0;i<4;i++)
adc=(adc_temp+adc_temp[i+4]+adc_temp[i+8]+adc_temp[i+12])>>2;除4

#include <msp430.h>
unsigned int a[]={0};
int main(void)
{
  WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT
  ADC10CTL1 = INCH_5+CONSEQ_1;            // A5/A4, single sequence
  ADC10CTL0 = ADC10SHT_1 + MSC + ADC10ON +ADC10IE;
  ADC10DTC1 = 0x03;                         // 2 conversions
  ADC10AE0|= BIT5+BIT4+BIT3;                         // P1.3,2,1 ADC10 option select
  P1DIR |= BIT0+BIT1+BIT2;                            // Set P1.0 output
  for(;;)

   ADC10CTL0 &= ~ENC;
   ADC10SA = (unsigned int)a;                   // Data buffer start
   while (ADC10CTL1 & ADC10BUSY);               // Wait if ADC10 core is active
   ADC10CTL0 |= ENC + ADC10SC;             // Sampling and conversion start
   
   if (a[0] < 0x1FF)
      P1OUT &= ~0x01;                       // Clear P1.0 LED off
    else
      P1OUT |= 0x01;                        // Set P1.0 LED on
       if (a[1] < 0x1FF)
      P1OUT &= ~BIT1;                       // Clear P1.1 LED off
    else
      P1OUT |= BIT1;                        // Set P1.1 LED on
       if (a[2] < 0x1FF)
      P1OUT &= ~BIT2;                       // Clear P1.2 LED off
    else
      P1OUT |= BIT2;                        // Set P1.2 LED on
  }
}

// ADC10 interrupt service routine
#if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__)
#pragma vector=ADC10_VECTOR
__interrupt void ADC10_ISR(void)
#elif defined(__GNUC__)
void __attribute__ ((interrupt(ADC10_VECTOR))) ADC10_ISR (void)
#else
#error Compiler not supported!
#endif

}


回复
您需要登录后才可以回帖 登录 | 注册

最新文章 更多>>
    关闭
    站长推荐上一条 1/5 下一条

    About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

    站点相关: 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

    北京市海淀区知春路23号集成电路设计园量子银座1305 电话:(010)82350740 邮编:100191

    电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2021 EEWORLD.com.cn, Inc. All rights reserved
    快速回复 返回顶部 返回列表