无线电电子与电气工程百科全书 如何通过 RS-232 连接微控制器和计算机。 无线电电子电气工程百科全书 本文被设想为实现由个人计算机通过串行通道控制的微控制器设备的开发的示例。 它是为那些还没有此类开发经验的人准备的。 一旦您了解了 PC 如何控制微控制器、显示、处理和存储从其接收的信息,您就可以将这些知识应用到您自己的开发中。 另外,所描述的装置还有一个独立的价值:它是一个受控数字电压表,其测量结果在显示之前可以由计算机按照预定的算法进行处理,并保存在PC硬盘上的文件中。驱动、查看和打印。 所有这些使得所描述的设备成为用于收集、处理和记录数据的简单系统的基础,对于对微控制器技术缺乏独立开发知识的电子工程师来说非常有用。 介绍 这项工作的目的是开发和创建基于 x51 系列微控制器的最简单的测量设备,该系列至今仍然最常见,可以与个人计算机交换信息。 它应该在设备中实现一个电压表,随后可以补充各种前缀,将其他直接测量的物理量转换为电压。 这种设备可以很容易地进行一系列由计算机控制的测量,以及积累结果并进行计算机处理。 经过微小的改动,它可以很容易地变成一个用于远程监视和控制设备或其他仪器和装置的系统。 设备的一般描述。 设备的电气部分 该设备(图 1)实际上是一个数字电压表。 电压表的输入端是一个运算放大器(DA1),它具有高输入阻抗。 运算放大器后面是 ADC (DD2),它允许我们将感兴趣的电压数字化,以便随后传输到微控制器。 DD3 微控制器是该器件的主要控制元件,因为它从 ADC 读取信息并通过串行通道与个人计算机进行通信。 该器件还包括用于为数字部分生成 +5V 和为运算放大器生成 +/-10V 的电源转换器,以及电平转换芯片(逻辑 <0> 和 <1> 至 -15:+15 V,反之亦然)用于通过串行通道(例如 RS232)交换信息。
发送到计算机的值范围为 0...4095(对应于 ADC 位深度),0 对应于输入电平 0V,4095 - 电平 5V,相关性是线性的。 信息交换速率可以选择低于 9600 波特,也可以选择更高 - 高达 115 波特。 在相当老的计算机上,例如 200 及更早的计算机,上限要低得多 - 386 波特。 这是因为这些计算机中安装的串行端口芯片并不是为更高的速度而设计的。 芯片说明 MAX680电源转换器 运算放大器通常需要双极电源(例如,+10 V 和 -10 V 接地)。 对现代元件基础不太熟悉的无线电爱好者通常使用具有两个次级绕组(或具有一个,但中间有一个抽头)的变压器、两个滤波电容器、两个稳压器等来获得这样的电压。如果您可以使用的稳定电压为 5V,并且所使用的运算放大器(需要双极性电源)只需 +7:10 V,同时消耗 1:2 mA,那么提到的两个绕组和两个稳定器是不需要。 使用Maxim的MAX680芯片就足够了(注意此类芯片是Linear Technology等多家知名公司生产的)。 将 3:5 至 6:10 V 的电压 Uin(取决于类型)施加到微电路的输入;在其输出处生成约等于 +2Uin 的电压。 值得注意的是,首先,为了产生这些电压,除了 8 引脚 MAX680 或 LT1026 之外,只需要 4 个小型电解电容(见图 1),其次,当输入电压变化时,输出加倍相位变化,这对运算放大器的输出信号几乎没有影响。 有关此类微电路的更多详细信息,作者建议您参考相应的专有描述。 ADC MAX1241 近年来,在微控制器技术中,通过串行通道控制的微电路得到了广泛的发展。 12 位 ADC MAX1241 就是这些微电路之一。 与 MAX680 一样,MAX1241 有相当多的精确和近似类似物(Maxim 的 MAX187、Linear Technology 的 LTC1286、LTC1298、Analog Devices 的 AD7894 等)。 MAX1241采用8引脚封装,供电电压为2,7至5 V,消耗电流约为5 mA。 它需要使用外部参考电压源(本例中使用精密齐纳二极管 KR142EN19,产生 2,50 V 电压),并且仅使用 3 条线与微控制器进行通信。 MAX1241 的工作原理如图 2 所示的时序图所示。 1241. 在转换和交换之前,CS# MAX1241 输入必须由微控制器维持在单一状态。 要启动转换,必须向该输入施加逻辑零电平。 MAX8 中的转换过程只需不到 1241 µs。 在整个转换时间内,MAX0的DOUT输出保持逻辑1241电平,转换完成后,MAXXNUMX将DOUT输出设置为单一状态。
在开始转换之前,微控制器的 SCLK MAX1241 输入必须设置零逻辑电平。 当 ADC 内部的转换过程完成时,微控制器必须在 SCLK 输入处生成一系列至少 12 个正脉冲(图 2)。 第一个脉冲的上升沿使 MAX1241 做好数据传输的准备。 在 DOUT 上的脉冲下降时,最高有效的第 12 位显示为逻辑 11 或 XNUMX。 微控制器读取该位,在 SCLK 上生成第二个脉冲的前端,并在一段时间后 - 它的下降。 在第二个脉冲下降时,微控制器读取的第 XNUMX 位出现在 DOUT 等上。 在第 12 个脉冲下降时,最低有效位在 DOUT 输出处设置。 第 1 个脉冲的下降使 DOUT 处于零状态,此时 CS# 输入设置为 13。 通过将CS#转换为单一状态,微控制器通知MAX1读取转换结果的过程已完成。 将 CS# 设置为 1241 后,MAX1241 的下一次转换大约需要 1 µs。 Linear Technology 的 LTC1286、LTC1298 和 Analog Devices 的 AD7894 的操作算法与 MAX1241 的描述略有不同。 更多详情请参阅各公司的说明。 电平转换器MAX202E 对于任何人来说,这都不是秘密,在标准逻辑中,2,4 由 5 至 0 V 的电压电平表示,零由 0,8 至 232 V 的电压电平表示。但是,初学者可能不知道零和 5 是通过 RS-传输的。 12 通道使用相同的值(从 XNUMX 到 XNUMX V)进行编码,但符号信号不同。 在本文的框架内,它无意解释为什么通常这样做而不是其他方式 - 我们将仅限于陈述这一事实。 由于标准逻辑信号必须转换为另一电平的信号才能通过RS-232传输,因此需要在电路中提供适当的转换手段。 大约十年前,为此目的使用了专门设计的三四个晶体管、一对二极管和近十几个电阻器的级联。 现在情况发生了重大变化:领先的微电路制造商生产完全成品的转换器,需要最少数量的附加元件。 其中包括 MAXIM 的 MAX10E 和 Analog Devices 的 AD202,它们与它完全相同,甚至连引脚排列都相同。 两个微电路内部均包含一个+232 V至+5 V电压转换器(与上述MAX10相同),以及将标准电平逻辑信号转换为RS-680电平信号的级联。 这些微电路中的每一个都包含用于两个接收器和两个发射器的逻辑电平转换器。 我们将仅使用一个收发器通道。 带有串行通道的 MK 的操作模式 众所周知(例如,参见 10 年《无线电》杂志的第 11 和 1994 期),x51 系列的微控制器具有四种收发器操作模式。 我们会对模式 1 感兴趣,因为它是最简单且最容易接受的。 模式 1 的特征在于以下参数:
这是一种方便的编程模式:只需很少的编程代码即可设置和操作收发器。 不过,如果您愿意,也可以使用其他操作模式。 本文的目的是描述一种能够与个人计算机进行通信的设备。 我们不会在这里描述收发器到底是如何工作的。 该信息可以从提到的杂志“Radio”或其他文献中收集。 MK的基本例程 微控制器的主要例程是:从 ADC 读取数据、初始化 UART、接收字节和发送字节。 从 ADC 读取数据 设置 PC 通过串行链路交换信息。 为了将您的 PC 配置为通过串行通道交换信息,您必须执行以下操作:
针对谐振频率为 9600 MHz 的石英谐振器的 11,059 bps 交换率设计的代码示例:
GET_VOLT:SETB DOUT; 允许从 ADC SETB CS 输入数据; 设置初始状态 ADC CLR SCLK ; 设置初始状态 ADC CLR CS ; 报告读取 MUL AB 数据; 4 MKS 在 12 MHZ\ MUL AB ; 4 国际空间站 | 穆拉布; 4 ISS}等待结束; | 数字 MUL AB ; 4 MKS / MOV R0,#12 ; 读取 12 位 GET_VC: SETB SCLK ; \ 没有; | 没有; | CLR SCLK ; } 已经产生了一个阅读 BIT NOP 的脉冲; | 没有; / MOV C, DOUT ; 读位 MOV A, R2 ; \RLC一个; | 移动 R2,A ; | MOV A,R3; } 将位推入单词; | 结果 - R3R2 RLC A ; | 移动 R3,A ; /DJNZ R0,GET_VC; 循环 ANL A,#0FH MOV R3,A ; 清除高位 R3R2 SETB CS ; 不想读出来; (剩余位 = 0) MUL AB ; 4 MKS 在 12 MHZ \ MUL AB ; 4 国际空间站 | 穆拉布; 4 国际空间站 | 穆拉布; 4 µs }最小延迟; | 下一个之前穆拉布; 4 国际空间站 | 穆拉布; 4 国际空间站 / RET 该子程序在主微机程序中称为第一个子程序。 原则上,它甚至不能被设计为子程序。 接收和发送一个字节 通过串行通道接收和发送字节的例程非常简单。
SERINIT: MOV IE, #0 ; 禁用所有中断 MOV TMOD, #20H ; 设置定时器 2 的模式 1 MOV TH1, #REL96 ; 自动重载计数器的值 MOV TL1, #REL96 ; 9600 bps 的初始计数器值; SMOD = 0 ANL PCON,#7FH; 清除 SMOD MOV SCON, #50H ; 8 位数据和波特率的模式, ; 定时器相关的 SETB TR1 ; 启动定时器/设置器 1 RET,其中 REL96 是一个等于 0FDh 的常数 仅当 SCON 控制/状态寄存器中的 RI 位被置位(指示接收缓冲区中存在字节)时,才能从 SBUF I/O 端口读取字节。 读取该字节后,RI 位必须复位。 向 I/O 端口写入一个字节后,需要等待 TI 位被置位,这将表示向线路发送字节结束。 那么TI位也需要复位。 接收一个字节到累加器的子程序:
GETCH:JNB RI,GETCH MOV A,SBUF CLR RI RET 从累加器发送一个字节的子程序:
PUTCH: MOV SBUF, A SEND: JNB TI, SEND CLR TI RET 还应该注意的是,微型计算机没有任何检测I/O错误的装置。 为了以软件和硬件的方式组织检查,您可以扩展输入/输出线路的数量,通过这些线路传输附加信号,并且可以通过它们确定对话参与者所处的状态,以及识别错误。 可以通过另一种方式提高接收/发送信息的可靠性:用八个数据位再发送一位——奇偶校验位,其计算方式与程序状态字中的奇偶校验标志(PSW 位 0)类似。 仅应针对发送或接收的字节进行计算。 收到字节和奇偶校验位后,需要比较它们是否匹配。 如果它们不匹配,则发生 I/O 错误。 要传输额外的第9个信息位,必须使用定时器/计数器的模式2或3。 MK 通用程序。 设备状态图 一般的微计算机程序基于下述算法。 算法比较复杂,因为尽管如此,您仍然需要以某种方式(至少以编程方式)检测输入/输出错误并对它们的出现做出响应。 为了更清楚起见,用普通文字描述的算法附有一张图——所谓的设备状态图(图3),它显示了设备在与计算机进行信息交换方面的四种主要状态。
让我们提前规定这样一个事实:我们的微型计算机是数据交换的奴隶,而个人计算机是主导者。 换句话说,如果没有 PC 的命令,设备本身不应该执行任何操作。 它完全隶属于控制计算机。 选择个人计算机作为领导者的原因很简单,因为它具有更强大的功能并且能够控制设备而不会出现任何特殊问题。 此外,它还可以赋予用户更多的服务功能。 状态一——等待 接通电源后,设备立即处于此状态。 这里等待计算机的初始化请求,表现为计算机发送NUL字符。 反过来,设备必须响应收到的请求,启用并配置(如有必要)附加模块和资源,然后,如果一切顺利,则向计算机发送 ACK 符号。 如果出现错误,它应该发送 NAK。 这样,两个“对话者”的第一次“交流”就发生了。 如果愿意的话,他们应该“互致问候”或“握手”。 如果设备初始化成功然后发送 ACK 字符,它会自动进入下一个状态。 该转变由图中的箭头 1 表示。 就绪状态 在这种状态下,我们的微型计算机正在等待 PC 请求发送从 ADC 读取的测量值。 该请求是一个 XON 字符。 接受此符号后,设备进入新状态 - 正在发送。 箭头2对应于转变。 发送状态 到这里,微控制器通过前面提到的方法从 ADC 读取二进制 1 位数字,并将其部分发送到计算机。 此实现将二进制数转换为其等效的三字符十六进制数,例如 <511FF> 表示十进制 1。先发送 <XNUMX>,然后发送 完成将值传输到计算机后,微型计算机根据箭头 4 进入下一个状态。 发送状态 此状态是最后一个状态,可以说,它关闭了设备和计算机之间的单个通信行为的循环。 在这里,计算机应确认它已正确接收到发送给它的值。 PC 对发送的号码的响应有几种可能的选项:它可以用 XOFF 符号响应成功接收,这意味着现在不需要更多其他值,或者它可以用 XON 符号响应,这意味着还需要一个值。 如果接受 XOFF,设备将返回就绪状态(图中的转换 7)。 如果接收到 XON 符号,则设备再次处于发送状态(转换 5),并重复从 ADC 读取,随后将数字传输到线路。 唯一未考虑的情况是 PC 不喜欢它收到的内容:例如,不是 <0>...<9> 范围内的字符, ... 图中箭头 3 和 8 指示的转变仍未描述。 如果计算机检测到严重的 I/O 错误或需要停止与设备通信,那么它只会发送一个初始化 NUL,这将初始化设备并将其置于就绪状态。 那些。 无论我们的设备处于何种状态,它都必须以与初始初始化期间相同的方式响应初始化请求(请参阅等待状态项)。 如果微计算机收到一些意外的或不正确的字符或请求,那么它应该总是用 NAK 字符来响应。 这种策略是有利的,因为设备的程序的这种组织使得更容易同时执行多个任务:首先,微型计算机和PC不会玩坏了的手机,其次,它们将能够简单有效地与朋友互相“交流”。 让我们转向 PC。 PC通用程序。 PC状态图 从根本上来说,计算机的通用程序与微控制器中使用的程序没有任何区别。 算法将类似,状态图将类似。 第一状态初始化 这是当用户按下键盘上对应于接受单个值的键时计算机得到的结果。 在此状态下,计算机向设备发送 NUL 初始化字符,并等待 ACK 或 NAK 字符的响应。 如果收到 ACK,则初始化正常,您可以继续工作 - 沿着图中的箭头 2 转到下一个状态。 如果收到 NAK,则操作应停止,计算机应按箭头 1 进入最终状态“完成”。 就绪状态 在这种状态下,计算机准备接收构成微型计算机请求的值的字符。 有两个发送值的请求。 第一个是普通值请求,由 XON 字符匹配。 第二个请求是重新发送最后一个值的请求。 如果该值在一段客观时间内没有被完全接受,或者收到了不属于 <0> 到 <9> 以及从 到 范围内的错误字符,则这是必要的 接下来,在准备接收值符号后,对我们的设备发生上述两个请求之一,然后计算机沿着箭头4移动到值接收状态。 接收状态 此处,PC 仅读取 ADC 测量和转换的值的三个字符。 如前所述,计算机等待一个字符有一定的客观时间。 如果在这段时间内没有读取该字符,则这种情况被解释为错误,即发生 I/O 错误。 顺便说一句,在相当高的信息交换速率(超过 19200 bps)或在 MS-Windows 操作系统(任何版本)中工作时,经常会发生计算机仅接收发送给它的三个字符中的两个的情况,有时甚至更少——一个。 为了防止计算机“挂起”——等待无限长的丢失或丢失的字符——引入了一些时间来限制这种期望。 不幸的是,这些遗漏并不能通过硬件方法检测到。 此实现定义了两种类型的超时,可以由用户通过键盘指定。 第一种类型是 1 个字符中的 3 个的超时。 它让设备能够平静地、不急于任何地方,测量、数字化我们需要的数字,并将其转换成符号等价物。 第二种是发送第二个和第三个字符的时间限制。 现在让我们继续讨论从接收状态到其他状态的可能转换。 如果在指定时间内未收到该值的所有 3 个字符,则计算机必须要求我们的设备再次发送该值。 这种情况对应于沿箭头5的转变,即计算机发出带有 NAK 字符的请求并转换回就绪状态。 如果在接收过程中计算机检测到输入输出错误(并且PC机有能力简单分析串口的状态寄存器),那么最好将计算机和单片机都恢复到原来的状态,即恢复到原来的状态。 重复初始化。 因此,图中也存在箭头3。 最后,如果计算机已从设备接收到所有三个字符,则它会进入接收值的分析状态 - 沿箭头 8 进入已接收状态。 出版:cxem.net 读和写 有帮助 对这篇文章的评论. 科技、新电子最新动态: 用于触摸仿真的人造革
15.04.2024 Petgugu全球猫砂
15.04.2024 体贴男人的魅力
14.04.2024
其他有趣的新闻: ▪ 蜈蚣机器人 ▪ 呼吸出卖罪犯 ▪ Traco Power TMG - 每块板的紧凑型 AC-DC 模块
免费技术图书馆的有趣材料: ▪ 文章 发明什么文学人物大仲马只是为了增加费用? 详细解答 ▪ 文章继电保护。 3 kV及以上高压绕组变压器(自耦变压器)和500 kV并联电抗器的保护。 无线电电子电气工程百科全书 本页所有语言 www.diagram.com.ua |