RS-232串口通信设计_第1页
RS-232串口通信设计_第2页
RS-232串口通信设计_第3页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、课程设计报告题 目: RS-232 串口通信设计 院 (系): 信息科学与工程学院 专业班级:通信工程11学生姓名:詹文魁学 号:指导教师:吴莉老师2014 年 06 月 09 日至 2014 年 6 月 20 日华中科技大学武昌分校制一、设计(调查报告 / 论文)题目RS-232串口通信设计二、设计(调查报告 / 论文)主要内容下述设计内容需由学生个人独立完成: 1理解电路原理图与工作过程; 2掌握 RS-232 电气特性; 3掌握 RS-232 通信原理及串口通信数据格式,并编程完成串行数据的发送、接收和显示; 4能正确处理编程与调试过程中所遇到的问题。三、原始资料1. 通信与电子系统实验

2、指导书;2. CPLD/FPGA 实验箱。四、要求的设计(调查 / 论文)成果 1程序结构合理,语言简洁,格式规范,注释详细; 2. 掌握 RS-232 的工作机制与原理;3. 格式为: 1 位起始位, 8 位数据位, 1 位停止位,无奇偶校验位,波特率设定为300Baud。能与计算机正常通信;4. 按要求完成课程设计报告,格式符合学校规范标准,字数不少于 2000 字。五、进程安排第 1 天 选题,课题讲解;第 2-3 天 课题分析,完成设计方案;第 4-6 天 软件编程;第 7-8 天 软件调试,故障排查;第 9 天 结果验收,评分; 第 10 天 撰写课设报告。六、主要参考资料1 陈曦.

3、 通信与电子系统实验指导书 ,武汉: 华中科技大学武昌分校 .2 谭会生 .EDA技术及应用 , 西安:西安电子科技大学出版社 ,2010.3 潘松,黄继业 .EDA技术与 VHDL,北京 :清华大学出版社 ,2009.指导教师(签名):20 年 月 日目录1. 课程设计的目的 42. 课程设计题目描述和要求 43. 课程设计报告内容 43.1 课题设计方案及基本原理 43.2 软件设计 73.3 问题 144. 总结 155. 参考资料 16附录 程序清单 171. 课程设计的目的:(1)学习 RS-232串口通信数据结构,并编程完成串行数据的接收和显示。(2)掌握 RS-232 的工作机制

4、与原理。( 3)熟练掌握 Quartus2 软件的使用。( 4)了解 CPLD/FPGA实验箱。2. 课程设计题目描述和要求 :( 1)课程设计题目:基于 FPGA的串口通信程序设计。(2)课程设计要求: 下述设计内容需由学生个人独立完成: 1 理解电路原理图与工作过程; 2 掌握 RS-232 电气特性; 3 掌握 RS-232 通信原理及串口通信数据格式,并编程完成串行数据的接收和 显示;4 能正确处理编程与调试过程中所遇到的问题 ;5. 在 FPGA中构造一个异步串行通信控制模块,完成 PC 机发送的接收,并设计 显示模块,完成接收数据的显示(3)要求的设计成果:1 程序结构合理,语言简

5、洁,格式规范,注释详细;2. 掌握 RS-232 的工作机制与原理;3. 格式为: 1 位起始位, 8 位数据位, 1 位停止位,无奇偶校验位,波特率设定为 300Baud。能与计算机正常通信;4. 按要求完成课程设计报告,格式符合学校规范标准,字数不少于 2000 字。3. 课程设计报告内容:3.1 课程设计方案及基本原理:设计方案:利用实验箱上的 MAX232芯片控制通过适当分频 (分频的目的是为了达到要求的波 特率,控制数据传输速率)的串行输入信号,并将其转换为并行信号并通过实验箱上的 数码管的后两位显示从计算机中传输出来的 16 进制数。例如在计算机端输入( FF)则 会在试验箱上看到

6、( 000000FF)的显示图示。基本原理:RS-323C标准是美国 EIA( 电子工业联合会)与 BELL等公司一起开发的 1969 年公 布的通信协议。它适合于数据传输速率在 020000b/s 范围内的通信。这个标准对串行 通信接口的有关问题,如信号线功能、电器特性都作了明确规定。EIA-RS-232C中+3V+15V之间的电平为 0,-3V-15V的电平为 1;与 TTL以高 低电平表示逻辑状态的规定不同。 因此,为了能够同计算机接口或终端的 TTL器件连接, 必须在 EIA-RS-232C与 TTL电路之间进行电平和逻辑关系的变换。 实现这种变换的方法 可用分立元件,也可用集成电路芯

