串行通信接收接口(LED)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
串行通信接收接口(LED)
基本要求:掌握RS232串口的协议,运用DE2的串口进行接收PC的数据。波特率为9600,8位数据位,无奇偶校验,一个停止位。
硬件验证要求:在PC机通过“串行通信调试助手”软件
发送数据,DE2通过串口接收数据,完成接收数据后在LED上面进行显示。
在完成基本要求的基础上,可以通过拨码开关来选择奇偶校验的类别。
分频模块流程图:
分频模块的程序
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 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 uart_top(CLOCK_50,KEY,UART_RXD,LEDG);
input CLOCK_50;
input [0:0]KEY;
input UART_RXD;
output [7:0]LEDG;
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));
assign LEDG[7:0] =data;
endmodule