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

lpc1114 MAT触发ADC转换

发布时间:2020-06-02 发布时间:
|

MAT触发转换并不是由外部信号引起的,而是由自身定时器的匹配引起的。一共有四个匹配寄存器可以用于MAT触发转换,它们分别是:CT16B0MAT0、CT16B0MAT1、CT32B0MAT0、CT32B0MAT1。

这里,以CT16B0MAT0为例介绍。

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

文件都用《cortex m0 lpc1114 adc start位控制转换》一节的。

在adc.h文件中,加入TIM16B0_MAT_Init()函数的声明,如下所示:

#ifndef __NXP_ADC_H
#define __NXP_ADC_H
#define  Vref   3300
extern void ADC_Init(uint8_t Channel);   
extern uint32_t ADC_Read(uint8_t Channel); 
extern void TIM16B0_MAT_Init(uint16_t cycle_ms);
#endif

在adc.c文件中,加入TIM16B0_MAT_Init()函数的定义,如下所示:

void TIM16B0_MAT_Init(uint16_t cycle_ms)
{
   LPC_SYSCON->SYSAHBCLKCTRL |= (1<<7);    //使能TIM16B0时钟
   LPC_TMR16B0->TCR = 0x02;            //复位定时器(bit1:写1复位)
   LPC_TMR16B0->PR  = SystemCoreClock/1000-1;          //1ms TC+1
   LPC_TMR16B0->MR0 = cycle_ms;
   LPC_TMR16B0->IR  = 0x01;             //MR0中断复位
   LPC_TMR16B0->MCR = 0x02;    //MR0中断产生时复位TC
   LPC_TMR16B0->EMR = 0x31;      //MR0与PC相等时,MAT0引脚翻转电平
   LPC_TMR16B0->TCR = 0x01;            //启动定时器:TCR[0]=1;
}

这个函数,用于MAT0产生电平翻转,当发生下降沿的时候,ADC开始转换。MR0寄存器用于存储ADC转换的时间。实际上,转换的时间是MR0值的两倍,因为,当MR0与TC匹配的时候,发生电平翻转,发生有低到高的上升沿时,不会发生ADC转换。

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

#include "lpc11xx.h"
#include "uart.h"
#include "adc.h"
int main()
{
   uint16_t adc_value;
   UART_init(9600);
   ADC_Init(7);
   TIM16B0_MAT_Init(500);
   while(1)
   {
      adc_value = ADC_Read(7);
      UART_send_byte(adc_value>>8);
      UART_send_byte(adc_value);
   }
}

打开串口调试助手,选好串口号,波特率调成9600,选择十六进制接收,会看到串口助手上间隔1秒中,发送一次AD7(P1.11)引脚上测到的电压。


关键字:lpc1114  MAT触发  ADC转换 

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

热门文章 更多
关于89C52单片机11.0592M晶振产生115200波特率的方法