精华内容
下载资源
问答
  • 数据的基本通信方式有并行通信和串行通信两种。1.并行通信 并行数据通信是指以字节或字为单位的数据传输方式,在这种数据传输方式中, 除了8根或16根数据线、一根公共线外, 还需要数据通信双方联络用的控制线,如下图...

    数据的基本通信方式有并行通信和串行通信两种。

    1.并行通信 并行数据通信是指以字节或字为单位的数据传输方式,在这种数据传输方式中, 除了8根或16根数据线、一根公共线外, 还需要数据通信双方联络用的控制线,如下图。

    edad3c2a8673152e5a1cc0b5942030aa.png

    并行通信

    并行数据通信的通信过程是:

    1. 发送方在发送数据之前, 首先判别接收方发出的应答信号线的状态,以决定是否可以发送数据。
    2. 发送方在确定可以发送数据后, 在数据线上发送数据, 并在选通线上输出一个状态信号给接收方, 表示数据线上的数据有效。
    3. 接收方在接收数据前, 先判别发送方发出的选通信号线的状态,以决定是否可以收数据。
    4. 接收方在确定可以接收数据后, 在数据线上接收数据, 并在应答信号线上输出一状态信号给发送方,表示可以再发送数据。并行传送时,一个数据的所有位同时传送,因此,每个数据位都需要一条单独的传输线。一个数据有多少二进制位就需要多少条传输线,一次即可传送完成。

    优缺点:并行通信传输速率快,但硬件成本高,不宜于远距离通信, 常用于近距离、高速度的数据传输场合。如用在PLC的内部各元器件之间、 主机与扩展模块或近距离智能块的处理器之间。

    2. 串行通信 串行通信是以二进制的位 (bit) 为单位的数据传输方式。 除了公共线外,数据传输在一个传输方向上只用一根通信线。这根线既作为数据线,又作为通信联络控制线,数据和联络信号在这根线上按位进行传输。 串行通信在传送数据时,数据的各个不同位分时使用同一根传输线,从低位开始一位接一位地依次传送, 数据有多少位就需要传送多少位,只要几条传输线就可以在两设备间交换信息, 如下图, 如由设备 1 向设备2传送一个8位数据1011 0011,则传送时由低位到高位一位接一位地依次传送。

    3800d5b283056e9aac3de9532099005c.png

    串行通信

    优缺点:串行通信传送速度慢, 但需要的信号线少,最少只需两根线, 可以大大节省成本,所以特别适合远距离传输。 串行通信多用于计算机与计算机之间、 计算机与 PLC之间,多台PLC 之间的数据传送。

    展开全文
  • 异步串行通信的数据格式如图所示。  图 异步串行通信的数据格式  异步通信数据第一位是开始位,在通信线上没有数据传送时处于逻辑“1”状态。当发送设备要发送一个字符数据时,首先发出一个逻辑“0”信号...
  • 针对大数据串口间通信,在常规UART串行数据通信的基础上,结合Cortex-M3微控制器中DMA控制器作用,实现DMA控制UART串口数据包收发。...提高了串行数据通信过程的MCU独立性和MCU利用效率。
  • 串行通信协议

    2012-11-11 23:04:00
    在现场数据采集和数据传输中大量采用接口方式,监控系统涉及较多串行通信接口和网络接口。 一、串行通信协议 计算机与外设或计算机之间通信通常有两种方式:并行通信和串行通信。...发送过程中,每发送...

    在现场数据采集和数据传输中大量采用接口方式,监控系统涉及较多的是串行通信接口和网络接口。
    一、串行通信协议
    计算机与外设或计算机之间的通信通常有两种方式:并行通信和串行通信。
    并行通信指数据的各位同时传送。并行方式传输数据速度快,但占用的通信线多,传输数据的可靠性随距离的增加而下降,只适用于近距离的数据传送。
    串行通信是指在单根数据线上将数据一位一位地依次传送。发送过程中,每发送完一个数据,再发送第二个,依此类推。接受数据时,每次从单根数据线上一位一位地依次接受,再把它们拼成一个完整的数据。在远距离数据通信中,一般采用串行通信方式,它具有占用通信线少、成本低等优点。
    1、串行通信的基本概念
    (1)同步和异步通信方式
    串行通信有两种最基本的通信方式:同步串行通信方式和异步串行通信方式。同步串行通信方式是指在相同的数据传送速率下,发送端和接受端的通信频率保持严格同步。由于不需要使用起始位和停止位,可以提高数据的传输速率,但发送器和接受器的成本较高。异步串行通信是指发送端和接受端在相同的波特率下不需要严格地同步,允许有相对的时间时延,即收、发两端的频率偏差在10%以内,就能保证正确实现通信。
    异步通信在不发送数据时,数据信号线上总是呈现高电平状态,称为空闲状态(又称MARK状态)。当有数据发送时,信号线变成低电平,并持续一位的时间,用于表示发送字符的开始,该位称为起始位,也称SPACE状态。起始位之后,在信号线上依次出现待发送的每一位字符数据,并且按照先低位后高位的顺序逐位发送。采用不同的字符编码方案,待发送的每个字符的位数不同,在5、6、7或8位之间选择。数据位的后面可以加上一位奇偶校验位,也可以不加,由编程指定。最后传送的是停止位,一般选择1位、1.5位或2位。
    (2)数据传送方式
    ①单工方式。单工方式采用一根数据传输线,只允许数据按照固定的方向传送。图8(a)中A只能作为发送器,B只能作为接收器,数据只能从A传送到B,不能从B传送到A。
    ②半双工方式。半双工方式采用一根数据传输线,允许数据分时地在两个方向传送,但不能同时双向传送。图8(b)中在某一时刻,A为发送器,B为接收器,数据从A传送到B;而在另一个时刻,A可以作为接收器,B作为发送器,数据从B传送到A。
    ③全双工方式。全双工方式采用两根数据传输线,允许数据同时进行双向传送。图8(c)中A和B具有独立的发送器和接收器,在同一时刻,既允许A向B发送数据,又允许B向A发送数据。
    (3)波特率
    波特率是指每秒内传送二进制数据的位数,以b/s和bps(位/秒)为单位。它是衡量串行数据传送速度快慢的重要指标和参数。计算机通信中常用的波特率是:110,300,600,1200,2400,4800,9600,19200bps。

    转载于:https://www.cnblogs.com/lele/articles/2765597.html

    展开全文
  • UART串行通信

    千次阅读 2017-06-24 11:36:18
    异步通信是指通信发送与接收设备使用各自的时钟控制数据的发送和接收过程。为使双方的收发协调,要求发送和接收设备的时钟尽可能一致。 异步通信的两个关键: 第一,数据单元——帧,它是双方约定好的数据格式;...

    什么是串行通信?

    将数据字节分成一位一位的形式在一条传输线上逐位地发送。

    优点:成本低,控制复杂。

    什么是异步通信?

    异步通信是指通信的发送与接收设备使用各自的时钟控制数据的发送和接收过程。为使双方的收发协调,要求发送和接收设备的时钟尽可能一致。 异步通信的两个关键:

    第一,数据单元——帧,它是双方约定好的数据格式;

    第二,波特率,它决定了‘帧’里每一位的时间长度。

    异步通信的特点:不要求收发双方时钟的严格一致,实现容易,设备开销较小,但每个字符要附加23位用于起止位,各帧之间还有间隔,因此传输效率不高。



    UART定义:

    UART是一种通用串行数据总线,用于异步通信。该总线双向通信,可以实现全双工传输和接收。在嵌入式设计中,UART用来主机与辅助设备通信,如汽车音响与外接AP之间的通信,与PC机通信包括与监控调试器和其它器件,如EEPROM通信。
     
    计算机与UART:
     
    因为计算机内部采用并行数据,不能直接把数据发到Modem,必须经过UART整理才能进行异步传输,其过程 为:CPU先把准备写入串行设备的数据放到UART的寄存器(临时内存块)中,再通过FIFO(First Input First Output,先入先出队列)传送到串行设备,若是没有FIFO,信息将变得杂乱无章,不可能传送到Modem。
    它是用于控制计算机与串行 设备的芯片。有一点要注意的是,它提供了RS-232C数据终端设备接口,这样计算机就可以和调制解调器或其它使用RS-232C接口的串行设备通信了。 作为接口的一部分,UART还提供以下功能:将由计算机内部传送过来的并行数据转换为输出的串行数据流。将计算机外部来的串行数据转换为字节,供计算机内 部并行数据的器件使用。在输出的串行数据流中加入奇偶校验位,并对从外部接收的数据流进行奇偶校验。在输出数据流中加入启停标记,并从接收数据流中删除启 停标记。处理由键盘或鼠标发出的中断信号(键盘和鼠标也是串行设备)。可以处理计算机与外部串行设备的同步管理问题。有一些比较高档的UART还提供输入 输出数据的缓冲区,现在比较新的UART是16550,它可以在计算机需要处理数据前在其缓冲区内存储16字节数据,而通常的UART是8250。现在如 果您购买一个内置的调制解调器,此调制解调器内部通常就会有16550 UART。
     
    UART是计算机中串行通 信端口的关键部分。在计算机中,UART相连于产生兼容RS232规范信号的电路。RS232标准定义逻辑“1”信号相对于地为-3到-15伏,而逻辑 “0”相对于地为+3到+15伏。所以,当一个微控制器中的UART相连于PC时,它需要一个RS232驱动器来转换电平。
    Uart这里指的是TTL电平的串口;RS232指的是RS232电平的串口。
    TTL电平是5V的,而RS232是负逻辑电平,它定义+5~+12V为低电平,而-12~-5V为高电平。
    Uart串口的RXD、TXD等一般直接与处理器芯片的引脚相连,而RS232串口的RXD、TXD等一般需要经过电平转换(通常由Max232等芯片进行电平转换)才能接到处理器芯片的引脚上,否则这么高的电压很可能会把芯片烧坏。
    我们平时所用的电脑的串口就是RS232的,当我们在做电路工作时,应该注意下外设的串口是Uart类型的还是RS232类型的,如果不匹配,应当找个转换线(通常这根转换线内有块类似于Max232的芯片做电平转换工作的),可不能盲目地将两串口相连。
     
    UART如何通信:

    UART首先将接收到的并行数据转换成串行数据来传输。消息帧从一个低位起始位开始,后面是5~8个数据位,一个可用的奇偶位和一个或几个高位停止位。接 收器发现开始位时它就知道数据准备发送,并尝试与发送器时钟频率同步。如果选择了奇偶,UART就在数据位后面加上奇偶位。奇偶位可用来帮助错误校验。
    在接收过程中,UART从消息帧中去掉起始位和结束位,对进来的字节进行奇偶校验,并将数据字节从串行转换成并行。UART也产生额外的信号来指示发送和接收的状态。例如,如果产生一个奇偶错误,UART就置位奇偶标志。

    UART通信速率:

    数据传输可以首先从最低有效位(LSB)开始。然而,有些UART允许灵活选择先发送最低有效位或最高有效位(MSB)。微控制器中的UART传送数据的 速度范围为每秒几百位到1.5Mb。例如,嵌入在ElanSC520微控制器中的高速UART通信的速度可以高达1.152Mbps。UART波特率还受 发送和接收线对距离(线长度)的影响。
    目前,市场上有只支持异步通信和同时支持异步与同步通信的两种硬件可用于UART。前者就是UART名字本身的含义,在摩托罗拉微控制器中被称为串行通信 接口(SCI);Microchip微控制器中的通用同步异步收发器(USART)和在富士通微控制器中的UART是后者的两个典型例子。

    UART通信协议:

    UART作为异步串口通信协议的一种,工作原理是将传输数据的每个字符一位接一位地传输。
    其中各位的意义如下:
    起始位:先发出一个逻辑”0”的信号,表示传输字符的开始。
    资料位:紧接着起始位之后。资料位的个数可以是4、5、6、7、8等,构成一个字符。通常采用ASCII码。从最低位开始传送,靠时钟定位。
    奇偶校验位:资料位加上这一位后,使得“1”的位数应为偶数(偶校验)或奇数(奇校验),以此来校验资料传送的正确性。
    停止位:它是一个字符数据的结束标志。可以是1位、1.5位、2位的高电平。 由于数据是在传输线上定时的,并且每一个设备有其自己的时钟,很可能在通信中两台设备间出现了小小的不同步。因此停止位不仅仅是表示传输的结束,并且提供 计算机校正时钟同步的机会。适用于停止位的位数越多,不同时钟同步的容忍程度越大,但是数据传输率同时也越慢。
    空闲位:处于逻辑“1”状态,表示当前线路上没有资料传送。
    波特率:是衡量资料传送速率的指标。表示每秒钟传送的二进制位数。例如资料传送速率为120字符/秒,而每一个字符为10位,则其传送的波特率为10×120=1200位/秒=1200波特。
    UART的作用
    1. 发送/接收逻辑
    发送逻辑对从发送FIFO 读取的数据执行“并→串”转换。控制逻辑输出起始位在先的串行位流,并且根据控制寄存器中已编程的配置,后面紧跟着数据位(注意:最低位 LSB 先输出)、奇偶校验位和停止位。
    在检测到一个有效的起始脉冲后,接收逻辑对接收到的位流执行“串→并”转换。此外还会对溢出错误、奇偶校验错误、帧错误和线中止(line-break)错误进行检测,并将检测到的状态附加到被写入接收FIFO 的数据中。
    2.波特率的产生
    波特率除数(baud-rate divisor)是一个22 位数,它由16 位整数和6 位小数组成。波特率发生器使用这两个值组成的数字来决定位周期。通过带有小数波特率的除法器,在足够高的系统时钟速率下,UART 可以产生所有标准的波特率,而误差很小。
    3. 数据收发
    发送时,数据被写入发送FIFO。如果UART 被使能,则会按照预先设置好的参数(波特率、数据位、停止位、校验位等)开始发送数据,一直到发送FIFO 中没有数据。一旦向发送FIFO 写数据(如果FIFO 未空),UART 的忙标志位BUSY 就有效,并且在发送数据期间一直保持有效。BUSY 位仅在发送FIFO 为空,且已从移位寄存器发送最后一个字符,包括停止位时才变无效。即 UART 不再使能,它也可以指示忙状态。BUSY 位的相关库函数是UARTBusy( )
    在UART 接收器空闲时,如果数据输入变成“低电平”,即接收到了起始位,则接收计数器开始运行,并且数据在Baud16 的第8 个周期被采样。如果Rx 在Baud16 的第8 周期仍然为低电平,则起始位有效,否则会被认为是错误的起始位并将其忽略。
    如果起始位有效,则根据数据字符被编程的长度,在 Baud16 的每第 16 个周期对连续的数据位(即一个位周期之后)进行采样。如果奇偶校验模式使能,则还会检测奇偶校验位。
    最后,如果Rx 为高电平,则有效的停止位被确认,否则发生帧错误。当接收到一个完整的字符时,将数据存放在接收FIFO 中。
    4. 中断控制
    出现以下情况时,可使UART 产生中断:
    FIFO 溢出错误
    线中止错误(line-break,即Rx 信号一直为0 的状态,包括校验位和停止位在内)
    奇偶校验错误
    帧错误(停止位不为1)
    接收超时(接收FIFO 已有数据但未满,而后续数据长时间不来)
    发送
    接收
    由于所有中断事件在发送到中断控制器之前会一起进行“或运算”操作,所以任意时刻 UART 只能向中断产生一个中断请求。通过查询中断状态函数UARTIntStatus( ),软件可以在同一个中断服务函数里处理多个中断事件(多个并列的if 语句)。
    5. FIFO 操作 FIFO 是“First-In First-Out”的缩写,意为“先进先出”,是一种常见的队列操作。 Stellaris 系列ARM 的UART 模块包含有2 个16 字节的FIFO:一个用于发送,另一个用于接收。可以将两个FIFO 分别配置为以不同深度触发中断。可供选择的配置包括:1/8、 1/4、1/2、3/4 和7/8 深度。例如,如果接收FIFO 选择1/4,则在UART 接收到4 个数据时产生接收中断。
    发送FIFO的基本工作过程: 只要有数据填充到发送FIFO 里,就会立即启动发送过程。由于发送本身是个相对缓慢的过程,因此在发送的同时其它需要发送的数据还可以继续填充到发送 FIFO 里。当发送 FIFO 被填满时就不能再继续填充了,否则会造成数据丢失,此时只能等待。这个等待并不会很久,以9600 的波特率为例,等待出现一个空位的时间在1ms 上下。发送 FIFO 会按照填入数据的先后顺序把数据一个个发送出去,直到发送 FIFO 全空时为止。已发送完毕的数据会被自动清除,在发送FIFO 里同时会多出一个空位。
    接收FIFO的基本工作过程: 当硬件逻辑接收到数据时,就会往接收FIFO 里填充接收到的数据。程序应当及时取走这些数据,数据被取走也是在接收FIFO 里被自动删除的过程,因此在接收 FIFO 里同时会多出一个空位。如果在接收 FIFO 里的数据未被及时取走而造成接收FIFO 已满,则以后再接收到数据时因无空位可以填充而造成数据丢失。
    收发FIFO 主要是为了解决UART 收发中断过于频繁而导致CPU 效率不高的问题而引入的。在进行 UART 通信时,中断方式比轮询方式要简便且效率高。但是,如果没有收发 FIFO,则每收发一个数据都要中断处理一次,效率仍然不够高。如果有了收发FIFO,则可以在连续收发若干个数据(可多至14 个)后才产生一次中断然后一并处理,这就大大提高了收发效率。
    完全不必要担心FIFO 机制可能带来的数据丢失或得不到及时处理的问题,因为它已经帮你想到了收发过程中存在的任何问题,只要在初始化配置UART 后,就可以放心收发了, FIFO 和中断例程会自动搞定一切。
    6. 回环操作
    UART 可以进入一个内部回环(Loopback)模式,用于诊断或调试。在回环模式下,从Tx 上发送的数据将被Rx 输入端接收。
    7. 串行红外协议
    在某些 Stellaris 系列 ARM 芯片里,UART 还包含一个 IrDA 串行红外(SIR)编码器/ 解码器模块。IrDA SIR 模块的作用是在异步UART数据流和半双工串行SIR 接口之间进行转换。片上不会执行任何模拟处理操作。SIR 模块的任务就是要给UART 提供一个数字编码输出和一个解码输入。UART 信号管脚可以和一个红外收发器连接以实现IrDA SIR物理层连接。
    如图所示,为UART 的IrDA SIR 模块基本应用电路。D1 为红外发射管,Q2 为红外接收管。
    UART的基本结构及端口介绍
    ⑴输出缓冲寄存器,它接收CPU从数据总线上送来的并行数据,并加以保存。
    ⑵ 输出移位寄存器,它接收从输出缓冲器送来的并行数据,以发送时钟的速率把数据逐位移出,即将并行数据转换为串行数据输出。
    ⑶ 输入移位寄存器,它以接收时钟的速率把出现在串行数据输入线上的数据逐位移入,当数据装满后,并行送往输入缓冲寄存器,即将串行数据转换成并行数据。
    ⑷ 输入缓冲寄存器,它从输入移位寄存器中接收并行数据,然后由CPU取走。
    ⑸控制寄存器,它接收CPU送来的控制字,由控制字的内容,决定通信时的传输方式以及数据格式等。例如采用异步方式还是同步方式,数据字符的位数,有无奇偶校验,是奇校验还是偶校验,停止位的位数等参数。
    ⑹状态寄存器。状态寄存器中存放着接口的各种状态信息,例如输出缓冲区是否空,输入字符是否准备好等。在通信过程中,当符合某种状态时,接口中的状态检测逻辑将状态寄存器的相应位置“1”,以便让CPU查询。

    UART设计思想:

    数据发送的思想是,当启动字节发送时,通过TxD先发起始位,然后发数据位和奇偶数效验位,最后再发停止位,发送过程由发送状态机控制,每次中断只发送1个位,经过若干个定时中断完成1个字节帧的发送。
    数据接收的思想是,当不在字节帧接收过程时,每次定时中断以3倍的波特率监视RxD的状态,当其连续3次采样电平依 次为1、0、0时,就认为检测到了起始位,则开始启动一次字节帧接收,字节帧接收过程由接收状态机控制,每次中断只接收1个位,经过若干个定时中断完成1 个字节帧的接收。
    为了提高串口的性能,在发送和接收上都实现了FIFO功能,提高通信的实时性。FIFO的长度可以进行自由定义,适应用户的不同需要。
    波特率的计算按照计算公式进行,在设置最高波特率时一定要考虑模拟串口程序代码的执行时间,该定时时间必须大于模拟串口的程序的规定时间。单片机的执行速度越快,则可以实现更高的串口通讯速度
    展开全文
  • 摘要:本文针对由FPGA构成高速数据采集系统数据处理能力弱问题,提出FPGA与单片机实现数据串行通信的解决方案。在通信过程中完全遵守RS232协议,具有较强通用性和推广价值。  1 前言  现场可编程逻辑器件...
  • 摘要:本文针对由FPGA构成高速数据采集系统数据处理能力弱问题,提出FPGA与单片机实现数据串行通信的解决方案。在通信过程中完全遵守RS232协议,具有较强通用性和推广价值。  1 前言  现场可编程逻辑器件...
  • 1. 处理器与外部设备通信的两种方式: 并行通信和串行通信 并行通信是指数据的各个位用多条数据线同时进行传输 优点:传输速度快 ...发送方和接收方使用各自的时钟控制数据的发送和接收过程。 3. 串行通

    1. 处理器与外部设备通信的两种方式:
    并行通信和串行通信

    并行通信是指数据的各个位用多条数据线同时进行传输
    在这里插入图片描述
    优点:传输速度快
    缺点:占用引脚资源多
    串行通信是将数据分成一位一位的形式在一条传输线上逐个传输
    在这里插入图片描述
    优点:通信线路简单,占用引脚资源少
    缺点:传输速度慢
    2. 串行通信的通信方式:
    同步通信和异步通信

    同步通信:带有时钟同步信号的数据传输;发送方和接收方在同一时钟的控制下,同步传输数据。
    在这里插入图片描述
    异步通信:不同时钟同步信号的数据传输。发送方和接收方使用各自的时钟控制数据的发送和接收过程。
    在这里插入图片描述
    3. 串行通信的传输方向
    单工:数据只能沿一个方向传输
    半双工:数据传输可以沿两个方向,但需要分时进行
    全双工:数据可以同时进行双向传输
    在这里插入图片描述
    4. 常见的串行通信接口
    在这里插入图片描述
    5. UART
    是一种采用异步串行通信方式的通用异步收发传输器
    功能:
    它在发送数据时将并行数据转换成串行数据来输出,在接收数据时将接收到的串行数据转换成并行数据
    a. 协议层:通信协议(包括数据格式、数据速率等)
    UART串口通信需要两根信号线来实现,一根用于串口发送,另外一根负责串口接收
    在这里插入图片描述
    串口通信常用的波特率有9600/19200/38400/115200等
    b. 物理层:接口类型,电平标准等
    针对异步串行通信的接口标准有RS232、RS422、RS485
    在这里插入图片描述
    接口定义:
    在这里插入图片描述
    在这里插入图片描述
    6. 串口通信实验

    module uart_top(
    	input	sys_clk,
    	input	sys_rst_n,
    	input	uart_rxd,
    	output	uart_txd
    );
    	parameter	CLK_FREQ = 50000000;
    	parameter	UART_BPS = 115200;
    	
    	wire		uart_en_w;
    	wire [7:0]	uart_data_w;
    
    	uart_recv #(
    	.CLK_FREQ	(CLK_FREQ),
    	.UART_BPS	(UART_BPS))
    	u_uart_recv(
    	.sys_clk	(sys_clk),
    	.sys_rst_n	(sys_rst_n),
    	
    	.uart_rxd	(uart_rxd),
    	.uart_done	(uart_en_w),
    	.uart_data	(uart_data_w)
    	);
    
    	uart_send #(
    	.CLK_FREQ	(CLK_FREQ),
    	.UART_BPS	(UART_BPS))
    	u_uart_send(
    	.sys_clk	(sys_clk),
    	.sys_rst_n	(sys_rst_n),
    	
    	.uart_en	(uart_en_w),
    	.uart_din	(uart_data_w),
    	.uart_data	(uart_txd)
    	);
    endmodule
    
    module uart_recv(
    	input				sys_clk,
    	input				sys_rst_n,
    		
    	input				uart_rxd,
    	output	reg			uart_done,
    	output	reg	[7:0]	uart_data
    );
    
    	parameter	CLK_FREQ = 50000000;
    	parameter	UART_BPS = 9600;
    	localparam	BPS_CNT  = CLK_FREQ/UART_BPS;
    	
    	reg			uart_rxd_d0;
    	reg			uart_rxd_d1;
    	reg	[15:0]	clk_cnt;
    	reg	[3:0]	rx_cnt;
    	reg	[7:0]	rxdata;
    	reg			rx_flag;
    	
    	wire		start_flag;
    	
    	//捕获接收端口下降沿(起始位),得到一个时钟周期的脉冲信号
    	assign	start_flag = uart_rxd_d1 & (~uart_rxd_d0);
    	
    	always @(posedge sys_clk or negedge sys_rst_n) begin
    		if(!sys_rst_n) begin
    			uart_rxd_d0 <= 1'b0;
    			uart_rxd_d1 <= 1'b0;
    		end
    		else begin
    			uart_rxd_d0 <= uart_rxd;
    			uart_rxd_d1 <= uart_rxd_d0;			
    		end
    	end
    	
    	always @(posedge sys_clk or negedge sys_rst_n) begin
    		if(!sys_rst_n)
    			rx_flag <= 1'b0;
    		else begin
    			if(start_flag)
    				rx_flag <= 1'b1;
    			else if((rx_cnt == 4'd9) && (clk_cnt == BPS_CNT/2))//计数到停止位中间时,停止计数,因为连续发送数据的时候,停止位一个周期后就是下降沿,又要进行下一次数据的接收
    				rx_flag <= 1'b0;
    			else
    				rx_flag <= rx_flag;
    		end
    	end
    	
    	always @(posedge sys_clk or negedge sys_rst_n) begin
    		if(!sys_rst_n) begin
    			clk_cnt <= 16'd0;
    			rx_cnt <= 4'd0;
    		end	
    		else if(rx_flag) begin
    			if(clk_cnt < BPS_CNT -1) begin
    				clk_cnt <= clk_cnt + 1'b1;
    				rx_cnt <= rx_cnt;
    			end
    			else begin
    				clk_cnt <= 16'd0;
    				rx_cnt <= rx_cnt + 1'b1;			
    			end
    		end
    		else begin
    				clk_cnt <= 16'd0;
    				rx_cnt <= 4'd0;	
    		end
    	end
    	
    	//根据接收数据技术来寄存uart接收端口数据
    	always @(posedge sys_clk or negedge sys_rst_n) begin
    		if(!sys_rst_n)
    			rxdata <= 8'd0;
    		else if(rx_flag) begin
    			if(clk_cnt == BPS_CNT/2) begin  //计数到中间时数据更加稳定
    				case(rx_cnt)
    				4'd1:rxdata[0] <= uart_rxd_d1;
    				4'd2:rxdata[1] <= uart_rxd_d1;
    				4'd3:rxdata[2] <= uart_rxd_d1;
    				4'd4:rxdata[3] <= uart_rxd_d1;
    				4'd5:rxdata[4] <= uart_rxd_d1;
    				4'd6:rxdata[5] <= uart_rxd_d1;
    				4'd7:rxdata[6] <= uart_rxd_d1;
    				4'd8:rxdata[7] <= uart_rxd_d1;
    				default:;
    				endcase
    			end
    			else	
    				rxdata <= rxdata;
    		end
    		else
    			rxdata <= 8'd0;
    	
    	always @(posedge sys_clk or negedge sys_rst_n) begin
    		if(!sys_rst_n) begin
    			uart_data <= 8'd0;
    			uart_done <= 1'b0;
    		end
    		else if(rx_cnt == 4'd9) begin
    			uart_data <= rxdata;
    			uart_done <= 1'b1;		
    		end
    		else begin
    			uart_data <= 8'd0;
    			uart_done <= 1'b0;
    		end
    	end
    endmodule
    
    module uart_send(
    	input				sys_clk,
    	input				sys_rst_n,
    		
    	input				uart_en,
    	output	reg			uart_txd,
    	output	reg	[7:0]	uart_din
    );
    
    	parameter	CLK_FREQ = 50000000;
    	parameter	UART_BPS = 9600;
    	localparam	BPS_CNT  = CLK_FREQ/UART_BPS;
    	
    	reg			uart_en_d0;
    	reg			uart_en_d1;
    	reg	[15:0]	clk_cnt;
    	reg	[3:0]	tx_cnt;
    	reg	[7:0]	tx_data;
    	reg			tx_flag;
    	
    	wire		en_flag;
    	
    	assign	en_flag = ~uart_en_d1 & uart_en_d0;
    	
    	always @(posedge sys_clk or negedge sys_rst_n) begin
    		if(!sys_rst_n) begin
    			uart_en_d0 <= 1'b0;
    			uart_en_d1 <= 1'b0;
    		end
    		else begin
    			uart_en_d0 <= uart_en;
    			uart_en_d1 <= uart_en_d0;			
    		end
    	end
    	
    	always @(posedge sys_clk or negedge sys_rst_n) begin
    		if(!sys_rst_n) begin
    			tx_flag <= 1'b0;
    			tx_data <= 8'd0;
    		end
    		else if(en_flag) begin
    				tx_flag <= 1'b1;
    				tx_data <= uart_din;
    			end
    			else if((tx_cnt == 4'd9) && (clk_cnt == BPS_CNT/2)) begin
    				tx_flag <= 1'b0;
    				tx_data <= 8'd0;
    			end
    			else begin
    				tx_flag <= tx_flag;
    				tx_data <= tx_data;
    			end
    	end
    	
    	always @(posedge sys_clk or negedge sys_rst_n) begin
    		if(!sys_rst_n) begin
    			clk_cnt <= 16'd0;
    			tx_cnt <= 4'd0;
    		end	
    		else if(tx_flag) begin
    			if(clk_cnt < BPS_CNT -1) begin
    				clk_cnt <= clk_cnt + 1'b1;
    				tx_cnt <= tx_cnt;
    			end
    			else begin
    				clk_cnt <= 16'd0;
    				tx_cnt <= tx_cnt + 1'b1;			
    			end
    		end
    		else begin
    				clk_cnt <= 16'd0;
    				tx_cnt <= 4'd0;	
    		end
    	end
    	
    	always @(posedge sys_clk or negedge sys_rst_n) begin
    		if(!sys_rst_n)
    			uart_txd <= 1'b1;
    		else if(tx_flag) begin
    				case(tx_cnt)
    					4'd0:uart_txd <= 1'b0;
    					4'd1:uart_txd <= tx_data[0];
    					4'd2:uart_txd <= tx_data[1];
    					4'd3:uart_txd <= tx_data[2];
    					4'd4:uart_txd <= tx_data[3];
    					4'd5:uart_txd <= tx_data[4];
    					4'd6:uart_txd <= tx_data[5];
    					4'd7:uart_txd <= tx_data[6];
    					4'd8:uart_txd <= tx_data[7];
    					4'd9:uart_txd <= 1'b1;
    					default:;
    				endcase
    		end
    		else
    			rxdata <= 8'd0;
    	end
    	
    endmodule
    
    
    endmodule
    
    展开全文
  • 在通信系统中,通信芯片是整个硬件平台基础,它不仅完成OSI物理层中的数据发送和接收,还能根据传输方式和协议不同实现不同的数据校验方式及数据组帧格式。  目前,许多厂商都提供通用的串行通信芯片,其传输...
  • 在通信系统中,通信芯片是整个硬件平台基础,它不仅完成OSI物理层中的数据发送和接收,还能根据传输方式和协议不同实现不同的数据校验方式及数据组帧格式。  目前,许多厂商都提供通用的串行通信芯片,其传输...
  • 串行通信 计算机网络和TCP/IP协议

    千次阅读 2014-12-16 13:58:25
    在现场数据采集和数据传输中大量采用接口方式,监控系统涉及较多串行通信接口和网络接口。 一、串行通信协议 计算机与外设或计算机之间通信通常有两种方式:并行通信和串行通信。...发送过程中,每发送完一个
  • 串行通信与协议

    2019-03-29 17:48:50
    问题: 1.异步传输Tclk和Rclk的频率关系是事先约定的,这个是属于协议...3.假设Tx端发送数据过程中断开串口,再重新连接串口,此时Rx的接收数据的有错误或者丢帧问题,这些问题通过传输协议重传或者自行纠错 a.手...
  • 串行通信接口标准一、RS-232C接口 RS-232C是EIA(美国电子工业协会)1969年修订RS-232C标准。RS-232C定义了数据终端...(阳头)2、功能特性 4、过程特性过程特性规定了信号之间时序关系,以便正确地接收和发送数据 。 ...
  • 单片机串行通信总结

    2013-06-09 11:41:22
    一、串口通信模式 ...发送过程:TI=0时,SBUF自动加上起始位、停止位发送发送完TI置位,并自动让TXD保持高电平,TI由软件复位。  接收操作必须在RI=0 & REN=1下运行,在接收到停止位时,必须满足RI=
  • 初探QT串行数据

    2017-11-07 12:14:43
    在处理网络通信串行数据过程中(这里主要指socket通信串行数据的发送和解析是一个重要的环节,对于socket通信常用的传输格式为字节流,所以通信数据的串行化处理十分重要。这里首先说明下对串行数据解析的两种...
  • 比如发送端是0时刻发出去,假设发送数据需要1ms,那接收到数据也应该是1ms时刻了,发送端时钟和接受端时钟相差一个发送过程时间,怎么会是时钟同步呢? 回答: 接收端时钟同步不是为了获得和发端完全...
  • 数据通信技术

    2020-12-13 11:41:39
    一、数据传输类型 (1)串并行通信 ...接收方通过发送方发送数据的时间信息来校验自己的时间 等待同步 保证通信双方正确传输数据的每一个过程 二、双绞线 双绞线分为屏蔽双绞线和非屏蔽双绞线 三
  • 摘要:本文针对由FPGA构成高速数据采集系统数据处理能力弱问题,提出FPGA与单片机实现数据串行通信的解决方案。在通信过程中完全遵守RS232协议,具有较强通用性和推广价值。  1 前言  现场可编程逻辑器件...
  • 摘要:本文针对由FPGA构成高速数据采集系统数据处理能力弱问题,提出FPGA与单片机实现数据串行通信的解决方案。在通信过程中完全遵守RS232协议,具有较强通用性和推广价值。  1 前言  现场可编程逻辑器件...
  • 通信格式和数据格式

    千次阅读 2021-01-17 16:56:25
    通信格式就是通信的方式,在串行异步通信中,具体通信格式就是怎么发送一个字符的过程和约定。保证了正确接收一个字符。 在串行异步通信中,发送方可以在任意时刻发送字符,而且两个字符之间可以停顿。这就需要正确...
  • 简单来说,就是发送数据过程中被中断了,因为字节和位数问题产生乱码。 解决方法 考虑到之后还是要用到ES=1;所以只能局部关闭再打开。 #include"reg52.h" #include"string.h" typedef unsigned int u16; ...
  • 串口通信的基本原理详解

    千次阅读 多人点赞 2020-07-01 11:00:01
    异步数据的数据发送过程 异步通信的数据接收过程 9针串口(DB9) TTL与RS232区别 TTL: RS232: 串口通信的数据格式 通讯方式 偶校验与奇校验 停止位 波特率(波特率就是每秒钟传输的数据位数) 典型的...
  • 串行异步传送在数据传送过程中,发送方可以在任意时刻传送字符,两个字符之间时间间隔是不固定。 那么,以下问题就是必须要解决: 首先:如何知道开始传送,如何知道发送完毕。 其次:发送字符位数。 第三...
  • 原理计算机串行通信基础随着多微机系统的广泛应用和计算机网络技术的...串行通信的基本概念异步通信异步通信是指通信的发送与接收设备使用各自的时钟控制数据的发送和接收过程。为使双方的收发协调,要求发送和接收...
  • 嵌入式开发的通信协议

    千次阅读 2018-05-20 13:40:48
    异步通信是指通信发送与接收设备使用各自的时钟控制数据的发送和接收过程。为使双方的收发协调,要求发送和接收设备的时钟尽可能一致。 异步通信的两个关键: 第一,数据单元——帧,它是双方约定好的数据格式;...
  • 信源:产生和发送数据的源头;信宿:接受数据的终点。 信道:信号的传输媒介。 数据传输方式:串行传输和并行传输。 通信双方的交互方式:单工通信、半双工通信和全双工通信。 速率(数据率):指数据的传输速率,表示...
  • 它由一对16位同步串行转换通道组成,可直接和DSP连接进行通信。   TLC320AD50C特点如下:   (1)器件中ADC为64倍过采样,DAC为256倍过采样(内部);  (2)带有内建抗混叠滤波器和sinx/x补偿
  • 它由一对16位同步串行转换通道组成,可直接和DSP连接进行通信。   TLC320AD50C特点如下:   (1)器件中ADC为64倍过采样,DAC为256倍过采样(内部);  (2)带有内建抗混叠滤波器和sinx/x补偿;
  • 串行通信:所传送数据的各位按顺序一位一位地发送或接收。三根线、发送、接收、地。 特点:速度慢,成本低,适合远距离传输。 并行通信: 所传送数据的各位同时发送或接收,数据有多少位就需要多少根数据线。 特点...

空空如也

空空如也

1 2 3 4 5 ... 12
收藏数 235
精华内容 94
关键字:

串行通信发送数据的过程