异步通信

51单片机和PC串口异步通信

冷暖自知 提交于 2020-03-10 10:25:15
单片机和PC机间的通信有很多方式,下面的程序主要用到的是51单片机的异步串行通信。 一.51单片机的串行通信管脚 P3.1为单片机的TXD管脚(Transfer Data),P3.2为单片机的RXD管脚(Receive Data)。 通过TXD管脚可以将CPU要发送的数据输出,RXD管脚可以将串行数据线传来的数据读入。 二.51单片机的串行通信控制寄存器SCON,电源控制寄存器PCON SCON: 其中,SM0,SM1控制着串行通信的工作方式。 SM0 SM1 工作方式 说明 波特率 0 0 0 移位寄存器 fosc/12 0 1 1 10位异步收发器(8位数据) 可变 1 0 2 11位异步收发器(9位数据) fosc/64或fosc/32 1 1 3 11位异步收发器(9位数据) 可变 其中工作方式1在使用当中比较多。 SM2为多机通信控制位,SM2=1,允许多机通信,=0不允许,实现点对点通信。这里先不讨论。 TB8用于储存发送数据的第9位。在方式2和方式3中,发送数据除了起始位,数据位,停止位外,还有一位校验位,存储在TB8中。 RB8用于存储接收数据的第9位。接收到传来的代码后,数据位存储在SBUF中,而校验位就存储在RB8中。通过分析,可以判别接受的数据是否正确。 TI为发送中断请求标志。当发送数据缓冲区为空的时候,TI通过硬件置1,通知CPU数据发送完毕

51单片机复习:串口通信

浪子不回头ぞ 提交于 2020-03-10 10:23:18
计算机通信是指计算机与外部设备或计算机与计算机之间的信息交换。(比如电脑和单片机) 通信有并行通信和串行通信两种方式。在多微机系统以及现代测控系统中信息的交换多采用串行通信方式。 并行通信(通常是将数据字节的各位用多条数据线同时进行传送 ) 比如这样说,一个字节有八位,我有八根线,一根传一位,八位同时传递 优缺点: 并行通信控制简单、传输速度快;由于传输线较多,长距离传送时成本高且接收方的各位同时接收存在困难。 串行通信(一个字节八位,一位一位传送) 串行通信是将数据字节分成一位一位的形式在 一条传输线上逐个地传送。 并行通信这里不多谈 我们下面谈谈串行通信,串行通信分异步通信与同步通信 异步通信与同步通信: 异步通信: 异步通信是指通信的发送与接收设备使用各自的时钟控制数据的发送和接收过程。 为使双方的收发协调,要求发送和接收设备的时钟尽可能一致。 异步通信是以字符(构成的帧)为单位进行传输,字符与字符之间的间隙(时间间隔)是任意的, 但每个字符中的各位是以固定的时间传送的,即字符之间不一定有“位间隔”的整数倍的关系, 但同一字符内的各位之间的距离均为“位间隔”的整数倍。 异步通信的特点:不要求收发双方时钟的严格一致,实现容易,设备开销较小,但每个字符要附加2~3位用于起止位, 各帧之间还有间隔,因此传输效率不高。 同步通信: 同步通信时要建立发送方时钟对接收方时钟的直接控制

socket异步通信

