串行通信接收接口(数码管)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

串行通信接收接口(数码管)

基本要求:掌握RS232串口的协议,运用DE2的串口进行接收PC的数据。波特率为9600,8位数据位,无奇偶校验,一个停止位。

硬件验证要求:在PC机通过“串行通信调试助手”软件

发送数据,DE2通过串口接收数据,完成接收数据后在数码管上面进行显示。

在完成基本要求的基础上,可以通过拨码开关来选择奇偶校验的类别。

程序代码:

(一)顶层列化程序

module rx_top(CLOCK_50,KEY,UART_RXD,HEX1,HEX0);

input CLOCK_50;

input [0:0]KEY;

input UART_RXD;

output [6:0]HEX1,HEX0;

wire clk_out;

clk_div u1 (.clk_in(CLOCK_50),.nreset(KEY[0]),.clk_out(clk_out));

wire [7:0]data;

rx u2 (.clk(clk_out),.nreset(KEY[0]),.rxd(UART_RXD),.data(data));

HEX u3 (.SW(data),.HEX1(HEX1),.HEX0(HEX0));

Endmodule

(2)接收模块代码

module rx(clk,nreset,rxd,data);

input clk,rxd,nreset; //clk=0.1152MHz

output [7:0] data;

reg [3:0] t;

reg [3:0] s;

reg [7:0] data0;

reg [7:0] data;

always @(posedge clk or negedge nreset ) //baud=9600hz

if(nreset ==0)

begin

data <= 8'h00;

s <= 0;

t <= 0;

data0 <= 8'h00;

end

else

begin

case(s)

0:if(rxd==1)begin s<=1;t<=0;end

1:if(rxd==0)begin s<=2;t<=t+1;end

2:if(t==6)

begin

if(rxd==0)

begin s<=3;t<=0;end

else

begin s<=1;t<=0; end

end

else t<=t+1;

3:if(t==11) begin data0[0]<=rxd;t<=0;s<=4;end else t<=t+1;

4:if(t==11) begin data0[1]<=rxd;t<=0;s<=5;end else t<=t+1;

5:if(t==11) begin data0[2]<=rxd;t<=0;s<=6;end else t<=t+1;

6:if(t==11) begin data0[3]<=rxd;t<=0;s<=7;end else t<=t+1;

7:if(t==11) begin data0[4]<=rxd;t<=0;s<=8;end else t<=t+1;

8:if(t==11) begin data0[5]<=rxd;t<=0;s<=9;end else t<=t+1;

9:if(t==11) begin data0[6]<=rxd;t<=0;s<=10;end else t<=t+1;

10:if(t==11) begin data0[7]<=rxd;t<=0;s<=11;end else t<=t+1;

11: begin if(t==11)

begin

if(rxd==1)

begin t<=0;s<=0; data<=data0;end

else

begin t<=0;s<=0;end

end

else

t<=t+1; end

default:begin t<=0;s<=0;end

endcase

end

endmodule

分频模块:

module clk_div (clk_in,nreset,clk_out);

input clk_in;

input nreset;

output clk_out;

reg clk_out=0;

reg [8:0]cnt=0;

parameter T = 217;

always @(posedge clk_in or negedge nreset)

begin

if(nreset == 0)

begin

cnt <= 0;

clk_out <= 0;

end

else if(cnt == T)

begin

clk_out <= ~clk_out;

cnt <=0;

end

else

cnt<=cnt+1;

end

endmodule

数码管显示模块

module HEX(SW,HEX1,HEX0);

input [7:0]SW;

output reg[6:0]HEX1,HEX0;

parameter seg0 = 7'b1000000,

seg1 = 7'b1111001,

seg2 = 7'b0100100,

seg3 = 7'b0110000,

seg4 = 7'b0011001,

seg5 = 7'b0010010,

seg6 = 7'b0000010,

seg7 = 7'b1111000,

seg8 = 7'b0000000,

seg9 = 7'b0010000,

sega = 7'b0001000,

segb = 7'b0000011,

segc = 7'b1000110,

segd = 7'b0100001,

sege = 7'b0000110,

segf = 7'b0001110;

always @(*)

case(SW[3:0])

相关文档
最新文档