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

📄 adc12.h

📁 移植UCOS于增强型51单片机上
💻 H
字号:
#ifndef ADC_H
#define ADC_H
#include "Globe.H"
//以下为参考电压选择的定义

#define REF_AVCC_AVSS   SREF_0  //AVCC和AVSS作为参考电压
#define REF_VREF_AVSS   SREF_1  //VREF和AVSS作为参考电压
#define REF_VEREF_AVSS  SREF_2  //VEREF和AVSS作为参考电压
#define REF_AVCC_REF-   SREF_4  //AVCC和REF- 作为参考电压
#define REF_VREF_REF-   SREF_5  //VREF和REF- 作为参考电压
#define REF_VEREF_REF-  SREF_6  //VEREF和REF- 作为参考电压

#define AGAIN_ADC()    	{ADC12CTL0 &=(~ENC);_NOP();ADC12CTL0 |= ENC;}//在AD中断必须使用本宏定义否则只能进 行一次AD转换                
#define STOP_ADC()    	ADC12CTL0 &=(~ENC)   // 停止ad转换
#define START_ADC()   	ADC12CTL0 |= ENC     // 开始ad转换 

#define ENABLE_VREF()   ADC12CTL0 |= REFON;        //使能内部参考
#define DISABLE_VREF()  ADC12CTL0 &= (~REFON);     //关闭内部参考

#define ENABLE_ADC()    ADC12CTL0 |= ADC12ON;     // Enable ADC
#define DISABLE_ADC()   ADC12CTL0 &= (~ADC12ON);  // Disable ADC

#define	SAMPLENUM	128		//一个周波里面的采样点数

//校准因子在Flash中的存储地址
#define U1aFuZhiAdd			(SEGMENT1 + 34)		//U1a幅值校正系数的存放地址
#define U1aXianWeiAdd		(U1aFuZhiAdd + 2)		

#define I1aFuZhiAdd			(U1aFuZhiAdd + 24)
#define I1aXianWeiAdd		(U1aFuZhiAdd + 26)

#define U1UpLimitAdd		(U1aFuZhiAdd + 48)		//存放U1电源的上限值地址
#define U1LoLimitAdd		(U1aFuZhiAdd + 50)		//U1电源的下限值地址

#define U2UpLimitAdd		(U1aFuZhiAdd + 54)		//U2上限的地址
#define U2LoLimitAdd		(U1aFuZhiAdd + 56)		//U2下限的地址

#define I1UpLimitAdd		(U1aFuZhiAdd + 52)		//I1上限值的地址
#define I2UpLimitAdd		(U1aFuZhiAdd + 58)		//I2上限值的地址

#define ADINPUTNUM	8

#define UA 0
#define UB 1
#define IA 2
#define IB 3
#define UC 4
#define IC 5
#define PWR 6
#define TMP 7

//以下定义和AD转换有关的数据和结构

typedef struct BUFF
{
	int buff[SAMPLENUM];	//7个外部输入,内部温度传感器直接在AD中断中处理,节省RAM空间
}Buff;
extern Buff adBuff;

//存储运算结果的结构
typedef struct Value
{
	
	union
	{							
		unsigned int 	Value;				//计算后的结果,存放电流或电压值
		unsigned char ValueB[2];
	};
	
}value;
extern value val[ADINPUTNUM];			//最终的计算结果

//校准系数

//存放和AD转换有关的一些变量
typedef struct ADC
{
	unsigned char 	SampCounter;	//采样的点数统计
	unsigned int 	Ch1TBCCR1;		//存放两个采样点之间的时间间隔
	unsigned int 	Ch2TBCCR1;		//存放两个采样点之间的时间间隔
	char			Channel;		//通道选择,0代表频率1通道,1代表频率2通道
	bool			SampleOK;		//采样完成标志
	unsigned int adMoniCount;		//在AD中断里面计数
	
}AdcFlag;

extern AdcFlag		MyAdcFlag;

void InitMyAdcFlag(void);
void AdcTask(void *pdata);
void InitADC12(void);
__interrupt void isrADC12(void);
void GJCheck(char Channel);
double CalcuValue(char channel);	//计算有效值
unsigned long sqrt32(unsigned long x);

#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -