PAGE1
PAGE1
ADC模块编程
ADC模块概述
模数转换器(Analog-to-DigitalConverter,ADC)是嵌入式系统中常见的外设,用于将模拟信号转换为数字信号。LPC1100系列单片机集成了一个10位的ADC模块,可以实现多通道模拟信号的采样和转换。该模块支持多种工作模式,包括单次转换、连续转换和扫描模式,以满足不同的应用需求。
ADC模块的主要特点
10位分辨率:每个通道的转换结果为10位数字值。
多通道支持:支持最多8个模拟输入通道。
多种工作模式:单次转换、连续转换和扫描模式。
可配置的采样时间:支持不同的采样时间设置,以适应不同的信号频率。
中断支持:可以配置中断,当转换完成时触发中断。
低功耗:支持多种功耗模式,以节省系统功耗。
ADC模块初始化
在使用ADC模块之前,需要进行初始化配置。初始化主要包括以下几个步骤:
使能ADC模块时钟:确保ADC模块的时钟源已经使能。
配置ADC控制寄存器:设置工作模式、采样时间等参数。
配置ADC通道:选择需要采样的模拟输入通道。
使能ADC模块:启动ADC模块。
使能ADC模块时钟
LPC1100系列单片机的ADC模块需要时钟源才能正常工作。可以通过修改系统时钟配置寄存器来使能ADC模块的时钟。
//使能ADC模块时钟
voidADC_Clock_Enable(void){
LPC_SYSCON-SYSAHBCLKCTRL|=(112);//使能ADC模块时钟
}
配置ADC控制寄存器
ADC控制寄存器(ADCR)用于配置ADC模块的工作模式、采样时间等参数。主要配置项包括:
ADCR[13]START:启动转换。
ADCR[12]BURST:选择Burst模式,即在每个时钟周期自动启动转换。
ADCR[9:7]SEL:选择采样通道。
ADCR[4:0]PDN:使能或禁用ADC模块。
//配置ADC控制寄存器
voidADC_Config(void){
LPC_ADC-ADCR=(112)|(09)|(14);//选择Burst模式,选择通道0,使能ADC
}
配置ADC通道
LPC1100系列单片机的ADC模块支持多个模拟输入通道。可以通过配置ADC通道寄存器来选择需要采样的通道。
//配置ADC通道
voidADC_Channel_Config(uint8_tchannel){
LPC_ADC-ADCR=~(77);//清除通道选择位
LPC_ADC-ADCR|=(channel7);//选择指定通道
}
使能ADC模块
在完成所有配置后,需要使能ADC模块,使其开始工作。
//使能ADC模块
voidADC_Enable(void){
LPC_ADC-ADCR|=(14);//使能ADC模块
}
单次转换模式
单次转换模式是最基本的ADC工作模式,每次启动转换后,ADC模块会进行一次采样并返回结果。可以通过设置ADCR寄存器的START位来启动单次转换。
启动单次转换
//启动单次转换
voidADC_Start_Single_Conversion(uint8_tchannel){
ADC_Channel_Config(channel);//配置通道
LPC_ADC-ADCR|=(113);//启动转换
}
读取转换结果
在启动转换后,可以通过读取ADC数据寄存器(ADDR0)来获取转换结果。
//读取转换结果
uint16_tADC_Read_Result(uint8_tchannel){
while(!(LPC_ADC-ADGDR(131)));//等待转换完成
return(LPC_ADC-ADGDR0x3FF);//返回10位转换结果
}
示例代码
以下是一个完整的示例代码,展示如何在单次转换模式下读取通道0的模拟信号。
#includeLPC11xx.h
//使能ADC模块时钟
voidADC_Clock_Enable(void){
LPC_SYSCON-SYSAHBCLKCTRL|=(112);//使能ADC模块时钟
}
//配置ADC控制寄存器
voidADC_Config(void){
LPC_ADC-ADCR=(09)|(14);//选择通道0,使能ADC
}
//配置ADC通道
voidADC_Channel_Config(