例程5. ADC -- 慕司板IAP15

慕司板的摇杆和锂电池电压的检测都是通过AD实现的。IAP15有8路10位的AD,速度可达300k 次/s。板子上使用了5路:

ADC的初始化和读取函数比较简单(adc.c):

#include "adc.h"
#include "delay.h"
#include <intrins.h>

/*---------------------------- 初始化ADC ----------------------------*/
void ADC_Init()
{
    P1ASF = 0x1f;                   //设置P1.0 1 2 3 4口为AD口
    ADC_RES = 0;                    //清除结果寄存器
    ADC_CONTR = ADC_POWER | ADC_SPEEDH;
    Delay_ms(2);                     //ADC上电延时
}

/*---------------------------- 读取ADC结果 ----------------------------*/
unsigned char ADC_GetResult(unsigned char ch)
{
    ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ch | ADC_START;
    _nop_();                        //等待4个NOP
    _nop_();
    _nop_();
    _nop_();
    while (!(ADC_CONTR & ADC_FLAG));//等待ADC转换完成
    ADC_CONTR &= ~ADC_FLAG;         //Close ADC

    return ADC_RES;                 //返回ADC结果
}

其中,ADC转换速率的宏定义在ADC.h中:

#define ADC_SPEEDLL 0x00 //540个时钟
#define ADC_SPEEDL 0x20 //360个时钟
#define ADC_SPEEDH 0x40 //180个时钟
#define ADC_SPEEDHH 0x60 //90个时钟

注意把P19的跳线帽放到下面,即开启LCD背光。

完整工程参见资源汇总帖.

原作于 2014年10月
CSDN发表于2016年4月
weifengdq

你可能感兴趣的:(ADC,慕司板,IAP15)