资源预览内容
第1页 / 共10页
第2页 / 共10页
第3页 / 共10页
第4页 / 共10页
第5页 / 共10页
第6页 / 共10页
第7页 / 共10页
第8页 / 共10页
第9页 / 共10页
第10页 / 共10页
亲,该文档总共10页全部预览完了,如果喜欢就下载吧!
资源描述
班 级 学号 姓 名 同组人 实验日期 室温 大气压 成 绩 UART0通信实验查询方式一、实验目的通过实验,掌握URAT0中断程序设计,能够理解通过串口0接受上位机发送的字符串,然后送回上位机显示。二、实验设备电脑一台,ARM7实验开发板,AXD仿真软件三、实验内容使用串口接收上位机发送的数据。使能UART0 的串口0进行数据发送/接收,接收采用中断处理方式。程序流程如下图所示: 主程序开始 从UART0接收字节数据 P0.0、P0.1引脚连接UART0: 有新数据 串口初始化:设置波特率;设置数据格式(包括数据位、停止 为和奇偶校验位) 从接收寄存器读取数据 从上位机接收字符串并保存 接收字节数据完成 向串口0发送数据 从UART0接收字节数据 主程序结束 四、实验原理使用查询方式进行通信,CPU必须不停地查询相应的标志位,将会占用CPU很多时间,效率较低;而采用中断方式进行通信,则可以避免这些问题。UxIIR【3:0】=0110:“奇偶错等错或间断”中断,则从线路状态寄存器中读取状态位,分析具体错误原因,处理。UxIIR【3:0】=0100:“接收缓冲寄存器就绪”中断,则从接收缓冲寄存器中读取数据插入接收队列。UxIIR【3:0】=0010:“发送保持寄存器空”中断,则从发送队列中读取数据写到发送保持寄存器中。UxIIR【3:0】=1100:“字符超时指示”中断,进行处理。中断服务处理子程序必须判断是否有尚未处理的中断。在处理完当前的中断源类型之后,不能立即退出服务,而应当继续判断UxIIR存器最低位是否为0。如果为0,则表示还有尚未处理的中断,应当继续根据UxIIR【3:0】判断中断源类型,进行处理;直到UxIIR的最低位为1,最后发送中断结束命令结束中断服务处理程序。1、寄存器描述UART0 包含10 个8 位寄存器,如下表所示。除数锁存访问位(DLAB)位于U0LCR 的bit7,它使能对除数锁存的访问。其中,寄存器U0RBR 与U0THR 是同一地址,但物理上是分开的,读操作时为U0RBR,而写操作时为U0THR;寄存器U0DLL 与U0RBR/U0THR、U0DLM 与U0TER 具有同样的地址,如果要访问U0DLM、U0DLL,除数访问位DLAB 必须为1,若要访问U0RBR/U0THR、U0TER,则除数访问位DLAB 必须为0。U0DLM 和U0DLL 寄存器是波特率发生器的除数锁存器,用于设置合适的串口波特率;U0RBR 为数据接收缓冲,用于读取接收到的数据,若FIFO 使能,串口接收到的数据会压入FIFO 缓冲;U0THR 为发送保存,向此寄存器写入数据时,将会引起串口数据发送,若FIFO 使能,则数据会压入FIFO 缓冲。通过线控制寄存器 U0LCR 设置串口工作模式,而U0FCR 则用于FIFO 使能或复位操作;当接收或发送数据时,会产生相应的状态标志位(U0IER);通过对U0IER 进行设置,可实现串口的发送、接收、出错中断等。U0IER 中的位0 为接收中断使能,位1 为发送中断使能,位2 为线状态中断使能(通信出错中断使能),若不使能相应的中断,则对应的中断标志不会产生,此时可以通过U0LSR 读取串口的状态判断串口操作是否完成或是成功。附表:2、波特率的计算波特率的除数计算如下:rUBRDIV0=( (int)(mclk/16./baud + 0.5) -1 )五、实验操作步骤1、在PC机上运行indows自带的串口通信程序超级终端程序,或者其他串口通信程序。2、通过PC机键盘输入字符,可以看到相应的字符显示在超级终端程序主窗口中,按回车3、通过PC 机键盘输入字符,可以看到相应的字符显示在超级终端程序主窗口中,按回车,所有的字符同时显示出来。如下图所示。六、实验程序(下划线为修改部分)/*Copyright(c)* Guangzou ZLG-MCU Development Co.,LTD.* graduate school* http:/www.zlgmcu.com*-File Info-* File name:main.c* Last modified Date: 2004-09-16* Last Version:1.0* Descriptions:The main() function example template*-* Created by:Chenmingji* Created date:2004-09-16* Version:1.0* Descriptions:The original version*-* Modified by:Chenxibing* Modified date:2005-01-17* Version:* Descriptions:UART0通讯实验,中断方式,使用FIFO。*/#include config.h/* 定义串口模式设置数据结构 */typedef struct UartModeuint8 datab;/ 字长度,5/6/7/8可选uint8 stopb;/ 停止位,1/2可选uint8 parity;/ 奇偶校验位,0-无校验,1-奇校验,2-偶校验UARTMODE;uint8 rcv_buf8;/ UART0数据接收缓冲区volatile uint8 rcv_new;/ 接收新数据标志/* 函数名称 :IRQ_UART0()* 函数功能 :串口0接收中断服务程序* 入口参数 :无* 出口参数 :无*/void _irq IRQ_UART0 (void)uint8 i;if (U0IIR & 0x0F) = 0x04)rcv_new = 1;/ 设置接收到新的数据标志for (i=0; i8; i+)rcv_bufi = U0RBR;/ 读取FIFO的数据,并清除中断VICVectAddr = 0x00;/ 中断处理结束/* 函数名称 :UART0_SendByte()* 函数功能 :向串口0发送1字节数据* 入口参数 :dat要发送的数据* 出口参数 :无*/void UART0_SendByte (uint8 dat)U0THR = dat;/ 要发送的数据/* 函数名称 :UART0_SendBuf()* 函数功能 :向串口发送8字节数据* 入口参数 :无* 出口参数 :无*/void UART0_SendBuf (void)uint8 i;for (i=0; i8; i+)UART0_SendByte(rcv_bufi);while (U0LSR & 0x20) = 0);/ 等待数据发送完毕/* 函数名称 :UART0_Init()* 函数功能 :串口初始化,设置工作模式和波特率。* 入口参数 :baud波特率* set模式设置(UARTMODE数据结构)* 出口参数 :1-初始化成功,
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号