📄 msp430 adc12多通道序列转换.c
字号:
//************************************************************************************
//* 南京航空航天大学 魏小龙 编写,欢迎大家讨论,交流
//* MSP430F149 ADC12的测试程序---多通道,重复转换
//
// adc12ctl0 15 14 13 12 , 11 10 9 8 , 7 , 6 , 5 , 4 , 3 , 2 , 1 , 0
// SHT1 , SHT0 ,MSC ,25V ,REF ,ADC12 ,ADC12 ,ADC12 ,ENC ,ADC12
// 多次采样转换位 -ON ON OVIE TOVIE SC
// 采样保持定时器1 , 采样保持定时器0 2.5/1.5 溢出中断允许 转换允许 采样/转
// 转换时间溢出中断允许 换位
//
// ADC12CTL1 15 14 13 12 ,11 10 ,9 , 8 , 7 6 5 , 4 3 , 2 1 , 0
// CSSTARTADD , SHS ,SHP ,ISSH , ADC12DIV , ADC12SSEL , CONSEQ , ADC12BUSY
// 定义转换存储寄存器 选择分频因子 转换模式 忙
// 采样输入信号源 转换内核的时钟源
//
// ADC12MCTLX 7 , 6 5 4 , 3 2 1 0
// EOS , SREF , INCH
//
//
//* 这是一个简单的AD12的测试程序,用到了中断
//* 程序被初始化成多通道、重复转换,转换结果在中断中被放在变量Result[0]和Result[1]中
//* 或是放在其它的缓冲区中
//*************************************************************************************
#include <msp430x14x.h>
#define ADCMEM ((int*) 0x0140) // ADC12MEMx 定义
void Init(void);
unsigned int Result[2];
void main(void)
{
Init();
ADC12CTL0 |= 0x01; // 开始转换
LPM0; //进入低功耗状态,等待中断
_NOP();
}
void Init(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer
/* ADC12 Settings: */
P6SEL = 0xFF; // 所有P6口线均为ADC模块使用
ADC12CTL0 &=~ 0x02; // 在进行设置时首先复位ADC的转换使能
ADC12MCTL0 = 0x00; // Ref = AVss, AVcc; 输入通道 = A0
ADC12MCTL1 = 0x8a; // Ref = AVss, AVcc; 输入通道 = A10
ADC12CTL1 = 0x0206 ; // 第一个转换结果被放在ADC12MEM0
// 第二个转换结果被放在ADC12MEM1
// 采样脉冲由采样定时器产生
// 时钟源:内部振荡器
// 时钟分频: 1
// 转换模式: 多通道、重复转换
ADC12CTL0 = SHT0_8+ MSC+ADC12ON ;
ADC12IE = 0x002; //使能转换中断
ADC12CTL0 |= 0x02;
_EINT(); //使能全局中断
}
interrupt [ADC_VECTOR] void ADC12(void) // ADC 中断处理程序
{
unsigned int i;
for(i = 0 ; i < 2 ; i++ )
{
Result[i] = ADCMEM[i] ;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -