LPC2131串口(TX+RX)+TIME0+ADC采样的代码
### LPC2131串口(TX+RX)、TIME0及ADC采样代码解析 #### 一、概述 本文档将深入分析一个基于LPC2131微控制器的示例程序,该程序实现了串口通信(TX+RX)、定时器0 (TIME0) 的配置以及模数转换器 (ADC) 的采样功能。通过本篇文章,读者可以详细了解这些功能的实现原理及编程技巧。 #### 二、LPC2131简介 LPC2131是一款基于ARM7TDMI内核的微控制器,它具有丰富的外设接口,包括多个串行通信接口(如UART、SPI等)、定时器模块和ADC模块等。本案例中的代码主要利用了其中的UART0、TIME0和ADC0这三个模块。 #### 三、代码解析 ##### 1. UART0 配置 UART0是LPC2131中用于实现串行通信的重要模块之一。在本例中,UART0被配置为与外部设备进行数据交换的基础设置如下: ```c void Config_Uart0(void) { int Fdiv; // 设置P0.0和P0.1引脚为UART0的Tx和Rx PINSEL0 = (PINSEL0 & (~0x0f)) | 0x05; // 启用波特率设置 U0LCR = 0x80; // 设置波特率为19200bps Fdiv = (Fpclk / 16) / 19200; U0DLM = Fdiv / 256; U0DLL = Fdiv % 256; // 设置数据位为8位,无奇偶校验,停止位为1位 U0LCR = 0x03; // 开启接收中断,禁用发送中断 U0IER = 0x01; // FIFO模式,接收缓存区长度为1字节 U0FCR = 0x07; } ``` 这里的关键在于波特率的计算以及引脚的配置。 ##### 2. ADC0 配置 ADC0是用于模拟信号到数字信号转换的模块。在本例中,ADC0被用来采集外部模拟信号并将其转换为数字值。 ```c void Config_ADC0(void) { PINSEL1 = (PINSEL1 & (~(0x03 << 28))) | (0x01 << 28); ADCR = (1 << 3) | ((Fpclk / 100000 - 1) << 8) | (0 << 16) | (0 << 17) | (1 << 21) | (0 << 22) | (1 << 24) | (0 << 27); } ``` 此处的配置涉及到ADC的时钟选择、采样频率等参数的设置。 ##### 3. TIME0 配置 TIME0是一个通用定时器,可以被用于各种计时应用。在这个例子中,TIME0被用来控制ADC的采样周期。 ```c T0TC = 0; T0PR = 0; T0MCR = 0x03; T0MR0 = Fpclk / 200; T0TCR = 0x01; ``` 这里通过设置预分频器和比较寄存器来实现每200个系统时钟周期触发一次中断。 ##### 4. 中断服务函数 中断服务函数对于实时系统来说非常重要。本例中涉及到了三个中断服务函数:`IRQ_Timer0`、`IRQ_ADC0` 和 `IRQ_UART0`。 - **IRQ_Timer0**:定时器中断服务函数,用于触发ADC的采样。 - **IRQ_ADC0**:ADC中断服务函数,处理ADC采样后的数据。 - **IRQ_UART0**:UART中断服务函数,处理串口收发的数据。 ##### 5. 主函数 主函数中包含了系统的初始化过程,包括UART0、ADC0和TIME0的配置,以及中断使能。 ```c int main(void) { Config_Uart0(); Config_ADC0(); // 其他初始化代码... // 使能中断 IRQEnable(); // 定时器0的配置... // ADC0的中断配置... // UART0的中断配置... while (1) { // 主循环代码 } } ``` #### 四、总结 通过对上述代码的分析,我们可以看到LPC2131这款微控制器如何利用其内置的UART、TIME和ADC等模块来实现串口通信、定时任务和模数转换等功能。这种类型的程序设计不仅适用于教学目的,也广泛应用于工业控制等领域。通过掌握这些基础知识,开发人员可以更好地设计和实现复杂的嵌入式系统。
#include "config.h"
#define TX0BUFF_LEN 4
#define RX0BUFF_LEN 8
//0x55 if first send
uint8 gTx0Buff[TX0BUFF_LEN]={0xaa,0x00,0x00,0x00};
uint8 gTx0Point=TX0BUFF_LEN;
uint8 gRx0Buff[RX0BUFF_LEN];
uint8 gRx0Point=0;
typedef union dbdw
{
uint8 db[2];
uint16 dw;
}DBDW;
void Config_Uart0( void )
{
int Fdiv;
//P0.0,P0.1 connect to Tx0 Rx0
PINSEL0 = (PINSEL0&(~0x0f))|0x05;
//enable baud rate set
U0LCR = 0x80;
//Set baud rate
Fdiv = ( Fpclk/16 ) / 19200;
U0DLM = Fdiv/256;
U0DLL = Fdiv%256;
//Set DataBit,Parity,StopBit...
- 粉丝: 3
- 资源: 5
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- C#.NET公墓陵园管理系统源码数据库 SQL2008源码类型 WebForm
- 作业这是作业文件这是作业
- 4353_135543959.html
- C#物联订单仓储综合管理系统源码 物联综合管理系统源码数据库 SQL2008源码类型 WebForm
- 2024年最新敏感词库(7万余条)
- java带财务进销存ERP管理系统源码数据库 MySQL源码类型 WebForm
- java制造业MES生产管理系统源码 MES源码数据库 MySQL源码类型 WebForm
- 基于无人机航拍数据实现的三维场景重建python源代码+文档说明+数据集(高分项目)
- 【重磅,更新!】全国2000-2022年植被指数数据(分辨率30m)
- 包含Qt5Core.dll Qt5Gui.dll Qt5Network.dll Qt5Svg.dll Qt5Widgets.dl