- 打卡等级:初来乍到
- 打卡总天数:6
- 最近打卡:2025-04-29 08:53:52
已绑定手机
注册会员
- 积分
- 144
|
#include "ADC.h"
//========================================================================
// 函数: void ADC_Inilize(ADC_InitTypeDef *ADCx)
// 描述: ADC初始化程序.
// 参数: ADCx: 结构参数,请参考adc.h里的定义.
// 返回: none.
// 版本: V1.0, 2012-10-22
//========================================================================
void ADC_Inilize(ADC_InitTypeDef *ADCx)
{
P1ASF = ADCx->ADC_Px;
ADC_CONTR = (ADC_CONTR & ~ADC_90T) | ADCx->ADC_Speed;
if (ADCx->ADC_Power == ENABLE)
ADC_CONTR |= 0x80;
else
ADC_CONTR &= 0x7F;
if (ADCx->ADC_AdjResult == ADC_RES_H2L8)
PCON2 |= (1 << 5); // 10位AD结果的高2位放ADC_RES的低2位,低8位在ADC_RESL。
else
PCON2 &= ~(1 << 5); // 10位AD结果的高8位放ADC_RES,低2位在ADC_RESL的低2位。
if (ADCx->ADC_Interrupt == ENABLE)
EADC = 1; // 中断允许 ENABLE,DISABLE
else
EADC = 0;
if (ADCx->ADC_Polity == PolityHigh)
PADC = 1; // 优先级设置 PolityHigh,PolityLow
else
PADC = 0;
}
//========================================================================
// 函数: void ADC_PowerControl(u8 pwr)
// 描述: ADC电源控制程序.
// 参数: pwr: 电源控制,ENABLE或DISABLE.
// 返回: none.
// 版本: V1.0, 2012-10-22
//========================================================================
void ADC_PowerControl(u8 pwr)
{
if (pwr == ENABLE)
ADC_CONTR |= 0x80;
else
ADC_CONTR &= 0x7f;
}
//========================================================================
// 函数: u16 Get_ADC10bitResult(u8 channel)
// 描述: 查询法读一次ADC结果.
// 参数: channel: 选择要转换的ADC.
// 返回: 10位ADC结果.
// 版本: V1.0, 2012-10-22
//========================================================================
u16 Get_ADC10bitResult(u8 channel) // channel = 0~7
{
u16 adc;
u8 i;
if (channel > ADC_CH7)
return 1024; // 错误,返回1024,调用的程序判断
ADC_RES = 0;
ADC_RESL = 0;
ADC_CONTR = (ADC_CONTR & 0xe0) | ADC_START | channel;
NOP(10); // 对ADC_CONTR操作后要4T之后才能访问
for (i = 0; i < 250; i++) // 超时
{
if (ADC_CONTR & ADC_FLAG)
{
ADC_CONTR &= ~ADC_FLAG;
if (PCON2 & (1 << 5)) // 10位AD结果的高2位放ADC_RES的低2位,低8位在ADC_RESL。
{
adc = (u16)(ADC_RES & 3);
adc = (adc << 8) | ADC_RESL;
}
else // 10位AD结果的高8位放ADC_RES,低2位在ADC_RESL的低2位。
{
adc = (u16)ADC_RES;
adc = (adc << 2) | (ADC_RESL & 3);
}
return adc;
}
}
return 1024; // 错误,返回1024,调用的程序判断
}
//========================================================================
// 函数: void ADC_int(void) interrupt ADC_VECTOR
// 描述: ADC中断函数.
// 参数: none.
// 返回: none.
// 版本: V1.0, 2012-10-22
//========================================================================
void ADC_int(void) interrupt ADC_VECTOR
{
ADC_CONTR &= ~ADC_FLAG;
}
|
|