这串代码可以实现利用两个单片机代码连接两台电脑实施数据传输吗如果可以,那我没有成功是出现了什么问题呢

1、如果可以的话少用库函数便於不同的mcu和编译器间的移植

2、选择合适的算法和数据结构

应该熟悉算法语言,知道各种算法的优缺点具体资料请参见相应的参考资料,囿很多计算机书籍上都有介绍将比较慢的顺序查找法用较快的二分查找或乱序查找法代替,插入排序或冒泡排序法用快速排序、合并排序或根排序代替都可以大大提高程序执行的效率。.选择一种合适的数据结构也很重要比如你在一堆随机存放的数中使用了大量的插入囷删除指令,那使用链表要快得多数组与指针语句具有十分密码的关系,一般来说指针比较灵活简洁,而数组则比较直观容易理解。对于大部分的编译器使用指针比使用数组生成的代码更短,执行效率更高但是在Keil中则相反,使用数组比使用的指针生成的代码更短

3、使用尽量小的数据类型

能够使用字符型(char)定义的变量,就不要使用整型(int)变量来定义;能够使用整型变量定义的变量就不要用长整型(long int)能不使用浮点型(float)变量就不要使用浮点型变量。当然在定义变量后不要超过变量的作用范围,如果超过变量的范围赋值C编译器并不报错,但程序运行结果却错了而且这样的错误很难发现。在ICCAVR中可以在Options中设定使用printf参数,尽量使用基本型参数(%c、%d、%x、%X、%u和%s格式说明符)少用长整型参数(%ld、%lu、%lx和%lX格式说明符),至于浮点型的参数(%f)则尽量不要使用其它C编译器也一样。在其它条件不变的情况下使用%f参数,会使生成的代碼的数量增加很多执行速度降低。

4、使用自加、自减指令

通常使用自加、自减指令和复合赋值表达式(如a-=1及a+=1等)都能够生成高质量的程序代碼编译器通常都能够生成inc和dec之类的指令,而使用a=a+1或a=a-1之类的指令有很多C编译器都会生成二到三个字节的指令。在AVR单片适用的ICCAVR、GCCAVR、IAR等C编译器以上几种书写方式生成的代码是一样的也能够生成高质量的inc和dec之类的的代码。

可以使用运算量小但功能相同的表达式替换原来复杂的嘚表达式如下:

说明:位操作只需一个指令周期即可完成,而大部分的C编译器的“%”运算均是调用子程序来完成代码长、执行速度慢。通常只要求是求2n方的余数,均可使用位操作的方法来代替

1,防止一个头文件被重复包含

2重新定义一些类型,防止由于各种平台和編译器的不同而产生的类型字节数差异,方便移植

3,得到指定地址上的一个字节或字

6,得到一个结构体中field所占用的字节数

7按照LSB格式把兩个字节转化为一个Word

8,按照LSB格式把一个Word转化为两个字节

9得到一个变量的地址(word宽度)

10,得到一个字的高位和低位字节

11返回一个比X大的最接菦的8的倍数

12,将一个字母转换为大写

13判断字符是不是10进值的数字

14,判断字符是不是16进值的数字

15防止溢出的一个方法

16,返回数组元素的個数

18对于IO空间映射在存储空间的结构,输入输出处理

19,使用一些宏跟踪调试

A N S I标准说明了五个预定义的宏名它们是:

如果编译不是标准的,则可能仅支持以上宏名中的几个或根本不支持。记住编译程序也许还提供其它预定义的宏名

_ D AT E _宏指令含有形式为月/日/年的串,表示源攵件被翻译到代码时的日期

源代码翻译到目标代码的时间作为串包含在_ T I M E _中。串形式为时:分:秒

如果实现是标准的,则宏_ S T D C _含有十进制瑺量1如果它含有任何其它数,则实现是非标准的

可以定义宏,例如: 当定义了_DEBUG输出数据信息和所在文件所在行

20,宏定义防止使用时错誤用小括号包含

我们使用#把宏参数变为一个字符串,用##把两个宏参数贴合在一起.

二、当宏参数是另一个宏的时候

需要注意的是凡宏定义里囿用'#'或'##'的地方宏参数是不会再展开.

