12C5A60S2_ADC

#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);
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值