lpc1114 adc硬件扫描_单通道_多通道
扫描二维码
随时随地手机看文章
硬件扫描模式与软件控制模式的主要区别是:软件控制模式需要有触发条件,AD通道才转换引脚上的电压值,触发一次转换一次;硬件扫描模式无需触发条件,只要开启硬件扫描模式,转换就会一直循环进行。
软件控制模式只能开启一个通道,硬件扫描模式可以开启多个通道。
1. 单通道
新建一个工程,结构如下图所示:
所有的文件都用《cortex m0 lpc1114 adc start位控制转换》中的。
在adc.c文件中,修改ADC_Init()函数中的CR寄存器配置语句,如下所示:
LPC_ADC->CR=(1<第3行,即把CR寄存器中的BURST位置1.
ADC_Read()函数修改为如下所示:
uint32_tADC_Read(uint8_tChannel){uint32_tadc_value=0;adc_value=((LPC_ADC->DR[Channel]>>6)&0x3FF);adc_value=(adc_value*Vref)/1024;returnadc_value;}与《cortex m0 lpc1114 adc start位控制转换》的ADC_Read()函数相比,去掉了检测DR寄存器DONE位的语句。
main.c文件中的内容不变。
打开串口调试助手,会看到和《cortex m0 lpc1114 adc start位控制转换》一样的效果。
2. 八个通道全开
在ADC_Init()函数中,将CR寄存器的配置语句改成如下所示:
LPC_ADC->CR=(0xFF)|/*bit7:bit0开启全部通道*/(24<<8)|/*bit15:bit8把采样时钟频率设置为2MHz50/(24+1)*/(1<<16);/*硬件扫描模式*/把CR寄存器的bit0~bit7,即SEL位全置1,开启所有通道。
在main.c文件中,加入以下代码:
#include"lpc11xx.h"#include"uart.h"#include"adc.h"voiddelay(void){uint16_ti,j;for(j=0;j<5000;j++)for(i=0;i<500;i++);}intmain(){uint8_tadc_value[16];uint16_tadc_temp;UART_init(9600);ADC_Init();while(1){delay();adc_temp=ADC_Read(0);adc_value[0]=adc_temp>>8;adc_value[1]=adc_temp;adc_temp=ADC_Read(1);adc_value[2]=adc_temp>>8;adc_value[3]=adc_temp;adc_temp=ADC_Read(2);adc_value[4]=adc_temp>>8;adc_value[5]=adc_temp;adc_temp=ADC_Read(3);adc_value[6]=adc_temp>>8;adc_value[7]=adc_temp;adc_temp=ADC_Read(4);adc_value[8]=adc_temp>>8;adc_value[9]=adc_temp;adc_temp=ADC_Read(5);adc_value[10]=adc_temp>>8;adc_value[11]=adc_temp;adc_temp=ADC_Read(6);adc_value[12]=adc_temp>>8;adc_value[13]=adc_temp;adc_temp=ADC_Read(7);adc_value[14]=adc_temp>>8;adc_value[15]=adc_temp;UART_send(adc_value,16);}}main函数,把8个通道的数据都发送到串口。