7、片。目前较为广泛地使用集成电路转换器件,如 MC1488、SN75150芯片可完成 TTL电平到 EIA 电平的转换,而 MC1489、SN75154可实现 EIA电平到 TTL电平的转换。 MAX232芯片可完成 TTL EIA 双向电平转换。1. 串口通信 :(1)什么是串口通信: 串口是计算机上一种非常通用设备通信的协议。 大多数计算机包含两个基于 RS232 的串口。串口同时也是仪器仪表设备通用的通信协议;很多 GPIB兼容的设备也带 有 RS-232 口。同时,串口通信协议也可以用于获取远程采集设备的数据。串行接口( Serial port )又称“串口”,主要用于串行式逐位数据传输

8、。常见的有一 般电脑应用的 RS-232(使用 25 针或 9 针连接器)和工业电脑应用的半双 RS-485 与全双工 RS-422。(2)串口接口规格: 串行接口按电气标准及协议来分,包括 RS-232-C、 RS-422、RS485、USB等。RS-232-C 、 RS-422 与 RS-485 标准只对接口的电气特性做出规定,不涉及接插件、 电缆或协议。 USB是近几年发展起来的新型接口标准,主要应用于高速数据传输 领域。(3)串口通信原理: 串口通信的概念非常简单, 串口按位(bit )发送和接收字节。尽管比按字节(byte ) 的并行通信慢, 但是串口可以在使用一根线发送数据的同时用

9、另一根线接收数据。 它很简单并且能够实现远距离通信。比如 IEEE488 定义并行通行状态时,规定设 备线总长不得超过 20 米,并且任意两个设备间的长度不得超过 2 米;而对于串口 而言,长度可达 1200米。典型地,串口用于 ASCII 码字符的传输。通信使用 3根 线完成:(1)地线,(2)发送,(3)接收。由于串口通信是异步的,端口能够在 一根线上发送数据同时在另一根线上接收数据。其他线用于握手,但是不是必须 的。2.RS232芯片(1)电气特性:EIA-RS-232C 对电器特性、逻辑电平和各种信号线功能都作了规定。在 TxD 和 RxD上:逻辑 1(MARK)=-3V-15V 逻辑

10、 0(SPACE)=+3 15V 在 RTS、CTS、 DSR、DTR和 DCD等控制线上: 信号有效(接通, ON状态,正电压) +3V+15V 信号无效(断开, OFF状态,负电压) =-3V-15(2)RS232接口定义:(3)RS232 总线电平转换:(4)RS232数据传输格式:串行通信中,线路空闲时,线路的 TTL 电平总是高,经反向 RS232的电平总是低。 一个数据的开始 RS232线路为高电平,结束时 RS232为低电平。数据总是从低位向高位 一位一位的传输。示波器读数时,左边是数据的低位。例如,对于16 进制数据 55H和aaH,当采用 8 位数据位、 1 位停位传输时位停

11、止位传输时: 55H=01010101B,高低位倒 序后为 10101010B,加入一个起始位 0,一个停止位 1,55H的数据格式为 0101010101 aaH=10101010B,高低位倒序后为 01010101B,加入一个起始位 0,一个停止位 1,aaH 的数据格式为: 0010101011(5)RS232通信过程: I:开始通信时,信号线为空闲(逻辑) , 当检测到由到的跳变时,开始对“接收 时钟”计数。II :当计到 8 个时钟时,对输入信号进行检测,若仍为低电平,则确认这是“起 始位”,而不是干扰信号。III: 接收端检测到起始位后,隔 16个接收时钟,对输入信号检测一次,把对

12、应的值 作为 D0位数据。若为逻辑 1, 作为数据位 1;若为逻辑 0,作为数据位 0。IV:再隔 16个接收时钟,对输入信号检测一次,把对应的值作为D1位数据。 . ,直到全部数据位都输入。V: 检测校验位 P(如果有的话)。VI: 接收到规定的数据位个数和校验位后 ,通信接口电路希望收到停止位 S(逻辑1) ,若此时未收到逻辑说明出现了错误在状态寄存器中置“帧错误”标志若没 若此时未收到逻辑 1,说明出现了错误,在状态寄存器中置“帧错误”标志。若 没有错误,对全部数据位进行奇偶校验,无校验错时,把数据位从移位寄存器 中送数据输入寄存器。若校验错,在状态寄存器中置奇偶错标志。VII: 本幀信

