×
单片机 > 单片机程序设计 > 详情

lpc1114 adc硬件扫描_单通道_多通道

发布时间:2020-07-08 发布时间:
|

硬件扫描模式与软件控制模式的主要区别是:软件控制模式需要有触发条件,AD通道才转换引脚上的电压值,触发一次转换一次;硬件扫描模式无需触发条件,只要开启硬件扫描模式,转换就会一直循环进行。
软件控制模式只能开启一个通道,硬件扫描模式可以开启多个通道。

1. 单通道

新建一个工程,结构如下图所示:

所有的文件都用《cortex m0 lpc1114 adc start位控制转换》中的。

在adc.c文件中,修改ADC_Init()函数中的CR寄存器配置语句,如下所示:

LPC_ADC->CR = (1<

第3行,即把CR寄存器中的BURST位置1.

ADC_Read()函数修改为如下所示:

uint32_t ADC_Read(uint8_t Channel)
{
   uint32_t adc_value=0;
 
   adc_value = ((LPC_ADC->DR[Channel]>>6)&0x3FF);            
   adc_value = (adc_value*Vref)/1024;
 
   return adc_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  把采样时钟频率设置为2MHz 50/(24+1)*/
                (1<<16);   /* 硬件扫描模式 */

把CR寄存器的bit0~bit7,即SEL位全置1,开启所有通道。

在main.c文件中,加入以下代码:

#include "lpc11xx.h"
#include "uart.h"
#include "adc.h"
 
void delay(void)
{
   uint16_t i,j;
   for(j=0;j<5000;j++)
      for(i=0;i<500;i++);
}
 
int main()
{
   uint8_t adc_value[16];
   uint16_t adc_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个通道的数据都发送到串口。





『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
STM32单片机的复用端口初始化的步骤及方法