精华内容
下载资源
问答
  • C实现并口通信

    2011-10-21 12:34:25
    C语言实现并口通信,并且附带实际电路和详细代码,照此方法进行可以得到合适结果,适合新手上路。
  • 最初并口就是为代替串口来驱动高性能点阵式打印机[1],并口通信有SPP、EPP、ECP三种传输模式,SPP模式是半双工单向传输的,传输速率仅为15KB/S;EPP增强型模式采用双向半双工数据传输,传输速度高达2MB/S;EC
  • 本文介绍了高速率、高精度的18位AD7674与C8051F060之间并口通信的接口电路设计。采用的单片机配置灵活,传输速度快,接口采用并口通信,可实现嵌入式数据采集系统高速数据传输
  • 使用用VC++ 6.0 写的一个并口通信控制步进电机!
  • c#已提供了串口通信组件SerialPort,但是C#并没有提供直接的并口通信组件,只好通过调用API来与并口通信 代码 1 using System; 2 using System.Runtime.InteropServices; 3 namespace LptPrint_test 4 { 5 ///...

    c#已提供了串口通信组件SerialPort,但是C#并没有提供直接的并口通信组件,只好通过调用API来与并口通信

     

    代码
    1 using System;
    2  using System.Runtime.InteropServices;
    3  namespace LptPrint_test
    4 {
    5 /// <summary>
    6 /// LPTControl 的摘要说明。
    7 /// </summary>
    8   public class LPTControl
    9 {
    10 private string LptStr = "lpt1";
    11 public LPTControl(string l_LPT_Str)
    12 {
    13 //
    14 // TODO: 在此处添加构造函数逻辑
    15 //
    16 LptStr = l_LPT_Str;
    17 }
    18 [StructLayout(LayoutKind.Sequential)]
    19 private struct OVERLAPPED
    20 {
    21 int Internal;
    22 int InternalHigh;
    23 int Offset;
    24 int OffSetHigh;
    25 int hEvent;
    26 }
    27 [DllImport("kernel32.dll")]
    28 private static extern int CreateFile(string lpFileName, uint dwDesiredAccess, int dwShareMode, int lpSecurityAttributes, int dwCreationDisposition, int dwFlagsAndAttributes, int hTemplateFile);
    29 [DllImport("kernel32.dll")]
    30 private static extern bool WriteFile(int hFile, byte[] lpBuffer, int nNumberOfBytesToWrite, ref int lpNumberOfBytesWritten, ref OVERLAPPED lpOverlapped);
    31 [DllImport("kernel32.dll")]
    32 private static extern bool CloseHandle(int hObject);
    33 private int iHandle;
    34 public bool Open()
    35 {
    36 iHandle = CreateFile(LptStr, 0x40000000, 0, 0, 3, 0, 0);
    37 if (iHandle != - 1)
    38 {
    39 return true;
    40 }
    41 else
    42 {
    43 return false;
    44 }
    45 }
    46 public bool Write(String Mystring)
    47 {
    48 if (iHandle != - 1)
    49 {
    50 OVERLAPPED x = new OVERLAPPED();
    51 int i = 0;
    52 byte[] mybyte = System.Text.Encoding.Default.GetBytes(Mystring);
    53 bool b = WriteFile(iHandle, mybyte, mybyte.Length, ref i, ref x);
    54 return b;
    55 }
    56 else
    57 {
    58 throw new Exception("不能连接到打印机!");
    59 }
    60 }
    61 public bool Write(byte[] mybyte)
    62 {
    63 if (iHandle != - 1)
    64 {
    65 OVERLAPPED x = new OVERLAPPED();
    66 int i = 0;
    67 WriteFile(iHandle, mybyte, mybyte.Length, ref i, ref x);
    68 return true;
    69 }
    70 else
    71 {
    72 throw new Exception("不能连接到打印机!");
    73 }
    74 }
    75 public bool Close()
    76 {
    77 return CloseHandle(iHandle);
    78 }
    79 }
    80 }
    81
    82

     

     

     

    转载于:https://www.cnblogs.com/kk1230/archive/2009/11/25/1610728.html

    展开全文
  • X86CPU与STM32单片机增强型并口通信,郭一方,周伟,在嵌入式智能控制项目开发中,X86CPU构建的用户操作界面平台如何与基于STM32F103RCT6单片机的嵌入式控制模块实现高速稳定的数据传输?��
  • ARM9与FPGA并口通信的实现

    千次阅读 2017-03-04 16:59:17
    并口通信是最常用基础功能,实现ARM9与FPGA的并口通信有两种方式,一种颇为巧妙,利用SMC(Static Memory Controllor),其中的使能点都通过寄存器可以轻松控制;另一种方式就是通过GPIO来完成。
    

    并口通信是最常用基础功能,实现ARM9与FPGA的并口通信有两种方式,一种颇为巧妙,利用SMC(Static Memory Controllor),其中的使能点都通过寄存器可以轻松控制;另一种方式就是通过GPIO来完成。

    由于我拿到板子硬件的DRAM_CSN0DRAM_WENDRAM_RDN在前期PCB设计时没有充分考虑过SMC可能被使用,故使用接插件上其他引脚进行代替,使用了图1中画圈的三根引脚SPI0_MOSISPI0_SCKSPI0_CS。因为这三根引脚可以复用为GPIO,所以在并口调试中将这三根引脚当作GPIO来使用。

     

    1

     

    2

    3


    1

    SPI功能

    GPIO

    FPGA引脚

    功能

    SPI0_MOSI

    PA1

    W21

    写使能

    SPI0_SCK

    PA2

    W22

    读使能

    SPI0_CS

    PA3

    W20

    片选

     

    硬件连接对应情况如图2、图3和表1所示。到此,你应该已经了解了实现通信需要关注的引脚了吧。

     

    工程步骤:


    1      重设Pin Planner


    根据当前硬件的实际连接情况,对Quartus中的Pin Planner进行更新,将信号i_rd_cpui_wr_cpui_select对应的location改为PIN_W22PIN_W21PIN_W20。如图4所示。


    4

     

    2      PIOA的寄存器组重新初始化


    在最初的驱动程序中包括了对GPIO的初始化,经过试验观察PIO可读寄存器的内容发现寄存器的配置不能满足本任务的完成,使用已有的初始化会干扰到使能信号的操作,于是要对GPIO进行重新初始化,对寄存器进行配置。


    2.1       PIO_PER寄存器

    5

    该寄存器是用来启用PIOA各个引脚的GPIO模式,如图5所示,每一位都对应控制着一根GPIO管脚,通过给P1P2P31激活了PA1PA2PA3GPIO模式,同时也等于关闭了复用外围AB的模式。


     

    2.2       PIO_OER寄存器

    6

    该寄存器有默认的设置,观察发现最低4位默认为1100。本项目需要用到GPIO的输出模式,所以需要对该寄存器进行重新配置,给P1P2P31,开启引脚的输出功能。


    2.3       PIO_PUDR寄存器

    7


    通过观察PIO_PUSR寄存器可以发现默认的上拉寄存器是全部开启的,上拉寄存器的启用会影响GPIO的正常输出,所以通过PIO_PUDR寄存器将上拉寄存器关闭,为之后正常操控GPIO提供基础。


     数据的写入:


    1       概况


    PIO_SODRPIO_CODR这两个寄存器可以将指定位的GPIO电平置10。由于这里设计的读写使能为低电平有效,在程序中首先将涉及的信号均拉高,相当于对信号进行一个复位。之后就可以进行数据的发送工作。

    8

    9

    8为连续发送0x1122,0x3344,0x5566等多个数据时的情况,在写使能的上升沿对数据总线和地址总线上的信息进行取样;图9中显示当写使能信号上升沿的时刻,数据总线上的信息为0x5566,地址总线上的信息为0x0005,即将0x5566存储到RAM0x0005地址中。(上图SignalTap采样时钟为125MHz

    在一个发送周期中,经历以下过程:

    0:地址总线上出现地址信息;

    1:片选信号拉低;

    2:写使能信号拉低;

    3:数据放到数据总线上;

    4:写使能拉高,同时在上升沿时刻对数据取样;

    5:片选信号拉高。


     

    DATASHEET的SMC一章中有对并口的发送时序进行描述,当前实验结果也符合数据手册中通过SMC实现并口通信的说明,如图10、图11所示。可见,其实两种方式大同小异,实现的结果相同。


    10

    11


    2       ARM中数据的发送


    通过FPGA_WriteData函数完成数据的发送工作,其中使用了PIO寄存器中的PIO_CODRPIO_SODRPIO_ODSR三个寄存器,分别实现使能拉低,使能拉高,和标志位判断的功能。

    #define WREG(x) (*((volatile unsigned short *)(x))) 语句中,(volatileunsigned short *)(x)x定义为了一个地址指针,再通过*取内容,这样就可以将数据写到这个地址上,在之后的程序中只要直接调用WREG()就可以方便的向地址写数据。



    3       FPGA中数据的存储

    reg uprise_wr_dly;

    always @(posedgei_clk,negedge i_rst_n)

    begin

         if(!i_rst_n)

                uprise_wr_dly <= 1'b0;

         else

                uprise_wr_dly <= i_wr_cpu_pre;

    end

     

     

    reg wr;

    always @(posedgei_clk,negedge i_rst_n)

    begin

         if(!i_rst_n)

                wr <= 1'b0;

         else if((i_wr_cpu_pre == 1'b1) && (uprise_wr_dly ==1'b0))

                wr <= 1'b1;

         else

                wr <= wr;

    end

    以上程序制作了一个比写使能信号延后一个clock的信号,再通过两个信号的组合判断实现了写使能上升沿信号的处理。这在FPGA的程序中是很常见的处理方式。


           最后通过RAM程序中的接口程序,将已经处理好的数据总线信号、地址总线信号和使能信号、时钟信号添加进接口当中,功能便实现了。


     

      数据的读取:


    数据读取时的使能信号同样使用了PIO_CODRPIO_SODR这两个关键的寄存器,按照时序控制这两个寄存器的值即可。

    数据读取的情况如图12所示:

    12

        

    通过对FPGA编程将数据0x3456放到数据总线上,在ARM的程序中对数据总线所在的地址进行读取,就可以将数据读出。这里将读出的数据存储到了PIOC寄存器中,你也可以把它放到变量中来观察,验证对错。在IAR里查看PIOC的只读寄存器PIOC_ODSR就可以看到数据已经被存放到了寄存器当中。

    关于涉及到的寄存器、寄存器的控制方式、使能信号的时序以及相关软件的使用和编程思路,读取与写入是大致一样的,这里不再重复描述。

    展开全文
  • 提出高速数据传输系统中IEEE802.3千兆网卡与同步静态存储器间非...理论分析表明,通信接口带宽可达1.2 Gb/s,协议效率在99%以上,协议工作稳定可靠,在满足千兆网卡全速接收转发数据的情况下,高速并口带宽仍有裕量。
  • 3、异步并口通信: 异步并口应用: --cpu类的芯片(dsp、stm32)与FPGA的数据交互,数据速率一般在100Mbps以内,数据总线不大于16bit --非cpu类的功能芯片与FPGA通过并口进行数据交互,例如配置寄存器等 并口信号说....

    1、并口经常用于FPGA和cpu芯片通信、配置寄存器、跨芯片数据传输等。
    2、源同步传输:发送端同时发送时钟和数据给接收端,接收端使用源端发送的时钟采样数据。
    3、异步并口通信:
    异步并口应用:
    --cpu类的芯片(dsp、stm32)与FPGA的数据交互,数据速率一般在100Mbps以内,数据总线不大于16bit。
    --非cpu类的功能芯片与FPGA通过并口进行数据交互,例如配置寄存器等。
    并口信号说明:
    --chip select片选信号,简写为cs_n,此信号低有效,当被拉低的时候,表示此器件的并口被激活。
    --write enable写使能信号,简写为we_n,信号低有效,当被拉低时表示此时地址总线和数据总线的地址数据是写入操作的。
    --read enable读使能信号,简写为rd_n,此信号低有效,当被拉低时表示此时地址总线和数据总线的地址和数据是读入操作。
    --Addr[7:0]地址总线,表示读写的地址。
    --Data[15:0]数据总线,此总线是双向总线,读操作时数据总线上是读取的数据,写操作时数据总线上是写入的数据。
    写操作时序见图:


    --并口不适合高速传输且占用管脚数量很多,优点是简单,逻辑简单。

    --异步并口的异步是指主机不输出时钟信号给从机用作它们之间的通讯,异步并口的并口是指主-从机之间的数据线(此例为16根)和地址线有多根(此例为8根),且主-从机之间的数据交互是并行的。

    --如上图所示,cs_n为异步并口的片选信号,低电平有效;rd_n为读使能信号,低电平有效;we_n为写使能信号,低电平有效;data为数据总线,位宽为16bit;addr为地址总线,位宽为8bit。

    --如上图所示,当cs_n为低电平时,FPGA被主机片选中,当FPGA检测到we_n信号被拉低时,即进入到异步并口的写状态,数据通过data数据总线送入FPGA,并按照addr地址总线上的地址值将数据存放到指定存储空间上(如:RAM、FIFO等)。

    读操作时序见图:


    --读等待(设置为40ns),是为了使地址数据稳定之后才赋值给端口。

    --上图为异步并口的读操作时序,当cs_n为低电平时,FPGA被主机片选中,当FPGA检测到rd_n信号被拉低时,即进入到异步并口的读状态,FPGA按照addr地址总线上的地址值从指定存储位置上将数据读出并送到data数据总线上,以供主机设备读走。
    4、往寄存器中存储数据,对寄存器寻址。
    5、cs_n和wr_n是两个握手操作的信号。
    6、寄存器打拍延时--延时时钟数为n,需要延时的数据为xbit,则使用移位寄存器进行延时的格式为:
    reg  [3*n,0]  Data_r;
    Data_r <= {Data_r[(n-1)*x,0],Data};--最后三个时钟后Data_r的高n位即为延时后的输出。
    例如:
    data_r <= {data_r[31:0],data}; //data为16bit,要打三拍,所以总的打拍寄存器为16*3=48bit,前面的为16*2=32bit
    addr_r <= {addr_r[15:0],addr}; //addr为8bit,要打三拍,所以总的打拍寄存器为8*3=14bit,前面的为8*2=16bit
    7、当task中含有参数的时候,参数需要在task中声明

    task write_data(len); //需要在下面声明len
     integer i, len;
     begin
      for(i=0; i
      begin
       ...
      end
      cs_n = 1;
     end
    endtask

    8、三态门的使用和测试:
    --源程序模块的三态门

    reg    [2:0] cs_n_r, rd_n_r, wr_n_r;
    inout tri  [15:0] data; //双向口数据线
    assign data = (cs_n_r[2] == 1'b0 && rd_n_r[2] == 1'b0) ? rdata : 16'hzzzz;

    --测试模块的三态门

    reg      wr_n;
    tri    [15:0] w_data;
    assign w_data = (wr_n == 1'b0) ? data_tb : 16'hzzzz;
    
    parall_interf parall_interf_inst( //例化
     .sclk (sclk ),
     .rst_n (rst_n ),
     .cs_n (cs_n ),
     .rd_n (rd_n ), //读使能
     .wr_n (wr_n ), //写使能
     .addr (addr ), //地址总线  
     
     .data  (w_data )//双向口数据线--双向口w_data为输出的时候,data为输入;相反w_data为输入的时候,data为输入
    );

    9.源文件design代码(parall_interf.v)

            异步并口虽然没有同步时钟信号,但是也不能全用组合逻辑的方式来描述,因为时序逻辑具有更高的稳定性,能给数据采集留以充分的建立时间和保持时间,从而使得读/写操作能在数据稳定后稳定进行。而组合逻辑电路的输出是随输入信号的变化而实时变化的,若主-从机之间的信号稍不稳定,即会导致读/写操作的错误。

            因此,本例依然采用时序逻辑电路为主的描述方式,将cs_n、rd_n、wr_n等输入信号采到sclk系统时钟域来,然后在系统时钟sclk的控制下有序地工作。当然,像这种异步时钟域会存在亚稳态的现象,因此,为了降低亚稳态发生的概率,我们采用“打节拍”的方式稳定输入的信号,统一用sclk系统时钟给输入信号多打两拍(延迟两个时钟周期)。

    module		parall_interf(
    		input				wire				sclk,  //50Mhz
    		input				wire				rst_n,
    		input				wire				cs_n,
    		input				wire				rd_n,//读使能
    		input				wire				wr_n,//写使能
    		inout				tri					[15:0]		data,  //1Mhz双向口数据线  
    		input				wire				[7:0]			addr  //地址总线
    	
    );
    
    //reg			[15:0]		data_buf		[7:0];//声明8个16bit的寄存器
    reg			[15:0]		data_0,data_1,data_2,data_3,data_4,data_5,data_6,data_7;
    reg			[2:0]			cs_n_r,rd_n_r,wr_n_r;
    reg			[47:0]		data_r;
    reg			[23:0]		addr_r;
    reg			[15:0]		rdata;
    
    
    //降低亚稳态出现的概率,把cs_n,rd_n,wr_n 单比特信号打两拍
    always @(posedge	sclk or negedge rst_n)
    			if(rst_n==1'b0)
    					{cs_n_r,rd_n_r,wr_n_r}<=9'h1ff;
    			else
    					{cs_n_r,rd_n_r,wr_n_r}<={{cs_n_r[1:0],cs_n},{rd_n_r[1:0],rd_n},{wr_n_r[1:0],wr_n}};
    
    //数据进行延时,是为了与使能信号进行同步
    always @(posedge	sclk or negedge rst_n)
    			if(rst_n ==1'b0)
    					begin 
    							data_r<=48'd0;
    							addr_r<=24'd0;
    					end
    			else
    					begin
    							data_r<={data_r[31:0],data}; //第一拍:{data_r[31:0],data_1}  第二拍{data_r[15:0],data_1,data_2}
    							//打三拍,总的打拍寄存器为16*3=48bit,前面为16*2=32bit
    							//data_r[47:32]<=data_r[31:16];
    							//data_r[31:16]<=data_r[15:0];
    							//data_r[15:0]<=data;							
    							addr_r<={addr_r[15:0],addr};						
    					end
    
    //异步并口的写操作模块(从外部写入FPGA内部)
    always @(posedge sclk or negedge rst_n)
    			if(rst_n==1'b0)
    					begin
    				  		data_0<=8'd0;
    				  		data_1<=8'd0;
    				  		data_2<=8'd0;
    				  		data_3<=8'd0;
    				  		data_4<=8'd0;
    				  		data_5<=8'd0;
    				  		data_6<=8'd0;
    				  		data_7<=8'd0;
    				  end
    			 else if(cs_n_r[2]==1'b0 && rd_n_r[2] == 1'b1 && wr_n_r[2] ==	1'b0)
    					case(addr_r[23:16])
    							8'd0:data_0<=data_r[47:32];
    							8'd1:data_1<=data_r[47:32];
    							8'd2:data_2<=data_r[47:32];
    							8'd3:data_3<=data_r[47:32];
    							8'd4:data_4<=data_r[47:32];
    							8'd5:data_5<=data_r[47:32];
    							8'd6:data_6<=data_r[47:32];
    							8'd7:data_7<=data_r[47:32];
    				  default:
    				  		begin
    				      		data_0<=data_0; 
    				      		data_1<=data_1; 
    				      		data_2<=data_2; 
    				      		data_3<=data_3; 
    				      		data_4<=data_4; 
    				      		data_5<=data_5; 
    				      		data_6<=data_6; 
    				      		data_7<=data_7;   
    				     	end
    				  endcase
    
    
    //异步并口的读操作模块(包含inout端口的输出操作)。
    always @(posedge sclk or negedge rst_n)
    			if(rst_n == 1'b0)
    					rdata <= 'd0;
    			else if(cs_n_r[2]==1'b0 &&  wr_n_r[2] ==1'b1)
    					case(addr_r[23:16])
    							8'd0:rdata<=data_0;
    							8'd1:rdata<=data_1;
    							8'd2:rdata<=data_2;
    							8'd3:rdata<=data_3;
    							8'd4:rdata<=data_4;
    							8'd5:rdata<=data_5;
    							8'd6:rdata<=data_6;
    							8'd7:rdata<=data_7;
    					    default:rdata <= 16'd0;
    				  endcase
    		
    //三态门--当rd_n为低的时候,将rdata赋值给data
    assign data =(cs_n_r[2] ==1'b0 && rd_n_r[2]==1'b0)?rdata:16'hzzzz;
    
    endmodule

    关于inout双向端口的描述与测试:

            如图所示,展示了本例所采用的测试模型,对于FPGA芯片来说,异步并口的读操作就是数据输出,写操作就是数据的输入;而对于测试激励端来说,异步并口的写操作就是数据输出,读操作就是数据的输入。

    因此,应将FPGA端的程序设计如下:

    inout tri [15:0] data, //双向数据总线

    assign data = (cs_n_r[2]==1'b0 && wr_n_r[2]==1'b1 && rd_n_r[2]==1'b0)? read_data: 16'hzzzz;//读操作输出数据

    对于写操作输入数据,则直接将data数据总线上的数据送入给FPGA的寄存器。

    而应将测试激励端的程序设计如下:

    tri [15:0] data;

    reg [15:0] data_reg;

    assign data = (wr_n==1'b0) ? data_reg : 16'hzzzz;//写操作输出数据

    对于读操作输入数据,则直接读取data数据总线上的数据即可。

    10.仿真sim中的代码(tb_parall_interf.v)

    `timescale  1ns/1ns
    module 	tb_parall_interf();
    
    parameter		setup_time = 2;  //建立事件
    parameter		hold_time	=	2;	 //保持时间
    parameter		data_time = 4;   //持续时间
    parameter		read_wait = 5;   //读数据等待延时
    
    reg					sclk,rst_n;
    reg					cs_n,rd_n,wr_n;   //使能 
    reg		[15:0]		data_tb;//写数据
    reg		[7:0]	    addr;
    tri		[15:0]		w_data;//inout端的输出只能接wire变量或tri变量
    
    always  #10 sclk = ~sclk;
    
    //测试激励的三态门
    assign  w_data = (wr_n == 1'b0)?data_tb:16'hzzzz;	
    
    initial		
    				begin
    							sclk = 0;
    							rst_n = 0;
    							#200;
    							rst_n = 1;
    				end
    
    //调用task,并进行初始化
    initial	
    		begin
    				cs_n=1;
    				rd_n=1;
    				wr_n=1;
    				data_tb=0;
    				addr=0;
    				@(posedge	rst_n);
    				#100;
    				write_data(8);
    				#100;
    				read_data(8);	
    		end
    
    //integer		i,len;
    //写数据的任务,模拟cpu向fpga发送数据,task中嵌套task
    task		write_data(input    [31:0]    len);
    				integer		i;
    				begin
    						for(i=0;i<len;i=i+1)
    						begin
    								 //@ (posedge sclk);
    								cs_n=0;
    								data_tb=i[15:0];//写操作:cpu向fpga写入地址+数据
    								addr=i[7:0];
    								setup_dly();
    								wr_n=0;
    								data_dly();
    								wr_n=1;
    								hold_dly();								
    						end
    						cs_n=1; //cpu向FPGA连续写数据的时候,cs_n可以不拉高,当写完所有数据之后再将其拉高
    				end
    endtask
    
    //读数据  模拟fpga读取cpu
    task		read_data(len);
    				integer		i;
    				begin
    						for(i=0;i<len;i=i+1)
    						begin
    								cs_n=0;					
    								addr=i[7:0];
    								read_dly();
    								rd_n=0;
    								data_dly();
    								$display("read data addr is %d = %d",i,w_data);
    								rd_n=1;					
    						end
    						cs_n=1; 
    				end
    endtask
    
    parall_interf 	parall_interf_en(
    		.sclk       (sclk ),  
    		.rst_n      (rst_n),
    		.cs_n       (cs_n ),
    		.rd_n       (rd_n ), //读使能
    		.wr_n       (wr_n ),//写使能
    		.data       (w_data ),  //双向口数据线,双向口w_data为输出的时候,data为输入;相反。
    		.addr       (addr ) //地址总线
    	
    );
    
    //基本的延时任务
    task		setup_dly();
    		integer  i;
    		begin
    				for(i=0;i<setup_time;i=i+1)
    				begin
    						@(posedge	sclk);	
    				end
    		end
    endtask
    
    task		hold_dly();
    		integer  i;
    		begin
    				for(i=0;i<hold_time;i=i+1)
    				begin
    						@(posedge	sclk);	
    				end
    		end
    endtask
    
    task		data_dly();
    		integer  i;
    		begin
    				for(i=0;i<data_time;i=i+1)
    				begin
    						@(posedge		sclk);	
    				end
    		end
    endtask
    
    task		read_dly();
    		integer  i;
    		begin
    				for(i=0;i<read_wait;i=i+1)
    				begin
    						@(posedge		sclk);	
    				end
    		end
    endtask
    endmodule

    11. 建仿真脚本run.do文件

    quit -sim
    .main clear
    
    vlib	work
    vmap	work work
    
    vlog  ./tb_parall_interf.v
    vlog  ./../design/parall_interf.v
    
    vsim	-voptargs=+acc work.tb_parall_interf
    
    add  wave  tb_parall_interf/*
    
    add  wave  tb_parall_interf/parall_interf_en/*
    
    
    run 10us

    12.仿真结果

     

    展开全文
  • 串口通信与并口通信的浅理解

    千次阅读 2012-12-26 10:06:17
    在说到通信的时候,一般都会提到窜口通信和并口通信的问题,以前一直都是听别人说,我一点也不明白,毕竟这个概念还是偏硬件了点,但是人还是要往前进的,今天多google了几下,总结了下理解方式,算是一次学习吧!...

                 在说到通信的时候,一般都会提到窜口通信和并口通信的问题,以前一直都是听别人说,我一点也不明白,毕竟这个概念还是偏硬件了点,但是人还是要往前进的,今天多google了几下,总结了下理解方式,算是一次学习吧!

               先还是说官方的概念,串口通信(Serial Communications)的概念非常简单,串口按(bit)发送和接收字节。尽管比按字节(byte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。它很简单并且能够实现远距离通信。比如IEEE488定义并行通行状态时,规定设备线总长不得超过20米,并且任意两个设备间的长度不得超过2米;而对于串口而言,长度可达1200米。典型地,串口用于ASCII码字符的传输。通信使用3根线完成,分别是地线、发送、接收。由于串口通信是异步的,端口能够在一根线上发送数据同时在另一根线上接收数据。其他线用于握手,但不是必须的。串口通信最重要的参数是波特率数据位、停止位和奇偶校验。对于两个进行通信的端口,这些参数必须匹配。并行接口,指采用并行传输方式来传输数据的接口标准。从最简单的一个并行数据寄存器或专用接口集成电路芯片如8255、6820等,一直至较复杂的SCSI或IDE并行接口,种类有数十种。一个并行接口的接口特性可以从两个方面加以描述:1. 以并行方式传输的数据通道的宽度,也称接口传输的位数;2. 用于协调并行数据传输的额外接口控制线或称交互信号的特性。 数据的宽度可以从1~128位或者更宽,最常用的是8位,可通过接口一次传送8个数据位。

              简单理解,串口通信可以理解为串联电路,并口通信可以理解为并联电路,窜口通信是一个数据位一个数据位发送的,速率相对于并口慢,但是现在有串行的硬盘SATA接口,也是一样的道理,可以150MB/s的速度传输,得益于其串行的方式,所以只要串行方式做得好,速率问题是可以解决的,串行通信适合远距离通信,不易受到干扰。相反,并行通信就是每次可以发送8甚至更多个数据位,是并发的,所以其易收到干扰,只适合近距离传输。

              

    展开全文
  • 双机并口通信 功能需求 两台实验箱,一台为发送机,一台为接收机 发送机利用键盘扫描发送数值(0–F) 接收机收到数值显示在数码管上 两机为双机单工通信 课设代码 发送机: IOY0 EQU 0600H ;片选IOY0对应的端口始...
  • https://www.cnblogs.com/Dreamer-1/p/5523046.html http://rxtx.qbang.org/wiki/index.php/Parallel_Communications http://users.frii.com/jarvi/rxtx/download.html 相关JAR包java.comm RXTXhttp://fizze...
  • Xilinx-Verilog-学习笔记(17):异步并口通信 一、SPI总线 1、什么是SPI总线? SPI是串行外设接口(Serial Peripheral Interface),是一种高速的、全双工、同步的通信总线。 由于没有应答机制确认是否接收到数据,...
  • C++并口通信

    2015-02-27 21:15:59
    我想请问下,纯小白,想学习用C++编写并口接收数据的程序,要从哪里开始学,有没有案例或者书籍推荐,比如我要接收数据采集卡的数据。可能说的不清楚,请各位大大帮助一下,谢谢
  • {"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":6,"count":6}]},"card":[{"des":"短信服务为用户提供一种通信服务能力,支持快速发送短信验证码、短信通知等,服务范围...
  • LCD12864驱动程序 (并口通信,带字库版本ST7920,内含简单的画点、线、圆、矩形和三角形函数以及任意尺寸图像显示。 资料内附带有完整的Keil 工程文件,并且每个函数都带有完整而详细的注释。到手可用无需修改与调。...
  • 12864液晶除了显示字符、汉字之外,还有绘图的功能,接下来将介绍一下如何使用12864的绘图功能库,进行绘图操作。首先来看一下12864液晶的坐标关系:2012-8-11 20:17 上传(140.11 KB)通过坐标关系图,我们可以看到,...
  • 根据上原理图的接法:P0.0~P0.7是数据传输线,也可理解不地址线P3.6、P3.7分别为片外写读信号线,P3.1接CS:为片外部RAM片选P3.2为显示器触摸信号线(作标志用)P3.3作外部中断用,在显示器有数据传输时,则触发单片机...
  • 串口与并口: 串口一次接收和发送一个 bit; 并口,多个数据通路同时发送或者接收; 并口并不见得一定比串口的效率来得高; 名称中已包含串口之义: ...1. 并口通信的限制 各个数据通路上的bit不...
  • 摘要:介绍了一种用三态编解码芯片MC145026/27实现的基于并口的多机线通信系统的组成原理和实现方法,给出了多台微型机之间的无线通信问题的解决方案等,阐述了系统的总体组成及通信方法。 关键词:并行接口 无线...
  • 绍了一种用三态编解码芯片MC145026/27实现的基于并口的多机线通信系统的组成原理和实现方法,给出了多台微型机之间的无线通信问题的解决方案等,阐述了系统的总体组成及通信方法。
  • 本片应用笔记专门为接收或者订购Dallas Semiconductor器件样片且意识到他们需要与2线设备通信的用户而编写。虽然存在好多解决方案,在本篇笔记中给出的方案不需要微处理器、固件,也不存在购买芯片的困难。而是通过...
  • 本文提出的并口协议实现了单片机之问的多机通信,该程序已在实际中得到应用。该协议可以在含有外部中断的单片机上实现,也可用于CPLD上实现与单片机的通信。该方法简单、可靠、成本低,有着较高的推广价值。
  • 不用控件,不用CreateFile等API,看懂串行UART通信原理
  • 本篇应用笔记目的是演示如何使用PC并口构建一种快速、简单和经济的2线(与PC兼容)接口。本片应用笔记专门为接收或者订购Dallas Semiconductor器件样片且意识到他们需要与2线设备通信的用户而编写。虽然存在好多解决...

空空如也

空空如也

1 2 3 4 5 ... 18
收藏数 359
精华内容 143
关键字:

并口通信