功能:通过DE2的拨码开关来选择要发送的数据,当DE2上的某一个独立按键被
按下的时候,数据会通过RS232串口发送到PC。
基本要求:掌握串口通信协议,完成串口数据的发送功能
硬件验证要求:在PC机通过“串行通信接口调试助手”软件接收由DE2发
送过来的数据。
在完成基本要求的基础上,可以通过拨码开关来选择奇偶校验的类别。
Verilog HDL程序代码:
module write(clk,rst,dout_ser,button,txclk); input[7:0]button;
input clk; //时钟信号 input rst; // 复位信号 reg [13:0]q; reg m;
reg[9:0] dout_buf,dout_buf1; //输出缓冲寄存器,加了起停位 output reg dout_ser; //串行数据输出
output reg txclk; //发送数据时钟。发数据取9600的波特率 reg txdone=1'b1; //一个字节数据传输完毕标志 reg[3:0] state_tx=0;
always @(posedge clk) //分频,波特率为9600 if(q==2604) begin
q<=2605; txclk<=1; end
else if(q==5208) begin q<=0;
txclk<=0; end else
q<=q+1;
always@(posedge txclk or posedge rst) begin
if(rst) begin
dout_ser<=1'bz; state_tx<=0; txdone<=1'b0; end
else
begin
dout_buf={1'b1,button[7:0],1'b0}; begin //DE2开关检测 if(m==0) begin
dout_buf1<=dout_buf; m<=m+1; end end
begin
if(dout_buf1-dout_buf!=0) begin m<=0;
state_tx<=0; end end begin
case(state_tx) 0:begin
dout_ser<=dout_buf[0];state_tx<=state_tx+1;end
1:begin
dout_ser<=dout_buf[1];state_tx<=state_tx+1;end
2:begin
dout_ser<=dout_buf[2];state_tx<=state_tx+1;end
3:begin
dout_ser<=dout_buf[3];state_tx<=state_tx+1;end
4:begin
dout_ser<=dout_buf[4];state_tx<=state_tx+1;end
5:begin
dout_ser<=dout_buf[5];state_tx<=state_tx+1;end
6:begin
dout_ser<=dout_buf[6];state_tx<=state_tx+1;end
7:begin
dout_ser<=dout_buf[7];state_tx<=state_tx+1;end
8:begin
dout_ser<=dout_buf[8];state_tx<=state_tx+1;end
9:begin
dout_ser<=dout_buf[9];state_tx<=state_tx+1;end
default dout_ser<=1'bz; endcase end end end endmodule
因篇幅问题不能全部显示,请点此查看更多更全内容