以下是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; }