[讨论]
AD采样求助!!!!!!!!!!!!!!!!!!!!!!!!!
求助。。。。
代码如下。。。。。
#include
#include
#include "UartTimer.h"
#define HAL_ADC_CHN_A7 0x07
#define HAL_ADC_REF_AVDD 0x80
#define HAL_ADC_DEC_512 0x30
#define ADC_TO_CELSIUS(ADC_VALUE) ((float)(ADC_VALUE*3.3/4096.0/0.022))
unsigned int value;
uint count=0; //用于定时器计数
int lock=0;
char buf[10];
void Init()
{
T4CTL |= 0x08 ; //开溢出中断
T4IE = 1; //开T4中断
T4CTL |= 0xA0; //不分频
T4CTL &= ~0x03; //自动重装 00->0xff
T4CTL |= 0x10; //启动
ADCIE=0; //AD中断
EA = 1;
}
unsigned int Read_Vddvalue(void)
{
unsigned int value;
ADCIF=0; //清ADC中断标志位
while(!ADCIF); //判断是不是转换完成
value=ADCL>>2; //结果保存于value中(低位)
value|=ADCH<<6; //结果保存于value中(高位)
return(value);
}
/****************************************************************************
* 程序入口函数
****************************************************************************/
void main(void)
{
int nv=0;
P0_7=1;
DISABLE_ALL_INTERRUPTS(); //关闭所有中断
InitUART(); //初始化串口
InitClock(); //初始化时钟
Init();
while(1)
{
if(ADCIF)
{
ADCIF = 0;
value=ADCL>>2; //结果保存于value中(低位)
value|=ADCH<<6;
nv=(int)ADC_TO_CELSIUS(value);
sprintf(buf, "%d", nv);
UartSendString(buf, strlen(buf));
//DelayMS(1);
}
}
}
//定时器T4中断处理函数
#pragma vector = T4_VECTOR
__interrupt void T4_ISR(void)
{
IRCON = 0x00; //清中断标志, 也可由硬件自动完成
if(++count>250)
{
count=0;
ADCCON3=(HAL_ADC_REF_AVDD|HAL_ADC_DEC_512|HAL_ADC_CHN_A7);
}
}
为什么定时器0.25ms启动一次ADC(4KHz)但是实际串口发送数据采样率为十赫兹。。。
即采1Hz信号每周期10个点(excel绘图)