• 首先弄懂串行通信和并行通信以及串口通信和并口通信的概念。 ...串口通信:是一实际通信方式,但是我们可以几乎看成一样. 串行接口:简称串口,或串行通信接口,或串行通讯接口(通常指com口)。

    首先弄懂串行通信和并行通信以及串口通信和并口通信的概念。

    串行通行:它是一个概念,它是指数据一位一位地顺序传送,其特点就是通信线路

    简单,只要一对传输线就可实现双向通信,适用于远距离通信,但传输速度慢。

    包括普通的串口通信,I2C,SPI,UART...

    串口通信:是一种实际通信方式,但是我们可以几乎看成一样.

    串行接口:简称串口,或串行通信接口,或串行通讯接口(通常指com口)。

    并行通信:如果一组数据的各数据位在多条线上同时被传输,那么就是并行通信。

    并口接口:就是一种接口,各数据位同时被传输,传输速度快,效率高,一边可用于MCU。


    串行通信又可分为单工,半双工和全双工

    单工:信息只能单向传送。

    半双工:信息能双向传送但不能同时。

    全双工:信息能同时双向传送。

    串行通信还可分为同步通信和异步通信

    同步通信(两根线):是把许多字符组成一个信息组,这样,字符可以一个接一个地传输,但是,

    在每组信息(通常称为信息帧)的开始要加上同步字符,在没有信息要传输时,要填上空字符,

    因为同步传输不允许有间隙。同步方式下,发送方除了发送数据,还要传输同步时钟信号,

    信息传输的双方用同一个时钟信号确定传输过程中每1位的位置

    异步通信(一根信号线,没有时钟线)是一种很常用的通信方式。异步通信在发送字符时,所发送的字符之间的时间

    间隔可以是任意的。当然,接收端必须时刻做好接收的准备。发送端可以在任意时刻开始发送字符,

    因此必须在每一个字符的开始和结束的地方加上标志,即加上开始位和停止位,以便使接收端能够

    正确地将每一个字符接收下来。异步通信的好处是通信设备简单、便宜,但传输效率较低(因为开始位和停止位的开销所占比例较大)。

    同步通信与异步通信区别:

    1.同步通信要求接收端时钟频率和发送端时钟频率一致,发送端发送连续的比特流;异步通信时

    不要求接收端时钟和发送端时钟同步,发送端发送     完一个字节后,可经过任意长的时间间隔再发送下一个字节。
    2.同步通信效率高;异步通信效率较低。

    3.同步通信较复杂,双方时钟的允许误差较小;异步通信简单,双方时钟可允许一定误差。
    4.同步通信可用于点对多点;异步通信只适用于点对点。

    单片机中的SPI、UART、I2C

    1、SPI

        SPI允许单片机和外围设备或者单片机之间高速同步数据传输,SPI可以有主机和从机模式之选,通信的主从机之间通过移位寄存器同时交换数据。目前自己用的以主机模式居多。SPI需要四线:SS,MISO,MOSI,SCK。

       通信过程:在设置好SPI的工作模式:包括SCK频率(数据传输速率),工作速度,主从模式,以及数据接收发送对应的时钟极性。在主模式下,将SS拉低表示通信的开始,然后通过向SPI数据寄存器中写入一字节的数据后自动启动时钟SCK开始进行一次通信,通信完成后会产生相应的中断标志,标志一个字节数据的传送完成。通信完成后将SS脚拉高,表示通信过程已经结束。

       注意SS引脚的设置:当设置为从机模式时,SS引脚应设置为输入,拉低的时候SPI才能起作用,拉高的话是消极的SPI模式;在主机模式下,SS引脚可以设置,一般应设置为输出,如果设置为输入的话应保持为高,否则将不能进行正常的主机模式操作。

    2、USART

       USART的操作比较简单,主要是设置波特率,数据格式,以及中断允许位等,值得至于的是其USART IN SPI MODE,在SPI模式下的USART的操作跟SPI操作差不多,主要是Clock的设置,然后发送数据还是通过USART的中断进行

    3、I2C

       I2C接口是简单强大的通信接口,只需要两根双向总线(时钟和数据线),SCL和SDA,即可实现一个主机和最多128个从机进行通信。模拟I2C接口的过程:启动I2C,一般是在SCL为高时将SDA拉低启动数据发送,SDA只有在SCL为低时才能拉高拉低有效,在SCL为高时拉高拉低SDA只是用于停止启动I2C通信


    I2C总线是内部总线,用来连接内部系统内的芯片。
    串口通信是用来和系统外部的设别通信的。比如设备和设备之间通信。

    SPI,UAR,I2C都是串行通信方式,并行通信方式一般用的少,因为只适合

    短距离,一般用于MCU比较多,因为MCU它对数据的传输速度有要求,而且

    与塔相连的芯片一般会比较近。


    MCU 他的属性要比CPU(这里指单片机,其他地方应该也是) 强,它包括CPU的性能,

    且还有CPU没有的性能。



    展开全文
  • 由于大部分51单片机不支持在线调试功能,所以串口作为一有效的调试功能,所以在51单片机程序开发时,无法进行在线调试,不妨可以多采用串口来进行调试。 1.串口配置 51单片机配置除了需要配置2个8位寄存器SCON、...

    串口,作为单片机程序开发中最常用、最方便,也是应用最广泛的程序调试方法;无论是作为调试工具,打印出调试信息,还是对功能模块进行通信,串口是每个单片机开发人员最常用的单片机外设。
    由于大部分51单片机不支持在线调试功能,所以串口作为一种有效的调试功能,所以在51单片机程序开发时,无法进行在线调试,不妨可以多采用串口来进行调试。
    1.串口配置

    51单片机配置除了需要配置2个8位寄存器SCON、PCON外,还要配置定时器1的控制寄存器TMOD,因为串口在进行收发需要使用定时器来采样。
    (1)状态控制寄存器 SCON
    SCON 是一个逐位定义的 8 位寄存器,用于控制串行通信的方式选择、接收和发送,指 示串口的状态,SCON 即可以字节寻址也可以位寻址,字节地址 98H,地址位为 98H~9FH。 它的各个位定义如下:
    在这里插入图片描述
    SM0 和 SM1 是串口的工作方式选择位,2 个选择位对应 4 种工作方式,如下表,其中 Fosc 是振荡器的频率。
    在这里插入图片描述
    (2)电源与波特率控制寄存器
    控制寄存器 PCON 也是一个逐位定义的 8 位寄存器,目前仅仅有几位有定义,如下所示:
    在这里插入图片描述
    仅最高位 SMOD 与串口的控制有关,其他位与掉电方式有关。PCON 的地址为 87H 只能按 字节寻址,SMOD 是串行通信波特率系数控制位,当串口工作在工作方式 1、2 时,若使用 T1 作为波特率发生器其 SMOD=1 则波特率加倍。
    (3)定时器控制模式寄存器
    TMOD是定时器、计数器模式控制寄存器,它是一个逐位定义的8为寄存器,但只能使用字节寻址
    在这里插入图片描述
    当串口工作在工作方式0和2是,波特率固定,方式0时fosc/12;方式2时fosc/32或fosc/64(根据SMOD判断)。当串口工作在方式1时,波特率=(2^SMOD/32)*(单片机时钟频率/(256-X)),X是初值;C/T#为定时器和计数器选择位,0为定时器,1为计数器

    2.串口通用程序
    为了有较好的通用性,将串口程序配置为一个H文件和C文件,往后只要开发51单片机程序,都可以将该两个文件复制在工程中直接使用,无须修改。
    (1)uart.H

    #ifndef _UART_H_
    #define _UART_H_
    
    #include "reg52.h"
    
    void UartInit(void);
    void Send_string(unsigned char *c);
    void Send_Data(unsigned char DAT);
    
    #endif
    

    (2)uart.c

    #include "uart.h"
    
    //串口初始化
    void UartInit(void)
    {
    	/*串口初始化 */
    	TMOD = 0x20;	  //定时器T1使用工作方式2
    	SCON = 0x50;	  //工作方式1,,允许接收   
    	PCON = 0x10;
    	TH1 = 253;        // 设置初值,波特率9600bps
    	TL1 = 253;
    	TR1 = 1;          // 开始计时	
    	ES = 1;         //打开接收中断
    	EA = 1;           // 打开所以中断   
    	TI = 0;
    	RI = 0;
    }
    
    void Send_Data(unsigned char DAT)
    {
    	ES = 0;
    	TI=0;
    	SBUF = DAT ;
    	while(TI==0);
    	TI=0;
    	ES = 1;
    }
    
    void Send_string(unsigned char  *c)
    {
    	while(*c != '\0')
    	{
    		Send_Data(*c++);
    	}	
    }
    
    void RSINTR() interrupt 4 using 2
    {
    	EA=0;
    	if(TI==1) //发送中断	  
    	{
    		TI=0;
    	}
    
    	if(RI==1)	 //接收中断		  
    	{	
    
    		RI=0;								 
    
    	}
    	EA=1;
    }
    
    

    如需串口参考例程, 请关注公众号,首页回复“串口”获取资料
    在这里插入图片描述

    展开全文
  • 单片机对于很多人并不陌生,在学校的时候就需要用到开发板,参与实际项目之后,很多地方也需要用到单片机,下面对几种常见的单片机做一下比较,希望对初学者提供帮助。 51系列单片机  用过比较多的就是STC单片机...

     单片机对于很多人并不陌生,在学校的时候就需要用到开发板,参与实际项目之后,很多地方也需要用到单片机,下面对几种常见的单片机做一下比较,希望对初学者提供帮助。

    51系列单片机

     用过比较多的就是STC单片机,优点就是价格便宜,开发简单,主要应用于对速度、功耗要求不高的场合。如控制继电器,485通讯等,缺点是功耗大,速度慢,开发手段比较落后。

    MSP430单片机

     优点是功耗低、且相对速度较快,寻址方式很多,指令少,容易上手。适用于对功耗要求较高的场合。如使用干电池供电;缺点是程序空间占用很大(与PIC进行比较),瞬时掉电复位性能较差,读出简单写入麻烦等。

    STM32单片机

     优点是属于ARM内核的一个版本,超高性价比,片内资源丰富,专为高性能,低成本,低功耗的嵌入式应用设计,缺点是有些存储模块只能支持16位数据传输,如SPI等,几乎所有系列都是如此。升级的时候更多的只是对工艺速度的提升,这一点让人费解。

    PIC32单片机

     优点是从实际出发,重视产品性能,不搞单纯的功能累积,靠发展多种型号来满足不同的层次应用要求,缺点是价格高,开发软件是基于JAVA使用起来卡顿,芯片实际功耗比较大,使用过PIC32MX675F256H单片机,运行后能明显感觉到发热。
     以上单片机都是参与实际任务使用过的,每种单片机都有使用场合,根据经验,选择能满足要求的便宜的即可。
    展开全文
  • 单片机串口接收的几种常用的数据处理方法 一、为什么串口接收的数据需要处理 我们在做项目的时候经常会用到串口,当我们用串口和别的设备通讯的时候就需要严格遵循通讯协议,然而,仅仅是遵循通讯协议是不够的,因为...

    单片机串口接收的几种常用的数据处理方法

    一、为什么串口接收的数据需要处理
    我们在做项目的时候经常会用到串口,当我们用串口和别的设备通讯的时候就需要严格遵循通讯协议,然而,仅仅是遵循通讯协议是不够的,因为单片机串口受到别的信号干扰的时候,容易出现数据错误,特别是串口发送的第一个字节和最后一个字节。一旦出现这种情况,设备之间的通讯可能会受到影响,甚至会导致系统瘫痪。另外,串口收到数据的时候,我们也需要判断一帧数据的长度,特别是指令发送比较频繁的时候。因此,串口在接收到数据之后应该先进行数据处理,再执行命令,这样能够增强产品的稳定性。

    二、串口接收重点关注的几个标志
    为了保证通讯的稳定性,一般的通讯协议会加入帧头、帧尾、数据长度、校验这四个标志中的一个或多个。它们的作用如下:
    1、帧头:串口发送数据的第一个字节是最容易出错的,如果你把重要的指令放在第一个字节,一旦出现错误,可能会使从机执行错误的操作。而帧头能够有效规避这个问题。
    2、帧尾:和帧头类似,帧尾也能避免最后一个字节出错,同时,它也可以作为接收端接收完成的标志。
    3、数据长度:它可以作为接收端接收完成的标志。有时也能作为判断数据是否正确的标志。
    4、校验:能够有效避免校验以外的所有数据的错误,但是校验正确不代表数据一定没有出错,每种校验方式都有一定的缺陷。
    帧头、帧尾、数据长度和校验,这四种标志加起来之后能够大大的增强数据传输的稳定性,但不是每个通讯协议都会包含以上四个标志,可能只会用到其中的一两个。因为如果要发送的主要数据本身就比较长,加上这个几个标志之后会更长,这对于那种传输速度慢、传输数据时间长、传输指令频繁处理速度慢的设备来说,较长的指令可能会影响工作效率。具体我就不多说了,我今天主要讲的是接收数据的处理方法,大家根据自己的协议选择合适的处理方法就行了。

    三、常用的几种数据处理方法
    1、判断帧头:串口接收到第一个数据之后先判断是否是帧头,如果帧头正确就存起来继续收,反之则丢掉继续等帧头。示例代码片段如下:

    if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)  //接收中断
    {
    	Res = USART_ReceiveData(USART1);//读取接收到的数据,同时也清除了中断标志位
    		   
    	USART_RX_BUF[USART_RX_STA ++] = Res;
    	if(USART_RX_BUF[0] != 0xA5 && USART_RX_STA == 1)
    	{//帧头错误
    	     USART_RX_STA = 0;//重新接收
    	}
    	if(USART_RX_STA >= USART_RX_Len)
    	{//接收完成
    	    USART_RX_STA = 0;
    	    USART_RXHANDLE_FLAG = 1;
    	}
    }
    

    这种处理方法能够有效避免第一个字节出错的问题,我就试过一次主设备那边传过来的数据帧头前面多了一个字节(可能是刚开始传输的时候电压不稳定产生的纹波),用这种方法就能够之间把第一个错误的数据丢掉,从正确的帧头开始接收。但是这种方法不能够检查帧头后面的数据是否正确。
    2、判断帧尾:可以把帧尾作为一帧数据接收完成的标志。另外,当接收缓存存了多个指令的时候,帧尾能够帮助我们在一堆数据中区分出哪些数据是同一个指令的。当然,如果仅仅是区分数据用帧头也可以。不过这种办法必须保证帧尾和其他数据不一样,不然就会出现错误的判断。所以有些人为了避免这个问题会用两个字节作为帧尾,不过这样一来,数据长度就更大了,影响通讯效率。
    3、根据数据长度判断是否完成接收:可以通过数据长度判断接收是否完成。如果协议里面的指令长度不是统一的,我们就不能根据固定的长度来接收数据。这个时候在一帧数据里面加入数据长度这个标志,就能够给单片机一个判断的准则,单片机接收到数据长度这个标志之后,根据这个长度来接收剩下的数据。示例代码片段如下:

    if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)  //接收中断
    {
    	Res = USART_ReceiveData(USART1);//读取接收到的数据,同时也清除了中断标志位
    		   
    	USART_RX_BUF[USART_RX_STA ++] = Res;
    	if(USART_RX_BUF[0] != 0xA5 && USART_RX_STA == 1)
    	{//帧头错误
    	     USART_RX_STA = 0;//重新接收
    	}
    	If(USART_RX_STA == 4)
    	{
    	USART_RX_Len = USART_RX_BUF[3];//数据长度
    	}
    	if(USART_RX_STA >= (USART_RX_Len + 4))
    	{//接收完成
    	    USART_RX_STA = 0;
    	    USART_RXHANDLE_FLAG = 1;
    	}
    }
    

    4、根据接收时间判断一帧数据的长度。根据波特率计算出两个字节传输的时间间隔,接收到数据之后定时器开始计时,在定时器中断触发之前收到数据就清空,重新计时,超过两个字节的间隔时间,就认为是一帧数据接收完成。具体的程序我就不写了,这个网上能找到很多例程。这种方法适合接收长度不定的情况,在这个方法的基础上还可以加上帧头帧尾等标志,增强稳定性。
    5、校验处理:校验一般是在接收完成之后进行,校验是很必要的,因为它包含一帧数据的所有字节,通过校验能够大大的减少出错的概率。

    四、总结
    其实串口接收数据处理主要要注意两点,第一点是单片机如何确定一帧数据接收完成,第二点是单片机如果判断接收到的数据是正确的指令。第一点可以通过帧尾,数据长度等标志确定接收完成。第二点可以先通过帧头初步判断指令的正确性,再通过校验二次处理,判断指令是否正确接收。

    关于串口接收数据处理的相关内容就介绍到这里,如果还有什么问题,可以留言,如果文章有哪里写的不对,欢迎指正,谢谢!

    展开全文
  • 几种常用单片机之间的通信方式 ①采用硬件UART进行异步串行通信。这是一种占用口线少,有效、可靠的通信方式;但遗憾的是许多小型单片机没有硬件UART,有些也只有1个UART,如果系统还要与上位机通信的话,硬件资源是...

    几种常用单片机之间的通信方式
    ①采用硬件UART进行异步串行通信。这是一种占用口线少,有效、可靠的通信方式;但遗憾的是许多小型单片机没有硬件UART,有些也只有1个UART,如果系统还要与上位机通信的话,硬件资源是不够的。这种方法一般用于单片机有硬件UART且不需与外界进行串行通信或采用双UART单片机的场合。

    ②采用片内SPI接口或I2C总线模块串行通信形式。SPI/I2C接口具有硬件简单、软件编程容易等特点,但目前大多数单片机不具备硬件SPI/I2C模块。

    ③利用软件模拟SPI/I2C模式通信,这种方式很难模拟从机模式,通信双方对每一位要做出响应,通信速率与软件资源的开销会形成一个很大的矛盾,处理不好会导致系统整体性能急剧下降。这种方法只能用于通信量极少的场合。

    单片机之间如何通信?这几种方式,刚学的电子工程师要谨记
    ④口对口并行通信,利用单片机的口线直接相连,加上1~2条握手信号线。这种方式的特点是通信速度快,1次可以传输4位或8位,甚至更多,但需要占用大量的口线,而且数据传递是准同步的。在一个单片机向另一个单片机传送1个字节以后,必须等到另一个单片机的接收响应信号后才能传送下一个数据。一般用于一些硬件口线比较富裕的场合。

    ⑤利用双口RAM作为缓冲器通信。这种方式的最大特点就是通信速度快,两边都可以直接用读写存储器的指令直接操作;但这种方式需要大量的口线,而且双口RAM的价格很高,一般只用于一些对速度有特殊要求的场合。

    从上面几种方案来看,各种方法对硬件都有很大的要求与限制,特别是难以在功能简单的单片机上实现,因此寻求一种简单、有效的,能在各种单片机之间通信的方法具有重要的意义。③、④方案中,双方单片机要传递的每一位或每一个字节做出响应,通信数据量较大时会耗费大量的软件资源,这在一些实时性要求高的地方是不允许的。

    针对这一问题,假设在单片机之间增加1个数据缓冲器,大批数据先写入缓冲区,然后再让对方去取,各个单片机对数据缓冲器都是主控模式,这样必然会大大提高通信效率。谈到数据缓冲,我们马上会想到并行RAM,但是并行RAM需要占用大量的口线(数据线+地址线+读写线+片选线+握手线),一般在16条以上。这是一个让人望而生畏的数字,而且会大大增加PCB面积并给布线带来一定的困难,极少有人采用这种方式。串行接口的RAM在市场上很少见,不但难以买到而且价格很高。移位寄存器也可以做数据缓冲器,但目前容量最大的也只128位,因为是“先进先出”结构,所以不管传递数据多少,接收方必须移完整个寄存器,灵活性差而且大容量的移位寄存器也是少见难买的。一种被称为“铁电存储器”芯片的出现,给我们带来了解决方法。

    利用铁电存储器作为数据缓冲器的通信方式
    铁电存储器是美国Ramtran公司推出的一种非易失性存储器件,简称FRAM。与普通EEPROM、Flash-ROM相比,它具有不需写入时间、读写次数无限,没有分布结构可以连续写放的优点,因此具有RAM与EEPROM的双得特性,而且价格相对较低。

    现在大多数的单片机系统配备串行EEPROM(如24CXX、93CXX等)用来存储参数。如果用1片FRAM代替原有EEPROM,使它既能存储参数,又能作串行数据通信的缓冲器。2个(或多个)单片机与1片FRAM接成多主-从的I2C总线方式,增加几条握手线,即可得到简单高效的通信硬件电路。在软件方面,只要解决好I2C多主-从的控制冲突与通信协议问题,即可实现简单、高效、可靠的通信了。

    单片机之间如何通信?这几种方式,刚学的电子工程师要谨记
    实例(双单片机结构,多功能低功耗系统)
    (1)硬件

    W78LE52与EMC78P458组成一个电池供电、可远程通信的工业流量计。78P458采用32.768kHz晶振,工作电流低,不间断工作,实时采集传感器的脉冲及温度、压力等一些模拟量;W78LE52采11.0592MHz晶振,由于它的工作电流较大,采用间断工作,负责流量的非线性校正、参数输入、液晶显示、与上位机通信等功能,它的UART用于远程通信。2个单片机共用1片I2C接口的FRAM(FM24CL16)组成二主一从的I2C总线控制方式,W78LE52的P3.5、P3.2分别与78P458的P51、P50连接作握手信号线A与B。我们把握手线A(简称A线)定义为总线控制、指示线,主要用于获取总线控制权与判别总线是否“忙”;握手线B(简称B线)定义为通知线,主要用于通知对方取走数据。

    (2)I2C总线仲裁

    由于我们采用的是二主一从的I2C总线方式,因此防止2个主机同时去操作从机(防冲突)是一个非常重要的问题。带有硬件I2C模块的器件一般是这样的,器件内部有1个总线仲裁器与总线超时定时器:当总线超时定时器超时后指示总线空闲,这时单片机可以发出获取总线命令,总线仲裁器通过一系列操作后确认获取总线成功或失败;超时定时器清零,以后的每一个SCL状态变化对总线所有主机的超时定时器进行清零,以防止它溢出,指示总线正处于“忙”状态,直到一个主机对总线控制结束不再产生SCL脉冲;超时定时器溢出,总线重新回到“空闲”状态。但是目前大多数单片机没有配备硬件I2C模块,而且当2个主机的工作频率相差较大时,超时定时器定时值只能设为较大的值,这样也会影响总线的使用效率。

    下面介绍一种用软件模拟I2C总线仲裁的方式(I2C读写操作程序的软件模拟十分多见,这里不再多述):用1条握手线A,当A线高电平时,指示总线空闲;当其中一个主机要获取总线控制权时,先查询总线是否空闲,“忙”则退出,空闲则向A线发送一个测试序列(如:1000101011001011),在每次发送位“1”后读取的A线状态。如果读取状态为“0”,马上退出,说明有其它器件已经抢先获取总线;如果一个序列读取的A线状态都正确,则说明已成功获得总线控制权,这时要拉低A线以指示总线“忙”,直到读写高A线,使总线回到“空闲”状态。不同的主机采用不同的测试序列,或产生随机测试序列,测试序列长度可以选得长一些,这样可以增加仲裁的可靠性。

    (3)通信协议

    一个可靠通信体系,除了好的硬件电路外,通信协议也至关重要。在单片机系统RAM资源与执行速度都非常有限的情况下,一个简捷有效的协议是非常重要的。下面具体介绍一种比较适用于单片机通信的协议,数据以包的形式传送。数据包结构:

    ①包头——指示数据包的开始,有利于包完整性检测,有时可省略;

    ②地址——数据包要传送的目标地址,若只有双机通信或硬件区分地址可以省略;

    ③包长度——指示整个数据包的长度;

    ④命令——指示本数据包的作用;

    ⑤参数——需要传送的数据与参数;

    ⑥校验——验证数据包的正确性,可以是和校验、异或校验、CRC校验等或者是它们的组合;

    ⑦包尾——指示数据包的结尾,有利于包完整性检测,有时可省略。

    (4)通信流程

    首先,要在FRAM里划分好各个区域,各个单片机的参数区、数据接收区等。然后,单片机可以向另一个单片机发送数据包,发送完毕之后通过向握手线B发送1个脉冲通知对方取走数据;接收方读取数据并进行处理后,向FRAM内发送方的数据接收区写入回传数据或通信失败标志,再向握手线B发送1个脉冲回应发送方。

    如果需要单片机2发送的话,只需交换一下操作过程即可。

    单片机之间如何通信?这几种方式,刚学的电子工程师要谨记
    4 总结
    通过实践可知,以上方法是可行的。与其它方法相比具有发下优点:

    ①简单。占用单片机口线少(SCL、SDA、握手线A、握手线B)。

    ②通用。软件模拟I2C主机方式,可以在任何种类的单片机之间通信。

    ③高效。由于采用数据缓冲,可以在不同时钟频率、不同速度的单片机之间通信;读写数据时,可以I2C总线的最高速度进行,可以实现1次传送大量数据;在一个单片机向FRAM传送数据时,另一个单片机无须一一作出响应或等待,可以进行其它程序操作,提高软件工作效率。

    ④灵活。通信硬件接口对于各个单片机是对等的,通过软件配置,每个单片机既可以根据需要主动发送通信,也可以只响应其它单片机的呼叫。

    ⑤容易扩展。通过增加地址识别线,修改通信协议,即可做到多机通信。

    以下是需要注意的地方:

    ①为了提高通信效率,握手线B最好使用中断端口,负脉冲宽度一定要满足速度较低单片机中断信号要求。如果没有中断的话应增加1条口线,用改变端口状态的方法通知对方,等待对方查询,而不是负脉冲。

    ②向对方发送负脉冲时,应屏蔽自己的中断。

    ③由于参数与通信缓冲区同时设在同一片FRAM内,要避免对参数部分的误操作。一个较好的解决办法是把参数存放在地址的后半部分(A2=1),在进行通信操作时,把FRAM的WP引脚拉高(地址在后半部分的单元写保护),这样可以有效地防止测验时对参数区误操作。

    ④由于I2C总线在一个时间段内只有1个主机和1个从机,所以当1个单片机正在写通信数据时,另一个单片机是不能对FRAM进行操作的。如果需要实时、频繁地读取FRAM中参数的话,请预先将参数读入RAM单元使用或另外增加专门存放参数的芯片。

    展开全文
  • 单片机各种通信方式的特点和主要应用场合 串口用的比较多: RS232,用于与标准的RS232设备通讯 网卡,用于互联网或采用网卡端口的设备通讯 I2C,用于单片机自己外设或多个单片机之间通讯 CAN,工业标准,汽车中...
  • 单片机通信方式

    2018-05-17 13:48:48
    而TTL、RS-232、RS-485是指的电平标准(电信号)TTL:TTL电平信号之所以被广泛使用,原因是:通常我们采用二...这样的数据通信及电平规定方式,被称做TTL(晶体管-晶体管逻辑电平)信号系统。UART,是通用异步收发传...
  • 今天分享一下52单片机串口通信的一些知识吧~ 二:预备知识 1、RXD(P3^0)串行输入口,TXD(P3 ^ 1)串行输出口,SBUF接收和发送寄存器。 2、RI串行接收中断请求标志,TI串行发送中断请求标志。 3、串行口发送过程:发送...
  • 串口的几种工作方式

    2018-09-26 10:20:42
    操作串口一般种方式:查询和中断;STM32还支持第三种DMA方式。 (1)查询:串口程序不断地循环查询标志,看看当前没有数据要它传送或接收。如果的话进行相应的写操作和读操作进行传送或接收数据...
  • 盘点一下:常见的几种通讯方式 (一) UART-通用异步串行数据总线 ➢201kbps-10Mbps 应用于低速通讯,对应电平标准RS232/RS422/RS485. 如电脑中口,工控机串口,芯片调试接口等。 ➢优缺点: 简单,速度慢 另外科普...
  • 电子技术的飞速发展,单片机也步...如果合理使用多种不同类型的单片机组合设计,可以得到极高灵活性与性能价格比,因此,多种异型单片机系统设计渐渐成为一新的思路,但单片机之间的通信一直是困扰这种方法拓展的...
  • 在提高硬件系统抗干扰能力的同时,软件抗干扰以其设计灵活、节省硬件资源、可靠性好越来越受到重视。下面以MCS-51单片机系统为例,对微机系统软件抗干扰方法...本文针对后者提出了几种有效的软件抗干扰方法。    
  • 简述常用单片机之间的通信方式1. 采用硬件UART进行异步串行通信。这是一占用口线少,有效、可靠的通信方式;但遗憾的是许多小型单片机没有硬件UART,有些也只有1个UA...
  • 单片机ISP、IAP和ICP几种烧录方式的区别 玩单片机的都应该听说过这几个词。一直搞不太清楚他们之间的区别。今天查了资料后总结整理如下。 ISP:In System Programing,在系统编程 IAP:In applicating ...
  • 在硬件开发过程中经常使用的几种通讯接口的详细介绍
  • 这里写的数据通讯指的是两部分,一部分是与服务器,一部分是与单片机。这样设计的另外一个原因是,更好的分层,能让我们更好的理解这个系统。负责这个功能的这里用的是Raspberry PI,或者是你的PC两者都可以,我想你...
  • Vc 三串口通讯方式

    2016-12-16 15:21:04
    本文介绍了在Windows平台下串行通信的实现机制,讨论了根据不同的条件用Visual C++ 设计串行通信程序的三方法,并结合实际,实现对温度数据的接收监控。 在实验室和工业应用中,串口是常用的计算机与外部串行...
  • 串行通信的三种方式

    2019-10-06 19:27:38
    基本的通讯方式有并行通讯和串行通讯. 一条信息的各位数据被同时传送的通讯方式称为并行通讯.并行通讯的特点是:各数据位同时传送,传送速度快、效率高,但有多少数据位就需多少根数据线,因此传送成本高,且只适用...
  • 1 引言HMI(人机界面)以其体积小,高性能,强实时等特点,越来越多的应用于工业自动化系统和设备中。它字母、汉字、图形和图片等不同的显示,界面简单友好。配长寿命的薄膜按钮键盘,操作简单。...本文以Modbus通讯
1 2 3 4 5 ... 20
收藏数 5,093
精华内容 2,037