📄 fet140_adc12_09.c
字号:
//******************************************************************************
// MSP-FET430P140 Demo - ADC12, 序列转换(非重复) (non-repeated)
//
// Description: This example shows how to perform A/D conversions on a sequence
// of channels. A single sequence of conversions is performed - one conversion
// each on channels A0, A1, A2, and A3. Each conversion uses AVcc and AVss for
// the references. The conversion results are stored in ADC12MEM0, ADC12MEM1,
// ADC12MEM2, and ADC12MEM3 respectively and are moved to 'results[]' upon
// completion of the sequence. Test by applying voltages to pins A0, A1, A2,
// and A3, then setting and running to a break point at the "_BIC..."
// instruction in the ISR. To view the conversion results, open a watch window
// in debugger and view 'results' or view ADC12MEM0, ADC12MEM1, ADC12MEM2, and
// ADC12MEM3 in an ADC12 SFR window.
// Note that a sequence has no restrictions on which channels are converted.
// For example, a valid sequence could be A0, A3, A2, A4, A2, A1, A0, and A7.
// See the MSP430x1xx User's Guide for instructions on using the ADC12.
//
//
// MSP430F149
// -----------------
// | |
// Vin0 -->|P6.0/A0 |
// Vin1 -->|P6.1/A1 |
// Vin2 -->|P6.2/A2 |
// Vin3 -->|P6.3/A3 |
// | |
//
//
// M. Mitchell
// Texas Instruments Inc.
// Feb 2005
// Built with IAR Embedded Workbench Version: 3.21A
//******************************************************************************
#include <msp430x14x.h>
static unsigned int results[4]; // Needs to be global in this example
// Otherwise, the compiler removes it
// because it is not used for anything.
void main(void)
{
WDTCTL = WDTPW+WDTHOLD; // 停止看门狗
P6SEL = 0x0F; // 打开A0-A3 A/D通道输入
ADC12CTL0 = ADC12ON+MSC+SHT0_2; // 开ADC12模块+采样信号由SHI仅首次触发
//+采集定时器分频系数n=4,
ADC12CTL1 = SHP+CONSEQ_1; // 使用采样定时器输出作采集/转换信号SAMPCON
// +序列单次采样模式
ADC12MCTL0 = INCH_0; // 参考电压ref+=AVcc, 输入通道选择为 A0
ADC12MCTL1 = INCH_1; // 参考电压ref+=AVcc, 输入通道选择为 A1
ADC12MCTL2 = INCH_2; // 参考电压ref+=AVcc, 输入通道选择为 A2
ADC12MCTL3 = INCH_3+EOS; // 参考电压ref+=AVcc, 输入通道选择为 A3,+由此通道产生序列结束控制位
ADC12IE = 0x08; // A3通道开中断ADC12IFG.3
ADC12CTL0 |= ENC; // 允许转换
while(1)
{
ADC12CTL0 |= ADC12SC; // 启动转换
_BIS_SR(LPM0_bits + GIE); // 进入LPM0, 开总中断允许
}
}
#pragma vector=ADC_VECTOR
__interrupt void ADC12ISR (void)
{
results[0] = ADC12MEM0; // 移动A0转换结果往全局数组,此操作的同时清除ADC12FIG.0
results[1] = ADC12MEM1; // 移动A1转换结果往全局数组,此操作的同时清除ADC12FIG.1
results[2] = ADC12MEM2; // 移动A2转换结果往全局数组,此操作的同时清除ADC12FIG.2
results[3] = ADC12MEM3; // 移动A3转换结果往全局数组,此操作的同时清除ADC12FIG.3
_BIC_SR_IRQ(LPM0_bits); // 退出LPM0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -