精华内容
下载资源
问答
  • 异步通信

    千次阅读 2012-09-14 19:51:00
    数据通信的基本方式可分为并行通信和串行通信两种: 并行通信:利用多条数据线将数据...异步通信以一个字符为传输单位,通信中两个字符间的时间间隔是不固定的,然而同一个字符中的两个相邻位之间的时间间隔是固定的。

    数据通信的基本方式可分为并行通信串行通信两种

    并行通信:利用多条数据线将数据的各位同时传送。它的特点是传送速度快,适用于短距离通信。

    串行通信:利用一条数据线将数据一位位地顺序传送。特点是通信线路简单,利用简单的线缆就可实现通信,成本低,适用于远距离通信。

    异步通信

    异步通信以一个字符为传输单位,通信中两个字符间的时间间隔是不固定的,然而同一个字符中的两个相邻位之间的时间间隔是固定的。

    通信协议:是指通信双方约定的一些规则。在使用异步串口传送一个字符的信息时,对数据格式有如下约定:规定有空闲位、起始位、资料位、奇偶校验位、停止位。


    起始位:先发一个逻辑“0”信号,表示传输字符的开始

    数据位:紧接在起始位之后,数据位的个数可以是4、5、6、7、8等,从最低位开始传送,靠时钟定位。

    奇偶校验位:数据位加上这一位后,使得“1”的位数应为偶数(偶校验)或奇数(奇校验),以此校验数据传送的正确性。

    停止位:它是一个字符数据的结束标志。

    空闲位:处于逻辑“1”状态,表示当前线路上没有数据传送。

    波特率:

    波特率是衡量数据传送速率的指针,表示每秒钟传送的二进制位数。例如数据传送速率为120字符/秒,而每一个字符为10位,则其传送的波特率为10*120=1200位/秒=1200波特。

    注:异步通信是按字符传输的,接收设备在收到起始信号之后只要在一个字符的传输时间内能和发送设备保持同步就能正确接收。

    传送方式:


    单工方式数据始终是从A设备发向B设备。

    半双工方式:资料能从A设备传送到B设备,也能从B设备传送到A设备。但在任何时候都不能在两个方向上同时传送,即每次只能有一个设备发送,另一个设备接收。

    全双工方式:允许通信双方同时进行发送和接收。这时,A设备在发送的同时也可以接收,B设备也一样。



    展开全文
  • c#异步通信

    2018-09-25 22:48:54
    c#异步通信 socket网络通信,亲测代码可以运行适合初学者学习。
  • 同步通信和异步通信区别

    千次阅读 2020-08-27 21:57:32
    同步通信与异步通信区别: 1.同步通信要求接收端时钟频率和发送端时钟频率一致,发送端发送连续的比特流;异步通信时不要求接收端时钟和发送端时钟同步,发送端发送完一个字节后,可经过任意长的时间间隔再发送下一...

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

       1.同步通信要求接收端时钟频率和发送端时钟频率一致,发送端发送连续的比特流;异步通信时不要求接收端时钟和发送端时钟同步,发送端发送完一个字节后,可经过任意长的时间间隔再发送下一个字节。

        2.同步通信效率高;异步通信效率较低。

        3.同步通信较复杂,双方时钟的允许误差较小;异步通信简单,双方时钟可允许一定误差。

        4.同步通信可用于点对多点;异步通信只适用于点对点。

    展开全文
  • Axios异步通信.md

    2021-01-25 14:33:59
    Axios异步通信
  • Android 异步通信.zip

    2021-04-10 09:53:21
    Android 异步通信.zip
  • 异步通信还要设置波特率?_深入理解同步/异步通信   上一篇我们解释了串口通信中同步通信和异步通信的区别,详见上篇链接。其中我们分析同步/异步通信最重要的不同点就是是否同步时钟,可能就有很多小伙伴不理解,...

    异步通信还要设置波特率?_深入理解同步/异步通信

      上一篇我们解释了串口通信同步通信异步通信的区别,详见上篇链接。其中我们分析同步/异步通信最重要的不同点就是是否同步时钟,可能就有很多小伙伴不理解,异步通信不是一字节一个字节的发送嘛?既然不同步时钟,那为什么要设置比特率?其实这是一个误导性的问题。且听我细细道来,

      


      
    理论篇
      

    1. 首先我们再次强调一下,异步通信传输是以字节为单位的,但是同步通信传输是以数据块为单位的。这里我们把数据块称为帧。帧的数据量是远远大于字节的。所以同步通信对时钟同步的要求较高。
    2.   然后异步通信是在每个字符附加起始位和停止位(有时候还会加校验位),其目的是保证位同步,就是保证发送的单位字节传输成功。发收双方都拥有独立的时钟,任何一方都不像对方提供时钟信号, 所以异步通信里波特率相差不大即可 (比如你的波特率是115200,我的是115100应该也是可以的,但是我们要是使用别人写好的串口小助手波特率都是固定的几个)。这里接收端随时准备接受数据。
        同步通信是在数据块中前部后结尾处加一个特殊的字符或者比特序列,标记一个数据块的开始和结束(一般还会加上一个校验序列如CRC),同步传输是以同步的时钟节拍来发送数据信号的,因此在一个串行的数据流中,各信号码元之间的相对位置都是固定的(即同步的)。下面实战篇通过I2C来辅助理解。
      在这里插入图片描述

      图片来自水印
      这里博主部分参考了如下链接: https://blog.csdn.net/farsight2009/article/details/53639881

    1.    所以,到这大家可能已经理解了,异步通信其实也是有时序要求的。只是要求较低,保证位同步即可,而同步通信往往有一根专门的时钟线来协调通信。

    2.   所以异步通信一般也就用于低速设备,而同步传输常用于高速设备(IIC最高传输速率400Kbps)。

      那,为什么说问题本身是有误导性的呢?

      单片机串行通信波特率就是每发送两个数据的之间的间隔,或者是每秒钟发送的字节数,你在进行串行通信时,是两个单片机进行通信,那肯定是要进行同步的(波特率要相同),要不然通信没法建立。波特率就好比一首歌曲的节奏,有了这个节奏,串行通讯的各个数据位就会有条不紊地依次排队一个一个地传到对方,要正确收发,两个通讯的主体的节奏必须一致。(此句摘自百度回答,感觉很形象)

      
      所以,你懂了嘛?皮!

      


      

    实战篇
      

      这里我我们对比一下同步通信的IIC异步通信的单总线吧,这里你能体验到同样都是半双工(不能同时收发,见上篇),同步通信时控制两根线(数据线和时钟线)有严格的时序,而异步通信一根线解决一切。
      PS:  UART是我们平时用的比较多的,详细的见上篇实战篇噢!

    • 同步通信中I2C原理简介

      数据帧的第一部分包含一组同步字符(如:i2c的起始位),它是一个独特的比特组合,类似于前面提到的起始位,用于通知接收方一个帧已经到达,但它同时还能确保接收方的采样速度和比特的到达速度保持一致,使收发双方进入同步。帧的最后一部分是一个帧结束标记(如I2C的结束位)。与同步字符一样,它也是一个独特的比特串,类似于前面提到的停止位,用于表示在下一帧开始之前没有别的即将到达的数据了。
      下图为一张I2C同步通信协议的时序(图片来自水印)
    在这里插入图片描述

    //下为I2C的几个基本时序函数,分数据线时钟线,无论是启动、停止、应答、发送、接收,对时序的要求较高,自己编写一般要参照时序图编写,同学们应该练习看懂时序图的能力。个人认为较为重要。

    #include "reg52.h"
    #include "intrins.h"
    
    #define DELAY_TIME 5
    
    /** 定义I2C总线时钟线和数据线 */
    sbit scl = P2^0;
    sbit sda = P2^1;
    
    /**
    * @brief I2C总线中一些必要的延时
    * @param[in] i - 延时时间调整.
    * @return none
    */
    void i2c_delay(unsigned char i)
    {
        do
        {
            _nop_();
        }
        while(i--);        
    }
    
    /**
    * @brief 产生I2C总线启动条件.
    * @param[in] none
    * @param[out] none
    * @return none
    */
    void i2c_start(void)
    {
        sda = 1;
        scl = 1;
        i2c_delay(DELAY_TIME);
        sda = 0;
        i2c_delay(DELAY_TIME);
        scl = 0;    
    }
    
    /**
    * @brief 产生I2C总线停止条件
    * @param[in] none
    * @param[out] none.
    * @return none
    */
    void i2c_stop(void)
    {
        sda = 0;
        scl = 1;
        i2c_delay(DELAY_TIME);
        sda = 1;
        i2c_delay(DELAY_TIME);       
    }
    
    /**
    * @brief I2C发送一个字节的数据
    * @param[in] byt - 待发送的字节
    * @return none
    */
    void i2c_sendbyte(unsigned char byt)
    {
        unsigned char i;
    	EA = 0;
        for(i=0; i<8; i++){
            scl = 0;
            i2c_delay(DELAY_TIME);
            if(byt & 0x80){
                sda = 1;
            }
            else{
                sda = 0;
            }
            i2c_delay(DELAY_TIME);
            scl = 1;
            byt <<= 1;
            i2c_delay(DELAY_TIME);
        }
    	EA = 1;
        scl = 0;  
    }
    
    /**
    * @brief 等待应答
    * @param[in] none
    * @param[out] none
    * @return none
    */
    unsigned char i2c_waitack(void)
    {
    	unsigned char ackbit;	
        scl = 1;
        i2c_delay(DELAY_TIME);
        ackbit = sda; //while(sda);  //wait ack
        scl = 0;
        i2c_delay(DELAY_TIME);
    	
    	return ackbit;
    }
    
    /**
    * @brief I2C接收一个字节数据
    * @param[in] none
    * @param[out] da
    * @return da - 从I2C总线上接收到得数据
    */
    unsigned char i2c_receivebyte(void)
    {
    	unsigned char da;
    	unsigned char i;
    	EA = 0;	
    	for(i=0;i<8;i++){   
    		scl = 1;
    		i2c_delay(DELAY_TIME);
    		da <<= 1;
    		if(sda) 
    			da |= 0x01;
    		scl = 0;
    		i2c_delay(DELAY_TIME);
    	}
    	EA = 1;
    //
    	return da;    
    }
    
    /**
    * @brief 发送应答
    * @param[in] ackbit - 设定是否发送应答
    * @return - none
    */
    void i2c_sendack(unsigned char ackbit)
    {
        scl = 0;
        sda = ackbit;  //0:发送应答信号;1:发送非应答信号
        i2c_delay(DELAY_TIME);
        scl = 1;
        i2c_delay(DELAY_TIME);
        scl = 0; 
    	sda = 1;
        i2c_delay(DELAY_TIME);
    }
    
    /**
    * @brief 读写操作过程中一些必要的延时
    * @param[in] i - 指定延时时间
    * @return - none
    */
    void operate_delay(unsigned char t)
    {
    	unsigned char i;
    	
    	while(t--){
    		for(i=0; i<112; i++);
    	}
    }
    

    //这里是温度传感器DS18B20的驱动程序,注意这里只对DQ这一根总线控制哦。(要是只收发的话跟同步通信有种既当爹又当妈的感觉//手动滑稽)
    //此段代码可以直接读取温度数据。

    #include "reg52.h"
    sbit DQ = P1^4;
    //单总线延时函数
    #ifndef STC12  
    void Delay_OneWire(unsigned int t)  //STC89C52RC
    {
    	while(t--);
    }
    #else
    void Delay_OneWire(unsigned int t)  //STC12C5260S2
    {
    	unsigned char i;
    	while(t--){
    		for(i=0;i<12;i++);
    	}
    }
    #endif
    //通过单总线向DS18B20写一个字节
    void Write_DS18B20(unsigned char dat)
    {
    	unsigned char i;
    	for(i=0;i<8;i++)
    	{
    		DQ = 0;
    		DQ = dat&0x01;
    		Delay_OneWire(5);
    		DQ = 1;
    		dat >>= 1;
    	}
    	Delay_OneWire(5);
    }
    
    //从DS18B20读取一个字节
    unsigned char Read_DS18B20(void)
    {
    	unsigned char i;
    	unsigned char dat;
      
    	for(i=0;i<8;i++)
    	{
    		DQ = 0;
    		dat >>= 1;
    		DQ = 1;
    		if(DQ)
    		{
    			dat |= 0x80;
    		}	    
    		Delay_OneWire(5);
    	}
    	return dat;
    }
    //DS18B20初始化
    bit init_ds18b20(void)
    {
      	bit initflag = 0;
      	
      	DQ = 1;
      	Delay_OneWire(12);
      	DQ = 0;
      	Delay_OneWire(80); // 延时大于480us
      	DQ = 1;
      	Delay_OneWire(10);  // 14
      	initflag = DQ;     // initflag等于1初始化失败
      	Delay_OneWire(5);
      
      	return initflag;
    }
    
    //DS18B20温度采集程序:整数
    unsigned char rd_temperature(void)
    {
        unsigned char low,high;
      	char temp;
      
      	init_ds18b20();
      	Write_DS18B20(0xCC);
      	Write_DS18B20(0x44); //启动温度转换
      	Delay_OneWire(200);
    
      	init_ds18b20();
      	Write_DS18B20(0xCC);
      	Write_DS18B20(0xBE); //读取寄存器
    
      	low = Read_DS18B20(); //低字节
      	high = Read_DS18B20(); //高字节
      
      	temp = high<<4;
      	temp |= (low>>4);
      
      	return temp;
    }
    

    每篇必皮。欢迎交流!共同进步。

    摄自 华为P20
    在这里插入图片描述

    展开全文
  • 同步通信和异步通信

    万次阅读 2018-09-02 09:53:14
    异步通信时不要求接收端时钟和发送端时钟同步,发送端发送完一个字节后,可经过任意长的时间间隔再发送下一个字节。 同步通信效率高;异步通信效率较低。 同步通信较复杂,双方时钟的允许误差较小;异步通信简单,...

    首先是两者的不同

    • 同步通信要求接收端时钟频率和发送端时钟频率一致,发送端发送连续的比特流;异步通信时不要求接收端时钟和发送端时钟同步,发送端发送完一个字节后,可经过任意长的时间间隔再发送下一个字节。
    • 同步通信效率高;异步通信效率较低。
    • 同步通信较复杂,双方时钟的允许误差较小;异步通信简单,双方时钟可允许一定误差。
    • 同步通信可用于点对多点;异步通信只适用于点对点。

    异步通信

    异步通信中的接收方并不知道数据什么时候会到达,收发双方可以有各自自己的时钟。发送方发送的时间间隔可以不均,接收方是在数据的起始位和停止位的帮助下实现信息同步的。这种传输通常是很小的分组,比如一个字符为一组,为这个组配备起始位和结束位。所以这种传输方式的效率是比较低的,毕竟额外加入了很多的辅助位作为负载,常用在低速的传输中。

    以RS232协议规定为例,异步通信一个字符一个字符地传输,每个字符一位一位地传输,并且传输一个字符时,总是以“起始位”开始(低电平,逻辑值0),以“停止位”结束,字符之间没有固定的时间间隔要求。字符数据本身由5~8位数据位组成,接着字符后面是一位校验位(也可以没有校验位),最后是一位或一位半或二位停止位,停止位后面是不定长的空闲位。停止位和空闲位都规定为高电平(逻辑值1),这样就保证起始位开始处一定有一个下跳沿,

    举个例子,我们的键盘按下一个按键,发出一个字符信号,异步传输机制就会为它加上前后的辅助同步信息,帮助接收方识别到我们按下了哪一个按键。因为我们敲击键盘的节奏不固定,所以异步是一种很适合的方式

    同步通信

    同步通信中双方使用频率一致的时钟 ,它的分组相比异步则大得多,称为一个数据帧,通过独特的bit串作为启停标识。发送方要以固定的节奏去发送数据,而接收方要时刻做好接收数据的准备,识别到前导码后马上要开始接收数据了。同步这种方式中因为分组很大,很长一段数据才会有额外的辅助位负载,所以效率更高,更加适合对速度要求高的传输,当然这种通信对时序的要求也更高。
    同步通信是一种连续串行传送数据的通信方式,一次通信只传送一帧信息,由同步字符、数据字符和校验字符(CRC)组成。

    展开全文
  • 数据通信可分为同步通信和异步通信两大类:  同步通信要求接收端时钟频率和发送端时钟频率一致。发送端发送连续的比特流。  异步通信时不要求接收端时钟和发送端时钟同步。发送端发送完一个字节后,可经过任意长...
  • Socket 异步通信

    2013-12-09 13:28:55
    C# Socket 通信 异步通信 例子
  • 同步异步通信

    2020-01-09 13:31:23
    不管是异步通信还是同步通信都需要进行同步, 1) 异步通信通过传送字符内的起始位来进行同步, 2) 同步通信采用共用外部时钟来进行同步。 异步通信是自同步,同步通信是外同步。 ...
  • 同步通信与异步通信

    2019-03-07 00:11:48
    同步通信与异步通信区别: 同步通信要求接收端时钟频率和发送端时钟频率一致,发送端发送连续的比特流;异步通信时不要求接收端时钟和发送端时钟同步,发送端发送完一个字节后,可经过任意长的时间间隔再发送下一...
  • 异步通信与同步通信

    2013-12-08 16:51:46
    异步通信与同步通信,主要讲解RS232与单片机等进行通信!有组于大家理解!
  • JavaScript Ajax实现异步通信 一、浏览器与服务器的同步和异步通信 1.同步:是阻塞的,浏览器在向服务器发送请求之后一直等待服务器的响应,而没有做其他事情。 2.异步:非阻塞的,浏览器向服务器发送请求之后,...
  • 异步通信AsyncSocket

    2013-12-25 19:54:48
    异步通信AsyncSocket,包含c源代码.
  • 主要介绍了AJAX简单异步通信,实例分析了Ajax异步通信的技巧与相关注意事项,具有一定参考借鉴价值,需要的朋友可以参考下
  • TcpListener异步通信

    2017-06-16 11:50:16
    C#实现简易的tcp异步通信,可多客户端
  • mina异步通信

    2013-08-30 14:34:05
    异步通信文档\Mina2.0学习笔记完整版
  • android异步通信

    2013-05-02 09:19:50
    基于android平台的异步通信的过程。
  • 一种基于C#的Socket的异步通信源代码,适合了解学习C#的Socket异步通信原理
  • JMS异步通信

    2013-04-07 16:42:35
    WSAD环境下JMS异步通信全攻略。有截图说明
  • C# Socket异步通信

    2012-07-25 09:32:23
    C# Socket异步通信C# Socket异步通信
  • C#异步通信

    2014-01-12 21:09:44
    采用C#实现Socket异步通信,属于网络编程范畴,适合学习。里面包括服务器和客户端代码。
  • 网络异步通信

    2012-12-19 18:54:04
    这是一个自己写的网络异步通信示例,适合初学者

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 22,834
精华内容 9,133
关键字:

异步通信