📄 adc12.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 + -