想问下下面这串代码中,ADC的采样保持时间怎么算?转换一次的时间又是多少?怎么算?最好能告诉我是由什么控制的
// -----------------
// /|| XIN|-
// || |32kHz
// --|RST XOUT|-
// | |
// | |
// Vin -->|P6.0/A0 |
#include<msp430x54x.h>
#define uchar unsigned char
#define uint unsigned int
uchar T_5S; //AD转换,5秒定时。
uchar AD_Start; //AD_Start=1 允许AD转换,AD
uint Results[32]; //存放ADC的转换结果
uint Average; //AD平均值
void Init_Ta0(void);
void main(void)
{
WDTCTL=WDTPW+WDTHOLD; //设置看门狗控制寄存器,关看门狗
Init_Ta0(); //TA0初始化
T_5S=0; //AD转换,5秒定时。
//----------------------------------------------------------------------
ADC12CTL0 = ADC12SHT02 + ADC12ON; // Sampling time, ADC12 on
ADC12CTL1 = ADC12SHP+ADC12CONSEQ0; // Use sampling timer
ADC12IE = 0x01; // Enable interrupt
ADC12CTL0 |= ADC12ENC; //
P6DIR&=~BIT0; //P6.0输入
P6SEL |= 0x01; // P6.0口第二功能 P6.0 ADC option select
//---------------------------------------------------------------------
_EINT(); //打开总中断
while (1)
{
if(AD_Start==1){ADC12CTL0 |= ADC12SC;} // T_5S每隔5S转换一次AD ,Start sampling/conversion
}
}
/*************************************************
函数(模块)名称:voidInit_Ta0(void)
功能: TA0初始化
本函数(模块)调用的函数(模块)清单:
调用本函数(模块)的函数(模块)清单:
输入参数: void
输出参数: void
函数返回值说明:
使用的资源
其它说明:
*************************************************/
void Init_Ta0(void)
{
TA0CTL=TASSEL_0 + TACLR; //选择辅助时钟ACLK,计数器清除
TA0CCTL0=CCIE; //CCR0中断使能
TA0CCR0=16384; //设置计数器CCR0的初值, 1S
TA0CTL|=MC_0; //减计数模式
}
//------------------中断服务程序---------------------------
#pragma vector=TIMER0_A0_VECTOR
__interrupt void Timer_A(void) //1S中断
{
T_5S++;
if(T_5S>=5){ AD_Start=1;T_5S=0;} //当定时5秒时启动AD
}
#pragma vector=ADC12_VECTOR
__interrupt void ADC12ISR(void)
{
static uchar index = 0;
Results[index++] = ADC12MEM0; // Move results, IFG is cleared
if(index == 9) //采集10次AD
{
uchar i;
Average = 0;
for(i = 0; i < 10; i++) //10个数据
Average += Results
; //结果累加
average=(average/10); //即除以10求平均值 (最后得到的AD值)
index = 0; //清0
}
}
此帖出自小平头技术问答
根据这句话自己计算,看数据手册和程序
一周热门 更多>