📄 adc.c
字号:
/**********************************************************
A/D 模拟信号到数字信号转换库
〈1〉寄存器设置
〈2〉ADC初始化
**********************************************************/
#include "44b.h"
#include "ADC.h"
#include "define.h"
extern struct MeasureData measureData;
//------------------------------------------------------------
int GetADCState(void)//返回A/D状态 1表示正在处理,0表处理结束
{
return ((rADCCON>>6)&0x1);
}
//------------------------------------------------------------
void SetNormalOrSleep(int a)//设置ADC正常或省电模式 0正常,1 省电
{
if(a)
{
rADCCON|=(1<<5);//省点
}
else
{
rADCCON&=0x5f;//正常
}
}
//------------------------------------------------------------
void SelectInput(int n)//选择输入通道 0---7
{
rADCCON&=0x63;//对应位清零
rADCCON|=(n<<2);//设置
}
//--------------------------------------------------
void DisableReadedStart(void)//AD转换不通过读启动
{
rADCCON&=0x7d;
}
//------------------------------------------
void EnableReadedStart(void)//AD转换通过读启动
{
rADCCON|=1<<1;
}
//--------------------------------------------
void StartADC(void)//启动ADC 注:若EnableReadedStart()使用,此函数将无效
{
rADCCON|=1;
}
//-----------------------------------------------------------------
void SetPrescaler(int n)//设置ADC预定标器值 (0---255) 分频值=2*(rADCPSR+1)
{
rADCPSR=n;
}
//-----------------------------------------------------------------
int GetConvertData()//读取十位转换数据
{
int i;
rADCCON|=0x1;//start A/D
while(rADCCON&0x1);//等启动成功
while(rADCCON&0x40);//等待转换结束
for(i=0;i<rADCPSR;i++);
return rADCDAT;
}
//-------------------------------------------------------------
//================================================================
void __irq ISR_ADC(void)//ADC转换完成中断
{
rI_ISPC|=1;//清ADC中断标志
///此处代码尚未添加
//MeasureHandler();
}
//======================================================================
void ADCInit(void)//ADC 初始化
{
rCLKCON|=1<<12;//使能ADC模数转换时钟输入
/*SetNormalOrSleep(0);//设置ADC正常模式
SelectInput(0);//选择模拟信号输入通道
SetPrescaler(32);//设置ADC预定标器值 分频值=325*(4+1)
EnableReadedStart();//AD转换通过读启动*/
rADCCON=0x1|(0<<2);
Delay(100);
rADCPSR=0x20;
rINTMSK|=(BIT_ADC);//关ADC中断
//-------set ADC interrupt
pISR_ADC=(int)ISR_ADC;
/*rINTCON|=(1<<2);//non-vectored interrupt
rINTCON&=0x5;//使能IRQ中断
rINTMOD&=0x3fffffe;//ADC中断为IRQ模式*/
//rINTMSK=~(BIT_GLOBAL|BIT_ADC);//开所有中断
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -