MSP430单片机各种寄存器总结(6)——ADC12

作者:BerenCamlost

本文针对于MSP430单片机原理与应用课程,请在复习时使用。

参考资料:

  1. PPT
  2. MSP430F6638用户手册
  3. 实验教程

本章最新更新日期:2018.12.22

第六章 ADC12

6.1 REFCTL0

REFCTL0

FieldDescription01
REFMSTR参考电压的控制源选择选取ADC12的寄存器控制选择REFCTL控制
REFVSEL参考电压选择默认1.5V
REFON参考电压开关关闭打开
  • 【注】:只用REFMSTR =1时,下面两个才有用

6.2 ADC12CTL0

ADC12CTL0

bitsFieldDescription
15-12ADC12SHT1x设置MEM15~MEM8的采样周期
11-8ADC12SHT0x设置MEM7~MEM0的采样周期
6ADC12REF2_5V设置VREF的值
5ADC12REFON开启REF
4ADC12ON开启ADC12
1ADC12ENC启用转换
0ADC12SC开始转换(自动复位,需要不断置1)
  • 【注】:必须把ADC12ENC置零才可以设置有阴影的寄存器位

6.3 ADC12CTL1

ADC12CTL1

BTISFieldDescription
15-12ADC12CSTARTADDx转换地址控制(MEMx)
11-10ADC12SHSxSHI信号选择
9ADC12SHP采样模式选择,0:脉冲采样;1:扩展采样
4-3ADC12SSELxADC12时钟选择,默认是MODCLK
2-1ADC12CONSEQx转换序列模式选择,默认是单通道单次转换

6.4 ADC12MEMx

采样结果寄存器。

  • 当转换结果写入选定的ADC12MEMx, ADC12IFGx中对应标志位置位,若对应的ADC12IEx 和GIE 置位,将会产生中断请求;当这个寄存器的值被读取之后,IFG自动复位。

6.5 ADC12MCTLx

ADC12MCTLx

FieldDescription
ADC12SREFx选择参考电压来源,默认V+=AVCC,V-=AVSS
ADC12INCHxADC12的输入通道选择

6.6 ADC12IE——中断使能

6.7 ADC12IFG——中断标志位

如果有转换结果放到ADC12MEMx中,自动置位;如果ADC12MEMx中的值被读取,自动复位。也可以通过软件复位。

6.8 ADC12IV——中断矢量寄存器

ADC12IV

  • 【注】和别的IV寄存器不同的是,ADC12IV寄存器在被访问的时候,不会自动复位相应的ADC12IFG位,而是在读取ADC12MEMx的值的时候才会复位ADC12IFG寄存器中的x位。
__even_in_range(ADC12IV,34)//查看ADC12IV的值
  • 8
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
以下是一个MSP430F5529单片机的双道ADC采集程序示例```c #include <msp430.h> void ADC_init() { ADC12CTL0 = ADC12SHT0_8 | ADC12ON; // 设置ADC12CTL0寄存器,选择采样保持时间和打开ADC模块 ADC12CTL1 = ADC12SHP; // 设置ADC12CTL1寄存器,启用自动采样转换 ADC12CTL2 |= ADC12RES_2; // 设置ADC12CTL2寄存器,选择12位的ADC分辨率 ADC12MCTL0 |= ADC12INCH_0; // 设置ADC12MCTL0寄存器,选择通道A0作为输入信号 ADC12MCTL1 |= ADC12INCH_1; // 设置ADC12MCTL1寄存器,选择通道A1作为输入信号 ADC12IE |= ADC12IE0 | ADC12IE1; // 启用ADC中断 P6SEL |= BIT0 | BIT1; // 将P6.0和P6.1引脚设置为模拟输入 } void ADC_start() { ADC12CTL0 |= ADC12ENC | ADC12SC; // 启用ADC转换并开始转换 } #pragma vector=ADC12_VECTOR __interrupt void ADC_ISR(void) { switch(__even_in_range(ADC12IV, 34)) { case 0: break; // No interrupt case 2: break; // ADC overflow case 4: break; // ADC timing overflow case 6: break; // ADC conversion overflow case 8: break; // ADC conversion time overflow case 10: break; // ADC conversion sequence overflow case 12: break; // ADC conversion memory overflow case 14: // 在这里处理ADC转换结果 if (ADC12IFG & ADC12IFG0) { unsigned int result1 = ADC12MEM0; // 读取通道A0的转换结果 // 进行进一步处理或输出 } if (ADC12IFG & ADC12IFG1) { unsigned int result2 = ADC12MEM1; // 读取通道A1的转换结果 // 进行进一步处理或输出 } break; case 16: break; // ADC12IFG0 case 18: break; // ADC12IFG1 case 20: break; // ADC12IFG2 case 22: break; // ADC12IFG3 case 24: break; // ADC12IFG4 case 26: break; // ADC12IFG5 case 28: break; // ADC12IFG6 case 30: break; // ADC12IFG7 case 32: break; // ADC12IFG8 case 34: break; // ADC12IFG9 default: break; } } int main(void) { WDTCTL = WDTPW | WDTHOLD; // 停用看门狗定时器 ADC_init(); // 初始化ADC模块 while(1) { ADC_start(); // 启动ADC转换 __bis_SR_register(LPM0_bits | GIE); // 进入低功耗模式并启用全局中断 __no_operation(); // 空操作,防止编译器优化跳过 } } ``` 这个示例程序初始化了MSP430F5529单片机ADC模块,并设置了通道A0和A1作为模拟输入。在主循环中,它启动了ADC转换,并进入低功耗模式。当ADC转换完成时,中断服务程序将被触发,在其中可以处理ADC转换结果。 请注意,这只是一个基本的示例程序,你可能需要根据你的具体需求进行进一步的配置和处理。确保根据需要修改代码,并参考MSP430F5529的数据手册和相关参考资料以获取更多详细信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值