通用串口通讯程序设计
VB 串口通信程序设计典型实例
![VB 串口通信程序设计典型实例](https://img.taocdn.com/s3/m/09dedd202f60ddccda38a096.png)
V B串口通信程序设计典型实例利用VB开发串口通信程序既可以使用MSComm控件也可以调用Windows API函数实现。
不过,只要MSComm控件可以被选用,我们推荐选择此控件实现,因为MSComm控件的功能和API调用一样强,甚至比它还好且使用起来更加简单。
在本章提供的串口通信程序设计中,除了PC与PC串口通信外,PC与单片机、PC与智能仪表、PC与PLC、PC与GSM短信模块等串口通信任务的实现均采用MSComm控件。
6.1 PC与PC串口通信程序设计当两台串口设备通信距离较近时,可以直接连接,最简单的情况,在通信中只需3根线(发送线、接收线、信号地线)便可实现全双工异步串行通信。
本设计通过两台PC串口3线连接,介绍了利用API函数和MSComm控件设计串口通信程序的方法,包括字符与文件的发送与接收。
6.1.1 PC与PC串口通信程序设计目的(1)掌握PC与PC串口通信的线路连接方法。
(2)利用MSComm控件和API函数实现PC与PC串口通信的程序设计方法。
6.1.2 PC与PC串口通信程序设计用软、硬件本设计用到的硬件和软件清单如表6-1所示。
表6-1设计用软、硬件6.1.3 PC与PC串口通信程序硬件线路图线路说明,在计算机通电前,按图6-1所示将两台PC通过串口线连接起来:计算机A 串口COM1端口的TXD与计算机B串口COM1端口的RXD相连,计算机A串口COM1端口的RXD与计算机B串口COM1端口的TXD相连,计算机A串口COM1端口的GND与计算机B串口COM1端口的GND相连。
图6-1 PC与PC串口通信线路6.1.4 设计任务利用MSComm控件和VB API函数编写程序实现PC与PC串口通信。
任务要求,两台计算机互发字符并自动接收,如一台计算机输入字符串“Please return abc123”,单击“发送字符”命令,另一台计算机若收到,就输入字符串“abc123”,单击“发送字符”命令,信息返回到第一组的计算机。
基于ARM的LPC2132通用串口驱动程序设计
![基于ARM的LPC2132通用串口驱动程序设计](https://img.taocdn.com/s3/m/4991981f6edb6f1aff001fb5.png)
J o u r n a l o f Gu a n g x i Ac a d e my o f S c i e n c e s
Vo 1 . 3 0 , No . 1 Fe b r u a r y 2 0 1 4
基 于 AR M的L P C 2 1 3 2通 用 串 口驱 动 程 序 设 计
( 广 西瀚 特信 息产 业股 份有 限公 司, 广 西桂 林
5 4 1 0 0 4 )
( Gu a n gx i Hu nt e r I nf o r ma t i on I n du s t r y Co., Lt d ., Gui l i n, Gua n gx i , 5 41 0 0 4, Chi na )
d r i v e r i s d e s i g n e d . [ Me t h o d ] Ba s e o n t h e ARM L PC2 1 3 2 mi c r o p r o c e s s o r c h i p ,we p r o p o s e t h e
wi t h o u t c o mmu n i c a t i o n wi t h a l d r i v e r . [ Re s u l t ] Th i s s e r i a l p o r t d r i v e r i s t e s t e d a n d a p p l i e d s t a b l y i n r e mo t e a c q u i s i t i o n e n v i r o n me n t f o r a l o n g t i me .[ Co n c l u s i o n ] Th i s s e r i a l
基于EVC环境的串口通信程序设计
![基于EVC环境的串口通信程序设计](https://img.taocdn.com/s3/m/fbd3bd8ad4d8d15abe234ede.png)
20 Si eh E gg 0 7 c . c . n n. T
基于 E C环境的串 口通信程序设计 V
钱
( 南京农业大学工学 院 , 南京
燕
张 继锋
20 3 ; 10 1信息产业部第二十八研究所 , 南京 2 0 2 ) 10 9
摘
要
介绍 了在 P C硬 件平 台下, n o sC P Widw E操作 系统 中实现 串 口通信程序设计 的通用方法。分析 了E C环境 中串口通 V Wi o sC n w E d 串口通信 A
编 译 器
C C++编 译 器 /
●为 A M 设 备 提供 的 C A MC C+ R LR /
+编 译 器
● 为 MP IS和 MIS P设 备 提 供 的 PF
时。
通信程序 , 可以使用 P C去控制各种配备 串口的设 P
备。 Mi oo n o s E是 为 各 种 嵌 入 式 系 统 和 c sf Widw r t C
产 品设计 的一 种压 缩 的 、 有 高效 的 、 具 可升 级 的操 作
系统 ( S 。Widw E作 为 目前掌 上 电脑 的 主流 O) no s C
e e ddV sa Mb d e i l u C++( V 是 Mi oo 公 司 E C) c sf r t
不支持重叠 IO, / 本文是使用多线程来执行 同样类 型 的重叠操 作 , 当主线 程忙 时 , 用单独 线程来 处理 利
同步 IO操作 , 、 / 读 写操 作 有 各 自独 立 的线 程 来 处
操作 环境 。
使用 E C开发程序首先要 根据 自己使用的掌 V 上 电脑 C U型号安 装相 应 的 S K, 择相 应 的编 译 P D 选 器, 例如使用基 于 A M芯片的掌上电脑 , R 开发程序
RS232串口通信C++课程设计
![RS232串口通信C++课程设计](https://img.taocdn.com/s3/m/32669fc72cc58bd63186bd17.png)
2.1
设置和修改串口通信参数,包括端口,时间,波特率,奇偶校验位,数据位,停止位。
2.2
显示当前串口通信参数,包括端口号,波特率,时间,奇偶校验位,数据位,停止位,点击参数设置按钮,弹出参数设置窗口,当完成设置后点击确定,子窗口隐藏,显示界面是数据发送和接收界面。
2.3
参数设置后,打开串口,在程序中设置了一个默认的COM4但是在参数设置窗口可以设置串口,实现通信。
DECLARE_MESSAGE_MAP()
};
//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
#endif // !defined(AFX_CLASS1DLG_H__B8BA98C1_5D58_47BE_B664_E97E77EC5076__INCLUDED_)
随着当今信息技术的快速发展,通信已成为信息技术中的关键问题。尤其在控制领域,以何种方式实现计算机与外围设备间既简单又可靠的通信,就显得特别重要。由于串行通信具有实现简单、使用灵活方便、数据传输可靠等优点,因而广泛应用于工业控制系统中,是计算机与外部设备进行数据通信时经常使用的方式之一。VC++是新一代面向对象的可视化开发工具,提供了良好的界面设计能力,在PC机的串口通信方面有很强的功能。它具有功能强大、简便易用和代码执行速度快等特点,在通信软件的开发中成为越来越多开发人员的首选工具。无论在工业控制中PC机和单片机之间的通信,还是在2台Pc机之间的串口通信,都具有相同的原理。只要掌握其中的通信本质,就能灵活地实现串口通信,串口控制。
单片机串口通信设计方案
![单片机串口通信设计方案](https://img.taocdn.com/s3/m/e9fb1f8faf1ffc4fff47aca2.png)
单片机串口通信设计方案1.绪论1.1课题背景及意义目前,单片机的发展速度大约每两、三年要更新一代,集成度增加一倍,功能翻一番。
其发展速度之快、应用范围之广已达到了惊人的地步,它已渗透到生产和生活的各个领域,应用非常广泛。
在汽车、通信、智能仪表、家用电器和军事设备的智能化以及实时过程控制等方面,单片机都扮演着非常重要的角色[1]。
因此单片机的设计开发具有广阔的前景。
所以,对于电气类学生而言,学习一种单片机的开发是十分必要的。
而51系列的单片机,随着半导体技术的发展,其处理速度更快,性能更优越,在工业控制领域上占据十分重要的地位,通过对51系列单片机的学习而掌握单片机开发的过程是一种不错的选择。
然而单片机是一门综合性、实践性都很强的学科,其学习涉及的实验环节比较多,硬件设备投入比较大,对于大多数人而言很难投入大笔资金去购买实验器件。
而且要进行硬件电路测试和调试,必须在电路板制作完成、元器件焊接完毕之后进行,但这些工作费时费力。
因此引入EDA软件仿真系统建立虚拟实验平台,不仅可以大大提高单片机的学习效率,而且大大减少硬件设备的资金投入,同时降低对硬件设备的维护工作。
EDA设计思路是:从元器件的选取到连接、直至电路的调试、分析和软件的编译,都是在计算机中完成,所用的工作都是虚拟的。
虽然现在的电路设计软件已经很多,诸如PROTEL、ORCAD、EWB 、Multisim等,不过这些软件之间的差别都不大:都有原理图和PCB制作功能,都能进行诸如频率响应,噪音分析等电路分析,主要用于模拟电路、数字电路、模数混合电路的性能仿真与分析,但对于单片机设计及软件编程,最重要的是两者的联调,这些软件都无法实现,所以造成了单片机系统设计周期长、设计费用高等缺点[2]。
新款的EDA软件Proteus解决了上述软件的不足,成为目前最好的一款单片机学习仿真软件。
Proteus 软件是由英国Lab Center Electronics 公司开发的EDA 工具软件。
Vxworks串口通信程序设计与实现
![Vxworks串口通信程序设计与实现](https://img.taocdn.com/s3/m/720ffce16294dd88d0d26be3.png)
_
1 Vx rs简 介 wo k
从 19 9 5年 以 后 , S 公 司 推 出 了 一 套 实 时 操 作 系 统 开 发 环 WR
# n l d i Li - > i c u e< o b h 撕 n l d s d oh c u e< t i .> 衔n l d i c 1 > c u e< o t. h
பைடு நூலகம்
境— — T ma0 o ao集 成 环 境 提 供 了高 效 明 晰 的 图 形 化 的 实 时 应 o d 。T r d n
用 开发 平 台 ,它 包 括 一 套 完 整 的 面 向 嵌 入 式 系 统 的 开 发 和 调 测 工 具 。 T rao环 境 采 用 主 机— — 目标 机 交 叉 开 发 模 型 ,应 用 程 序 在 主 机 的 o d n
2 串 口通 信 基 本 原 理
i tc n i n o fg
_
cm1 od o ( i) v
/ 口 l配置 函数 / 串
串 L在 嵌 入 式 系 统 中是 一 类 重 要 的 数 据 通 信 接 口 , 本 质 功 能 是 I 其 作 为 C U 和 串 行设 备 间 的编 码 转 换 器 。 当 数 据 从 C U经 过 串行 端 口 模 式 :I E MO E P P LN _ D 发 送 出去 时 , 节 数 据 转 换 为 串 行 的位 ; 接 收 数 据 时 , 字 在 串行 的位 被 转 i ts , B U A E9 0 ) / 置 串 口波 特 率 为 9 0 b s o l f  ̄O A DR T ,6 0 ; / c(d 设 60 p 换 为字 节 数 据 。应 用 程 序 要 使 用 串 口进行 通 信 , 须 在 使 用 之 前 向 操 必 i ts , F U H,】 o lf  ̄O L S o ; c (d / 空 输 入 输 出 缓 冲 区 / 清
modbus rtu 程序设计及 轮询编程
![modbus rtu 程序设计及 轮询编程](https://img.taocdn.com/s3/m/b6fe19561fd9ad51f01dc281e53a580216fc50a9.png)
modbus rtu 程序设计及轮询编程Modbus是一种通用的通信协议,被广泛应用于工业自动化领域。
Modbus通信协议分为三种类型:Modbus ASCII、Modbus RTU和Modbus TCP/IP。
在这里,我们会重点探讨Modbus RTU的程序设计及轮询编程。
1. Modbus RTU协议简介Modbus RTU是一种串行通信协议,采用二进制编码,传输速率可达到115200bps,支持多主机(最多247个从站)同步通信。
Modbus RTU协议的数据格式通常由地址码、功能码、数据、CRC校验码组成。
2. Modbus RTU程序设计在Modbus RTU程序设计中,主机和从机之间进行数据通信。
主机是发起通信的一方,控制整个通信过程。
主机将命令发给从机,从机执行后返回响应消息。
在程序设计中,需要进行如下步骤:(1)初始化串口;(2)发送请求命令;(3)等待从机返回数据;(4)解析响应数据;(5)关闭串口。
3. Modbus RTU轮询编程轮询编程是指主机通过循环向所有从站进行查询,实现数据采集的过程。
轮询编程通常分为如下几个步骤:(1)设置从站地址码;(2)设置功能码;(3)设置数据区域;(4)发送命令并等待响应;(5)解析响应数据并存储;(6)重复执行以上步骤。
在轮询编程中,需要注意的是从站响应时间和主机查询时间应该保持一致,否则可能会导致数据出现丢失。
综上所述,Modbus RTU是一种常用的通信协议,在工业自动化领域有广泛的应用。
程序设计和轮询编程都是Modbus RTU通信的基础,操作正确才能保证通信的稳定和高效。
一种串口通信程序的设计与实现方法
![一种串口通信程序的设计与实现方法](https://img.taocdn.com/s3/m/9237e760561252d380eb6eed.png)
效的方 法 , 它可以利 用 On o C mm 事件捕获 并 处理通 信 中发 生 的事件 或错误 , 时性 较 强。 实 O C mm 事 件是 MS o no C mm 控件提供的唯 一 的事 件 ,当有 数据到 达端 口或端 口状 态发 生 改变或有通讯错 误时 ,都将 触发 O C mm事 no 件 ,以获取 和处 理这些 通讯 事件 和通 讯中产 生的错误 。通 过查询 C mmE e t o v n 属性值 , 可以获 得关 于通 讯事 件和 通讯错误 的 完整信 息 ,进 而进 行处 理 。这 是 一种功 能很 强的处 理 串行 口错 误 的方 法 ,具 有 程序 响 应 及时 , 可 靠性 高 的优 点 。 示 : 查询方式是 程序通过查询 C mm vn 属 o E et C0 mP r : o r 0 t 设置 并返 回通信 端 口号 ; 性 的值 来判 断通信 过程 中的事 件或 错误 ,这 S ti g : e tn s 以字符 串的 形式设 置并 返 回波 特 种 方式 适合 于应 用程序 较小 、 实时性 要求 不 率 、 奇 偶 校 验 、 数 据 位 、 停 止 位 ; 是很 高的系统。 P rO e : o t P n 设置并返 回通信端 口的状态 , 也可 鉴于 以上 两种 通信 方式 的优缺 点 以及实 打 开和关 闭端 口;I p t 保 存和接 收从接 收 际应用 的需 求 ,本 系统 采 用查询 方式 来处理 n u: 缓 冲区获 得的数据 I up t 向发送缓 冲区发 通 信过 程 的 事件 或 错误 。 tu: O 送 命令和数据 ;Ib f rie 设 置接收缓 冲 n u f sz : e 区分配的 内存 数量 ;O tufri : 置发送 4远程门禁系统应用实例 ub f s e设 e z 缓 冲区分 配的内存数量 ; t rs od 设置为 4 1 系统设计 简介 R h eh l: . 某一 定值 , 每当接收缓 冲区收到该 定值个位字 当红 外线传 感 器感知 有 用户刷 卡时 ,读 符时 , 都会使 MS o C mm控件 产生 O C m 事 卡 器将卡 中信 息读 出 ,通过控 制 器传到 上位 n om 件 ; t rs od: 置为某一 定值 , 当传 输 机 ( 机 ) S h eh l 设 每 PC ,与 数据 库 中信 息 进 行 比对 , 缓 冲 区 中 的 字 符 个 数 少 于 该 定 值 时 , 如果 正确 ,上 位机 给控制 器发 送信 息 ,控 制 M sC0 m 控 件 产生 OnC0 m 事 件 ; 器 根 据 收 到 的 信 息 判 断是 否 需 要 开 门 和 关 m m Ip t d : n uMo e 确定 Ip t n u 属性取 回的数据格式 门 。 由于 该 门禁系 统是远 程控 制的 ,因此信 是 字 符 串 还 是 二 进 制 数 据 的 数 组 ; 息 需 要 通 过 以太 网传 输 ,控 制 器的 传 输 是 Ip te : n uL n 设置并返 回 Ip t n u 属性从接收缓 冲 Rs 2 2格式 的 ,而远 程 网络 数据 传输是 3 区读 取的字符 数 ; C mm: C mmE e t TC / P格 式的 ,因此 需要使 用接 口 换器 On o 当 o v n P I 转 属性 的值 变化时 , 产生 O C mm 事件 , 就 no 标志 完成 两种 数据 格式之 间的 转换 。整 个系统 的 发 生 了 一 个 通 信 事 件 或 一 个 错 误 ; 数据 传输 流 程如 图 1所 示 。 C mmE e t返 回最 近的通 信事件和 错误 ; 42 P o vn : . C机 单片机 串行通信 电路设计 C mE S n : o v e d在传 输缓冲 区中有 ̄Sheh l . rsod t 该 系统使 用的单片机 为凌阳 S C 0 1 P E6A 数 少 的 字 符 时 , 产 生 该 事 件 ; 单片机 ,利用单 片机 自带串 口与 P C机进行通 Co mEv e d c ie: S n Re ev 收到 Rt ehod个 字 信 , 中R - 3 接 口芯片完成 S C o l hrs l 其 S 22 P E 6A与 符 , 事件将 持续产生 直到用 Ip t 该 n u 属性从接 P C机 串 口 间的电平转换 。整个通信 电路 的 之 收缓 冲 区 中删 除数 据 。 框 架如图 2 ‘ 。根据实 际的需 要 , 卡器也 所示 读 32 M C m . S o m控件通信步骤 可以通过 RS 3 接 口芯片直接连 到上位机 -2 2 MS o m 控件进 行 串口通信的一 般步骤 上 。 Cm 为 : 置通 信对 象 、通 信 端 口号 以及 其他 属 4 3 通信 协议说明 设 . 性; 设定 通信协 议 ;打 开通 信端 口, 进行 数据 上 位 机 与 下 位 机 之 间 以 通 讯 速 率 的 传 送 ;关 闭 通 信 端 口 。 9 0b s 6 0 p /秒传输 数据 ,无奇 偶校验 ,八位 33 M a m , S o m控件通信方式 数 据 位 和 一位 停 止 位 。 MS o C mm 控 件有两 种处理通 信的 方式 , 4 4 串行通信 模块框架 . 即事 件 驱动 方式 和 查询 方 式 。 上位机 与 S C 0 1 P E 6 A单片机通 过一系列 应 答联络后 ��
串口通讯设计之Verilog实现
![串口通讯设计之Verilog实现](https://img.taocdn.com/s3/m/6fa237bd6aec0975f46527d3240c844768eaa058.png)
串口通讯设计之V e r i l o g实现FPGA串口模块是将由RS-485发送过来的数据进行处理,提取出8位有效数据,并按异步串口通讯的格式要求输出到MAX3223的12脚;FPGA选用Xilinx公司的SpartanII系列xc2s50;此部分为该设计的主体;如上所述,输入数据的传输速率为700k波特率;为了使FPGA能够正确地对输入数据进行采样,提高分辨率能力和抗干扰能力,采样时钟必须选用比波特率更高的时钟,理论上至少是波特率时钟的2倍;1 串口通信基本特点随着多微机系统的应用和微机网络的发展,通信功能越来越显得重要;串行通信是在一根传输线上一位一位地传送信息.这根线既作数据线又作联络线;串行通信作为一种主要的通信方式,由于所用的传输线少,并且可以借助现存的电话网进行信息传送,因此特别适合于远距离传送;在串行传输中,通信双方都按通信协议进行,所谓通信协议是指通信双方的一种约定;约定对数据格式、同步方式、传送速度、传送步骤、纠错方式以及控制字符定义等问题做出统一规定,通信双方必须共同遵守;异步起止式的祯信息格式为:每祯信息由四部分组成:位起始位;~8位数据位;传送顺序是低位在前,高位在后.依次传送;c.一位校验位,也可以没有;d.最后是1位或是2位停止位;FPGAField Pmgrammable Gate Array现场可编程门阵列在数字电路的设计中已经被广泛使用;这种设计方式可以将以前需要多块集成芯片的电路设计到一块大模块可编程逻辑器件中,大大减少了电路板的尺寸,增强了系统的可靠性和设计的灵活性;本文详细介绍了已在实际项目中应用的基于FPGA的串口通讯设计;本设计分为硬件电路设计和软件设计两部分,最后用仿真验证了程序设计的正确性;2 系统的硬件设计本方案的异步串行通信的硬件接口电路图如图1所示,主要由四部分组成:RS-485数据发送模块、FPGA 串口模块、MAX3223和DB9;各部分功能简述如下:RS-485数据发送模块是将前续电路的数据发送到FPGA,供本电路处理,亦即本电路的输入;RS485是符合RS-485和RS-4225串口标准的低功耗半双工收发器件,有和5V两种,在本设计中选用了的器件SP3485;在本设计中;485的7脚和8脚与前端信号相连接,用于接收输入的数据;数据格式是这样的:一帧数据有25位,报头是16个高电平和1个低电平,接下来是8位有效的数据;传输速率为700k波特率;2脚是使能端,与FPGA的I/O 口相连,由FPGA提供逻辑控制信号;1脚和4脚也与FPGA相连,由FPGA对输入数据进行处理;FPGA串口模块是将由RS-485发送过来的数据进行处理,提取出8位有效数据,并按异步串口通讯的格式要求输出到MAX3223的12脚;FPGA选用Xilinx公司的Spartan II系列xc2s50;此部分为该设计的主体;如上所述,输入数据的传输速率为700k波特率;为了使FPGA能够正确地对输入数据进行采样,提高分辨率能力和抗干扰能力,采样时钟必须选用比波特率更高的时钟,理论上至少是波特率时钟的2倍;在本设计中选用4倍于波特率的时钟,利用这种4倍于波特率的接收时钟对串行数据流进行检测和定位采样,接收器能在一个位周期内采样4次;如果没有这种倍频关系,定位采样频率和传送波特率相同,则在一个位周期中,只能采样一次,分辨率会差;比如,为了检测起始位下降沿的出现,在起始位的前夕采样一次之后,下次采样要到起始位结束前夕才进行;而假若在这个周期期间,因某种原因恰恰使接收时钟往后偏移了一点点,就会错过起始位;造成整个后面位的检测和识别错误;针对本设计,FPGA的软件共分了三个模块:1.时钟分频模块;模块的功能是用来产生所需要的数据采集时钟和数据传输时钟;系统主频是40M的;数据采集时钟是2.8M的,发送时钟是;2. 提取数据模块;由RS485发送过来的数据共有25位,其中只有8位是有效数据;为了发送这8位有效数据;必须先将其提取出来;提取的办法是这样的:通过连续检测到的16个高电平和一个低电平;判断8位有效数据的到来;然后按照串行数据传输的格式,在加上起始位和停止位后,将其存储于输出缓冲寄存器中;在这里,我们的串行数据输出格式是这样规定的,一位起始位,八位数据位,一位停止位,无校验位;3.串行数据输出模块;这一模块相对比较简单,波特率选为,模块的功能是在移位输出脉冲的作用下,将输出缓冲寄存器中的数据移位输出;MAX3223是实现电平转换的芯片;由于RS-232c是用正负电压来表示逻辑状态;与TTL以高低电平表示逻辑状态的规定不同;因此,为了能够同计算机接口或终端的TTL器件连接,必须在RS-232与TTL电路之间进行电平和逻辑关系的变换;实现这种变换的方法可用分立元件,也可用集成电路芯片; MAXIM公司的MAX3223是为满足RS-232c 的标准而设计的具有功耗低、波特率高、价格低等优点,外接电容仅为或1uF,为双组RS232收发器;由MAX3223的12脚输入的数据,经过电平转换后由8脚输出,再经过DB9的TxD端输出,由PC机接收并做后续处理;3 系统软件设计FPGA模块是本设计的主体,使用Verilog硬件描述语言进行编写,本段代码共有两个子模块,分别实现提取八位数据和串行数据发送的功能;下面是verilog源代码module SIMOdin,clk,rst,dout_ser;input din; 4倍于波特率的时钟reg txclk; //发送数据时钟;发数据取的波特率integer bitpos="7"; //当前位parameters0=0,s1=1,s2=2,s3=3;reg2:0state;reg4:0counter; //用来计算报头报尾中1的个数reg tag,tag1;reg2:0cnt3;reg txdone="1"''''b1;//一个字节数据传输完毕标志提取有效数据位并按串行通讯格式装载数据always posedge nclk or posedge rstbegin ifrst begin state<=0; counter<=0; tag1=0; tag="0"; indata_buf<=8''''bz; dout_buf<=10''''bz; bitpos ="7"; cnt3<=0; end else casestate s0:begin tag="0";//表示数据没有装好ifdinbegin counter<=counter+1; state<=s0; ifcounter==15//如果检测到16个1则转入s1状态检测接下来的是不是0begin state<=s1; counter<=0;end endelse begin counter<=0; state<=s0;end end s1:ifdin//如果是0的话,转入s2状态,提取八位有效数据state<=s2; else //否则转到s0状态重新检测state<=s0; s2:ifcnt3==3//是否采集四次数据begin cnt2<=0; indata_bufbitpos<=din; //先进来的是高位数据bitpos="bitpos-1"; ifbitpos==-1begin bitpos=7;state<=s3;endend elsecnt3<=cnt3+1; s3:begin tag1=tag; tag=1''''b1; //标志输入寄存器满;表明已把有用数据装入寄存器iftag&&~tag1&&txdone //检测到tag的上升沿以及txdone为高才把输入缓冲数据放到输出缓冲去dout_buf<={1''''b1,indata_buf7:0,1''''b0};//停止位,高位,低位,起始位state<=s0; end endcaseend//发送数据模块reg3:0 state_tx=0;txclk or posedge rstbegin ifrst begindout_ser<=1''''bz;state_tx<=0;txdone=1; end elsecasestate_tx0:begin dout_ser<=dout_buf0;state_tx<=state_tx+1;txdone=1''''b0;end 1:begin dout_ser<=dout_buf1;s tate_tx<=state_tx+1;end 2:begin dout_ser<=dout_buf2;state_tx<=state_tx+1;end 3:begin dout_ser<=dout_buf 3;state_tx<=state_tx+1;end 4:begin dout_ser<=dout_buf4;state_tx<=state_tx+1;end 5:begin dout_ser<=dout_ buf5;state_tx<=state_tx+1;end 6:begin dout_ser<=dout_buf6;state_tx<=state_tx+1;end 7:begin dout_ser<=do ut_buf7;state_tx<=state_tx+1;end 8:begin dout_ser<=dout_buf8;state_tx<=state_tx+1;end 9:begin dout_ser< =dout_buf9;state_tx<=state_tx+1;end endcase endendmodule注:两个频率信号nclk、txclk由相应的分频程序产生;由于篇幅所限未在文中列出;FPGA模块接收从RS-485发送过来的串行数据;25位为一个字符;数据的传输速率是700kbps,用四倍于波特率的速率进行采样,这样可以大大降低系统的噪声;数据的串行输出波特率选为11200bps;由输入输出波形图可以看出:本段程序实现了对输入数据的有效数据位的提取,并按照一定的波特率进行串行输出;程序中,波特率可以根据需要通过分频程序进行改动;硬件电路搭建简单,程序代码书写容易;数据传输稳定可靠,可以满足串口通信的要求;。
串口通讯方法的三种实现
![串口通讯方法的三种实现](https://img.taocdn.com/s3/m/915a64442e3f5727a5e96271.png)
串口基本信息用一台电脑实验串口自发自收,实验前要将串口(以9针为例)的发送引脚(2脚)和接受引脚(3脚)短接。
三线连接:适用于计算机之间尤其是PC机和单片机之间的数据通信。
其连接信号对为(TxD,RxD)、(RxD,TxD)、(SG,SG)。
即发送数据TxD端和接受数据RxD端交叉连接,信号地SG对应连接。
七线交叉连接:适用于同型号的计算机之间的连接,如PC机间的数据通信。
其连接信号对为:(TxD,RxD)、(RxD,TxD)、(SG,SG)、(RTS,CTS)、(CTS,RTS)、(DSR.DTR)、(DTR,DSR)。
其中,TxD、RxD、SG与前面信号的含义相同,RTS为请求发送,CTS为准许发送,DSR为数据装置准备好,DTR为数据终端准备好。
在本地连接的微机系统中,RTS、CTS、DTR、DSR用作硬件联络控制信号。
目前使用的串口连接线有DB9和DB25两种连接器,用户可以国家使用的具体机器选择相应的连接器。
一个串口通讯类在/network/serialport.shtml。
PC机的RS-232接口的电平标准是-12V标示“1”,和+12V表示“0”,有些单片机的信号电平时TTL 型,即大于2.4v表示“1”,小于0.5v表示“0”,因此采用RS-232总线进行异步通信是,发送端和接受端要有一个电平转换接口。
串口通讯方法的三种实现串口是计算机上一种非常通用的设备通信协议。
大多数计算机包含两个基于RS232的串口。
串口同时也是仪器仪表设备通用的通信协议;很多GPIB兼容的设备也带有RS一232口。
同时,串口通信协议也可以用于获取远程采集设备的数据。
串口通信(Serial Communication),是指外设和计算机间,通过数据信号线、地线、控制线等,按位进行传输数据的一种通讯方式。
串口通信方便易行,应用广泛。
在Windows应用程序的开发中,我们常常需要面临与外围数据源设备通信的问题。
c语言串口编程实例
![c语言串口编程实例](https://img.taocdn.com/s3/m/8379db4f6d85ec3a87c24028915f804d2b1687da.png)
c语言串口编程实例摘要:1.串口编程基础2.C 语言串口编程步骤3.C 语言串口编程实例4.实例详解5.总结正文:一、串口编程基础串口编程是指通过计算机串行接口进行数据通信的编程方式。
串口(Serial Port)是一种计算机硬件接口,可以通过串行通信传输数据。
与并行通信相比,串行通信只需一条数据线,传输速度较慢,但具有线路简单、成本低的优点。
因此,串口编程在电子设备、计算机外设、通信设备等领域有广泛的应用。
二、C 语言串口编程步骤1.包含头文件:在使用C 语言进行串口编程时,首先需要包含头文件`<reg52.h>`或`<intrins.h>`。
2.配置串口:配置串口包括设置波特率、数据位、停止位、奇偶校验等参数。
3.初始化串口:初始化串口主要是初始化串口硬件,如配置UART(通用异步收发器)等。
4.打开串口:打开串口是指使能串口通信功能,以便数据传输。
5.读写串口:通过`in`和`out`语句实现数据的输入输出。
6.关闭串口:在数据传输完成后,需要关闭串口以节省资源。
7.串口通信:通过循环寄存器、缓存寄存器或FIFO(先进先出)等方法实现数据的收发。
三、C 语言串口编程实例以下是一个简单的C 语言串口编程实例,该实例通过串口发送数据“Hello, World!”:```c#include <reg52.h>#include <intrins.h>sbit UART_TXD = P3^1; // 配置UART TXD 引脚void init_uart(); // 初始化UART 函数void send_data(unsigned char dat); // 发送数据函数void main(){init_uart(); // 初始化UARTsend_data("H"); // 发送字符"H"send_data("e"); // 发送字符"e"send_data("l"); // 发送字符"l"send_data("l"); // 发送字符"o"send_data(" "); // 发送空格send_data("W"); // 发送字符"W"send_data("o"); // 发送字符"r"send_data("r"); // 发送字符"l"send_data("d"); // 发送字符"d"while(1); // 循环等待}void init_uart() // 初始化UART 函数{TMOD = 0x20; // 设置定时器1 为工作状态TH1 = 0xfd; // 设置定时器1 的计数值TL1 = 0xfd; // 设置定时器1 的计数值TR1 = 1; // 使能定时器1SCON = 0x40; // 设置串口工作状态ES = 0; // 开总中断EA = 1; // 开总中断允许}void send_data(unsigned char dat) // 发送数据函数{SBUF = dat; // 将数据存入缓存寄存器while(!TI); // 等待发送缓存清空TI = 0; // 清空发送缓存}```四、实例详解1.配置串口:通过设置UART TXD 引脚为P3.1,确定波特率、数据位、停止位和奇偶校验等参数。
基于STC89C52RC单片机间的串口通信程序设计
![基于STC89C52RC单片机间的串口通信程序设计](https://img.taocdn.com/s3/m/a11826cd51e2524de518964bcf84b9d528ea2c4f.png)
基于STC89C52RC 单片机间的串口通信程序设计叶林勇(三峡电力职业学院,湖北宜昌443000)1概述在工控系统和工程应用中,当需要实现主从节点间的控制时,常需要使用单片机的串口通信功能。
因而主从式分布式系统成为现代工业广泛应用的模式。
它们大多由MCS 原51单片机组成。
由于单片机具有功能强、体积小、价格低廉、开发应用方便,能实现全双工串行通讯的特点,在智能仪表、数据采集、工业控制等方面都有广泛的应用。
本文中两块实验板的R1与L2、R2与L1、两机的地线分别相连,如图1所示。
图1STC89C512MCS-51串口介绍2.1串行接口数据缓冲器(SBUF )SBUF 是两个在物理上独立的接收、发送缓冲器,可同时发送、接收数据。
通过指令来区别读写的是接收缓冲器还是发送缓冲器。
串行口对外也有两条独立的收发信号线RxD(P3.0)、TxD (P3.1),可以同时发送、接收数据,实现全双工。
2.2串行口控制寄存器(PCON )SCON 寄存器用来控制串行口的工作方式和状态,它可以按位寻址。
在复位时所有位被清零,字节地址为98H 。
各位含义如下:SM0,SM1:串行接口工作方式选择位,这两位组合成00,01,10,11对应于工作方式0、1、2、3。
串行接口工作方式特点见下表SM2:多机通信控制位。
REN :接收允许控制位。
软件置1允许接收;软件置0禁止接收。
TB8:方式2或3时,TB8为要发送的第9位数据,根据需要由软件置1或清0。
RB8:在方式2或3时,RB8位接收到的第9位数据,实际为主机发送的第9位数据TB8,使从机根据这一位来判断主机发送的时呼叫地址还是要传送的数据。
TI :发送中断标志。
用于指示一帧数据发送是否发送完毕。
在方式0时,当串行发送第8位数据结束时,或在其他方式,串行发送停止位的开始时,由内部硬件使TI 置1,向CPU 发中断请求。
在中断服务程序中,必须用软件将其清0,取消此中断申请。
基本串口通信程序设计
![基本串口通信程序设计](https://img.taocdn.com/s3/m/41d2f2848ad63186bceb19e8b8f67c1cfad6ee08.png)
基本串口通信程序设计串口通信是指通过串行接口进行数据传输的一种通信方式。
串口通信通常用于短距离的数据传输,具有稳定性强、传输速率低的特点。
本文将介绍串口通信的基本原理和程序设计。
一、串口通信基本原理串口通信是通过串行接口将数据一位一位地传输的通信方式。
串口通信的基本原理是使用两根信号线进行通信:一根是传输数据的信号线(TX),负责向外发送数据;另一根是接收数据的信号线(RX),负责接收外部发送过来的数据。
二、串口通信程序设计步骤1. 打开串口:首先需要通过操作系统提供的串口接口函数,打开需要使用的串口。
在Windows系统中,可以使用CreateFile函数打开串口;在Linux系统中,可以使用open函数打开串口。
3. 发送数据:使用WriteFile函数(Windows系统)或write函数(Linux系统),向串口发送需要传输的数据。
4. 接收数据:使用ReadFile函数(Windows系统)或read函数(Linux系统),从串口接收数据。
5. 关闭串口:数据传输完成后,需要关闭串口,使用CloseHandle函数(Windows系统)或close函数(Linux系统)即可关闭串口。
三、串口通信程序设计示例(Windows系统)下面是一个简单的串口通信程序设计示例,实现了从串口接收数据并将接收的数据原样返回的功能。
#include <iostream>#include <windows.h>int mainHANDLE hSerial;DCB dcbSerialParams = {0}; // 串口参数hSerial = CreateFile("COM1", GENERIC_READ , GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); // 打开串口dcbSerialParams.DCBlength = sizeof(dcbSerialParams);std::cout << "Error getting serial port state\n";return 1;}dcbSerialParams.BaudRate = CBR_9600;dcbSerialParams.ByteSize = 8;dcbSerialParams.StopBits = ONESTOPBIT;dcbSerialParams.Parity = NOPARITY;std::cout << "Error setting serial port state\n";return 1;}return 1;}char buffer[100];DWORD bytesRead;while (1)if (ReadFile(hSerial, buffer, sizeof(buffer), &bytesRead, NULL) && bytesRead > 0)std::cout << "Received data: " << buffer << std::endl;DWORD bytesWritten;if (!WriteFile(hSerial, buffer, bytesRead, &bytesWritten, NULL))std::cout << "Error writing to serial port\n";return 1;}}}CloseHandle(hSerial); // 关闭串口return 0;以上程序打开串口COM1,设置波特率为9600,数据位为8位,停止位为1位。
51单片机与PC串口间通讯设计与分析
![51单片机与PC串口间通讯设计与分析](https://img.taocdn.com/s3/m/496d414cf02d2af90242a8956bec0975f465a487.png)
51单片机与PC串口间通讯设计与分析一、串口通讯原理串口通讯是指通过串口来进行数据的收发传输的一种通讯方式。
串口通讯分为同步串行通讯和异步串行通讯两种方式,而51单片机与PC之间的串口通讯采用的是异步串行通讯方式。
异步串行通信是指每个数据字节之间可以有可变长度的停止位和起始位。
串口通讯一般由以下几个部分组成:1.传输数据线:用于传输数据的信号线,包括发送数据线(TXD)和接收数据线(RXD)。
2.时钟线:用于提供通讯双方的时钟信号。
3.控制线:用于控制串口通讯的流程,包括数据准备好(DSR)、数据就绪(DTR)等。
二、串口通讯协议串口通讯协议是约定通讯双方数据传输的格式和规则,常见的串口通讯协议有RS-232、RS-485等。
在51单片机与PC之间的串口通讯中,一般使用的是RS-232协议。
RS-232协议规定了数据的起始位、数据位数、校验位和停止位等。
起始位用于标识数据的传输开始,通常为一个逻辑低电平;数据位数指定了每个数据字节的位数,常见的值有5位、6位、7位和8位等;校验位用于校验数据的正确性,一般有无校验、奇校验和偶校验等选项;停止位用于表示数据的传输结束,通常为一个逻辑高电平。
三、51单片机串口的程序设计#include <reg52.h>#define UART_BAUDRATE 9600 // 波特率设置#define UART_DIV 256- UART_BAUDRATE/300void UART_Init( //串口初始化TMOD=0x20;SCON=0x50;PCON=0x00;TH1=UART_DIV;TL1=UART_DIV;TR1=1;EA=1;ES=1;void UART_SendByte(unsigned char ch) //串口发送字节TI=0;SBUF = ch;while(TI == 0);TI=0;void UART_Interrupt( interrupt 4 //串口中断处理if(RI)unsigned char ch;ch = SBUF;RI=0;//处理接收到的数据}if(TI)TI=0;//发送下一个字节}void mainUART_Init(;while(1)//主循环}在上述程序中,首先通过UART_Init(函数进行串口初始化,其中设置了波特率为9600;然后使用UART_SendByte(函数发送数据,调用该函数时会把数据放入SBUF寄存器,并等待TI标志位变为1;最后,在UART_Interrupt(函数中,使用RI标志位判断是否收到数据,然后对数据进行处理,TI标志位判断是否发送完当前字节。
基于C++串口通信设计与实现-可编辑
![基于C++串口通信设计与实现-可编辑](https://img.taocdn.com/s3/m/885103010a4e767f5acfa1c7aa00b52acfc79c62.png)
课程论文首页基于VC++串口通信的设计与实现中文摘要:通过常用的串口通信进行分析,着重讨论了VC + + 6. 0环境下利用MSComm控件实现串口通信的方法,研究了利用MSComm控件实现串口通信的关键技术问题,给出了MSComm控件在VC + + 6. 0串口通信中的应用。
关键词:VC++ 串口通信对话框1.设计背景随着当今信息技术的快速发展,通信已成为信息技术中的关键问题。
尤其在控制领域,以何种方式实现计算机与外围设备间既简单又可靠的通信,就显得特别重要。
由于串行通信具有实现简单、使用灵活方便、数据传输可靠等优点,因而广泛应用于工业控制系统中,是计算机与外部设备进行数据通信时经常使用的方式之一,所以针对计算机与外部设备通信的上位机关于串口通信的开发,在项目开发过程中具有重要地位。
2.设计原理2.1串口通信的基本概念终端与其他设备(例如,其他终端、计算机和外部设备)通过数据传输进行通信。
数据传输可以通过两种方式进行,即并行通信和串行通信。
●并行通信在计算机和终端之间的数据传输通常是靠电缆或信道上的电流或电压变化实现的。
如果一组数据的各数据位在多条线上同时被传送,这种传输方式称为并行通信●串行通信串行通信是指通信的发送方和接收方之间数据信息的传输是在单根数据线上,以每次一个二进制的0、1为最小单位逐位进行传输●二者比较:串行通信的速度慢,但使用的传输设备成本低,可利用现有的通信手段和通信设备,适合于计算机的远程通信;并行通信的速度快,但使用的传输设备成本高,适合于近距离的数据传送。
2.2串行通信的工作模式通过单线传输信息是串行数据通信的基础。
数据通常是在两个站(点对点)之间进行传送,按照数据流的方向可分成3种传送模式:单工、半双工和全双工。
●单工模式单工形式的数据传送是单向的。
通信双方中,一方固定为发送端,另一方则固定为接收端。
信息只能沿一个方向传送,使用一根传输线,一般用在只向一个方向传送数据的场合。
串口通信协议的制定及配置流程
![串口通信协议的制定及配置流程](https://img.taocdn.com/s3/m/c6660d05b4daa58da0114a6a.png)
串口通信协议的制定及配置流程串口通信协议串口通信指串口按位(bit)发送和接收字节。
尽管比按字节(byte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。
在串口通信中,常用的协议包括RS-232、RS-422和RS-485。
里以串口作为传输媒介,介绍下怎样来发送接收一个完整的数据包。
过程涉及到封包与解包。
设计一个良好的包传输机制很有利于数据传输的稳定性以及正确性。
串口只是一种传输媒介,这种包机制同时也可以用于SPI,I2C的总线下的数据传输。
在单片机通信系统(多机通信以及PC与单片机通信)中,是很常见的问题。
一、根据帧头帧尾或者帧长检测一个数据帧1、帧头+数据+校验+帧尾这是一个典型的方案,但是对帧头与帧尾在设计的时候都要注意,也就是说帧头、帧尾不能在所传输的数据域中出现,一旦出现可能就被误判。
如果用中断来接收的话,程序基本可以这么实现:unsigned char recstatu;//表示是否处于一个正在接收数据包的状态unsigned char ccnt; //计数unsigned char packerflag;//是否接收到一个完整的数据包标志unsigned char rxbuf[100];//接收数据的缓冲区void UartHandler(){unsigned char tmpch;tmpch = UARTRBR;if(tmpch 是包头)//检测是否是包头{recstatu = 1;ccnt = 0 ;packerflag = 0;return ;}if(tmpch是包尾)//检测是否是包尾{recstatu = 0;packerflag = 1; //用于告知系统已经接收到一个完整的数据包return ;}if(recstatu ==1)//是否处于接收数据包状态{rxbuf[ccnt++]= tmpch;}}上面也就是接收一个数据包,但是再次提醒,包头和包尾不能在数据域中出现,一旦出现将会出现误判。
计算机与单片机的串口通讯程序设计
![计算机与单片机的串口通讯程序设计](https://img.taocdn.com/s3/m/acd23dfff61fb7360b4c651a.png)
口; S 2 2被定 义 为一种 在低 速率 串行 通讯 中增 加通讯 距 离 的单 端标 准 。综合其 性 能 、 R 一3 价格 和 实用 性 , 对该 系统 而言 , 用 R 一 3 利 S 2 2进行 端 口通讯 最 为合适 ^ 侣。 R 一3 S 2 2是 现代计 算 机必 备 的 接 口, 常含 有 C 通 OM1和 C OM2两个 端 口 , 计 算 机 端
各有 侧重 。R 一8 在 传 输数 据 时抗 噪声干 扰 的能 力 比较强 , S4 5 常用 于工业 生 产领 域 US B接 口和 I E 一3 4传输 E E19
速度 较快 , 有些计 算机 和操 作 系统不 支持这 样 的接 口; S 2 2是 P 但 R 一3 C机 与通信 工业 中应 用最 广 泛的一 种 串行 接
证 明 , 设 计 方法 简单 方便 , 该 系统 运 行 稳 定 可靠 。
关 键 词 : 口通 讯 ; 片 机 ; 串 单 程序 设 计 文献标志码 : A 文章 编号 :0 52 9 (0 7 0— 1 30 1 0— 8 5 20 )30 0 —3 中 图分 类 号 : P 7 ; P 9 T 2 3 T 3
串行通 信程 序设 计包 括 3方 面 , 一方 面是 单 片机 的通 信程 序 , 另一 方 面为
计 算 机的通 信程 序 , 此外 为 了保证通 信 数据 的可靠 性 , 编 写程序 之前 , 在 还要 为其 双方 制定 通 信协议 。
2 1 通 信 协议 . ( )串行通 信端 I设 置 为 1 波特 率设 置 为 24 0b s 数据 位数 为 8 。 1 L l , 0 p , 位
0 引 言
通信 是指不 同的独立 系统利用线路互 相交换 数据 , 它的主要 目的是将 数据从一 端传送 到另一 端 , 实现数 据的交 换 Ⅲ。在现代工业 控制 中 , 常采用计 算机作 为上位机 与下 层的实 时控 制与监测设 备进行通讯 。现场数据必 须通过 通
基于CH341A的USB串口通讯设计
![基于CH341A的USB串口通讯设计](https://img.taocdn.com/s3/m/a5914818fad6195f312ba66e.png)
收稿日期:2010-06-06稿件编号:201006014作者简介:杨凤彪(1977—),男,河北怀安人,硕士,讲师。
研究方向:电力电子电能变换与数据采集。
图1CH341A 引脚排列图Fig.1Pin distribution of CH341A 第3期No.32011年2月Feb.2011基于CH341A 的USB 串口通讯设计杨凤彪,王超,张晨光(军械工程学院河北石家庄050003)摘要:为解决当前计算机串行通讯接口只有USB ,难以满足旧型号设备或某些单片机要求RS232通讯的问题,设计出两款RS232/USB 电路。
采用CH341A 与MAX223集成电路芯片构建标准9线RS232/USB 通用接口转换器,无需编程。
采用CH341A 与PIC16F877A 构建单片机与计算机之间的USB 通讯电路,软件遵循RS232通讯协议,硬件进行电平转换。
实际使用表明,这两款产品与计算机端Windows 操作系统下的串口应用程序完全兼容,且通讯过程中无握手失败现象。
关键词:USB ;RS232C ;通讯;接口中图分类号:TP334.5文献标识码:A 文章编号:1674-6236(2011)03-0011-04Design of USB serial communication based on CH341AYANG Feng -biao ,WANG Chao ,ZHANG Chen -guang(Ordnance Engineering Institude ,Shijiazhuang 050003,China )Abstract :To solve the problem that current computer serial communication only with USB interface can not satisfy with the old type equipments or MCU to communicate with RS232,two kinds of RS232/USB circuit were designed.CH341A and MAX223integrated circuit chips were used to create a standard 9-line RS232/USB universal interface convertor without programme.CH341A and PIC16F877A chips were adopted to build the USB communication circuit between computers and MCU.The software follows RS232communication protocol ,and the hardware converts electrical levels.Actual practices indicate that the two manufactures are compatible with serial application program of Windows operation system completely ,and get avoid of handshake lost.Key words :USB ;RS232C ;communication ;interface-11-《电子设计工程》2011年第3期图2CH341A虚拟端口COM3Fig.2Virtual port COM3for CH341A图3CH341A/RS232C转换器电路原理图Fig.3Schematic of CH341A/RS232C converter图4USB/RS232转换器通讯测试Fig.4Communication test of USB/RS232convert《电子设计工程》2011年第3期图6单片机程序流程图Fig.6Program flow chart ofMCU3结束语CH341A 作为一种新型的、功能强大的USB 接口转换芯片,可以工作在多种模式,且接线简单、控制方便、使用灵活,可满足用户的多种需求。
基于计量仪表的串口通信程序设计
![基于计量仪表的串口通信程序设计](https://img.taocdn.com/s3/m/20c27560a45177232f60a2f7.png)
5 工控机通信界面的设计 .
在本系统 中我们 采用 V 60程序开 发工 控机 B。 通信界 面 ,使用 Wi o s串口通信控件 ,实现工 n w d
控机对计 量仪表 的监控和 数据通信 。V 60是微 B.
软公 司 开发 的一 套可 视化 编程 环 境 ,其 功能 强 大 ,可 以与 Widw 家族无缝链接 ,大 大提高 了 nos 程序运行 的效率 ,减少冗余代 码的产生 ,是 开发 M coo n o s irsfWidw 应用程 序最 迅速 、最简 单 的编 t 程软件 ,特别是编写静态 界面非常方便 。与其他 可 视 编 程 软 件 如 P 、C + u dr C、相 比 , B + B i e、V l V B最大特 点在 于其概念 少 ,语 法简单 ,简单 易 学 ,可视化程度高 ,可扩充性 强 ,开发 的效率 比
起 始 符 命 令 码 校验码 结 束 符
1字节
1字节
若干字节
1字节
2 B方 向 A方返回的数 据格式 .
起 始符 数据码 校验码 结 束符
[] 1刘树坤 , 刘金. Wi o sP 实现 串行通 用 n wA I d
是 ,Widw 的 A I 用程序 接 口;二是 ,串 口通 no s P应 针对 串口通信 ,MS o C mm是系统设计 中应用最 多
信控件 ,也就是 MS o m控件。 Cm 的控件 ,设计方便 ,不必理解复杂 的 A I P 函数 ,简单
立连接序列 号 5 H,A方接收 到连接序列号 5 H 1 1 后给 B方回应 9 H,B方接收到 9 H认为是第二 3 3 次握 手成 功 ,然后 给 A方发送数据 码。A方收到 返回码后 ,本次命令操作结束 ,否则 重新 启动一
串行口通信开启和关闭紧急处理功能程序设计代码
![串行口通信开启和关闭紧急处理功能程序设计代码](https://img.taocdn.com/s3/m/8e6ae5c8f605cc1755270722192e453610665ba3.png)
串行口通信开启和关闭紧急处理功能程序设计代码串行口通信开启和关闭紧急处理功能程序设计代码一、介绍串行口通信是计算机与外部设备进行数据交互的一种常见方式。
在某些情况下,可能会遇到紧急处理的需求,例如在发生故障或异常情况时需要立即停止通信。
本文将详细介绍如何设计一个程序,在串行口通信中实现开启和关闭紧急处理功能。
二、程序设计思路为了实现串行口通信开启和关闭紧急处理功能,我们需要使用一个编程语言来编写程序。
在这里,我们选择使用Python语言进行示例演示。
下面是程序设计的主要思路:1. 导入所需的库和模块:我们需要导入Python的serial模块来实现串行口通信功能。
2. 设置串行口参数:在开始通信之前,我们需要设置好串行口的参数,包括波特率、数据位、停止位等。
3. 打开串行口:通过调用serial模块中的open()函数来打开指定的串行口。
4. 开启紧急处理功能:通过向外部设备发送特定指令来开启紧急处理功能。
5. 进行数据交互:使用read()和write()函数进行数据的读取和写入操作。
6. 关闭紧急处理功能:通过向外部设备发送特定指令来关闭紧急处理功能。
7. 关闭串行口:通信结束后,通过调用serial模块中的close()函数来关闭串行口。
三、程序设计代码下面是一个简单的示例代码,演示了如何实现串行口通信开启和关闭紧急处理功能:```pythonimport serial# 设置串行口参数port = 'COM1' # 串行口号baudrate = 9600 # 波特率bytesize = serial.EIGHTBITS # 数据位parity = serial.PARITY_NONE # 校验位stopbits = serial.STOPBITS_ONE # 停止位# 打开串行口ser = serial.Serial(port, baudrate, bytesize, parity, stopbits)# 开启紧急处理功能ser.write(b'Emergency:ON')# 进行数据交互data = ser.read(10) # 读取10个字节的数据ser.write(b'Send data')# 关闭紧急处理功能ser.write(b'Emergency:OFF')# 关闭串行口ser.close()```四、代码解释和注意事项1. 在代码中,我们首先导入了serial模块,并设置了需要的串行口参数。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
(状态机也就这个原理。状态机多了 PUSH\POP 栈流程。)
设计功能码,必须考虑兼容性和扩展性,对数据帧的功能进行划分,坚决杜绝想到一个算一 个,功能码也不能随意/随便/随心的安排,否则在以后增加数据帧的时候会很麻烦。
功能码长度:1 个字节(取值范围:0‐255) 一般 256 种功能分类够用;不够就扩展到两个字节。 编码规则(建议): 高四位二进制作为父类编码,低四位二进制父类中子类。这样就可以将系统数据通信帧 分为 16 个大类,每个大类下有 16 个可用的具体类,当你增加功能码的时候,就可以根据 你的设计来确定属于哪个大类了,然后再插入进去。这样在管理、维护这些通信数据时你会 发现很方便。 这个编码规范在 ARM 内核的中断系统和设计 uCOS II 任务优先级的时候都有使用到, 在设计项目的通信协议的时候就是运用了这些思想。
校验码 一帧数据在传输过程可能会被干扰,使得接收端获取的数据是错误的。为保证一帧数据的准 确性和完整性,就引入了校验功能,好的校验可以逆向还原一帧数据中的错误数据。 (密钥不在这里讨论!)
校验有很多方式,累加和校验、CRC 校验等。
第 7 页 共 13 页
(奇偶校验只针对 1 个字节校验,一般不做 2 字节以上数据帧校验)。
数据域长度 数据域长度信息是非常关键的数据。(当然,也有特殊类型通讯协议/规约不需要.) 数据域长度字段的值限定/定义数据域的字节个数信息。详见“表(1)、表(2)、表(3)”
帧格式数据域长度与数据域关系划分。
案例之一: 接收程序流程刚好将帧头、功能码/判断完毕,然后中断程序莫名原因(非法指令)引
这种校验方式占用单片机的运算资源量较大,目前有些单片机嵌入了硬件 CRC 模块(如 stm32 单片机)。
校验是通讯规约约定检验字节起点和结束位置。 建议:从帧头开始到数据域最后一个字节。也可以只检验数据域,这只是区别在单片机运算 量问题。建议从帧头开始校验,能保证整个帧数据的准确性。
帧尾 前面说了,帧尾在空闲中断中可以不用,RXNE 中断接收时其实也可以不用,当然也可以加 上,好处就是当你用串口助手查看数据流时,可以观察出一帧数据是否发送完整了。
累加和校验算法简单,单片机的运算资源占用量小,累加最后只取最低字节就行,不是高字 节(至于原因后续再单独聊)。保存累加和的变量使用 1 个字节,简单好用。
CRC 校验,算法比较复杂。CAC 是对帧数据中每个字节的每二进制位(BIT)进行校验,具 有很高纠错率,只要数据帧中有一个数据的 1 个二进制位发生变化,都能检查出错误。
第 5 页 共 13 页
1.2 接收程序编写考虑因素
数据“功能码”指针 数据包指针 FIFO 缓存读/写指针的互斥锁释放顺序 数据帧检查/校验 串口空闲 缓存数据帧存放时间/生命周期,超时识别 通讯数据吞吐量,(帧间隔时间,保证单片机有充分时间处理其他事情。)
帧头 只要保证帧头字节数据内容,在所有通讯数据字节流中,除帧头有意为之而出现,那就
确保及时接收数据: ① 采用 DMA 模式(单片机若有); ② 设定串口通讯为最高有效优先级中断; ③ 接收程序在读取 BUF 数据时进可能先读取到临时/中转寄存器中,再做数据识别。
数据域 整个帧需要的最有用的数据。 接收/发送函数能处理各种类型的数据,建议参数类型定义成 void *DataPtr 是不错的选择。
通用串口通讯程序设计
作者:和光同尘 版本:V1.0
序
做硬件开发近 20 载,花了近十年做基础开发,对硬件开发略知一二,接触的做国防/ 工业大项目的人才我就是和他们沟通中获取了很多思想;人生已过而立之年,不惑解疑,总 想写点什么。从一线研发(做了 4 年),开发(3 年),硬件开发主管(12 年),算起来人生 从不到弱冠之年(中专毕业)开始接触 MCS51、AVR 等 8 位处理器到 ARM v7 核、CoretxM 核的 32 位处理器,CPLD/FPGA、PLC…………啰嗦了!! 最近因为工作原因需要把一些自己感悟的记录下来,希望传递给入门的有心沉下心做基础健 壮扎实的初学者。
帧内位置
0,1
2
3,4
5
6 …… N
N+1
N+2
N+3,N+4
取值范围 :(0x3A),=(0x3D) 0x00 - 0xFF 0x0 ≤ Len ≤ 0xFFFF
0x00 ~ 0xFF
0x00 ~ 0xFF
CR(0x0D),LF(0x0A)
注:
1.N 取值范围:0 To 65535 。 2.CRC 验证起止段:开始于帧头(SOF),结束于 CRC 验证码(低字节)前最后一个有效数据字节(DataBuf[N]),CRC 验证:多项式(0xA001).
N+3 0x0D
第 4 页 共 13 页
表(3)类通用型(TYPE_C/V1.0)帧格式
I 类通用型(TYPE_C/V1.0)帧格式
8*N 串二进制流
N 串字节流
校验/检查区域(CHECK AREA)
帧结构 帧头段(SOF AREA)
数据段(DATA AREA)
数据域
SOF
Function
Lenght
起没有及时读取/释放串口 BUF 中数据,就会在获取数据时得到错误的数据,这个错误的长 度数据可能导致创建的栈溢出,引发周边数据被篡改(注意所有字节变量定义区域选择,根 据单片机 RAM 资源,合理分配变量所处位置,尽量局部变量定义在 DATA、IDATA 区域,程 序执行效率也高些;数据栈定义在 XDATA 区域),数据栈溢出处理不好将是灾难性事件。在 接收数据域的数据之前切记一定要判断数据域长度信息(空闲中断除外)是否合法,不合法 的及时抛弃掉这帧数据,复位接收标识状态,准备新一帧的数据检查接入栈工作。
字节数
1BYTE
1BYTE
1BYTE
1BYTE
(2 - 4)Bytes
效验码(CHK AREA)
CRC16 校验,多项式(0xA001) CRC16 低字节 CRC16 尾
2Byte
1Byte
帧内位置
0
1
2
3
4
5
……
N
N+1
N+2
取值范围 注:
:(0x3A)
0x00~0xF F
0x00~0xFF
0x00~0xFF
0x00~0xFF
0x00 ~ 0xFF
1.Databuf[N],N 取值范围:2(PC->H 型),4(H 型->PC)。
2.CRC 验证起止段:开始于帧头(SOF),结束于 CRC 验证码(低字节)前最后一个有效数据字节,CRC 验证:多项式(0xA001)。
‘U’(55H)、‘@’(40H)等等 只要保证帧头字节数据内容,在所有通讯数据字节流中,除帧头有意为之而出现,那就
是帧头。建议最好有两个字节及以上,这样数据出现与帧头一致的概率更加小,才做到独一 无二的特殊性。
第 2 页 共 13 页
表(1)类通用型(TYPE_A/V1.0)帧格式
I 类通用型(TYPE_A/V1.0)帧格式
第 1 页 共 13 页
正文
做嵌入式硬件开发一般都会用到通讯数据交互,这就涉及通讯协议/规约的设计。本文 从基础的串口(RS232、RS485 等)为模型进行讲解。 说道串口通讯,就是编写串口程序,简单的就是 1 个字节的发送,1 个字节的接收,但这不 能满足绝大多数实际工作业务需求,实际需要一串字节数据的交互,A 发送,B 接收……Z 接收;Z 机……B 机收到根据情况需要回复(ACK)A 机,这个过程就叫交互双向通讯(本文 不讨论多主机、1 主机相对复杂通讯机制。)。这种通讯就需要提前设计好通讯的规约(大家 约定好暗号——每个字节代表什么意思)。 接下来编写通信程序(发送/接收),如何写出一个健壮高效串口程序?是否健壮高效其实很 大一部分取决于通讯接收程序的架构。 通讯程序编写依据是——通讯规约,通讯帧的设计。 I 类通用型:
8*N 串二进制流
N 串字节流
校验/检查区域(CHECK AREA)
帧结构 帧头段(SOF AREA)
数据段(DATA AREA)
数据域(DATA AREA LENGHT)
SOF
Lenght
帧头
数据域长度
Function
DataBuf[N]
功能码
数据
字节数
2BYTE
2BYTE
1Byte
0Bytes To NBytes
特例 1: 串口空闲中断:帧头、帧尾都可以不用。建议,帧头保留,帧尾可以不需要。当单片机 没有串口空闲中断时考虑,也可能有其他考虑,所以帧头得保留。
功能码 功能码主要用于说明该数据帧的功能,也可作为函数指针的索引,一个索引值代表了一
个具体功能,据此可找到对应的功能函数。
比如: 设计一个函数指针数组,通过功能码进行索引,进而跳转到对应的功能函数执行程序。
(DATA AREA LENGHT)
帧头
功能码
数据域长度
DataBuf[N]
数据
字节数
2BYTE
1BYTE
2Byte
0Bytes To NBytes
效验码(CHK AREA)
CRC16 校验,多项式
(0xA001)
CRC16
CRC16
低字节
高字节
2Byte
帧尾段(EOF AREA)
EOF 帧尾 2Byte
||帧头段|===|数据段|===|校验码|===|帧尾段|| II 类时隙通讯:
||开始时隙 T(T1T2T3T4T5T6)|=|功能码|=|数据段|=|校验码|=|结束时隙 T(T1T2T3)| 注意:时隙只是纯粹的前后两帧数据的间隔时间,这期间坚决不能有数据产生。