【2017年整理】串口通信报告

上传人:爱****1 文档编号:942137 上传时间:2017-05-23 格式:DOC 页数:15 大小:1.13MB
返回 下载 相关 举报
【2017年整理】串口通信报告_第1页
第1页 / 共15页
【2017年整理】串口通信报告_第2页
第2页 / 共15页
【2017年整理】串口通信报告_第3页
第3页 / 共15页
【2017年整理】串口通信报告_第4页
第4页 / 共15页
【2017年整理】串口通信报告_第5页
第5页 / 共15页
点击查看更多>>
资源描述

《【2017年整理】串口通信报告》由会员分享,可在线阅读,更多相关《【2017年整理】串口通信报告(15页珍藏版)》请在金锄头文库上搜索。

1、大 学高级可编程逻辑实验报告实验课程名称 :串口通信实验指导老师 : 学 生 姓 名 :(s100103008)(s100101095)(s100131047)2010年 12月 20日串口通信一、实验目的1、熟练掌握 QuartusII的使用2、学习多层次的设计方法,掌握基本的 Verilog语言3、进一步熟悉和掌握高级可编程逻辑器件 FPGA4、用所学知识制作简单的硬件5、通过实验箱实现 PC 机与试验箱的单向通信。二、实验设计思路本试验通过在高级可编程逻辑实验课上所学的 QuartusII 工具,使用Verilog 编程,在将程序下载到试验箱中。设计的要求是基于 FPGA 的 LCD 显

2、示屏控制系统,系统由一片 FPGA 芯片、LCD 显示及接口驱动电路模块组成。采用 Altera 公司的 EP3C10E144C8 FPGA 芯片。PC 上位机与 FPGA 核心板采用RS232 串口通信和 JTAG 下载线。FPGA 核心板的输出通过显示驱动模块点亮LCD 显示屏。串口通信电路模块采用 MAX232 芯片实现电平转换及数据的通信。三、实验原理1、关于 1602LCD 屏的相关信息2、串行通信的原理根据同步方式的不同,串行通信又分为两类,异步通信和同步通信。同步通信时除了需要发送数据线,接收数据线和信号地线以外,还需要一根时钟信号线,时钟信号用于同步数据的发送和接收,传送时是先

3、读取同步位,两设备的同步模式一样时数据开始传送,直到送完数据块,发送大的数据块时要周期性的重发同步字符。同步通信主要是应用于高速数据传送场合。异步通信,数据或字符是一帧一帧地传送,帧定义为一个字符完整的通信格式,也称为帧格式。它用占用一位的起始位表示字符的开始,其后是 5 到 8 位数据,规定低位在前,高位在后;再是奇偶校验位,通过对数据奇偶性的检查,用于判别字符传输的正确性,可选择三种方式即奇校验、偶校验和无校验;最后用停止位表示字符的结束,可以是 1 位、1.5 位或 2 位。从起始位开始到停止位结束构成完整的一帧,由于异步通信每传送一帧都有固定的格式,通信双方只要按约定的帧格式来发送和接

4、受数据,所以硬件结构比同步通信方式简单。此外,它还能利用校验位检测错误,所以这种通信方式应用较为广泛。在单片机中主要采用异步通信方式。串行通信的数据传送速率可以用波特率表示,其意义是每秒传送多少位二进制数。串行通信时,要求通讯双方都采用一个物理接口标准,使不同厂家生产的各种设备可以方便地连接起来进行通讯,目前应用最为广泛的有 RS-232 和 RS-485 两种。RS-232 是美国电子工业协会 EIA(Electronic Industry Association)制定的一种串行物理接口标准,是数据终端设备(DTE)和数据通信设备(DCE)之间的接口标准。该标准规定采用一个 9 引脚的 DB

5、-9 接口,对接口的每个引脚的信号内容加以规定,还对各种信号的电平加以规定。在日常应用中,一般使用的只有 1 到 4 个引脚,RS-232 标准 9 个引脚 DB-9 的引脚定义如下图所示。DB-9 引脚定义图四、软件设计1、软件设计的思想在实现通过串口改变 LCD 液晶显示的字符的功能,在这里我们用分模块的思想来实现其功能,首先创建 RS232 接收模块,接着创建一个 LCD 的显示模块,在液晶显示模块中调用 RS232 接收模块实时的显示从串口接收过来的数据。数据载波检测 CDDSR 数据设备就绪接收数据 RXD发送数据 TXD数据终端就绪 DTR信号地 GNDRTS 请求发送CTS 允许

6、发送RI 振铃指示5432198762、设计流程图开始初始化串口有信息读取串口并存数提取有用信息并显示处理并缓存有输入五、硬件设计1、设计所需要的硬件资源硬件电路总体的设计:硬件电路设计,要结合试验箱上的硬件连接,从而对应连接才可以设计电路。首先确定使用 FPGA 的哪个 I/O 口,硬件设计在实验箱上已经固化的,我们只需要根据硬件的连接相应的改变软件的设计即可。其中串口电平转换单元由于实验箱上没有 MAX232 芯片,故需要设计一个电平转换电路,在实验箱上留有 40 个扩展接口,可以增加扩展模块,在这里就是利用扩展的接口来实现串行数据的接收。2、硬件连接框图实验箱L C D 1 6 0 2数

7、码管单片机人机互动模式P C串口线下载线3、串口电平转换电路MAX232 的引脚 T1IN, T2IN, R1OUT, R2OUT 为接 TTL/CMOS 电平的引脚,引脚 T1OUT, T2OUT, R1IN, R2IN 为接 RS-232 电平的引脚。六、实验步骤1、先建一个工程,将附录三中程序放在该工程下,再调试该程序;2、编译成功后进行引脚设置,之后再进行全程编译;3、将程序下载到实验箱中,运行串口调试程序;4、验证实验结果是否正确。七、实验结果1、实验连接的实物图2、测试是否有信号输入3、初始化4、实现输入显示八、心得体会通过本学期实验课的学习,我们获得了不少的知识,为我们后续的研究

8、生学习生活指引了方向。回顾这学期,我从对 QuartusII不了解到进一步掌握 QuartusII的使用全过程,并进一步懂得了多层次的设计方法,掌握了基本的 Verilog语言的设计方法。在这次串口通信实验中,从开始选题到最后完成,期间遇到了好多问题。首先,在选题的过程中,由于对试验箱上芯片所能实现的功能的不了解,以及对实验难度的要求,所以一直没办法定下来。最后通过组员们的商量,以及向学长学姐们的咨询,最终把题目定为了:串口通信。然后是在定题后的资料收集过程中,由于我们对串口通信也不是很熟悉,所以需要对串口通信进行全新的学习。虽然网上资料很多,不过还是都必须要自己能够看得熟悉,理解了之后才能自

9、己拿来用。最后就是在程序的调试阶段,由于对软件的不熟悉,这个也花了很长的时间来弄。不过最终还是得出了满意的结果。由于自身实力的问题,没能实现实验箱到 PC 机这个方向上的通信,只能简单的通过 PC 机上的串口调试助手对 LCD 上的显示做出修改。这个就是本实验需要改进的地方。通过这次实验设计,让我进一步熟悉和掌握了Verilog语言。除了课本上的知识之外,在人际交流沟通协作方面也有一定的提升,增强了团队协作能力。然后感谢在这次实验设计中提供过帮助的老师、学长学姐以及同学们!附录一引脚配置附录二程序一 串口接收模块module async_receiver(clk, RxD, RxD_data_

10、ready, RxD_data, RxD_endofpacket, RxD_idle);input clk, RxD;output RxD_data_ready; / onc clock pulse when RxD_data is validoutput 7:0 RxD_data;parameter ClkFrequency = 40000000; parameter Baud = 9600;/ We also detect if a gap occurs in the received stream of characters/ That can be useful if multiple

11、 characters are sent in burst/ so that multiple characters can be treated as a packetoutput RxD_endofpacket; / one clock pulse, when no more data is received (RxD_idle is going high)output RxD_idle; / no data is being received/ Baud generator (we use 8 times oversampling)parameter Baud8 = Baud*8;par

12、ameter Baud8GeneratorAccWidth = 16;wire Baud8GeneratorAccWidth:0 Baud8GeneratorInc = (Baud88)/(ClkFrequency7);reg Baud8GeneratorAccWidth:0 Baud8GeneratorAcc;always (posedge clk) Baud8GeneratorAcc = Baud8GeneratorAccBaud8GeneratorAccWidth-1:0 + Baud8GeneratorInc;wire Baud8Tick = Baud8GeneratorAccBaud

13、8GeneratorAccWidth;/reg 1:0 RxD_sync_inv;always (posedge clk) if(Baud8Tick) RxD_sync_inv = RxD_sync_inv0, RxD;/ we invert RxD, so that the idle becomes 0, to prevent a phantom character to be received at startupreg 1:0 RxD_cnt_inv;reg RxD_bit_inv;always (posedge clk)if(Baud8Tick)beginif( RxD_sync_in

14、v1 & RxD_cnt_inv!=2b11) RxD_cnt_inv = RxD_cnt_inv + 2h1;else if(RxD_sync_inv1 & RxD_cnt_inv!=2b00) RxD_cnt_inv = RxD_cnt_inv - 2h1;if(RxD_cnt_inv=2b00) RxD_bit_inv = 1b0;elseif(RxD_cnt_inv=2b11) RxD_bit_inv = 1b1;endreg 3:0 state;reg 3:0 bit_spacing;/ next_bit controls when the data sampling occurs/

15、 depending on how noisy the RxD is, different values might work better/ with a clean connection, values from 8 to 11 workwire next_bit = (bit_spacing=4d10);always (posedge clk)if(state=0)bit_spacing = 4b0000;elseif(Baud8Tick)bit_spacing = bit_spacing2:0 + 4b0001 | bit_spacing3, 3b000;always (posedge clk)if(Baud8Tick)case(state)4b0000: if(RxD_bit_inv) state = 4b1000; / start bit found?4b1000: if(next_bit) state = 4b1001; / bit 04b1001: if(next_bit) state = 4b1010; / bit 14b1010: if(next_bit) state = 4b1011; / bit 24b1011: if(next_bit) state = 4b1100; / bit 34b1100: if(next_bi

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 研究报告 > 综合/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号