lpc1114 adc硬件掃描_單通道_多通道
硬件掃描模式與軟件控制模式的主要區(qū)別是:軟件控制模式需要有觸發(fā)條件,AD通道才轉(zhuǎn)換引腳上的電壓值,觸發(fā)一次轉(zhuǎn)換一次;硬件掃描模式無需觸發(fā)條件,只要開啟硬件掃描模式,轉(zhuǎn)換就會(huì)一直循環(huán)進(jìn)行。
軟件控制模式只能開啟一個(gè)通道,硬件掃描模式可以開啟多個(gè)通道。
1. 單通道
新建一個(gè)工程,結(jié)構(gòu)如下圖所示:
所有的文件都用《cortex m0 lpc1114 adc start位控制轉(zhuǎn)換》中的。
在adc.c文件中,修改ADC_Init()函數(shù)中的CR寄存器配置語句,如下所示:
LPC_ADC->CR=(1<第3行,即把CR寄存器中的BURST位置1.
ADC_Read()函數(shù)修改為如下所示:
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位控制轉(zhuǎn)換》的ADC_Read()函數(shù)相比,去掉了檢測(cè)DR寄存器DONE位的語句。
main.c文件中的內(nèi)容不變。
打開串口調(diào)試助手,會(huì)看到和《cortex m0 lpc1114 adc start位控制轉(zhuǎn)換》一樣的效果。
2. 八個(gè)通道全開
在ADC_Init()函數(shù)中,將CR寄存器的配置語句改成如下所示:
LPC_ADC->CR=(0xFF)|/*bit7:bit0開啟全部通道*/(24<<8)|/*bit15:bit8把采樣時(shí)鐘頻率設(shè)置為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函數(shù),把8個(gè)通道的數(shù)據(jù)都發(fā)送到串口。