串口通信发送接口LED.docx
- 文档编号:27643403
- 上传时间:2023-07-03
- 格式:DOCX
- 页数:13
- 大小:536.19KB
串口通信发送接口LED.docx
《串口通信发送接口LED.docx》由会员分享,可在线阅读,更多相关《串口通信发送接口LED.docx(13页珍藏版)》请在冰豆网上搜索。
串口通信发送接口LED
串口通信发送接口-(LED)
串行通信的特点是:
数据传送按位顺序进行,最少值只需要一根传输线即可完成,节省传输线。
与并行通信相比还有较为显著的优点,传输距离长,可以几米到几千米。
在长距离内串行数据传送速率比并行数据传送速率快,,串行通信的通信时钟频率容易提高,串行通信的干扰能力十分强,其信号间的互相干扰完全可以忽略。
正是由于串行通信的接线少、成本低,因此它在数据采集和控制系统中得到了广泛的应用,产品也多种多样。
串行通信的分类
串行传输中,数据时一位一位按照到达的顺序依次传输的,每位数据的发送的接受都需要时钟来控制,发送端通过发送时钟确定数据位的开始和结束,接受端需要在适当的时间间隔对数据流进行采样来正确的识别数据。
接收端和发送端必须保持步调一致,否则数据传输就会出现差错。
为了解决以上问题,串行通信可采用以下两种方法:
同步通信和异步通信。
⑴同步通信:
同步通信是一种连续串行传送数据的通信方式,一次通信只传送一帧信息。
这里的信息帧与异步通信中的字符帧不同,通常含有若干个数据字符。
它们均由同步字符、数据字符和校验字符(CRC)组成。
其中同步字符位于帧开头,用于确认数据字符的开始。
数据字符在同步字符之后,个数没有限制,由所需传输的数据块长度来决定;校验字符有1到2个,用于接收端对接收到的字符序列进行正确性的校验。
同步通信的缺点是要求发送时钟和接收时钟保持严格的同步。
⑵异步通信:
串行异步通信即RS232通信,是主机与外部硬件设备的常用通讯方式。
可以双向传输。
异步通信中,在异步通行中有两个比较重要的指标:
字符帧格式和波特率。
数据通常以字符或者字节为单位组成字符帧传送。
字符帧由发送端逐帧发送,通过传输线被接收设备逐帧接收。
发送端和接收端可以由各自的时钟来控制数据的发送和接收,这两个时钟源彼此独立,互不同步。
接收端检测到传输线上发送过来的低电平逻辑"0"(即字符帧起始位)时,确定发送端已开始发送数据,每当接收端收到字符帧中的停止位时,就知道一帧字符已经发送完毕。
异步通信中典型的帧格式是:
1位起始位,7位(或8位)数据位,1位奇偶校验位,2位停止位。
串行通信的工作模式
通过单线传输信息是串行数据通信的基础。
三种传送模式:
单工、半双工、全双工。
1、单工形式:
单工形式的数据传送是单向的。
通信双方中,一方固定是发送端,另一方则固定是接收端,使用一根传输线,如图1-2所示。
单工形式
2.半双工形式:
半双工通信使用同一根传输线,即可发送数据又可接受数据,但不能同时发送和接受。
在任何时刻只鞥由其中的一方发送数据,另一方接受数据。
因此半双工形式既可以使用一条数据线,也可以使用两条数据线。
如图1-3所示。
半双工形式
半双工通信中每个端口都需要有一个收/发切换电子开关,通过切换来决定数据向哪个方向传输。
因为有切换,所以会产生时间延迟,信息传输效率较低。
3、全双工形式:
RS-232
全双工数据通信分别由两根可以在两个不同的端点同时发送和接收的传输线进行传送,通信双方都能在同一时刻进行发送和接收操作。
如图1-4所示。
全双工形式
在全双工形式中,每一端都有发送器和接收器,有两条传送线,可在交互式应用和远程监控系统中使用,信息传输效率较高。
UART通信协议
在异步通信中,是以字符为单位传送数据,是从低位到高位逐位传送,一个字符表示一帧信息。
。
串行异步通信协议中字符代码传输格式如图2.3所示,通常UART的一帧数据由四部分组成:
一个起始位S(一般逻辑为“0”),后面是数据长度可变的数据位D0~D7(一般为6位到8位之间可变,数据的低位在前),一个可选的校验位PB(可选奇校验、偶检验或不需要检验),随后是一定长度的停止位P(可选1位、1.5位、或2位),停止位必须为逻辑“1”。
在没有数据被传输时,数据线会一直处于逻辑“1”状态。
由于没有共享时钟信号,因此在进行数据传输之前,收发双方必须协商好一个数据传输的波特率,也就是说,UART接收端应该知道发送端发送数据的波特率(相应的发送端也需要知道接收端的波特率)。
在大多数情况下,发送数据和接受数据的波特率是相同的。
UART发送端按照低位在前,高位在后的顺序移位输出数据。
一旦在初始化过程中,双方协商好了通信的波特率,收发双方的内部时钟都设定在同一波特率(但时钟的相位不同)。
在一个UART包传输开始,接收端将它的内部时钟调整到与发送端同步。
这样接收端就可以在每一位的中心位置对数据位进行采样,保证数据传输的正确性。
设计内容:
串行通信接收接口(LED)
基本要求:
掌握RS232串口的协议,运用DE2的串口进行接收PC的数据。
波特率为9600,8位数据位,无奇偶校验,一个停止位。
硬件验证要求:
在PC机通过“串行通信调试助手”软件
发送数据,DE2通过串口接收数据,完成接收数据后在LED上面进行显示。
在完成基本要求的基础上,可以通过拨码开关来选择奇偶校验的类别。
流程图:
接收模块流程图:
程序:
//分频模块
moduleclk_div(clk_in,nreset,clk_out);
inputclk_in;
inputnreset;
outputclk_out;
regclk_out=0;
reg[8:
0]cnt=0;
parameterT=217;
always@(posedgeclk_inornegedgenreset)
begin
if(nreset==0)
begin
cnt<=0;
clk_out<=0;end
elseif(cnt==T)
begin
clk_out<=~clk_out;
cnt<=0;
end
else
cnt<=cnt+1;
end
endmodule
//接收模块
modulerx(clk,nreset,rxd,data);
inputclk,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@(posedgeclkornegedgenreset)//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)begins<=1;t<=0;end
1:
if(rxd==0)begins<=2;t<=t+1;end
2:
if(t==6)
begin
if(rxd==0)
begins<=3;t<=0;end
else
begins<=1;t<=0;end
end
elset<=t+1;
3:
if(t==11)begindata0[0]<=rxd;t<=0;s<=4;endelset<=t+1;
4:
if(t==11)begindata0[1]<=rxd;t<=0;s<=5;endelset<=t+1;
5:
if(t==11)begindata0[2]<=rxd;t<=0;s<=6;endelset<=t+1;
6:
if(t==11)begindata0[3]<=rxd;t<=0;s<=7;endelset<=t+1;
7:
if(t==11)begindata0[4]<=rxd;t<=0;s<=8;endelset<=t+1;
8:
if(t==11)begindata0[5]<=rxd;t<=0;s<=9;endelset<=t+1;
9:
if(t==11)begindata0[6]<=rxd;t<=0;s<=10;endelset<=t+1;
10:
if(t==11)begindata0[7]<=rxd;t<=0;s<=11;endelset<=t+1;
11:
beginif(t==11)
begin
if(rxd==1)
begint<=0;s<=0;data<=data0;end
else
begint<=0;s<=0;end
end
else
t<=t+1;end
default:
begint<=0;s<=0;end
endcase
end
endmodule
//显示模块
moduleHEX(SW,HEX1,HEX0);
input[7:
0]SW;
outputreg[6:
0]HEX1,HEX0;
parameterseg0=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@(*)
begin
case(SW[7:
4])
4'h0:
HEX1[6:
0]=seg0;
4'h1:
HEX1[6:
0]=seg1;
4'h2:
HEX1[6:
0]=seg2;
4'h3:
HEX1[6:
0]=seg3;
4'h4:
HEX1[6:
0]=seg4;
4'h5:
HEX1[6:
0]=seg5;
4'h6:
HEX1[6:
0]=seg6;
4'h7:
HEX1[6:
0]=seg7;
4'h8:
HEX1[6:
0]=seg8;
4'h9:
HEX1[6:
0]=seg9;
4'ha:
HEX1[6:
0]=sega;
4'hb:
HEX1[6:
0]=segb;
4'hc:
HEX1[6:
0]=segc;
4'hd:
HEX1[6:
0]=segd;
4'he:
HEX1[6:
0]=sege;
4'hf:
HEX1[6:
0]=segf;
default:
HEX1[6:
0]=seg0;
endcase
case(SW[3:
0])
4'h0:
HEX0[6:
0]=seg0;
4'h1:
HEX0[6:
0]=seg1;
4'h2:
HEX0[6:
0]=seg2;
4'h3:
HEX0[6:
0]=seg3;
4'h4:
HEX0[6:
0]=seg4;
4'h5:
HEX0[6:
0]=seg5;
4'h6:
HEX0[6:
0]=seg6;
4'h7:
HEX0[6:
0]=seg7;
4'h8:
HEX0[6:
0]=seg8;
4'h9:
HEX0[6:
0]=seg9;
4'ha:
HEX0[6:
0]=sega;
4'hb:
HEX0[6:
0]=segb;
4'hc:
HEX0[6:
0]=segc;
4'hd:
HEX0[6:
0]=segd;
4'he:
HEX0[6:
0]=sege;
4'hf:
HEX0[6:
0]=segf;
default:
HEX0[6:
0]=seg0;
endcase
end
endmodule
//主模块
modulerx_top(CLOCK_50,KEY,UART_RXD,HEX1,HEX0);
inputCLOCK_50;
inputKEY;
inputUART_RXD;
output[6:
0]HEX1,HEX0;
wireclk_out;
clk_divu1(.clk_in(CLOCK_50),.nreset(KEY),.clk_out(clk_out));
wire[7:
0]data;
rxu2(.clk(clk_out),.nreset(KEY),.rxd(UART_RXD),.data(data));
HEXu3(.SW(data),.HEX1(HEX1),.HEX0(HEX0));
Endmodule
波形图:
实验结果
把实验板上电,下载完成后在PC上打开串口调试助手,实现的功能如图所示,这就是FPGA里实现从PC发送数据,使用的是串口UART协议进行收发数据。
用串口调试助手,如下:
总结
由于理论知识的不足,而且平时没有什么设计经验,开始时手忙脚乱,不知从何入手。
在同学的帮助下,我完成了设计。
在这次的实践过程中我学到了一些除理论知识以外的其他东西,网上学习也非常重要。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 串口 通信 发送 接口 LED