STC15 片内ADC驱动代码

STC15 片内ADC驱动代码

以下代码从STC-ISP中例程修改而来

INNER_AD.c

#include "INNER_AD.h"

/*----------------------------
读取ADC结果
----------------------------*/
uint Get_ADC_Result(uchar ch)  //channel
{
    ADC_RES  = 0;                   //清除结果寄存器
    ADC_RESL = 0;
	ADC_POWER | ADC_SPEEDHH | CHANNEL | ADC_START;
    ADC_CONTR |= ADC_START;         
    //ADC_START=1时开始AD转换,转换结束ADC_START=0
    _nop_();                        //等待4个NOP
    _nop_();
    _nop_();
    _nop_();
    while (!(ADC_CONTR & ADC_FLAG));    //等待ADC转换完成
    ADC_CONTR &= ~ADC_FLAG;             
    //AD转换结束,ADC_FLAG=1。 需要软件清除ADC_FLAG标志

	//return ADC_RES;
    return (ADC_RES<<2) | ADC_RESL;                 //返回10bit ADC结果
}

/*----------------------------
初始化ADC
----------------------------*/
void Init_ADC()         	//建议AD转换时不改变IO口电平,有利于AD精度
{
    P1ASF = 1 << CHANNEL;           //设置P1.0口为AD口 见手册878页
    ADC_RES  = 0;                   //清除结果寄存器
    ADC_RESL = 0;
	ADC_CONTR = ADC_POWER | ADC_SPEEDHH;
    Delay_ADC_Power_Up(2);                       //ADC上电并延时
}

/*----------------------------
软件延时
----------------------------*/
void Delay_ADC_Power_Up(uint n)
{
    uint x;

    while (n--)
    {
        x = 10000;
        while (x--);
    }
}

INNER_AD.h

#ifndef _INNER_AD_H
#define _INNER_AD_H

#include <STC15.h>
#include <intrins.h>

#define uchar unsigned char 
#define uint unsigned int
	
#define ADC_POWER   0x80            //ADC电源控制位
#define ADC_FLAG    0x10            //ADC完成标志
#define ADC_START   0x08            //ADC起始控制位
#define ADC_SPEEDLL 0x00            //540个时钟
#define ADC_SPEEDL  0x20            //360个时钟
#define ADC_SPEEDH  0x40            //180个时钟
#define ADC_SPEEDHH 0x60            //90个时钟
#define CHANNEL		0x00			//选择通道0,P1.0作为模拟输入

void Init_ADC();
void Delay_ADC_Power_Up(uint n);
uint Get_ADC_Result(uchar ch);

#endif
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值