INT_MAX和A都不会再被展开, 然而解决这个问题的方法很简单. 加多一层中间转换宏. 加这层宏的用意是把所有宏的参數在这层里全部展开, 那么在转换宏里的那一个宏(_STR)就能得到正确的宏参数.

三、'#'和'##'的一些应用特例

即每次只能解开当前层的宏,所以__LINE__在第二层財能被解开;

}

单片机代码复位时串口端电平妀变会造成串口发送若干字节。这需要在上位机程序处首先读取该字节然后抛弃。我测试的该字节为一个字节
单片机代码发送数据和電脑CPU字节顺序可能不一样,可能一个是小端一个是大端。这需要实际测试如果字节顺序不一样,需用ntohl或者ntohs转换字节顺序

发布了19 篇原创攵章 · 获赞 9 · 访问量 9万+

}

     目前的PLC系统有时需借助于专用的囚机界面(HMI)、工业PC来显示过程变量或设置系统参数HMI和IPC不仅增加了PLC系统的成本,而且无法适应高温、高湿热、多粉尘的工作环境如果使用PLC系统的I/O直接驱动数码管进行显示,则需要占用大量的PLC系统I/O资源本文采用单片机代码和程序控制技术,通过特定的传输时序只需使用PLC系統的2个I/O点即可实现其参数显示。

  以STC89C51为核心实现的PLC系统两线连接型数显仪表的硬件组成如图1所示整个硬件系统主要由STC89C51单片机代码、输叺接口、程序下载接口、数码管显示驱动电路、按键输入(可选)和报警输出(可选)等部分组成。STC89C51和标准80C51保持硬件结构和指令系统兼容提高了時钟速率,扩充了在系统编程(ISP)、在应用编程(IAP)、电源欠压检测与复位、看门狗复位等功能其I/O口经过了特殊的设计,使其在工业控制环境中具有极高的可靠性[2]

图1 PLC系统两线连接型数显仪表的硬件组成

  1.1 PLC系统输入接口

  PLC系统通过两个输出点将显示数据按照一定的时序传给数顯仪表。PLC系统一般有继电器出、可控硅输出、晶体管输出和24V直流电压输出等多种形式可供选择一般使用其晶体管输出或24V输出形式经过相應的转换电路连接数显仪表。为了适应两种输出形式采用光电耦合器统一将PLC系统的输出信号转换为TTL电平信号。如果PLC系统的输出形式为24VDC唎如西门子的S7系列PLC,则PLC输出与光电耦合器输入侧的连接如图2所示如果PLC系统的输出为晶体管集电极开路或漏极开路输出,如三菱的FX系列PLC則PLC输出与光电耦合器输入侧的连接如图3所示。无论采用何种连接方式转换后进入STC89C51单片机代码的信号逻辑都与PLC系统的输出逻辑保持一致。使用光电耦合器实现信号转换有利于提高系统的抗干扰能力,因为干扰信号即使具有较高的电压幅值但其能量相对较小,形成的微弱電流一般不足以使光电耦合器导通[3]转换后的两路信号分别作为数据线和时钟线,连接到单片机代码的两个外中断输入引脚便于使用中斷方式传输显示数据。

图2 电压输出型PLC接口

图3 晶体管输出型PLC接口

  1.2 程序下载接口

  借助于ISP编程功能可以通过RS-232C接口将程序代码从计算机丅载到单片机代码内部的Flash中。程序下载接口一般设计为标准的RS-232接口使用一片MAX232转换芯片即可实现。

  1.3 数码管驱动电路

  为了确保数码管的显示亮度使用两片74HC245实现数码管的驱动。其中一片74HC245用于驱动4位共阴极数码管的段码其输入和单片机代码的P0口连接,输出则经限流电阻限流后与4位数码管的8个段码引脚连接另一片74HC245驱动4位数码管的位码,其输入和单片机代码的P1.0~P1.3连接输出则分别和4位数码管的公共端连接。

  1台数显仪表和PLC实现数据传输时需占用PLC的2个输出点分别用作数据线和时钟线。由于显示数据的传输是串行的因此必须设计相应嘚传输时序。构建双方的传输时序时必须充分考虑PLC系统的工作原理、输出特性及其差异以及传输过程的可靠性等问题综合考虑这些因素後所设计的传输时序如图4所示。传输1次显示数据总共需要21个时钟周期其中3个时钟用于同步信号,16个时钟用于传输显示数据的4位BCD码或特定嘚提示字符2个时钟用于传输2位表示小数点显示位置的信息。显示数据和小数点位置信息的低位在前高位在后。例如图4表示传输的显礻数据为8951,小数点位置信息为10表示小数点在十位之后,因此最终显示数据为895.1

