以下是AD检测初始化
以下是AD检测初始化
#define AD_START _start = 0; _start = 1; _start = 0//开始AD转换
#define AD_WAITINT 1==_eocb //等待AD转换完成
#define AD_PWOER_OPEN (0<<5) //AD电源模块打开
#define AD_PWOER_CLOSE (1<<5) //AD电源模块关闭
#define AD_DATA_MODE1 (1<<4)
#define AD_DATA_MODE1 (0<<4)
//BIT4 ADRFS= 1:ADC数据高字节是 ADRH的第 3 位--BIT3-BIT0,低字节是 ADRL的第 0 位 BIT7-BIT0
// ADRFS= 0:ADC数据高字节是 ADRH的第 7 位--BIT7-BIT0,低字节是 ADRL的第 4 位 BIT7-BIT4
#define M_AN0 0b00000000//AD通道0
#define M_AN1 0b00000001
#define M_AN2 0b00000010
#define M_AN3 0b00000011
#define M_AN4 0b00000100
#define M_AN5 0b00000101
#define M_AN6 0b00000110
#define M_AN7 0b00000111
//_adcr1
#define AD_IN_125V_SET (1<<7)//内部1.25V连接到AD转换器
#define AD_IN_125V_CLR (0<<7)
#define AD_IN_125V_EN (1<<6)//使能内部1.25V
#define AD_IN_125V_DIS (0<<6)
#define AD_VREAFS_IN (0<<4)//AD参考电压内部vdd
#define AD_VREAFS_OUT (1<<4)//AD参考电压VREF脚
#define AD_FSYS //AD时钟源 Fsys
#define AD_FSYS2 //AD时钟源 Fsys/2
#define AD_FSYS4 //AD时钟源 Fsys/4
#define AD_FSYS8 //AD时钟源 Fsys/8
#define AD_FSYS16 //AD时钟源 Fsys/16
#define AD_FSYS32 //AD时钟源 Fsys/32
//_acerl 不作IO口,做AD口设置
#define AD_ONLY_AN0 (1<<0)//第1个口做A/D输入
#define AD_ONLY_AN1 (1<<1)//第2个口做A/D输入
#define AD_ONLY_AN2 (1<<2)//第3个口做A/D输入
#define AD_ONLY_AN3 (1<<3)//第4个口做A/D输入
#define AD_ONLY_AN4 (1<<4)//第5个口做A/D输入
#define AD_ONLY_AN5 (1<<5)//第6个口做A/D输入
#define AD_ONLY_AN6 (1<<6)//第7个口做A/D输入
#define AD_ONLY_AN7 (1<<7)//第8个口做A/D输入
void AD_init(void)
{
//ADCR0
_adcr1 = 0b00000011; //主要用到BIT4和BIT2~0 其他可以不用管
//Bit 4 0:内部 ADC电源
// 1:VREF引脚
//Bit 2~0 ADCK2, ,, ,ADCK1, ,, ,ADCK0:选择 ADC时钟源
//000:fSYS 001:fSYS/2 010:fSYS/4 011:fSYS/8 100:fSYS/16 101:fSYS/32 110:fSYS/64 :未定义
_adcr0 = M_AN0
//BIT 7 0-1-0 启动
//0-1重置
//BIT 6 0AD结束 1AD进行中
//BIT 5 0开AD电源 1关AD电源
//BIT4 ADRFS= 1:ADC数据高字节是 ADRH的第 3 位--BIT3-BIT0,低字节是 ADRL的第 0 位 BIT7-BIT0
// ADRFS= 0:ADC数据高字节是 ADRH的第 7 位--BIT7-BIT0,低字节是 ADRL的第 4 位 BIT7-BIT4
//BIT3-BIT2 保留
//bit1 bit0 AD通道选择
_acerl| |= 0x01; //设置ADC0通道 ----1为AD输入 0 为io
}
void read_adc(void)
{
AD_START;
while(_eocb == 1);
R_adch=_adrh;
R_adcl=_adrl;
}