异步串口的发送与接收

转载 2011年01月12日 22:24:00

module RS_232_r(clk9600,reset,datain,dataout,valid);
input clk9600,datain,reset;
output reg [7:0] dataout;
output reg valid;

reg[7:0] temp;
reg flag;
reg [3:0] state;

parameter IDLE=4'd0,
          S0=4'd1,
          S1=4'd2,
          S2=4'd3,
          S3=4'd4,
          S4=4'd5,
          S5=4'd6,
          S6=4'd7,
          S7=4'd8,
          stop=4'd9;
always @(posedge clk9600 or negedge reset)
begin
 
if(!reset)
   
begin
      state
<=IDLE;
     
//dataout<=8'b11111111;
      flag<=1'b0;
      valid<=1'b0;
    end
 
else
   
begin
     
case(state)
          IDLE:
             
begin
               
if(datain==1'b0)
                  begin
                   state
<=S0;
                   flag
<=1'b1;
                   valid<=1'b0;
                  end
               
else
                  
begin
                   state
<=IDLE;
                   flag
<=1'b0;
                   valid<=1'b0;
                   end
             
end
          S0:
            
begin
             temp[
0]<=datain;
             state
<=S1;
             flag
<=1'b1;
             valid<=1'b0;
             end
          S1:
            
begin
             temp[
1]<=datain;
             state
<=S2;
             flag
<=1'b1;
             valid<=1'b0;
             end
          S2:
            
begin
             temp[
2]<=datain;
             state
<=S3;
             flag
<=1'b1;
             valid<=1'b0;
             end
          S3:
            
begin
             temp[
3]<=datain;
             state
<=S4;
             flag
<=1'b1;
             valid<=1'b0;
             end  
          S4:
            
begin
             temp[
4]<=datain;
             state
<=S5;
             flag
<=1'b1;
             valid<=1'b0;
             end
          S5:
            
begin
             temp[
5]<=datain;
             state
<=S6;
             flag
<=1'b1;
             valid<=1'b0;
             end
          S6:
            
begin
             temp[
6]<=datain;
             state
<=S7;
             flag
<=1'b1;
             valid<=1'b0;
             end
          S7:
            
begin
             temp[
7]<=datain;
             state
<=stop;
             flag
<=1'b0;
             valid<=1'b1;
             end
         stop:
             
begin
                state
<=IDLE;
                dataout
<=temp;
                flag
<=1'b0;
                valid<=1'b0;
              end             
     
endcase
   
end
end
endmodule

 

 

 

 

 

 

 

module rs232_tx
(
   
input clk,
   
input rst_n,
   
input flag,
   
input [7:0] rx,
   
output reg dataout
);

reg[9:0] temp;
integer index;
reg valid;
always @ (posedge clk or negedge rst_n)
begin
   
if(!rst_n)
   
begin
        dataout
<= 1'b1;
        valid <= 1'b0;
        //temp  <= 10'b1111111111;
    end
   
else
   
begin
       
if(flag)
       
begin
        temp
<= {1'b1,rx[7:0],1'b0};
        valid
<=1'b1;
        index <= 0;
        dataout
<=1'b1;
        end
       
else
           
if(valid==1'b1)
            begin
                dataout
<= temp[index];
               
if(index==9)
                    valid
<=1'b0;
                else
                    valid
<=1'b1;
                index <= index +1'b1;
            end
           
else
                dataout
<=1'b1;
    end
end
endmodule

 

 

在网络中使用IO流进行数据收发

 在Java当中,所有对外设的操作都通过IO流来实现,不管是从磁盘中读取或写入文件,或者是从网络环境中接收或发送数据。IO流的基类有两个InputSstream和OutputStream,它们实现IO...
  • sinboy
  • sinboy
  • 2007年04月13日 17:09
  • 3239

ok6410在Ubuntu系统下实现文件互访

以下是我自己的一点小经验,新手很有用,高手勿喷,欢迎交流! 使用ok6410开发的时候,难免进行程序调试,如何把Ubuntu下编译的代码拷贝到开发板上,当然你可以使用SD卡。但其中的麻烦度可想而知。下...
  • g110802008
  • g110802008
  • 2016年09月02日 09:32
  • 418

TCP的数据发送和接收

TCP通信的单位是一个报文,TCP报文包括报文头部和数据部分,头部最少占用20个字节。运用TCP协议进行通信前需要建立连接(三次握手),数据传输完成后,最后需要断开连接(4次握手)。         ...
  • luozenghui529480823
  • luozenghui529480823
  • 2013年10月25日 14:12
  • 8466

【串口通信】字符串发送与十六进制发送的区别

在使用串口助手调试,TCP/UDP测试等工具时,经常会在主界面上的数据发送区和数据接收区有一个“按十六进制”的选项,在数据发送区,如果不选择此项,在输入框中输入要发送的字母或者数字,点击“发送”时,这...
  • u010154491
  • u010154491
  • 2017年02月28日 13:38
  • 262

TCP/IP摘要

TCP/IP是互联网的基础协议栈,它包括大大小小几十个协议。本篇文章主要涉及到就是HTTP、TCP、IP协议。我们经常学的网络模型是七层或者五层,实际上一般认为一共只有四层就可以了。 ...
  • secretx
  • secretx
  • 2017年01月16日 12:22
  • 504

stm32应用-简单的串口接收与发送程序

与上位机的串口通信是一个很常用的程序。碧海蓝天在刚刚接触stm32芯片时写的第一个简单程序就是串口通信,现在把程序代码甩出来与大家分享。完整的程序哦~一般人我不告诉他  库版本  :ST3.0....
  • h_kingone
  • h_kingone
  • 2016年11月09日 22:18
  • 6524

TCP接收发送

简介:   TCP有客户端和服务端,简称Client和Server。下面就介绍如何创建以及乱码等处理。 1.服务端   1)首先要新建两个类,基类为CAsyncSocket,一个是类作用是监听,另...
  • C_gyl
  • C_gyl
  • 2017年03月27日 09:03
  • 174

51单片机串口的发送与接收

51单片机的串口,是个全双工的串口,发送数据的同时,还可以接收数据。当串行发送完毕后,将在标志位 TI 置 1,同样,当收到了数据后,也会在 RI 置 1。无论 RI 或 TI 出现了 1,只要串口中...
  • baidu_33836580
  • baidu_33836580
  • 2016年01月25日 11:51
  • 506

串口发送与接收字符串是存在很大不同的

发送字符串较简单,我们先来看一段发送字符串的代码: unsigned char buff[]={"i love you/n"}; void send_txt(){ for(i = 0; i {  ...
  • alexyangyuanchao2008
  • alexyangyuanchao2008
  • 2011年06月17日 14:25
  • 9364

labview串口发送与接收数据格式问题

遇到问题应该思考。 当我在网上搜索串口发送数据格式的问题是会得到这样的结果:labview中发送的是ascll,当你在labview中发送0的时候,在串口助手中会得到48,若想发送十六进制加上字符串...
  • u011123091
  • u011123091
  • 2016年10月02日 19:28
  • 6356
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:异步串口的发送与接收
举报原因:
原因补充:

(最多只允许输入30个字)