网站大量收购独家精品文档,联系QQ:2885784924

串口实验按下S3键后串口输出welcome.doc

  1. 1、本文档共9页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
串口实验按下S3键后串口输出welcome

/* 本模块的功能是验证实现和PC机进行基本的串口通信的功能。需要在PC机上安装一个串口调试工具来验证程序的功能。 程序实现了一个收发一帧10个bit(即无奇偶校验位)的串口控制器,10个bit是1位起始位,8个数据位,1个结束位。 串口的波特律由程序中定义的div_par参数决定,更改该参数可以实现相应的波特率。程序当前设定的div_par 的值 是0x145,对应的波特率是9600。用一个8倍波特率的时钟将发送或接受每一位bit的周期时间划分为8个时隙以使通 信同步. 程序的基本工作过程是,按动一个按键key1 控制器向PC的串口发送“welcome, PC机接收后显示验证数据是否正确(串口调试工具设成按ASCII码接受方式). PC可随时向FPGA发送0-F的十六进制数据,FPGA接受后显示在7段数码管上. */ module serial_1(clk,rst,rxd,txd,en,seg_data,key_input); input clk,rst; input rxd;//串行数据接收端 input key_input;//按键输入 output[7:0] en; output[7:0] seg_data; reg[7:0] seg_data; output txd;//串行数据发送端 ////////////////////inner reg//////////////////// reg[15:0] div_reg;//分频计数器,分频值由波特率决定。分频后得到频率8倍波特率的时钟 reg[2:0] div8_tras_reg;//该寄存器的计数值对应发送时当前位于的时隙数 reg[2:0] div8_rec_reg;//该寄存器的计数值对应接收时当前位于的时隙数 reg[3:0] state_tras;//发送状态寄存器 reg[3:0] state_rec;//接受状态寄存器 reg clkbaud_tras;//以波特率为频率的发送使能信号 reg clkbaud_rec;//以波特率为频率的接受使能信号 reg clkbaud8x;//以8倍波特率为频率的时钟,它的作用是将发送或接受一个bit的时钟周期分为8个时隙 reg recstart;//开始发送标志 reg recstart_tmp; reg trasstart;//开始接受标志 reg rxd_reg1;//接收寄存器1 reg rxd_reg2;//接收寄存器2,因为接收数据为异步信号,故用两级缓存 reg txd_reg;//发送寄存器 reg[7:0] rxd_buf;//接受数据缓存 reg[7:0] txd_buf;//发送数据缓存 reg[2:0] send_state;//每次按键给PC发送Welcome字符串,这是发送状态寄存器 reg[19:0] cnt_delay;//延时去抖计数器 reg start_delaycnt;//开始延时计数标志 reg key_entry1,key_entry2;//确定有键按下标志 //////////////////////////////////////////////// parameter div_par=16h145;//分频参数,其值由对应的波特率计算而得,按此参数分频的时钟频率是波倍特率的8 //倍,此处值对应9600的波特率,即分频出的时钟频率是9600*8 (CLK 50M) //////////////////////////////////////////////// assign txd=txd_reg; assign en=0;//7段数码管使能信号赋值 always@(posedge clk ) begin if(!rst) begin cnt_delay=0; start_delaycnt=0; end else if(start_delaycnt) begin if(cnt_delay!=20d800000) begin cnt_delay=cnt_delay+1; end else begin cnt_delay=0; start_delaycnt=0; end end else begin if(!key_inputcnt_delay==0) start_delaycnt=1; end end always@(posedge clk) begin if(!rst) key_entry1=0; else begin if(key_entry2) key_entry1=0; else if(cnt_delay==20d800000) begi

文档评论(0)

cgtk187 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档