13、息全部接收完把线路上出现的高电平作为空闲位。VIII : 当信号再次变为低时,开始进入下一帧的检测。3.2 软件设计1)Quartus 顶层设计1)Quartus 顶层设计如上图所示,整个顶层设计可以分为 4 个部分,(1)锁相环;作用是将输入的系统如上图所示,整个顶层设计可以分为 4 个部分,(1)锁相环;作用是将输入的系统 时钟信号(系统时钟 50MHZ转) 换为 12MHZ的sysclk 时钟,在进入 RS232前先进行第一次 分频弥补 RS232自身分频不足的特点。(2)核心模块 RS232;作用是将计算机输入的串行 数据转换为并行数据便于给后方的显示模块处理。 ( 3)分频模块;作用

14、是给显示模块提 供所需的时钟,由于显示模块的本质是一个个显示,所以为了能同时显示故将输入频率 调至 1KHz以上让人眼无法一个个识别形成同时显示的效果。 ( 4)显示模块;作用是将 输入的并行信号( 8 位)分成 4 位一组,即两组进行处理后在试验箱的数码管上显示。时钟信号(系统时钟 50MHZ转) 换为 12MHZ的sysclk 时钟,在进入 RS232前先进行第一次分频弥补 RS232自身分频不足的特点2)核心模块 RS232;作用是将计算机输入的串行数据转换为并行数据便于给后方的显示模块处理3)分频模块;作用是给显示模块提供所需的时钟,由于显示模块的本质是一个个显示,所以为了能同时显示故

15、将输入频率调至 1KHz以上让人眼无法一个个识别形成同时显示的效果4)显示模块;作用是将输入的并行信号( 8 位)分成 4 位一组,即两组进行处理后在试验箱的数码管上显示 (1-1) 模块一分析:从上图可以看出: 1.inclk=50MHz 2.DC=50% 3.Ratio=12/25 ,从而可以得出 outclk=50MHz*12/25=24MHz,再通过 D触发器 2 分频后得到 12MHz的输出系统时钟来弥 补 RS232模块分频不足的缺点。(1-2) 模块二分析:上图所示的为 RS232集成模块,经VHDL 编译生成的模块文件。 输入为 sysclk=12MHz ,rxd= 计算机输入

16、的串行数据串, disp为 8位的并行数据段。程序 1:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity rs232 isport(sysclk: in std_logic;rxd: in std_logic;disp: out std_logic_vector(7 downto 0);end rs232;分析:定义实体。输入信号,输入时钟信号为逻辑信号,输出信号 disp 为 8 位矢量信号,低位为 0 高位为 7。architecture behv of rs232 issigna

17、l b: std_logic_vector(9 downto 0);signal r: std_logic_vector(3 downto 0);signal j: std_logic_vector(15 downto 0);signal frxd,gt,gtclr,cclk,gate: std_logic;begingate=gt and cclk;disp(7 downto 0)=b(8 downto 1);将串行数据段的 1-8 位数据位从 b 中取出至于 disp 中。frxd=not rxd;分析:定义机构体。先定义可信号b,r,j 。其中的 b作为数据转移的临时载体。 R,j 分别

18、作为后续程序的计数单元,其中需要注意的是 j 的位数控制,因为当需要控制波特率的时候,由于 输入的 sysclk 是固定的 12MHz的系统时钟信号无法改变, 故能改变的只有 RS232 中的分频系 数,但由于分频的系数的改变,于是 j 作为计数信号其值也将随之改变。s1:process(sysclk,gt)beginif gt=0 then j0);elsif sysclkevent and sysclk=1 thenif j=1001110001000000 then j0);else j=j+1;end if;end if;end process;分析:s1的段码作用是用来计数, 所记数

19、为 RS232的分频系数, 上述代码中的 10011100010 为 40000, 通过计算 12M/1250=9600 ,故可以得知波特率为 9600b/s 。通过改变 j 的值可以很方便的来设 置所需要的波特率。s2:process(j)beginif j=111001 then cclk=1;else cclk=0;end if;end process;分析: s2 的段码作用是当 j 计数到一定数值的时候产生一个脉冲,从而实现分频的作用。其中 j 值 的设定关系到分频的占空比,只需要 j 的值在分频系数之内即可产生分频的效果。s3:process(gate,gtclr)beginif

20、gtclr=1 then r=0000;elsif gateevent and gate=1 thenr=r+1;end if;end process;s4:process(gate,r)beginif r=1010 then gtclr=not gate;else gtclr=0;end if;end process;分析: s3,s4段码的作用是计数从 0-10 ,即计数输入数据段的 10位, 0-起始位, 1-8- 数据位, 9- 终止位。s5:process(gate,rxd,b)beginif gateevent and gate=1 thenb(9 downto 0)=rxd&b(

21、9 downto 1);将 b 的后 9 位并上 rxd 的第一位组合成新的信号 b 。end if;end process;分析: s5 段码的作用是,将 rxd 的输入信号通过移位寄存的方法将 RXD中的数据一一取出移动到信 号 b 中,然后再通过的 b 的移位从而将 rxd 中的数据段完整的转移到信号 b 中保存。s6:process(frxd,gtclr)beginif gtclr=1 then gt=0;elsif frxdevent and frxd=1 then gt=1;end if;end process;end behv;分析: s6 的段码的作用是用于判断起始位, gt

22、做为标志位,当已经确定为开始时,将 gt的值置 1 (1-3) 模块三分析:分析:从上图可以看出其作用是作为分频,将 50MHz 的输入信号先通过 PIN1MHZ 模块将 50MHZ 分为 1Mhz ,再将 1MHZ 的信号输入到下一个分频信号中分为频率为: 1HZ ,488HZ ,1953HZ , 7812HZ , 31250HZ , 125kHZ ,500kHZ 的信号。程序 1:PIN1hzLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY PIN1MHZ ISPORT(CLKIN

23、:IN STD_LOGIC;CLKOUT:OUT STD_LOGIC);END PIN1MHZ;ARCHITECTURE A OF PIN1MHZ ISBEGINPROCESS(CLKIN)VARIABLE CNTTEMP:INTEGER RANGE 0 TO 49;BEGINIF CLKIN=1 AND CLKIN EVENT THENIF CNTTEMP=49 THEN CNTTEMP:=0;ELSEIF CNTTEMP25 THEN CLKOUT=1;ELSE CLKOUT=0;END IF;CNTTEMP:=CNTTEMP+1;END IF ;END IF;END PROCESS;EN

24、D A;分析:上述程序段中可以知道,使用变量 VARIABLE做为计数,从 0-49 刚好为 50 个数, 当小于 25 的时候赋值为 1,其余为 0,使得将 50MHZ处理为 1MHZ。当取值大于或 等于 50 时复位为 0。从而达到分频的目的。程序 2:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity cnt isport(clk:in std_logic;freq1:out std_logic;freq488:out std_logic;freq1953:out std_logi

25、c;freq7812:out std_logic;freq31250:out std_logic;freq125k:out std_logic;freq500k:out std_logic);end cnt;architecture behv of cnt issignal temp:std_logic_vector(19 downto 0);beginprocess(clk)beginif clk event and clk=1 thenif temp=11110100001000111111 then temp=00000000000000000000; elsetemp=temp+1;e

26、nd if;end if;end process;freq1=temp(19);freq488=temp(10);freq1953=temp(8);freq7812=temp(6);freq31250=temp(4);freq125k=temp(2);freq500k=temp(0);end behv;分析:程序 2 的设计思路同样是使用计数,但和程序 1 的计数不完全相同,数由 16进 制表示,4为2进制组成 1位16进制,所以从第 0位开始可以计数 2位,第一位 可以计数 4位,第二位可以计数 8位,依次可以得出计数量为 2的 n+1次方个数, 从而达到同时计数多个的目的从而产生多个时钟信

