📄 jiaoliu.c
字号:
#include <msp430x14x.h>
char nADC_Flag;
int nADC_Count;
int ADC_BUF[40];
void Init_CLK(void);
void Init_ADC(void);
void Init_TimerA(void);
void Init_ADC(void)
{
//设置P6.0为模拟输入通道
P6SEL = 0X01;
//设置ENC为0,从而修改ADC12寄存器的值
ADC12CTL0 &= ~(ENC);
//设置参考电压分别为AVSS和AVCC,输入通道为A0
ADC12MCTL0 = INCH_0 + EOS;
//转换的起始地址为:ADCMEM0
ADC12CTL1 = 0X00;
ADC12CTL1 += CSTARTADD_0;
//采样脉冲由采用定时器产生
ADC12CTL1 += SHP;
//转换模式为:多通道、多次转换
ADC12CTL1 += CONSEQ_1;
//内部时钟源
ADC12CTL1 += ADC12SSEL_0;
//时钟分频为1
ADC12CTL1 += ADC12DIV_0;
ADC12CTL0 += 8 * 0x100;
ADC12CTL0 += MSC;
ADC12CTL0 += ADC12ON;
ADC12IE = 0;
//关闭各个通道的转换中断
ADC12IE |= 0X00;
//使能ADC转换
ADC12CTL0 |= ENC;
return;
}
void Init_TimerA(void)
{
// 选择SMCLK,清除TAR
TACTL = TASSEL1 + TACLR;
// 1/8 SMCLK
TACTL += ID1;
TACTL += ID0;
// CCR0 中断允许
CCTL0 = CCIE;
// 时间间隔为 500us
CCR0 = 500;
// 增记数模式
TACTL |= MC0;
return;
}
void Init_CLK(void)
{
unsigned int i;
BCSCTL1 = 0X00; //将寄存器的内容清零
//XT2震荡器开启
//LFTX1工作在低频模式
//ACLK的分频因子为1
do
{
IFG1 &= ~OFIFG; // 清除OSCFault标志
for (i = 0x20; i > 0; i--);
}
while ((IFG1 & OFIFG) == OFIFG); // 如果OSCFault =1
BCSCTL2 = 0X00; //将寄存器的内容清零
BCSCTL2 += SELM1; //MCLK的时钟源为TX2CLK,分频因子为1
BCSCTL2 += SELS; //SMCLK的时钟源为TX2CLK,分频因子为1
}
interrupt [TIMERA0_VECTOR] void TimerA_ISR(void)
{
int results;
// 关闭转换
ADC12CTL0 &= ~ENC;
// 读出转换结果
results = ADC12MEM0;
ADC_BUF[nADC_Count] = results;
// 计数器加1
nADC_Count += 1;
// 采集完40个点
if(nADC_Count == 40)
{
// 设置标志
nADC_Flag = 1;
// 计数器清0
nADC_Count = 0;
}
// 开启转换
ADC12CTL0 |= ENC + ADC12SC;
}
void main(void)
{
int ADC_BUF_Temp[40];
int i;
// 关闭看门狗
WDTCTL = WDTPW + WDTHOLD;
// 关闭中断
_DINT();
// 初始化
Init_CLK();
Init_ADC();
Init_TimerA();
// 打开中断
_EINT();
// 循环处理
for(;;)
{
if(nADC_Flag == 1)
{
nADC_Flag = 0;
for(i = 0;i < 40;i++)
{
ADC_BUF_Temp[i] = ADC_BUF[i];
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -