精华内容
下载资源
问答
  • 高速串行接口的简介

    2019-03-30 13:33:23
    xilinx官方的高速串行接口文档,非常经典,强烈推荐。对于初次接触高速串行接口的人,很多概念不清楚,该文档解释的非常好,看后豁然开朗。
  • AT89S52单片机的串行口有方式0、方式1、方式2、方式3四种工作方式。方式0主要用于扩展并行输入输出口,方式1、2、3用于串行通信。
  • 串口串行接口)相关概念

    千次阅读 2019-07-27 16:22:54
    串口串行接口)相关概念 **作用:**通信 **通信方式(怎么通信):**利用一对传输线就可以实行双向传输 特点: 1.按顺序一位一位的传输 2.只要一对传输线就可以实行双向传输 3.远距离通信(几米到几千米),但传输...

    串口(串行接口)相关概念

    **作用:**通信
    **通信方式(怎么通信):**利用一对传输线就可以实行双向传输
    特点:
    1.按顺序一位一位的传输
    2.只要一对传输线就可以实行双向传输
    3.远距离通信(几米到几千米),但传输速度比较慢
    4.分为单工,半双工,全双工三种
    单工:一方传输另一方不回应,例如在跟一个哑巴交流
    半双工:对讲机等(一方发出传输,另一方等收到后再给予回复)
    全双工:一方传输另一方也跟着回应或传输,类似于吵架

    串口通信的两种最基本的方式:同步串行通信方式和异步串行通信方式。
    
    同步串行是指ISP(串行外围设备接口):使MCU与各种外围设备以串行方式进行通信以交换信息,TRM450是ISP接口
    
    异步串行是指UART(通用异步接收/发送):UART是一个并行输入成为串行输出的芯片,通常集成在主板上。
    UART包含TTL电平(电平是3.3V)的串口和RS232电平(负逻辑电平)的串口。
    
    串行接口按电气标准及协议来分包括RS-232-C、RS-422、RS485等。
    RS-232-C、RS-422与RS-485标准只对接口的电气特性做出规定,不涉及接插件、电缆或协议。
    RS232接口:标准串口,最常用的一种串行通讯接口,全名是“数据终端设备(DTE)和数据通讯设备(DCE)之间串行二进制数据交换接口技术标准”。
    
    RS-232采取不平衡传输方式,即所谓单端通讯。由于其发送电平与接收电平的差仅为2V至3V左右,所以其共模抑制能力差,
    再加上双绞线上的分布电容,其传送距离最大为约15米,最高速率为20kb/s。
    
    RS-232是为点对点(即只用一对收、发设备)通讯而设计的,其驱动器负载为3~7kΩ。所以RS-232适合本地设备之间的通信。
    RS-422支持点对多的双向通信RS-422四线接口由于采用单独的发送和接收通道,因此不必控制数据方向,
    各装置之间任何必须的信号交换均可以按软件方式(XON/XOFF握手)或硬件方式(一对单独的双绞线)实现。
    
    RS-485:采用平衡传输方式、都需要在传输线上接终接电阻等,RS-485可以采用二线与四线方式,
    二线制可实现真正的多点双向通信,而采用四线连接时,与RS-422一样只能实现点对多的通信,但它比RS-422有改进,
    无论四线还是二线连接方式总线上可多接到32个设备。
    
    TTL接口:EL806
    

    编程配置寄存器:
    1SCON:用来选择串口的工作方式(数据格式)
    2.计算波特率
    定时器1来做波特率的发生器
    TCON
    3.RI:数据接收的过程中,一直是低电平,当数据接受完成后,被置为高电平,硬件
    TI:数据发送的过程中,一直是低电平,当数据发送完成后,被置为高电平,硬件
    RI也好,TI也好,当被硬件拉高,我们处理完数据后,需要清零(RI=0、TI=0)

    SBUF:用来接收一个一个字符
    c=SBUF:接受
    SBUF=c:发送

    展开全文
  • PuTTY是一个Telnet、SSH、rlogin、纯TCP以及串行接口连接软件。较早的版本仅支持Windows平台,在最近的版本中开始支持各类Unix平台,并打算移植至Mac OS X上。除了官方版本外,有许多第三方的团体或个人将PuTTY移植...
  • xilinx fpga 7系列的高速串行IP核的使用。项目名称: Xilinx 7 系列 FPGA 高速串行接口 GTP 的使用 FPGA: Xilinx XC7A200T fbg676 用户数据位宽: 4Byte 串行速率: 4.25Gbps
  •  串行接口简称串口,也称串行通信接口或串行通讯接口(通常指COM接口),是采用串行通信方式的扩展接口。(至于再详细,自己百度) 串口应用:  工业领域使用较多,比如:数据采集,设备控制等等,好多都是用串口...
  • 串行接口

    2019-07-25 17:03:31
    串行接口,简称“串口”,也称串行通信接口(通常指COM接口)。它的作用就是用于通信。只要一对传输线就可以实现双向通信,并可以利用电话线,就能实现单工、半双工、双工三种方式。它的特点是数据一位一位地顺序...

    串行接口,简称“串口”,也称串行通信接口(通常指COM接口)。它的作用就是用于通信。只要一对传输线就可以实现双向通信,并可以利用电话线,就能实现单工、半双工、双工三种方式。它的特点是数据一位一位地顺序传送,通信线路简单别适用于远距离通信,但传送速度较慢。串行通讯的距离可以从几米到几千米。根据信息的传送方向,串行通讯可以进一步分为单工、半双工和全双工三种(单工通讯类似于你和一个哑巴聊天,半双工类似于两个人通过对讲机讲话,全双工则类似于两个人打电话实时通讯)。串口通信的两种最基本的方式:同步串行通信方式和异步串行通信方式。
    (RS-232)也称标准串口,最常用的一种串行通讯接口。它是在1970年由美国电子工业协会(EIA)联合贝尔系统、调制解调器厂家及计算机终端生产厂家共同制定的用于串行通讯的标准。它的全名是“数据终端设备(DTE)和数据通讯设备(DCE)之间串行二进制数据交换接口技术标准”。传统的RS-232-C接口标准有22根线,采用标准25芯D型插头座(DB25),后来使用简化为9芯D型插座(DB9),现在应用中25芯插头座已很少采用。RS-232采取不平衡传输方式,即所谓单端通讯。由于其发送电平与接收电平的差仅为2V至3V左右,所以其共模抑制能力差,再加上双绞线上的分布电容,其传送距离最大为约15米,最高速率为20kb/s。RS-232是为点对点(即只用一对收、发设备)通讯而设计的,其驱动器负载为3~7kΩ。所以RS-232适合本地设备之间的通信。
    (RS-422)标准全称是“平衡电压数字接口电路的电气特性”,它定义了接口电路的特性。典型的RS-422是四线接口。实际上还有一根信号地线,共5根线。其DB9连接器引脚定义。由于接收器采用高输入阻抗和发送驱动器比RS232更强的驱动能力,故允许在相同传输线上连接多个接收节点,最多可接10个节点。即一个主设备(Master),其余为从设备(Slave),从设备之间不能通信,所以RS-422支持点对多的双向通信。接收器输入阻抗为4k,故发端最大负载能力是10×4k+100Ω(终接电阻)。RS-422四线接口由于采用单独的发送和接收通道,因此不必控制数据方向,各装置之间任何必须的信号交换均可以按软件方式(XON/XOFF握手)或硬件方式(一对单独的双绞线)实现。
    (RS-485)是从RS-422基础上发展而来的,所以RS-485许多电气规定与RS-422相仿。如都采用平衡传输方式、都需要在传输线上接终接电阻等。RS-485可以采用二线与四线方式,二线制可实现真正的多点双向通信,而采用四线连接时,与RS-422一样只能实现点对多的通信,即只能有一个主(Master)设备,其余为从设备,但它比RS-422有改进,无论四线还是二线连接方式总线上可多接到32个设备。
    串口与并口的区别:串口形容一下就是一条车道,而并口就是有8个车道同一时刻能传送8位(一个字节)数据。但是并不是说并口快,由于8位通道之间的互相干扰,传输时速度就受到了限制。而且当传输出错时,要同时重新传8个位的数据。串口没有干扰,传输出错后重发一位就可以了。所以要比并口快。串口硬盘就是这样被人们重视的。

    展开全文
  • 针对目前支持多协议的智能仪表存在的串口不足问题,在研究了智能仪表软件架构、串口接收点和串口发送节点结构的基础上,设计了一种支持多串口同时抄表的智能仪表程序。同时,较详细地阐述了设计中支持多协议的串口...
  • 同步串行接口(SSI).

    2016-02-26 21:16:29
    讲解了SSI的功能、特点、协议、函数等内容
  • 通用串口测试工具

    2017-12-19 14:08:52
    通用串口测试、调试工具,封装了很多参数应用,丰富的控制方式,使用灵活
  • 改文档详细的介绍了FPGA与dsp的交互接口。特别给出了串口收发模块的详细设计说明
  • stc8a四串口程序.txt

    2018-11-01 22:36:13
    stc8a四串口程序.txt
  • TTL串口使用说明

    2017-11-07 14:05:51
    pm2.5传感器,pm2.5通过串口发送数字信号,单片机直接收到串口数据进行计算。
  • ABB工业机器人和上位机用串口通讯调试指令用法,
  • 串行接口的工作原理和实现

    千次阅读 2020-08-24 23:14:32
    作为把并行输入信号转成串行输出信号的芯片,UART通常被集成于其他通讯接口的连结上。 uART使用标准的CMOS逻辑电平(0~5v、0~3.3 V、0~2.5V或0~1.8V四种)来表示数据,高电平为1,低电平为0。为了增强数据的抗干扰...

    串口的结构和工作原理

    通用异步收发传输器(Universal Asynchronous Receiver/Transmitter),通常称作UART。它将要传输的资料在串行通信与并行通信之间加以转换。作为把并行输入信号转成串行输出信号的芯片,UART通常被集成于其他通讯接口的连结上。
    uART使用标准的CMOS逻辑电平(0~5v、0~3.3 V、0~2.5V或0~1.8V四种)来表示数据,高电平为1,低电平为0。为了增强数据的抗干扰能力,提高传输长度,通常将CMOS逻辑电平转换为RS-232逻辑电平(3~15v以o表示,-3~-15V以1表示)。
    在这里插入图片描述
    上图为串行接口的原理图,可以分为三部分分别为发送缓冲寄存器,波特率发生器,接受缓冲寄存器,发送缓冲寄存器从总线接受资源,通过波特发生器发送到接收缓存器中
    一句话总结串口:异步全双通串行数据总线

    串口寄存器的配置

    我们通过查手册找到串口,和我们分析的一样,三条线一个AST,DSR,DGND
    在这里插入图片描述
    :我们通过看原理图知道,他的两根线一个是接受数据的,一个是发送数据的,其中接地线是用来调节电平的,他的通信方式是通过是板子的串口线和笔记本的串口线,他中间通过一个电平转换芯片来进入这个
    在这里插入图片描述
    继续翻阅可以看见它通过排叉到核心板,这样就可以看见他连接到GPA0的引脚
    在这里插入图片描述

    传输实现

    在这里插入图片描述
    查看手册,对GPA0进行配置

    #define GPA0CON *((volatile u32 *)(0x11400000))
    #define UART0BASE 0x13800000
     //将GPA0-0  1引脚配置为串口0的发送和接收功能
        GPA0CON &= ~(0XFF<<0);
        GPA0CON |= 0x22;
    

    对串口进行配置
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    //配置数据位8N1
        ULCON0 = 0x3 <<0;
        //配置串口数据收发方式为中断或者论寻
        UCON0 |= (0x1 << 2) | ( 0x1 << 0);
        //使用无FIFO模式
        UFCON0 = 0x0;
        //禁用modem流控
        UMCON0 = 0x0;
        //配置波特率为115200
        UBRDIV0 = 53;
        UFRACVAL0 = 4;
    

    通过这个寄存器来进行数据的收发,0=缓冲区为空,1=缓冲器接收到数据,所以我们这样来实现

    在这里插入图片描述

    void uart0_putchar(char ch)
    {
            while (!(UTRSTAT0 & (0x1 << 1)))
            {
                    ;
            }
            UTXH0 = ch;
            
    }
    char uart0_getchar(void)
    {
            char c;
            while (!(UTRSTAT0 & (0x1 << 0)))
            {
                    ;
            }
            c = URXH0;
    
            return c;
            
    }
    
    int main(void)
    {
      
    
        uart0_init();
        u8 c;
        while ((c = uart0_getchar()) != '@' )
        {
            uart0_putchar(c);
            uart0_putchar('\r');
            uart0_putchar('\n');
        }
        
        return 0;
    }
    

    通过这样的配置,然后我们通过交叉编译,在arm板中运行这个,就可以实现最简单的串口通信.

    串口通信原理的理解

    由于程序是跑在板子上的,所以我们的板子请求笔记本发送数据(通过kermit平台),不断的去查询寄存器是是否变化,之后将写入的数据发送给板子的串口

    展开全文
  • 串行接口(UART)------verilog实现串口接收模块

    万次阅读 多人点赞 2018-11-15 15:08:35
    串行接口(Serial port),主要用于串行式逐位数据传输。常见的有一般计算机应用的RS-232(使用 25 针或 9 针连接器)和工业计算机应用的半双工RS-485与全双工RS-422。----------维基百科 按照电气标准划分,串口...

    一、串口基本概念

    串行接口(Serial port),主要用于串行式逐数据传输。常见的有一般计算机应用的RS-232(使用 25 针或 9 针连接器)和工业计算机应用的半双工RS-485全双工RS-422。----------维基百科

    按照电气标准划分,串口可以分为RS-232-C、RS-422、RS-485。

    RS-232-C:也称标准接口,是目前最常用的一种串行通讯接口。台式计算机一般有两个串行口:COM1和COM2,均为9针D形接口通常在计算机后面能看到,一般笔记本上有一个串口,超薄本除外。RS-232-C电气标准接口传输速率低,传输距离近。

    RS-422:为改进RS-232-C传输距离近,传输速率低的特点,RS-422定义了一种平衡通信接口,传输速率提高到10Mb/s,并允许在一条接收总线上挂多个接收器。

    RS-485:为扩展应用范围,EIA又于1983年在RS-422基础上制定了RS-485 标准,增加了多点、双向通信能力,即允许多个发送器连接到同一条总线上,同时增加了发送器的驱动能力和冲突保护特性,扩展了总线共模范围,后命名为 TIA/EIA-485-A标准。

     下图是串口公口实物图,在台式机和笔记本上一般都能找到。维基百科

    串口公口
    图1 串口公口

     2、串口传输时序-------参考【FPGA黑金开发板】Verilog HDL那些事儿--串口模块(十一)

    图2  串口时序

     图2是串口传输数据的时序图,串口总线默认是高电平,一帧数据开始必须先拉低电平,对应图中起始位。串口传输数据是以数据包为单位的,一个数据包有11位,其中先传输起始位,紧接着传输8个数据位,数据位是按照由低到高的顺序进行传输的,接着传输校验位,最后传输停止位。

    串口还有一个重要的参数就是波特率,一般用波特率来形容串口传输数据的速度。常用的波特率有9600bps和115200bps,本文主要介绍9600bps。bps:bit per second,就是每秒钟传输多少位;9600bps就是每秒钟传输9600位,对应的传输一位所用的时钟周期就是9600Hz。接下来本文参考《verilog那些事儿——建模篇》中串口模块的划分来实现串口的接收部分verilog代码。

    3、串口接收分析

    由于这里是串口接收模块的介绍,为简单考虑从串口外部输入的信号只考虑RX_data_in。由于串口接收数据有明显的先后顺序,因此可以使用状态机来描述串口接收数据过程。使用算法状态机描述串口接收过程如下图所示:

     

    图3 算法状态机

    图3中s0状态实现数据的初始化,start信号对应串口发送的起始位数据,使用沿检测电路实现;s2状态是接收8位有效数据状态,由于串口是串行将数据接收进来,然后转成并行数据,因此s1部分的电路可以用右移的移位寄存器实现(串口先发送低位数据,所以选用右移移位寄存器);图中虽然画出了s3状态执行校验功能,但是本代码不考虑检验问题,因此s3状态相当于是空状态;s4状态是串口接收数据完毕发出的标志信号。根据算法状态机可以看出,实现串口的接收所需要的基本电路有移位寄存器电路、计数器电路和触发器电路。

    4、数据路径

    图4 数据路径

     数据路径如图4所示,波特率定时信号的作用分析如下:

    图5 FPGA接收数据过程

     由于FPGA的工作时钟较快,串口发送数据较慢。如图5所示,串口发送一位数据可能占用多个FPGA时钟周期,因此需要增加采样信号sampling_signal,采样信号有效时占一个时钟周期,在采样信号有效时,FPGA才接收数据,保证每位数据只接收一次。波特率定时计数器就是用来产生采样信号的,在波特率定时计数器计数到一定数据后,采样信号有效,否则,采样信号无效,这样就可以产生如图5所示的采样信号。

    5、控制信号

    图6  控制信号

    图6给出了控制信号在哪个状态有效。在s0状态,移位寄存器和计数器加载0,D触发器使能信号en_b有效,检测串口发送的数据rx_pin_in的起始信号,待检测到起始信号后,start信号有效,进入s1状态,在s1状态使能波特率采样计时信号cnt_en,判断串口采样信号sinpling_signal是否有效,若有效,设置计数器使能信号有效,反之,设置计数器使能信号无效;在计数器cnt=1时,进入s2状态,此状态开始接收串口发送的8位数据位,首先使能波特率采样计时信号cnt_en,判断sinpling_signal是否有效,若有效,计数器使能信号和移位寄存器使能信号均设置为有效,反之,设置为无效;待8位数据位接收完毕后,进入s3状态,此时仍然使能波特率采样计时信号cnt_en,判断采样信号sinpling_signal是否有效,若有效,设置计数器使能信号有效,反之,设置无效。待计数器记到10时,进入s3状态,串口发送的11位信号接收完毕标志信号done拉高,此时仍然使能波特率采样计时信号cnt_en,判断sinpling_signal是否有效,若有效设置计数器使能信号有效,反之,设置无效。然后进入s0空闲状态,等待下一次数据接收。

    6、verilog描述

    接下来就可以使用verilog语言描述上述电路:

    module RECEIVE_MODULE(input clk_in,
    							 input rst,
    							 input rx_pin_in,
    							 output [7:0] rx_data,
    							 output reg done,
    							 output clk_50m
        );
    //wire clk_50m;	 
    clk_1 clk_1 (
        .CLKIN_IN(clk_in), 
        .CLKFX_OUT(clk_50m), 
        .CLKIN_IBUFG_OUT(CLKIN_IBUFG_OUT), 
        .CLK0_OUT(CLK0_OUT)
        );
    
    parameter s0 = 'b00001;
    parameter s1 = 'b00010;
    parameter s2 = 'b00100;
    parameter s3 = 'b01000;
    parameter s4 = 'b10000;
    reg[4:0]current_state = 'd0;
    reg[4:0]next_state = 'd0;
    //
    wire start;
    reg en_b;
    reg cnt_en;
    wire simpling_signal;
    reg load_c;
    reg en_c;
    reg en_a;
    reg load_a;
    wire [3:0]count;
    /
    always @(posedge clk_50m or negedge rst)
    	if(!rst)
    		current_state <= s0;
    	else
    		current_state <= next_state;
    /
    always @(*)
    	case(current_state)
    		s0:	begin
    			if(start)
    				next_state = s1;
    			else
    				next_state = s0;
    		end
    		s1:	begin///起始位
    			if(count == 'd1)
    				next_state = s2;
    			else
    				next_state = s1;
    		end
    		s2:	begin///数据位
    			if(count == 'd9)
    				next_state = s3;
    			else
    				next_state = s2;
    		end
    		s3:	begin
    			if(count == 'd10)
    				next_state = s4;
    			else
    				next_state = s3;
    		end
    		s4:	begin
    			if(count == 'd0)
    				next_state = s0;
    			else
    				next_state = s4;
    		end
    		default:next_state = s0;			
    	endcase
    /
    always @(*)
    	case(current_state)
    		s0:	begin
    			en_b = 'd1;
    			load_a = 'd1;
    			load_c = 'd1;
    			cnt_en = 'd0;
    			en_a = 'd0;
    			en_c = 'd0;
    			done = 'd0;
    		end
    		s1:	begin
    			en_b = 'd1;
    			load_a = 'd0;
    			load_c = 'd1;
    			cnt_en = 'd1;
    			en_c = 'd0;
    			done = 'd0;
    			if(simpling_signal)	begin
    				en_a = 'd1;
    			end
    			else	begin
    				en_a = 'd0;
    			end
    		end
    		s2:	begin
    			en_b = 'd0;
    			load_a = 'd0;
    			load_c = 'd0;
    			cnt_en = 'd1;
    			done = 'd0;
    			if(simpling_signal)	begin
    				en_c = 'd1;
    				en_a = 'd1;
    			end
    			else	begin
    				en_c = 'd0;
    				en_a = 'd0;
    			end
    		end
    		s3:	begin
    			en_b = 'd0;
    			load_a = 'd0;
    			load_c = 'd0;
    			cnt_en = 'd1;	
    			en_c = 'd0;
    			done = 'd0;
    			if(simpling_signal)
    				en_a = 'd1;
    			else
    				en_a = 'd0;
    		end
    		s4:	begin
    			en_b = 'd0;
    			load_a = 'd0;
    			load_c = 'd0;
    			cnt_en = 'd1;	
    			en_c = 'd0;
    			done = 'd1;
    			if(simpling_signal)
    				en_a = 'd1;
    			else
    				en_a = 'd0;			
    		end
    		default:	begin
    			en_b = 'd0;
    			load_a = 'd0;
    			load_c = 'd0;
    			cnt_en = 'd0;
    			en_a = 'd0;
    			en_c = 'd0;
    			done = 'd0;
    		end
    	endcase
    // Instantiate the module
    edge_detection edge_detection (
        .clk_50m(clk_50m), 
        .en_b(en_b), 
        .rx_pin_in(rx_pin_in), 
        .start(start)
        );
    // Instantiate the module
    BPS_TIMER BPS_TIMER (
        .clk_50m(clk_50m), 
        .cnt_en(cnt_en), 
        .simpling_signal(simpling_signal)
        );
    // Instantiate the module
    right_shifter right_shifter (
        .clk_50m(clk_50m), 
        .load_c(load_c), 
        .en_c(en_c), 
        .rx_pin_in(rx_pin_in), 
        .rx_data(rx_data)
        );
    // Instantiate the module
    COUNT_NUM COUNT_NUM (
        .clk_50m(clk_50m), 
        .load_a(load_a), 
        .en_a(en_a), 
        .count(count)
        );
    endmodule
    

     边沿检测模块代码:

    module edge_detection(input clk_50m,
    							 input en_b,
    							 input rx_pin_in,
    							 output start
        );
    reg rx_pin_in_1 = 'd0;
    always @(posedge clk_50m)
    	if(en_b)
    		rx_pin_in_1 <= rx_pin_in;
    	else
    		rx_pin_in_1 <= rx_pin_in_1;
    		
    assign start = (!rx_pin_in) & rx_pin_in_1;
    
    endmodule
    

     波特率定时模块代码:

    由于使用的时钟是50mhz的,而串口的波特率是9600bps,即串口发送数据的时钟是9600hz,因此需要使用50mhz的时钟产生个计数器,
    ///使其每1/9600s产生一个允许采样脉冲。
    //计数器大小设置:500*10^3/96 = 5208,\,因此计数器需要计数5208个数,由于在数据中间在中间时刻更稳定,因此,在5208/2=2604时对数据进行采样更准确,
    //由于计数是从零开始,因此在2603时对数据进行采样,数据计数到5207清零。
    //
    module BPS_TIMER(input clk_50m,
    					  input cnt_en,
    					  output simpling_signal
        );
    reg [12:0] cnt = 'd0;
    always @(posedge clk_50m)
    	if(cnt_en)	begin
    		if(cnt == 'd5207)
    			cnt <= 'd0;
    		else
    			cnt <=  cnt + 'd1;
    	end
    	else
    		cnt <= 'd0;
    assign simpling_signal = (cnt == 'd2603)?'b1:'b0;
    endmodule
    

     右移寄存器模块代码:

    //此模块用于将串行发送的数据转成并行接收
    //
    module right_shifter(input clk_50m,
    							input load_c,
    							input en_c,
    							input rx_pin_in,
    							output reg[7:0]rx_data
        );
    always @(posedge clk_50m)
    	if(load_c)
    		rx_data <= 'd0;
    	else if(en_c)
    		rx_data <= {rx_pin_in,rx_data[7:1]};
    	else
    		rx_data <= rx_data;
    endmodule

     计数器模块代码:

    module COUNT_NUM(input clk_50m,
    					  input load_a,
    					  input en_a,
    					  output reg [3:0]count
        );
    always @(posedge clk_50m)
    	if(load_a)
    		count <= 'd0;
    	else if(en_a)	begin
    		if(count == 'd10)
    			count <= 'd0;
    		else
    			count <= count + 'd1;
    	end
    	else
    		count <= count;
    		
    endmodule
    

     仿真激励文件代码:

    module test;
    
    	// Inputs
    	reg clk_in;
    	reg rst;
    	reg rx_pin_in = 'd1;
    
    	// Outputs
    	wire [7:0] rx_data;
    	wire done;
    	wire clk_50m;
    
    	// Instantiate the Unit Under Test (UUT)
    	RECEIVE_MODULE uut (
    		.clk_in(clk_in), 
    		.rst(rst), 
    		.rx_pin_in(rx_pin_in), 
    		.rx_data(rx_data), 
    		.done(done),
    		.clk_50m(clk_50m)
    	);
    
    	initial begin
    		// Initialize Inputs
    		clk_in = 0;
    		rst = 0;
    		rx_pin_in = 1;
    
    		// Wait 100 ns for global reset to finish
    		#100;
    		// Add stimulus here
    
    	end
    	reg clk1= 'd1;
          always #5 clk_in = ~clk_in;
    		
    	reg [15:0]cnt = 'd0;
    	always @(posedge clk_50m)
    		if(cnt>0)
    			rst <= 'd1;
    		else
    			rst <= rst;
    			
    		always @(posedge clk_50m)
    			if(cnt == 'd60000)/'d57287
    				cnt <= 'd0;
    			else
    				cnt <= cnt + 'd1;
    		always @(posedge clk_50m)
    			if(cnt>'d10&&cnt<='d5208)
    				rx_pin_in <= 'd0;//1
    			else if(cnt>='d5208&&cnt<='d10415)
    				rx_pin_in <= 'd1;//2
    			else if(cnt>='d10416&&cnt<='d15623)
    				rx_pin_in <= 'd0;3
    			else if(cnt>='d15624&&cnt<='d20831)
    				rx_pin_in <= 'd1;///4
    			else if(cnt>='d20832&&cnt<='d26039)
    				rx_pin_in <= 'd0;5
    			else if(cnt>='d26040&&cnt<='d31247)
    				rx_pin_in <= 'd1;///6
    			else if(cnt>='d31248&&cnt<='d36455)
    				rx_pin_in <= 'd0;///7
    			else if(cnt>='d36456&&cnt<='d41663)
    				rx_pin_in <= 'd1;///8
    			else if(cnt>='d41664&&cnt<='d46871)
    				rx_pin_in <= 'd1;///9
    			else if(cnt>='d46872&&cnt<='d52079)
    				rx_pin_in <= 'd1;///10
    			else if(cnt>='d52080&&cnt<='d57287)
    				rx_pin_in <= 'd1;///11
    endmodule
    
    

    Isim行为仿真结果:

    图7 仿真结果

    从仿真波形中可以看出,当串行发送信号 01010101111时,在done信号拉高时接收数据完毕,显示接收的数据是11010101。因此,从仿真上看串口的接收可以正常工作。

     

    展开全文
  • 单片机(AT89C51)的串行接口及串行通信是非常重要的一项技术,我们需要有深度的解刨才可以理解透彻,既然进来了我肯定不会让你失望,点个小赞再走吧。 正式进入串口通信前我们需要了解什么是通信? 计算机与...
  • STM32串口通信协议和状态机模式程序,亲测能用。内有详细的讲解文档,很好的学习资料。
  • 摘要:提供一种简便、经济的方法,通过TINI平台实现串行接口设备与以太网的连接。一旦设备连接到以太网,就能提供TINI Web服务。 关键词:以太网 串行接口 TINI很多电子设备利用串行接口与其它设备进行通信,其中有...
  • 串行接口(UART)------verilog实现串口发送模块

    万次阅读 多人点赞 2018-11-19 12:08:06
    前面一篇博客实现已经分析并实现串行接口的接收模块。其中,串口的波特率对串口来说是一个比较重要的概念,因为其决定了接收或者发送一位数据所用的时间。由于FPGA所用的时钟通常远比串口的波特率快,所以在使用FPGA...
  • 并行接口和串行接口

    2019-11-05 14:32:30
    串口形容一下就是一条车道,而并口就是有8个车道同一时刻能传送8位(一个位元组)数据。...从原理上讲,串行传输是按位传输方式,只利用一条信号线进行传输,例如:要传送一个字节(8位)数据,是按照该...
  • 虽然近年来随着USB口的日趋流行,RS232接口串口作为一种传统的串口通信口有被取代的趋势。然而由于它具有较高的性价比和传输的可靠性Ⅲ。在传输速率要求不是很高的情况下,串口通信仍然具有其自身的优势。同时RS2
  • 51单片机的串行接口介绍

    千次阅读 2020-06-21 18:13:21
    51单片机的串行接口介绍串行口结构设置工作方式(串行口控制寄存器SCON)设置波特率 51单片机内部集成1~2个可编程通用异步串行通信接口(即UART),采用全双工制式。该通信接口有四种工作方式,并且 能设置各种...
  • 串行接口 - 维基百科,自由的百科全书 (wikipedia.org) RS232接口_百度百科 (baidu.com) RS-232 - 维基百科,自由的百科全书 (wikipedia.org) 1962年,体积较小的个人计算机还没有出现,那时电传打字机和计算机视频...
  • 汇编语言--8251串行接口应用试验

    千次阅读 2019-11-06 14:53:21
    自发自收试验:将3000H起始的10个单元中的起始数据发送到串口,然后自接自收保存到4000H起始的内存单元中 实验电路图 ;=========================================================== ; 文件名: A82512.ASM ; 功能...
  • 单片机串口理解

    2020-08-28 20:54:56
    串行接口:8051单片机的通讯方式有两种:并行通讯:数据的各位同时发送或接收。异步通讯:它用一个起始位表示字符的开始,用停止位表示字符的结束。在异步通讯中,CPU与外设之间必须有两项规定,即字符格式和波特率。...
  • 串口串行接口(serialport)的简称,也称为串行通信接口或COM接口。串口通信是指采用串行通信协议(serialcommunicaTIon)在一条信号线上将数据一个比特一个比特地逐位进行传输的通信模式。串口按电气标准及协议来...
  • 串行接口串口)是一种可以将接受来自CPU的并行数据字符转换为连续的串行数据流发送出去,同时可将接受的串行数据流转换为并行的数据字符供给CPU的器件。串口通信(Serial Communications)的概念非常简单,串口按...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 442,430
精华内容 176,972
关键字:

串行接口