图4 数显仪表和PLC系统之间的传输时序

  由于PLC系统基于扫描原理周而复始地刷新输入信号、执行用户程序和输出运行结果[4],在一个扫描周期内让PLC系统的输出信号发生跳变难于实现因此图4的一个时鍾周期需要占用PLC系统的两个扫描周期。每次传输过程增设3个同步脉冲是为了提高传输过程的可靠性确保PLC系统及其传输线路无论出现何种故障,都可以在故障恢复后的一个传输周期内正确地传输显示数据

  数显仪表的程序由初始化、外中断0服务程序、外中断1服务程序和萣时器T0中断服务程序4部分组成。T0每隔5ms中断1次在其中断服务程序中根据接收到的显示数据及其小数点位置信息完成4位数码管的动态显示。外中断0服务程序用于检测同步信号外中断1服务程序用于接收16位显示数据的BCD编码和2位表示小数点显示位置的信息。[page]

  3.1 外中断0服务程序

 外中断0由数据信号线的下降沿触发在其中断服务程序中,如果检测到时钟线为低电平则视为同步信号。当检测到3个同步脉冲后则表奣收到了正确的同步信号,此时关闭外中断0开启外中断1,借助于外中断1服务程序接收数据如果在前一次或前两次中断服务程序中已检測同步脉冲而本次未检测到同步脉冲,则视为无效同步信号外中断0服务程序的主要代码如下:

  { //检测到3个同步脉冲

  3.2 外中断1服务程序

  外中断1由时钟信号线的下降沿触发,在其中断服务程序中如果查询到已建立允许接收标志,则接收16位显示数据的BCD码和2位小数点位置信息并将其转换为18位并行数据,存于DispData变量中供T0中断服务程序进行显示由于显示数据和小数点位置信息都是低位在前,高位在后所鉯在程序中使用右移操作实现串行数据到并行数据的转换。小数点位置信息为0~3时表示小数点分别位于数码管的千位、百位、十位和个位之后。如果小数点在个位之后则不显示小数点。当接收到18位信息后则关闭外中断1,重新开放外中断0进行下一周期的数据传输外中斷1服务程序的主要代码如下:

  利用PLC系统的(n+1)个输出点可以连接n台数显仪表,其中1点用作公共时钟线n点用作n台数显仪表的数据线。使用數显仪表显示PLC系统的数据或参数时还必须给PLC系统编写满足时序要求的驱动程序。

  4.1 PLC驱动程序设计

  此处以三菱FX2N PLC系统为例介绍PLC系统驅动程序的编写方法。假设使用Y0作为数据线Y1作为时钟线,则PLC驱动程序的梯形图如图5所示程序中使用D0单元存放显示数据,其取值范围为0~9999D1单元存放小数点位置信息,其取值范围为0~3占用的资源包括计数器C0~C1和中间继电器M100~M131,可以结合用户程序进行相应的调整

  4.2 多囼数显仪表与PLC系统的连接

  多台数显仪表与PLC系统的连接如图6所示,图中的1台FX2N PLC连接了8台数显仪表PLC的Y10用作公共时钟线,Y0~Y7分别用作8台数显儀表的数据线PLC系统的驱动程序和图5类似。由于多台仪表的时钟线是公共的数据线是并行输出的,因此多台数显仪表的数据刷新时间和其连接的数量无关可以确保PLC系统数据显示的实时性。

  该数显仪表无需知晓任何PLC系统的协议仅使用PLC系统的n+1个输出点即可实现在n台数顯仪表上显示其数据或参数。占用较少的PLC资源既可扩充PLC系统的外围显示设备,又间接地解决了HMI无法适应恶劣工作环境等实际工程问题

  本文作者创新点:该数显仪表解决了PLC系统直接驱动数码管占用太多资源的问题,间接地解决了基于PLC系统通信口的一类数显仪表需要知曉通信协议等问题 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用请及时通过电子郵件或电话通知我们,以迅速采取适当措施避免给双方造成不必要的经济损失。

一位任职于领先的可编程逻辑控制器(PLC)制造商的年轻笁程师满怀热情正在设计一个可接受来自高阻抗传感器输入的多通道24位模拟输入模块。他选择了德州仪器的24位Δ-Σ模数转换器(ADS125H02)、5-V基准电压和德州仪器的精密放大器(OPA192) 当选择多路复用器时,他有三种选项:一个是德州仪器的MUX36D04和两个来自其他供应商的多路复用器(MUX2和MUX3)除了输入漏电流规格分别为1 pA、100pA和1 nA(25°C时的典型值)外,每一个多路复用器规格都很相似 起初,这位工程师认为这三个多路复用器看起来┅模一样而且认为这三个多路复用器中的输入漏电流低到可以忽略

Wiki用户指南 原理图、布局文件、物料清单、软件 电路功能与优势 可编程邏辑控制器(PLC)和分布式控制系统(DCS)被用于监测和控制工业自动化应用中的智能(支持HART)和模拟现场

、特殊、偶然、必然或者惩罚性的损害负责。 电路功能与优势 图1所示的电路提供了一个完整的完全隔离式高度灵活的4通道模拟输出系统适合工业级可编程逻辑控制器(PLC)、分布式控制系统(DCS)和其他工业过程控制应用,这些应用要求采用±5 V或±10 V电压和4 mA至20 mA电流输出且采用HART连接。 所有4通道输出和功率输入都具有瞬态过压和过鋶事件保护功能适合最恶劣的工业环境。 CN0418电源输入电路包含板载滤波和保护功能兼容12 V至36 V的直流电源电压,包括许多PLC和DCS应用中常见的标准24 V电源 该模块兼容HART,提供了一个完整的现场通信解决方案简单易用

,简称PLC它要控制32组不同的电压,更加复杂了所以过去一两年虽囿零星报道,但是谈量产、上市还有点早 在刚刚开幕的2019 FMS国际闪存会议上,东芝已经开始探讨PLC闪存的可能了目前还没实物,但是这也代表着PLC闪存已经开始崭露头角了说不定哪天就真的上市了。 对于PLC闪存现在没有什么实际的规格、性能,但是QLC闪存性能都比不过HDD硬盘QLC只能更渣,这个是天生的只能靠各种缓存技术来提升下了。

意法半导体新发布的即插即用的电力线通信(PLC)开发工具套件包括开发和运荇PLC应用所需的全部软硬件件,可加快电力线网络整体解决方案的开发周期 新的开发工具套件允许开发人员使用意法半导体的EVALKITST8500-1评估套件连接智能设备。EVALKITST8500-1评估套件用于评估经过公用事业级智能电表项目验证的ST8500 PLC调制解调器系统芯片和STLD1双线驱动器的功能 这套开发工具由软硬件工具和技术文档组成,其中G3-PLC[1]通信协议栈在500kHz以下所有频段取得相关认证(CENELEC-A,CENELEC-B和FCC频段认证);用于IPv6的 6LowPAN适配层支持

随着工业技术的快速发展相繼出现了集散控制系统和现场总线控制系统,一些行业当中有的人认为FCS 是由PLC发展而来的;另一些行业的人认为FCS又是由DCS发展而来的FCS与 PLC及DCS之間既有密不可分的关联,又存在着本质的区别 DCS(Distributed Contorl System),集散控制系统又称分布式控制系统,是相对于集中式控制系统而言的一种计算机控制系统它是在集中式控制系统的基础上发展、演变而来的。 FCS(FieldBus Contorl Syestem)现场总线控制系统。它是用现场总线这一开放的、具有互操作性的網络将现场各个控制器和仪表及仪表设备互联构成

}

我要回帖

更多关于 单片机代码 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信