⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 task_adc.c

📁 MSC1210AD控制程序
💻 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 + -