#include <reg52.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
sfr P1ASF = 0x9D; //P1 analog special function
sfr ADC_CONTR = 0xBC; //A/D 转换控制寄存器 ADC_POWER SPEED1 SPEED0 ADC_FLAG ADC_START CHS2 CHS1 CHS0 0000,0000
sfr ADC_RES = 0xBD; //A/D 转换结果高8位 ADCV.9 ADCV.8 ADCV.7 ADCV.6 ADCV.5 ADCV.4 ADCV.3 ADCV.2 0000,0000
sfr ADC_RESL = 0xBE; //A/D 转换结果低2位 ADCV.1 ADCV.0 0000,0000
sfr AUXR1 = 0xA2; //Auxiliary Register 1 - PCA_P4 SPI_P4 S2_P4 GF2 ADRJ - DPS 0000,0000
sfr ADC_RES = 0xBD; //A/D 转换结果高8位 ADCV.9 ADCV.8 ADCV.7 ADCV.6 ADCV.5 ADCV.4 ADCV.3 ADCV.2 0000,0000
sfr ADC_RESL = 0xBE; //A/D 转换结果低2位 ADCV.1 ADCV.0 0000,0000
sfr IE = 0xA8; //中断控制寄存器 EA ELVD EADC ES ET1 EX1 ET0 EX0 0x00,0000
sfr IP = 0xB8; //中断优先级低位 PPCA PLVD PADC PS PT1 PX1 PT0 PX0 0000,0000
sfr IPH = 0xB7; //中断优先级高位 PPCAH PLVDH PADCH PSH PT1H PX1H PT0H PX0H 0000,0000
#define ADC_POWER = 0X80;
#define ADC_FLAG = 0X10;
#define ADC_START = 0X08;
#define ADC_SET = 0X60; //设置ADC_CONTR的其他参数
float temp; //定义全局变量用于保存AD结果;
void Delay2ms() //@27.000MHz
{
unsigned char i, j;
_nop_();
_nop_();
i = 53;
j = 131;
do
{
while (--j);
} while (--i);
}
void ADC_Init()
{
P1ASF = 0X01; //允许P1^1 ADC
// AURX1 = 0x00;
ADC_RES = 0X00;
ADC_RESL = 0X00;
ADC_CONTR = ADC_SET|ADC_POWER; //配置ADC转换 上电但不启动
Delay2ms(); //等待输入电压达到稳定;
}
uint ADC_Result()
{
ADC_CONTR = ADC_SET|ADC_POWER|ADC_START; //打开ADC开关
_nop_(); //延时一个机器周期
_nop_(); //延时一个机器周期
_nop_(); //延时一个机器周期
_nop_(); //延时一个机器周期
_nop_(); //延时一个机器周期
_nop_(); //延时一个机器周期
_nop_(); //延时一个机器周期
_nop_(); //延时一个机器周期
while(!(ADC_CONTR&ADC_FLAG)); //等待ADC转换结束;
ADC_CONTR &= ~ADC_FLAG; //关闭ADC标志位;??这里的关ADC为什么不把start关掉??
return (ADC_RES*4+ADC_RESL);
}
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
sfr P1ASF = 0x9D; //P1 analog special function
sfr ADC_CONTR = 0xBC; //A/D 转换控制寄存器 ADC_POWER SPEED1 SPEED0 ADC_FLAG ADC_START CHS2 CHS1 CHS0 0000,0000
sfr ADC_RES = 0xBD; //A/D 转换结果高8位 ADCV.9 ADCV.8 ADCV.7 ADCV.6 ADCV.5 ADCV.4 ADCV.3 ADCV.2 0000,0000
sfr ADC_RESL = 0xBE; //A/D 转换结果低2位 ADCV.1 ADCV.0 0000,0000
sfr AUXR1 = 0xA2; //Auxiliary Register 1 - PCA_P4 SPI_P4 S2_P4 GF2 ADRJ - DPS 0000,0000
sfr ADC_RES = 0xBD; //A/D 转换结果高8位 ADCV.9 ADCV.8 ADCV.7 ADCV.6 ADCV.5 ADCV.4 ADCV.3 ADCV.2 0000,0000
sfr ADC_RESL = 0xBE; //A/D 转换结果低2位 ADCV.1 ADCV.0 0000,0000
sfr IE = 0xA8; //中断控制寄存器 EA ELVD EADC ES ET1 EX1 ET0 EX0 0x00,0000
sfr IP = 0xB8; //中断优先级低位 PPCA PLVD PADC PS PT1 PX1 PT0 PX0 0000,0000
sfr IPH = 0xB7; //中断优先级高位 PPCAH PLVDH PADCH PSH PT1H PX1H PT0H PX0H 0000,0000
#define ADC_POWER = 0X80;
#define ADC_FLAG = 0X10;
#define ADC_START = 0X08;
#define ADC_SET = 0X60; //设置ADC_CONTR的其他参数
float temp; //定义全局变量用于保存AD结果;
void Delay2ms() //@27.000MHz
{
unsigned char i, j;
_nop_();
_nop_();
i = 53;
j = 131;
do
{
while (--j);
} while (--i);
}
void ADC_Init()
{
P1ASF = 0X01; //允许P1^1 ADC
// AURX1 = 0x00;
ADC_RES = 0X00;
ADC_RESL = 0X00;
ADC_CONTR = ADC_SET|ADC_POWER; //配置ADC转换 上电但不启动
Delay2ms(); //等待输入电压达到稳定;
}
uint ADC_Result()
{
ADC_CONTR = ADC_SET|ADC_POWER|ADC_START; //打开ADC开关
_nop_(); //延时一个机器周期
_nop_(); //延时一个机器周期
_nop_(); //延时一个机器周期
_nop_(); //延时一个机器周期
_nop_(); //延时一个机器周期
_nop_(); //延时一个机器周期
_nop_(); //延时一个机器周期
_nop_(); //延时一个机器周期
while(!(ADC_CONTR&ADC_FLAG)); //等待ADC转换结束;
ADC_CONTR &= ~ADC_FLAG; //关闭ADC标志位;??这里的关ADC为什么不把start关掉??
return (ADC_RES*4+ADC_RESL);
}