27、号。(1-4) 模块四分析:码管。其实质作用是由输入的信号( 0-7 计数为 8 的计数信号输入) ,来控制数码管的片选。 而 display 的作用是来实现片选,将 RS232 输出的并行信号的两部分(每部分 4 位组成一个分析:上图为 display 模块的细节图。 rxd 中的信号分为两组输入,分别进入 muxer 的第 0 组和第 1 组。其余的组全部拉低,达到出去最低两位显示,其余为显示全0 的目的, cnt8 为 0-7 的计数,作用是控制 muxer 进入 led程序的顺序,而 led 是为了实现段选,点亮数码管的特定位来 显示输入数值。程序 1.library ieee;use

28、 ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all; entity cnt8 isport(clk:in std_logic;q:out std_logic_vector(2 downto 0); end cnt8;architecture behv of cnt8 issignal temp:std_logic_vector(2 downto 0); beginprocess(clk)beginif clk event and clk=1 then if temp=111 then temp=000;else temp=temp+

29、1;end if;end if;end process; qdoutdoutdoutdoutdoutdoutdoutdoutdoutdoutdoutdoutdoutdoutdoutdoutdout=0000000; end case;end process;end behv;分析:程序 led 是完成段显,将输入的数值 0-15 翻译成对应的数码管编码 (1-5) 接收模块分析:程序 rsSedn 作为接受模块,用于将 232 中发送的数据再次回写到到串口助手的 接收端内!要是程序完全正常的话发送什么就会在接收窗口接收到什么。3.3 问题 :如何真正的实现发送和接受同步, 并且发送的和接收的完

30、全一样?发送和接收波特率怎 么弄?答:接收和显示的已经做出来了,但是发送的4. 总结:参考文献1 通信与电子系统实验指导书 . 武汉:华中科技大学武昌分校 .2 潘松 .EDA技术与 VHDL.北京:清华大学出版社, 2009.3 朱运利.EDA技术应用(第二版). 北京:电子工业出版社, 2007.4 王行.EDA技术入门与提高 . 西安:西安电子科技大学出版社, 2009.5 李莉 . 电子设计自动化( EDA). 北京:中国电力出版社, 2009.附录 程序清单:程序 1: library ieee;use ieee.std_logic_1164.all;use ieee.std_log

31、ic_unsigned.all;entity rs232 isport(sysclk: in std_logic;rxd: in std_logic;disp: out std_logic_vector(7 downto 0) );end rs232; architecture behv of rs232 issignal b: std_logic_vector(9 downto 0);signal r: std_logic_vector(3 downto 0);signal j: std_logic_vector(15 downto 0);signal frxd,gt,gtclr,cclk,

32、gate: std_logic; begingate=gt and cclk;disp(7 downto 0)=b(8 downto 1); frxd=not rxd; s1:process(sysclk,gt)beginif gt=0 then j0);elsif sysclkevent and sysclk=1 thenif j=1001110001000000 then j0); else j=j+1;end if;end if; end process; s2:process(j) beginif j=111001 then cclk=1;else cclk=0;end if; end

33、 process; s3:process(gate,gtclr) beginif gtclr=1 then r=0000;elsif gateevent and gate=1 then r=r+1;end if; end process; s4:process(gate,r) beginif r=1010 then gtclr=not gate;else gtclr=0;end if; end process; s5:process(gate,rxd,b) beginif gateevent and gate=1 then b(9 downto 0)=rxd&b(9 downto 1);end

34、 if; end process; s6:process(frxd,gtclr) beginif gtclr=1 then gt=0;elsif frxdevent and frxd=1 then gt=1;end if;end process; end behv;程序 2:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY PIN1MHZ ISPORT(CLKIN:IN STD_LOGIC;CLKOUT:OUT STD_LOGIC);END PIN1MHZ;ARCHITECTURE A

35、 OF PIN1MHZ ISBEGINPROCESS(CLKIN)VARIABLE CNTTEMP:INTEGER RANGE 0 TO 49; BEGINIF CLKIN=1 AND CLKIN EVENT THENIF CNTTEMP=49 THEN CNTTEMP:=0; ELSEIF CNTTEMP25 THEN CLKOUT=1; ELSE CLKOUT=0;END IF; CNTTEMP:=CNTTEMP+1;END IF ;END IF;END PROCESS;END A;程序 3: library ieee;use ieee.std_logic_1164.all;use iee

36、e.std_logic_unsigned.all;entity cnt is port(clk:in std_logic;freq1:out std_logic;freq488:out std_logic; freq1953:out std_logic;freq7812:out std_logic; freq31250:out std_logic;freq125k:out std_logic;freq500k:out std_logic); end cnt;architecture behv of cnt is signal temp:std_logic_vector(19 downto 0)

37、; beginprocess(clk)beginif clk event and clk=1 thenif temp=11110100001000111111 then temp=00000000000000000000; elsetemp=temp+1;end if;end if; end process; freq1=temp(19); freq488=temp(10); freq1953=temp(8); freq7812=temp(6); freq31250=temp(4); freq125k=temp(2); freq500kdoutdoutdoutdoutdoutdoutdoutd

38、outdoutdoutdoutdoutdoutdoutdoutdoutdout=0000000; end case;end process;end behv;程序 5: library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity cnt8 is port(clk:in std_logic;q:out std_logic_vector(2 downto 0); end cnt8;architecture behv of cnt8 issignal temp:std_logic_vector(2 downto 0);beginprocess(clk)beginif c

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论