感情迁移 提交于 2020-02-29 02:02:19
client: using System; using System.Net; using System.Text; using System.Net.Sockets; namespace GameClient { class Program { static void Main(string[] args) { //連接 Socket clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); clientSocket.Connect(IPAddress.Parse("192.168.1.104"), 4444); //接受服務器連接消息 byte[] data = new byte[1024]; int count = clientSocket.Receive(data); string msg = Encoding.UTF8.GetString(data, 0, count); Console.WriteLine(msg); //while (true) //{ // string s = Console.ReadLine(); // if (s == "c") // { // clientSocket.Close(); // break; // } /

Python串口异步通信

风格不统一 提交于 2020-02-08 17:57:34
Python串口异步通信(串口接收中断) 串口是计算机上一种非常通用的设备通信协议。pyserial模块封装了python对串口的访问,为多平台的使用提供了统一的接口。 安装库 Python要使用串口功能需要导入这两个库: pyserial (基本串口功能) pip3 install pyserial pyserial-asyncio (实现异步功能需要这个库) pip3 install pyserial - asyncio 获取串口名称 使用serial.tools.list_ports.comports()函数会返回一个ListPortInfo类型的列表 import serial import serial . tools . list_ports class serial_class : def get_port ( self ) : self . port_list = serial . tools . list_ports . comports ( ) return self . port_list serial_port = serial_class ( ) port = serial_port . get_port ( ) for i in range ( 0 , len ( port ) ) : print ( tuple ( [ port [ i ] .

stm32学习笔记

时光怂恿深爱的人放手 提交于 2020-02-08 11:53:06
文章目录 一、GPIO的控制 要求:软件仿真,根据高8位pin输入电平,低8位输出相应的电平。写出main.c代码。 编程思路: 方式1:直接读、写输入\输出寄存器。 代码: 方式2:通过位设置\清除寄存器 和 位清除寄存器控制。 BSRR位设置\清除寄存器 BRR位清除寄存器 代码: 方式3 位绑定 位绑定的定义: 个人理解 代码: 公式代码: 二、通信。 通信基本方式: 方式一:并行通信(多车道,多窗口)。 方式二:串行通信(单车道,单窗口)。 串行通信种类: 种类一:单工。 种类二:半双工。(对讲机) 种类三:全双工。 串行通信的标准: 标准1:UART 异步通信 异步通信协议: 异步通信应用场合: stm32f10x USART框图 stm32f10x波特率的计算 仿真代码 三、stm32库函数 一、GPIO的控制 要求:软件仿真,根据高8位pin输入电平,低8位输出相应的电平。写出main.c代码。 编程思路: 1、配置模式,P0.0~P0.7推挽输出,P0.8-P0.15浮空输入。 2、输入状态反映到对应引脚输出。 方式1:直接读、写输入\输出寄存器。 代码: #include "stm32f10x.h" int main(void) { //1、配置模式,P0.0~P0.7输出,P0.8-P0.15输入。 GPIOA->CRL = 0x33333333;/

同步通信和异步通信

早过忘川 提交于 2020-01-27 09:24:53
5.1.3 同步通信和异步通信 一、同步通信和异步通信 串行通信可以分为两种类型,一种叫同步通信,另一种叫异步通信。 同步通信方式,是把许多字符组成一个信息组,这样,字符可以一个接一个地传输,但是,在每组信息(通常称为信息帧)的开始要加上同步字符,在没有信息要传输时,要填上空字符,因为同步传输不允许有间隙。同步方式下,发送方除了发送数据,还要传输同步时钟信号,信息传输的双方用同一个时钟信号确定传输过程中每1位的位置。见右图5.2所示。 图5.2 同步通信示意图 在异步通信方式中,两个数据字符之间的传输间隔是任意的,所以,每个数据字符的前后都要用一些数位来作为分隔位。 从图5.2中可以看到,按标准的异步通信数据格式(叫做异步通信帧格式),1个字符在传输时,除了传输实际数据字符信息外,还要传输几个外加数位。具体说,在1个字符开始传输前,输出线必须在逻辑上处于“1”状态,这称为标识态。传输一开始,输出线由标识态变为“0”状态,从而作为起始位。起始位后面为5~8个信息位,信息位由低往高排列,即先传字符的低位,后传字符的高位。信息位后面为校验位,校验位可以按奇校验设置,也可以按偶校验设置,或不设校验位。最后是逻辑的“1”作为停止位,停止位可为1位、1.5位或者2位。如果传输完1个字符以后,立即传输下一个字符,那么,后一个字符的起始位便紧挨着前一个字符的停止位了,否则,输出线又会进入标识态

串口通信基本原理

家住魔仙堡 提交于 2020-01-25 13:18:34
1.处理器与外部设备通信的两种方式: 并行通信 -传输原理:数据各个位同时传输。 -优点:速度快 -缺点:占用引脚资源多 串行通信 -传输原理:数据按位顺序传输。 -优点:占用引脚资源少 -缺点:速度相对较慢 2.串行通信 按照数据传送方向,分为: 单工: 数据传输只支持数据在一个方向上传输 半双工:允许数据在两个方向上传输,但是,在某一时刻,只允许数据在一个方向上传输,它实际上是一种切换方向的单工通信; 全双工: 允许数据同时在两个方向上传输,因此,全双工通信是两个 单工通信方式的结合,它要求发送设备和接收设备都有独立的接收和发送能力。 3.串行通信的通信方式 同步通信:带时钟同步信号传输。 -SPI,IIC通信接口 异步通信:不带时钟同步信号。 -UART(通用异步收发器),单总线 4.常见串行通信接口 STM32的串口通信接口: UART:通用异步收发器 USART:通用同步异步收发器 STM32F407支持6个UART 5.UART 5.1 UART异步通信方式引脚连接方法: -RXD:数据输入引脚。数据接受。 -TXD:数据发送引脚。数据发送。 F407开发板用USB-232实现接口转换。 5.2 UART异步通信方式引脚(STM32F407ZGT6) 5.3 UART异步通信方式特点: 全双工异步通信。 小数波特率发生器系统,提供精确的波特率。

SRAM 原理学习笔记

时光总嘲笑我的痴心妄想 提交于 2020-01-10 16:11:59
因为项目需要,需要用到SRAM进行内存扩展,在学习这个之前,我们先回忆一下FLASH的的存储特性: (1).在写入数据之前必须先擦 (2)擦除时会把数据位全部重置为1 (3)写入数据时只能把1的数据改为0,(4)擦除时必须按最小的单位进行来擦除(一般改为扇区) 注:norflash 可以一个字节写入,nandflash必须以块或者扇区为单位进行读写 1.SRAM 介绍 SRAM的 内部框架 异步通信 2.FSMC 来源: CSDN 作者: 一禅的师兄 链接: https://blog.csdn.net/weixin_42145502/article/details/103890420

消息队列应用场景解析

北城以北 提交于 2020-01-05 00:19:04
分布式消息服务DMS 是完全托管的高性能消息队列服务,提供普通队列、有序队列、Kafka、ActiveMQ、RabbitMQ,兼容HTTP、TCP、AMQP协议,为分布式应用提供灵活可靠的异步通信机制。使用DMS,用户可以创建消息队列,将消息队列作为一个传输消息的中转站,存储应用程序不同组件间传递的消息,从而做到在应用程序的不同组件之间传输消息时,不要求各个组件同时处于可用状态。 作为分布式系统中重要的组件,消息队列主要解决应用耦合,异步消息,流量削锋等问题,实现高性能,高可用,可伸缩和最终一致性架构。那么,在实际应用中,分布式消息服务常用的使用场景有哪些呢?让我们一起来看一下。 1、分布式系统异步通信 在单体应用中,业务流程耦合导致系统对用户请求响应慢,可以通过将拆分子系统,并用消息队列作为子系统间的异步通信通道进行系统解耦,提升整个系统的响应速度。 优势: 加快系统响应:系统分布式解耦,并行处理,加快系统对用户请求的响应速度。 降低系统耦合:子系统间通过消息队列通信,避免相互耦合和影响。 数据缓存:消息队列提供亿级消息堆积能力,帮助系统在峰值情况下从容应对。 2、物联网 物联网设备通过接入网关连接云端,DMS消息队列可以提供高速的数据传输通道,连接后端的数据分析系统。 优势: 高并发:单队列最高至10万TPS,并可通过队列数扩展提升整系统并发能力 灵活扩展

ActiveMQ-为什么需要消息中间件?

匆匆过客 提交于 2020-01-03 20:28:27
消息中间件的优势 UNIX的进程间通信就开始运用消息队列技术,一个进程将数据写入某个特定的队列中,其它进程可以读取队列中的数据,从而实现异步通信。对于如今的分布式系统,消息队列已经演变为独立的消息中间件产品,相比于RPC同步通信的方式来说有几个明显的优势: 低耦合,不管是程序还是模块之间,使用消息中间件进行间接通信。 消息的顺序性,消息队列可以保证消息的先进先出。 消息可靠传输,持久化的存储使得消息只有在被消费之后才会删除。 异步通信能力,相对于RPC来说,异步通信使得生产者和消费者得以充分执行自己的逻辑而无需等待。 缓冲能力,消息中间件像是一个巨大的蓄水池,将高峰期大量的请求存储下来慢慢交给后台进行处理,对于秒杀业务来说尤为重要。 但是异步通信也存在程序设计和编程方面的复杂,同时对于实时性要求较高的业务也不能采用异步通信,所以要根据业务具体分析。 J2EE和JEE是什么? J2EE全称是Java to Enterprise Edition,是一套企业级技术规范,包含:JMS Servlet JSP EJB JPA 等。J2EE发展到1.5版本改名为JEE5,所以JEE是J2EE规范的延续。 消息中间件的发展历程 J2EE时代,消息中间件强调企业级特性,比如消息持久化和事务性要求,全部遵循JMS规范。典型的ActiveMQ、HornetQ,后者现在已经发展成ActiveMQ