📄 task_adc.c
字号:
//#include <stdio.h>
#include "MSC1210.h"
#include "task_adc.h"
#define LSB 298.0232e-9 //LSB=5.0/2^24,定义满量程为5V时的最小分辨率
#define ALPHA 2664.7 //ALPHA是芯片电压温度曲线的斜率
unsigned int ADC_rocker(unsigned char id)
{
unsigned char i;
unsigned long tmp;
if (0==id) {
ADMUX = 0x08;
}
else if (1==id) {
ADMUX = 0x18;
}
// ADCON1 = 0x71;
for (tmp=0;tmp<4;tmp++) {}
for (i=0;i<10;i++) {
while ((!AIE&0x20));
tmp = bipolar();
}
SSCON = 0;
SSCON = 0xC9;//0xD2;
while (!(AIE&0x40)){}
tmp = ((unsigned long)SUMR3<<24)+((unsigned long)SUMR2<<16)+((unsigned long)SUMR1<<8)+((unsigned long)SUMR0);
SSCON = 0;
// while ((!AIE&0x20));
// tmp = bipolar();
return ((unsigned int)(tmp>>8));
}
/*
void ADcontrol(void)
{
float volts,lr,ave;//temp,resistance,ratio,
int i,k,samples;//decimation,
put_string("MSC1210 ADC Temperature Test\n");
put_string("Calibrating..\n");
for (k=0;k<4;k++) { //校准后等待4个转换周期,直到滤波器稳定
while (!(AIE&0x20)); //数据准备好?
lr = bipolar(); //读取无用结果,抛弃并清除中断
}
samples = 4; //被测电压采样个数
while (1) { //进入主循环
ave = 0; //被测电压值清零
for (i=0;i<samples;i++) {
while (!(AIE&0x20)); //等待下一个新的结果
ave += bipolar()*LSB; //读取结果并转换为电压,进行累加,清除中断标志
}
volts = ave/samples; //求取电压的平均值
tx_hex(ADRESH);
tx_hex(ADRESM);
tx_hex(ADRESL);
putcr();
printf("V=%f\n",volts); //打印结果
}//while
}
*/
/*
void temperature(void)
{
float volts,temp,resistance,lr,ave;//ratio,
int i,k,decimation,samples;
decimation = 1728; //抽取因子
putstr("MSC1210 ADC Temperature Test\n");
USEC = 10; //确定flash的写入时钟=系统时钟/(USEC+1) 11MHZ时钟
ACLK = 9; //fmod=fACLK/64=1105920Hz/64=17280Hz
ADMUX = 0xFF; //温度测试模式
PDCON &= 0xF7; //启动ADC
ADCON0 = 0x30; //内部基准2.5V,缓冲器关,BOD关,PGA=1
ADCON2 = decimation&0xFF; //写入抽取因子低字节
ADCON3 = (decimation>>8)&0x07; //定入抽取因子高字节
ADCON1 = 0x01; //双极性,自动稳定模式,偏移增益自校准
putstr("Calibrating..\n");
for (k=0;k<4;k++) { //校准后等待4个转换周期,直到滤波器稳定
while (!(AIE&0x20)); //数据准备好?
lr = bipolar(); //读取无用结果,抛弃并清除中断
}
samples = 10; //被测电压采样个数
while (1) { //进入主循环
ave = 0; //被测电压值清零
for (i=0;i<samples;i++) {
while (!(AIE&0x20)); //等待下一个新的结果
ave += bipolar()*LSB; //读取结果并转换为电压,进行累加,清除中断标志
}
volts = ave/samples; //求取电压的平均值
temp = ALPHA*volts-282.14; //由芯片电压温度曲线求取温度
printf("V=%f,resistance=%f,Temp=%f degrees C\n",volts,resistance,temp); //打印结果
}//while
}
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -