您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 酒店餐饮 > 基于LPC2131的定时数据采集与通讯程序设计报告
重庆理工大学嵌入式体系结构课程总结题目:基于LPC2131的定时数据采集与通讯程序设计二级学院计算机科学与信息学院专业计算机科学与技术班级学生姓名学号教师时间2015.1.9成绩嵌入式体系结构综合实验要求一、题目:基于LPC2131的定时数据采集与通讯程序设计二、实验内容:(1)使用EasyARM2131板上AIN0和AIN3输入模拟量;(2)定时1mS中断采样,即每通道每秒500次采样,A/D采样结果也采用中断读取;(3)AIN0和AIN1的电压值取500次采样的平均值;(4)采样的电压每秒通过UART串口传送到PC机串口助手显示,显示格式形如:Voltage0is1.987VVoltage3is2.345V,其中的电压值为实际采样值,每秒显示完后换行,同时要求串口发送采用中断。三、实验设备与环境1.实验设备:EasyARM2131开发实验板。2.环境:ADS集成开发环境、PC机串口助手。四、实验原理1.硬件触发转换如果ADCR的BURST位为0且START字段的值包含在010-111之内,当所选管脚(P0.16或P0.22)或定时器匹配信号(MAT0.1、MAT0.3、MAT1.0或者MAT1.1)发生跳变时A/D转换器启动一次转换。也可选择在4个匹配信号中任何一个的指定边沿转换,或者在2个捕获/匹配管教中与任何一个的指定边沿转换。将所选端口的管脚状态或所选的匹配信号ADCR位27相异或所得的结果作为边沿检测逻辑。2.时钟产生时钟分频器(通过它可以得到4.5MHz的转换时钟)在A/D转换器空间保持复位状态,在ADCR的START字段被写入01(立即启动转换)或所选边沿出现在选择的信号上时可立刻启动采样时钟。这个特性可以节省功率,尤其适用于A/D转换器很少使用的场合。3.中断4.精度和数字接收器当A/D转换器用来测量Ain脚的电压时,可以不理会管脚在管脚选择寄存器中的设置,但是通过禁能管脚的数字接收器来选择Ain功能可以提高转换精度。当管脚用作A/D转换器输入时,不论管脚选择何种功能,它都仍可用作A/D输入,A/D输入可随时被读取,管脚的电压变化都从A/D的读取中反映出来。但是,只有选择模拟输入功能,才能读出有效的模拟值。也只有这种情况下,管脚和A/D模块之间的接口电路才有效。其他情况下,执行数字功能所必需的数字逻辑部分将有效,从而影响A/D转换器的正确操作。程序:Startup.s中队FIQ的处理Reset;异常向量表LDRPC,ResetAddr;跳转到复位入口地址LDRPC,UndefinedAddrLDRPC,SWI_Addr;跳转到软件中断入口地址LDRPC,PrefetchAddrLDRPC,DataAbortAddrDCD0xb9205f80LDRPC,[PC,#-0xff0];跳转到向量中断入口地址(向量中断控制器)LDRPC,FIQ_Addr;跳转到快速中断入口地址ResetAddrDCDResetInitUndefinedAddrDCDUndefinedSWI_AddrDCDSoftwareInterruptPrefetchAddrDCDPrefetchAbortNouseDCD0IRQ_AddrDCD0FIQ_AddrDCDFIQ_Handler;快速中断服务程序入口地址FIQ_Handler;快速中断服务程序STMFDSP!,{R0-R3,LR};保护现场HLFIQ_Exception;调用C语言编写的快速中断服务函数LDMFDSP!{R0-R3,LR};恢复现场SUBSPC,LR,#4;中断返回五、实验程序#includeconfig.h/*定义串口模式设置数据结构*/typedefstructUartMode{uint8datab;//字长度,5/6/7/8可选uint8stopb;//停止位,1/2可选uint8parity;//奇偶校验位,0-无校验,1-奇校验,2-偶校验}UARTMODE;uint8rcv_buf[8];//UART0数据接收缓冲区volatileuint8rcv_new;//接收新数据标志/********************************************************************************函数名称:IRQ_UART0()**函数功能:串口0接收中断服务程序**入口参数:无**出口参数:无******************************************************************************/void__irqIRQ_UART0(void){uint8i;if((U0IIR&0x0F)==0x04)rcv_new=1;//设置接收到新的数据标志for(i=0;i8;i++){rcv_buf[i]=U0RBR;//读取FIFO的数据,并清除中断}VICVectAddr=0x00;//中断处理结束}/**********************************************************************************函数名称:UART0_SendByte()**函数功能:向串口0发送1字节数据**入口参数:dat要发送的数据**出口参数:无******************************************************************************/voidUART0_SendByte(uint8dat){U0THR=dat;//要发送的数据}/*****************************************************************************函数名称:UART0_SendBuf()**函数功能:向串口发送8字节数据**入口参数:dat要发送的数据**出口参数:无******************************************************************************/voidUART0_SendBuf(void){uint8i;for(i=0;i8;i++)UART0_SendByte(rcv_buf[i]);while((U0LSR&0x20)==0);//等待数据发送完毕}/********************************************************************************函数名称:UART0_Init()**函数功能:串口初始化,设置工作模式和波特率。**入口参数:baud波特率**set模式设置(UARTMODE数据结构)**出口参数:1-初始化成功,0-初始化失败******************************************************************************/int8UART0_Init(uint32baud,UARTMODEset){uint32bak;/*参数过滤*/if((baud==0)||(baud115200))return(0);if((set.datab5)||(set.datab8))return(0);if((set.stopb==0)||(set.stopb2))return(0);if(set.parity4)return(0);/*设置串口波特率*/U0LCR=0x80;//DLAB=1bak=(Fpclk4)/baud;U0DLM=bak8;U0DLL=bak&0xFF;/*设置串口模式*/bak=set.datab-5;//设置字长if(set.stopb==2)bak|=0x04;//判断是否为2位停止位if(set.parity!=0){set.parity=set.parity-1;bak|=0x08;}bak|=set.parity4;//设置奇偶校验U0LCR=bak;return(1);}/********************************************************************************函数名称:main()**函数功能:从串口UART0接收字符串ABCDEFGH,并发送回上位机显示。**调试说明:需要PC串口显示终端软件如EasyARM.exe。******************************************************************************/intmain(void){UARTMODEset;set.datab=8;set.stopb=1;set.parity=0;rcv_new=0;PINSEL0=0x00000005;//设置I/O连接到UART0UART0_Init(115200,set);//串口初始化U0FCR=0x81;//使能FIFO,并设置触发点为8字节U0IER=0x01;//允许RBR中断,即接收中断IRQEnable();//使能IRQ中断/*使能UART0中断*/VICIntSelect=0x00000000;//设置所有的通道为IRQ中断VICVectCntl0=0x20|0x06;//UART0分配到IRQslot0,即最高优先级VICVectAddr0=(uint32)IRQ_UART0;//设置UART0向量地址VICIntEnable=10x06;//使能UART0中断while(1){if(rcv_new==1){rcv_new=0;UART0_SendBuf();}}return0;}//EndOfFile六、实验运行结果及分析八、心得体会通过本次基于LPC2131的定时数据采集与通讯程序设计实验,让我了解如何使用与设置中断。知道串行通信程序设计的基本原理并且知道如何使用UART串口,如何设置它的发送和接收模块。并且了解了如何使用A/D转换器,设置A/D的工作模式、A/D的通道以及A/D转换时钟。如何去使用ARM的定时器中断、UART串口和A/D转换器去采集电压,以及了解如何使用PC机串口助手进行调试显示采集到的电压。
本文标题:基于LPC2131的定时数据采集与通讯程序设计报告
链接地址:https://www.777doc.com/doc-2534289 .html