搜档网
当前位置:搜档网 › CS CJ系列串行通讯指令

CS CJ系列串行通讯指令

CS CJ系列串行通讯指令

51单片机与PC串口通讯

目录 第1章需求分析 ............................................................................................................................ - 1 - 1.1课题名称 (1) 1.2任务 (1) 1.3要求 (1) 1.4设计思想 (1) 1.5课程设计环境 (1) 1.6设备运行环境 (2) 1.7我在本实验中完成的任务 (2) 第2章概要设计 ............................................................................................................................ - 2 - 2.1程序流程图 (2) 2.2设计方法及原理 (3) 第3章详细设计 ............................................................................................................................ - 3 - 3.1电路原理 (3) 3.1.1STC89C52芯片 ............................................................................................................. - 3 -3.2串口通信协议 (4) 3.3程序设计 (5) 3.3.1主程序模块 .................................................................................................................... - 5 - 3.3.2串口通讯模块 ................................................................................................................ - 6 - 3.3.3控制部分文件 ................................................................................................................ - 8 - 3.3.4公共部分模块 .............................................................................................................. - 11 -3.4电路搭建 (12) 3.4.1电路原理图 .................................................................................................................. - 12 -第4章上位机关键代码分析 ...................................................................................................... - 12 - 4.1打开串口操作 (12) 4.2后台线程处理串口程序 (15) 4.3程序运行界面 (18) 第5章课程设计总结与体会 ...................................................................................................... - 19 -第6章致谢 .................................................................................................................................. - 19 -参考文献........................................................................................................................................... - 19 -

用Visual Basic 实现串口通信的三种方法

网络用V isual Basic实现 串口通信的三种方法 ●赵海燕 目前,V isual Basic(简称V B)已成为WINDOWS系统开发的主要语言,以其高效、简单易学及功能强大的特点越来越为广大程序设计人员及用户所青睐。V B支持面向对象的程序设计,具有结构化的事件驱动编程模式并可以使用无限扩增的控件。在V B应用程序中可以方便地调用WINDOWS API 函数,使得编程效率提高,应用功能增强。 利用V B提供的这些功能,我们可以有三种方法完成串口通信。一种是用V B提供的具有强大功能的通信控件;另一种方法是调用WINDOWS API函数,使用WINDOWS提供的通信函数编写移植性强的应用程序;第三是利用文件的输入/输出完成,该方法简便易行,但有一定的局限性。 一、利用通信控件(MSCOMM)完成串口通信 V B提供了通信控件M SCOM M,文件名为M SCOM M.V BX。该控件可设置串行通信的数据发送和接收,对串口状态及串行通信的信息格式和协议进行设置。在通信过程中可以触发OnC omm事件,在该事件过程进行数据检验处理及检错,还可以通过编程访问C ommE vent属性来了解通信的情况,进行收发数据的处理。每个通信控件对应一个串口,如果要访问多个通信口,则要设计多个通信控件。 1.通信控件的事件及基本属性 (1)事件 OnC omm:通信控件只提供了一个事件,该事件的触发可以对串口的通信事件及错误进行处理。通过对C ommE vent属性的判断可知当前的通信错误和事件,分别对每个C om2 mE vent值进行编程就完成了对各个错误和事件的处理。如: C ommE vent=M SCOM M—EV—SEND表示发送事件。这些信息可从V B提供的常量文件CONST ANT.T XT中查出。 (2)属性 C ommP ort:设置通信控件与哪个串口相连接,设置并返回通信口号。 S ettin g:设置通信的信息格式,为字符型。顺序为:波特率、校验、数据位、停止位。 P ortO p en:布尔型、开关通信口。 In p utLen:从接收缓冲区读取字符个数。 In p ut,Out p ut:读取接收缓冲区或写入发送缓冲区字符。 以上五种属性对串口完成基本的设置和操作,下面的三种属性是描述如何利用V B提供的事件驱动机制来实现通信。 C ommE vent:返回通信过程中产生的错误信息及事件,了解通信状况。 ST hresh old:设置并返回不触发OnC omm事件时发送缓冲区被允许的最少字符数。当缓冲区的字符少于设置的值时,则触发OnC omm事件,并把C ommE vent设为M SCOM M M—EV—SEND。当ST hresh old=0则禁止发送触发OnC omm事件,当ST hresh old=1则发送缓冲区为空时就触发OnC omm事件。利用这一属性,就可完成发送数据后的一系列操作。如:对刚发送的数据进行处理,当串口是和M ODEM通信时,发送完数据后可进行拆除线路联接、挂机等操作。 RT hresh old:设置并返回不触发OnC omm事件时接收缓冲区被允许的最多字符数。当缓冲区的字符多于设置的值时,则触发OnC omm事件,并把C ommE vent设为M SCOM M—EV—RECEIVE,当RT hresh old=0则禁止接收触发OnC omm事件,当RT hresh old=1则接收缓冲区有一个或更多字符时就触发OnC omm事件。利用这一属性,就可完成对串口接收数据的处理。 2.利用通信控件的实例 Sub F orm1—load() form1.sh ow ′设置COM1 https://www.sodocs.net/doc/3713678816.html,m p ort=1 comm1.S ettin g="9600,o,8,1"′波特率:9600奇校验,8位数据,1位停止位 comm1.In p utlen=0′读取接收缓冲区的所有字符comm1.OutBufferS ize=512′设置发送缓冲区为512字节comm1.InBufferS ize=512′设置接收缓冲区为512字节comm1.ST hresh old=0′禁止发送事件 comm1.RT hresh old=1′每一个字符到接收缓冲区都触发接收事件 ′设置COM2 https://www.sodocs.net/doc/3713678816.html,m p ort=2 comm2.S ettin g="2400,e,8 ,1"

C51单片机和电脑串口通信电路图

C51单片机和电脑串口通信电路图与源码 51单片机有一个全双工的串行通讯口,所以单片机和电脑之间可以方便地进行串口通讯。进行串行通讯时要满足一定的条件,比如电脑的串口是RS232电平的,而单片机的串口是TTL电平的,两者之间必须有一个电平转换电路,我们采用了专用芯片MAX232进行转换,虽然也可以用几个三极管进行模拟转换,但是还是用专用芯片更简单可靠。我们采用了三线制连接串口,也就是说和电脑的9针串口只连接其中的3根线:第5脚的GND、第2脚的RXD、第3脚的TXD。这是最简单的连接方法,但是对我们来说已经足够使用了,电路如下图所示,MAX232的第10脚和单片机的11脚连接,第9脚和单片机的10脚连接,第15脚和单片机的20脚连接。 串口通讯的硬件电路如上图所示 在制作电路前我们先来看看要用的MAX232,这里我们不去具体讨论它,只要知道它是TTL和RS232电平相互转换的芯片和基本的引脚接线功能就行了。通常我会用两个小功率晶体管加少量的电路去替换MAX232,可以省一点,效果也不错,下图就是MAX232的基本接线图。

按图7-3加上MAX232就可以了。这大热天的拿烙铁焊焊,还真的是热气迫人来呀:P串口座用DB9的母头,这样就可以用买来的PC串口延长线进行和电脑相连接,也可以直接接到电脑com口上。

为了能够在电脑端看到单片机发出的数据,我们必须借助一个WINDOWS软件进行观察,这里我们利用一个免费的电脑串口调试软件。本串口软件在本网站https://www.sodocs.net/doc/3713678816.html,可以找到 软件界面如上图,我们先要设置一下串口通讯的参数,将波特率调整为4800,勾选十六进制显示。串口选择为COM1,当然将网站提供的51单片机实验板的串口也要和电脑的COM1连接,将烧写有以下程序的单片机插入单片机实验板的万能插座中,并接通51单片机实验板的电源。

51单片机与PC串口间通讯设计与分析

51单片机与PC串口间通讯设计与分析 摘要:51单片机是一种集CPU,RAM,FLASH ROM,I/O接口和定时中断系统于一体的微型计算机。只要有外加电源和晶体振荡器就可以独立完成对数字信号的算术运算,逻辑控制,串行通信等功能。由于单片机具有体积小,重量轻,功耗低,功能强,价格低,可靠性好等诸多优点,因而在仪器仪表,家用电器,数据采集等一些嵌入式控制领域被广泛应用。 当需要处理较复杂数据或需要对多个采集数据进行综合处理以及需要进行集散控制时,单片机的算术运算和逻辑运算能力显的不足,这时往往需要借助计算机系统。将单片机采集的数据通过串行口传给PC机,由PC机高级语言或数据库语言进行处理,或者实现PC 机对远程单片机进行控制。因此,实现单片机与PC机之间的远程通信更具有实际意义。 关键词:单片机、PC机、发送数据、接收数据串行通信

目录 摘要------------------------------------------------------------------(1)1、绪论---------------------------------------------------------------------------(3) 1.1单片机的发展阶段-------------------------------------------------(3) 1.2单片机的发展趋势-------------------------------------------------(3) 1.3单片机的应用模式-------------------------------------------------(4) 1.4单片机与PC串口间通讯设计的应用--------------------------(5) 2、系统设计-------------------------------------------------------------------(6) 2.1设计思路-------------------------------------------------------------(6) 2.2系统组成-------------------------------------------------------------(6) 3、单元硬件电路设计-------------------------------------------------------(7) 3.1硬件的实现过程-----------------------------------------------------(7) 3.1.1 RS-232C总线标准-------------------------------------------(8) 3.2 RS-232接口电路----------------------------------------------------(9) 3.2.1 MAX-232接口电路------------------------------------------(9) 3.3 51单片机与PC机串行通信电路-----------------------------(11) 4、软件设计------------------------------------------------------------------(12) 4.1 软件设计和硬件设计的关系-----------------------------------(12) 4.2 程序设计-----------------------------------------------------------(13) 4.3程序运行后的结果------------------------------------------------(17) 5、结论-----------------------------------------------------------------------(18) 6、参看文献------------------------------------------------------------------(19)

51单片机与PC机通信资料

《专业综合实习报告》 专业:电子信息工程 年级:2013级 指导教师: 学生:

目录 一:实验项目名称 二:前言 三:项目内容及要求 四:串口通信原理 五:设计思路 5.1虚拟串口的设置 5.2下位机电路和程序设计 5.3串口通信仿真 六:电路原理框图 七:相关硬件及配套软件 7.1 AT89C51器件简介 7.2 COMPIN简介 7.3 MAX232器件简介 7.4友善串口调试助手 7.5 虚拟串口软件Virtual Serial Port Driver 6.9八:程序设计 九:proteus仿真调试 十:总结 十一:参考文献 一:实验项目名称:

基于51单片机的单片机与PC机通信 二:前言 在国内外,以PC机作为上位机,单片机作为下位机的控制系统中,PC机通常以软件界面进行人机交互,以串行通信方式与单片机进行积极交互,而单片机系统根据被控对象配置相应的前向,后向信息通道,工作时作为主控机测对象,作为被控机接受PC机监督,指挥,定期或受命向上位机提供对象及本身的工作状态信息。 目前,随着集成电路集成度的增加,电子计算机向微型化和超微型化方向发展,微型计算机已成为导弹,智能机器人,人类宇宙和太空和太空奥妙复杂系统不可缺少的智能部件。在一些工业控制中,经常需要以多台单片机作为下位机执行对被控对象的直接控制,以一台PC机为上位机完成复杂的数据处理,组成一种以集中管理、分散控制为特点的集散控制系统。 为了提高系统管理的先进性和安全性,计算机工业自动控制和监测系统越来越多地采用集总分算系统。较为常见的形式是由一台做管理用的上位主计算机(主机)和一台直接参与控制检测的下位机(单片机)构成的主从式系统,主机和从机之间以通讯的方式来协调工作。主机的作用一是要向从机发送各种命令及参数:二是要及时收集、整理和分析从机发回的数据,供进一步的决策和报表。从机被动地接受、执行主机发来的命令,并且根据主机的要求向主机回传相应烦人实时数据,报告其运行状态。 用串行总线技术可以使系统的硬件设计大大简化、系统的体积减小、可靠性提高。同时,系统的更改和扩充极为容易。MCS-51系列单片机,由于内部带有一个可用于异步通讯的全双工的穿行通讯接口,阴齿可以很方便的构成一个主从式系统。 串口是计算机上一种非常通用的设备通讯协议,大多数计算机包容两个基于RS232的串口。串口同时也是仪器仪表设备通过用的通讯协议,很多GPIB兼容的设备也带有RS-232口。同时串口通讯协议也可以用于获取远程采集设备数据。所以,深入的理解学习和研究串口通信相关知识是非常必要的。此次毕业设计选题为“PC机与MCS-51单片机的串口通讯”,使用51单片机来实现一个主从式

智能仪器与PC串口通信的实现

福建电脑2010年第2期 图1SCPI 工作流程图 智能仪器与PC 串口通信的实现 管 平1,杨 丹2,胡新荣1 (1.武汉科技学院湖北武汉430073 2.长沙信息职业技术学校湖南长沙410610) 【摘要】:本文简要介绍了IEEE488.2标准,讨论了如何使用该协议进行智能仪器设备控制系统的编写.详细地介绍了SCPI 命令及其使用方法。利用Agilent 公司的IO suite 套件中的VISA 库实现对Agilent34401A 数字万用表的远程控制。 【关键词】:IEEE488.2,Agilent34401A ,SCPI 1、引言 1.1串口通信原理 在Windows 环境下,串行接口是系统资源的一部分。它本质功能是作为CPU 和串行设备间的编码转换器。当数据从CPU 经 过串行接口发送出去时,字节数据转换为串行的位。在接受数据时,串行的位被转换为字节数据。RS-232C 标准的全称是EIA-RS-232C 标准,其中EIA 代表美国电子工业协会,RS 代表推荐标准,232是标识号,C 代表RS232的最新一次修改。1.2SCPI 命令 Agilent34401A 数字多用表采用串口与IEEE488进行通信的技术,它能够得到精准、快速和可重复的测量结果。为了保证前向和后向兼容性,34401A 包括三种命令语言(SCPI 、Agi -lent3478A 和Fluke8840A/42A ),因此无需重写已有的测试软件。 SCPI (Standard Commands for Programmable Instruments )是可编程仪器标准命令,是一种建立在现有标准IEEE488.1和IEEE 488.2基础上,遵循了IEEE754标准中浮点运算规则、ISO646信息交换7位编码符号(相当于ASCll 编程)等多种标准的标准化仪器编程语言。它采用一套树状分层结构的命令集,提出了一个具有普遍性的通用仪器模型,采用面向信号的测量;它的助记符产生规则简单、明确,且易于记忆。SCPI 是以ASCII 字符组成的标准仪器命令语言,可以用于任何一种标准接口,如GPIB ,VXI ,RS232,USB ,LAN 。 SCPI 命令采用层次结构,系"树结构"语言。相关的命令集合到一起构成一个子系统,各组成命令称为"关键字",各关键字间用冒号":"分隔,如: SEN Se :FREQuency : VOLTage :RAN Ge ?[M INimum|MAXimum ] 方括弧([])表示选择性的关键字或参数。大括弧({})中为命令字串的参数。三角括弧(<>)表示必须用一数值来取代括号中的参数。(|)隔开多重参数的选择。 MEASure :VOLTage:DC?{|MIN|MAX|DEF},{|MIN|MAX|DEF} :VOLTage:AC?{|MIN|MAX|DEF},{|MIN|MAX|DEF} :CURRent:DC?{|MIN|MAX|DEF},{|MIN|MAX|DEF} :CURRent:AC?{|MIN|MAX|DEF},{|MIN|MAX|DEF} 从以上可以看出,SPCI 命令可以望文生意,简单明了,实际 SCPI 语言等于把各仪器的各种功能命令罗列起来完成某项测 量任务。 MEASure ?命令是设定仪器进行测量的最简单方法,在执 行这个命令的时候仪器必须先设置好所要求的状态,并立即执行测量。CONFigure 命令在执行的时候,仪器必须先将所要的配置预设成最好的设定,并且立即执行测量。 READ ?命令会将触发系统的状态,从"闲置"状态改为"等待触发"状态。在收到R EAD ?命令之后,且指定的触发条件满足时,测量便会开始,读数立即送到输出缓冲器上(读数资料必须输入到总线控制器上,否则输出缓冲器满了之后,测量就会停止)。INITiate 和FETCh?命令提供测量触发和读数取回最低限的控制。在配置好多用电表之后,使用INITiate 命令,它将使触发系统的状态,从"闲置"状态改为"等待触发"状态。在收到INITiate 命令之后,而指定的触发条件满足时,测量便会开始。读数将会存入多用电表的内部记忆体中。 .RST 重设多用电表电源开启时的配置。 .TST ? 执行多用电表的完整自我测试,传回值为"0"表示自我测试成功。它使用INITiate 将多用电表设至成"等待触发"状态,且在ExtTrig 端有脉冲进来的时候,量取一个读数,并将读数送到电表的内部记忆体上。2、硬件平台安装与配置 测试系统的建立,一般采用独立的测试或测量仪器,使用SCPI 命令或用软件驱动程序经GPIB ,USB ,LAN 接口发送ASCII 命令。 Agilent 34401A 数字多用表提供了一个GPIB 接口,在PC 和DMM 之间实现了简便稳定的连接能力。GPIB 接口满足IEEE-488.2标准,可以通过SCPI 命令进行远程控制。 我们选择NI 的AT-GPIB/TNT 卡与Agilent 34401A 进行通信.NI MAX 能发现所有NI 接口上的装置,但不能直接控制Ag -ilent 接口.如:VXI 的FireWire 接口,USB/GPIB 转换器,或PCL-GPIB 卡. Agilent 的Intuilink,VEE 和IO Libraries 能过NI -VISA 和NI488.2来连接GPIB-32.dll,如果应用程序使用VISA 编程,在对板卡基址配置完成后,先安装NI-VISA 软件包,再安装Agilent IO Libraries . 硬件安装与配置: 1)先安装NI-VISA IEEE488.2的板卡驱动程序.配置好GPIB 卡 2)设置万用表的通信方式:把agilent34401A 的通信方式设置为GPIB 通信方式,编程语言选择SCPI 。 3)安装Agilent 公司的IO 套件(iolibs_suite_14_2_8931_1_multimedia ),随IO 套件一起安装的还有的.net framework ,.net framework sp1,VISA 库,IO 套件必须要有VISA 库才能正常运行.在桌面任务栏的右下角会有一个IO 标志,打开Agilent connec -tion expert(安捷伦连接专家),它会自动检测到安装的硬件,使用GPIB0连接到万用表,这里也可测试计算机与(下转第137页 ) 168

基于51单片机的串口通讯系统课程设计论文

引言 人类社会已经进入信息化时代,信息社会的发展离不开电子产品的进步。单片机的出现使人类实现利用编程来代替复杂的硬件搭建电路,它靠程序运行,并且可以修改。通过不同的程序实现不同的功能,尤其是特殊的独特的一些功能,这是别的器件需要费很大力气才能做到的,有些则是花大力气也很难做到的。一个不是很复杂的功能要是用美国50年代开发的74系列,或者60年代的CD4000系列这些纯硬件来搞定的话,电路一定是一块大PCB板!但是如果要是用美国70年代成功投放市场的系列单片机,结果就会有天壤之别!只因为单片机的通过你编写的程序可以实现高智能,高效率,以及高可靠性! 单片机应用的主要领域非常广,智能化家用电器、办公自动化设备商业营销设备、工业自动化控制、智能化仪表、智能化通信产品、汽车电子产品、航空航天系统和国防军事、尖端武器等领域。 单片机应用的意义不仅在于它的广阔围及所带来的经济效益,更重要的意义在于,单片机的应用从根本上改变了控制系统传统的设计思想和设计方法。以前采用硬件电路实现的大部分控制功能,正在用单片机通过软件方法来实现。以前自动控制中的PID调节,现在可以用单片机实现具有智能化的数字计算控制、模糊控制和自适应控制。这种以软件取代硬件并能提高系统性能的控制技术称为微控技术。随着单片机应用的推广,微控制技术将不断发展完善。 电路的集成化不仅对硬件电路的设计相关,与电路的布局同样相关。印刷版的出现使得电路产品更加规,体积更小。Protel99se是一款专业的绘制电路及印刷版的软件,近年来的不断升级使得其功能更加完善,出现了Altium Designer 、Protel DXP等升级版本。

汇编语言实现串口通信(PC和单片机间)教学文案

8.用C语言或汇编语言实现串口通信(PC和单片机间) 上位机和下位机的主从工作方式为工业控制及自动控制系统所采用。由于PC 机分析能力强、处理速度更快及单片机使用灵活方便等特点,所以一般都将PC 机作为上位机,单片机作为下位机,二者通过RS-232或者RS-485接收、发送数据和传送指令。单片机可单独处理数据和控制任务,同时也将数据传送给PC机,由PC机对这些数据进行处理或显示 1 硬件电路的设计 MCS-51单片机有一个全双工的串行通讯口UART,利用其RXD和TXD与外界进行通信,其内部有2个物理上完全独立的接收、发送缓冲器SBUF,可同时发送和接收数据。所以单片机和PC机之间可以方便地进行串口通讯。单片机串口有3条引线:TXD(发送数据),RXD(接收数据)和GND(信号地)。因此在通信距离较短时可采用零MODEM方式,简单三连线结构。IBM-PC机有两个标准的RS-232串行口,其电平采用的是EIA电平,而MCS-51单片机的串行通信是由TXD(发送数据)和RXD(接收数据)来进行全双工通信的,它们的电平是TTL电平;为了PC机与MCS-51 机之间能可靠地进行串行通信,需要用电平转换芯片,可以采用MAXIM公司生产的专用芯片MAX232进行转换。电路如图1所示。硬件连接时,可从MAX232中的2路发送器和接收器中任选一路,只要注意发送与接收的引脚对应关系即可。接口电路如图3.5所示。

总体设计按照整体设计思路方案绘制原理图如下所示: 2 系统软件设计 软件设计分上位机软件设计和下位机软件设计。这两部分虽然在不同的机器上编写和运行,但它们要做的工作是对应的:一个发送,另一个接收。为了保证数据通信的可靠性,要制定通信协议,然后各自根据协议分别编制程序。现约定通信协议如下:PC机和单片机都可以发送和接收。上位机和下位机均采用查询方式发送控字符和数据、中断方式接收控制字符和数据。采用RS-232串口异步通信, 1上位PC机与下位单片机异步串行通信的通信协议

实验单片机与PC机串口通信

实验单片机与PC机串口通信(C51编程)实验 要求: 1、掌握串行口的控制与状态寄存器SCON 2、掌握特殊功能寄存器PCON 3、掌握串行口的工作方式及其设置 4、掌握串行口的波特率(bondrate)选择 任务: 1、实现PC机发送一个字符给单片机,单片机接收到后即在个位、十位数码管上进行显示,同时将其回发给PC机。要求:单片机收到PC机发来的信号后用串口中断方式处理,而单片机回发给PC机时用查询方式。 采用软件仿真的方式完成,用串口调试助手和KEIL C,或串口调试助手和PROTEUS分别仿真。 需要用到以下软件:KEIL,VSPDXP5(虚拟串口软件),串口调试助手,Proteus。 (1)虚拟串口软件、串口调试助手和KEIL C的联调 首先在KEIL里编译写好的程序。

打开VSPD,界面如下图所示:(注明:这个软件用来进行串口的虚拟实现。在其网站上可以下载,但使用期为2周)。 左边栏最上面的是电脑自带的物理串口。点右边的addpair,可以添加成对的串口。一对串口已经虚拟互联了,如果添加的是COM3、COM4,用COM3发送数据,COM4就可以接收数据,反过来也可以。 接下来的一步很关键。把KEIL和虚拟出来的串口绑定。现在把COM3和KEIL绑定。在KEIL中进入DEBUG模式。在最下面的COMMAND命令行,输入 modecom39600,0,8,1 %分别设置com3的波特率、奇偶校验 位、数据位、停止位 assigncom3sout %把单片机的串口和COM3绑定到一 起。因为所用的单片机是

(以上参数设置注意要和所编程序中设置一致!) 打开串口调试助手 可以看到虚拟出来的串口COM3、COM4,选择COM4,设置为波特率9600,无校验位、8位数据位,1位停止位(和COM3、程序里的设置一样)。打开COM4。 现在就可以开始调试串口发送接收程序了。可以通过KEIL发送数据,在串口调试助手中就可以显示出来。也可以通过串口调试助手发送数据,在KEIL中接收。 实验实现PC机发送一个字符给单片机,单片机接收到后将其回发给PC机。在调试助手上(模拟PC)发送数据,单片机收到后将收到的结果回送到调试助手上。 2、以下在Proteus和串口调试助手实现的结果: 将编译好的HEX程序加载到Proteus中,注意这里需要加上串口模块,用来进行串行通信参数的设置。 点击串口,可以对串口进行设置: 用串口调试助手发送数据,即可看到仿真结果。 实验参考程序源文件在exp2-comm文件夹中。

51单片机与串口通信(含代码)

51单片机与串口通信(含代码) 串口调试 1. 发送:向总线上发命令 2. 接收:从总线接收命令,并分析是地址还是数据。 3. 定时发送:从内存中取数并向主机发送. 经过调试,以上功能基本实现,目前可以通过上位机对单片机进行实时控制。 程序如下: //这是一个单片机C51串口接收(中断)和发送例程,可以用来测试51单片机的中断接收 //和查询发送,另外我觉得发送没有必要用中断,因为程序的开销是一样的 #i nclude #i nclude #i nclude #define INBUF_LEN 4 //数据长度 unsigned char inbuf1[INBUF_LEN]; unsigned char checksum,count3 , flag,temp,ch; bit read_flag=0; sbit cp=P1^1; sbit DIR=P1^2; int i; unsigned int xdata *RAMDATA; /*定义RAM地址指针*/ unsigned char a[6] ={0x11,0x22,0x33,0x44,0x55,0x66} ; void init_serialcomm(void) { SCON=0x50; //在11.0592MHz下,设置串行口波特率为9600,方式1,并允许接收

PCON=0x00; ES=1; TMOD=0x21; //定时器工作于方式2,自动装载方式TH0=(65536-1000)%256; TL0=(65536-1000)/256; TL1=0xfd; TH1=0xfd; ET0=1; TR0=1; TR1=1; // TI=0; EA=1; // TI=1; RAMDATA=0x1F45; } void serial () interrupt 4 using 3 { if(RI) { RI=0; ch=SBUF; TI=1; //置SBUF空 switch(ch) { case 0x01 :printf("A"); TI=0;break; case 0x02 :printf("B"); TI=0;break; case 0x03 :printf("C"); TI=0;break; case 0x04 :printf("D"); TI=0;break; default :printf("fg"); TI=0;break; } }

51单片机串口通信,232通信,485通信,程序

51单片机串口通信,232通信,485通信,程序代码1:232通信 #include #define uchar unsigned char #define uint unsigned int uchar flag,a,i; uchar code table[]="i get"; void init() { TMOD=0X20; TH1=0XFD; TH0=0XFD; TR1=1; REN=1; SM0=0; SM1=1; EA=1; ES=1; } void main() { init();

while(1) { if(flag==1) { ES=0; for(i=0;i<6;i++) { SBUF=table[i]; while(!TI); TI=0; } SBUF=a; while(!TI); TI=0; ES=1; flag=0; } } } void ser() interrupt 4 {

RI=0; a=SBUF; flag=1; } 代码2:485通信 #include #include"1602.h" #define uchar unsigned char #define uint unsigned int unsigned char flag,a,i; uchar code table[]="i get "; void init() { TMOD=0X20; TH1=0Xfd; TL1=0Xfd; TR1=1; REN=1; SM0=0; SM1=1; EA=1; ES=1;

} void main() { init_1602(); init(); while(1) { if(flag==1) { display(0,a); } } } void ser() interrupt 4 { RI=0; a=SBUF; flag=1; }

基于51单片机的双机串行通信

河南机电高等专科学校2015-2016学年第1学期通信实训报告 系别:电子通信工程系 班级:xxxxxx 学号:13xxxxxxxxx 姓名:xxxxxxx 2015年12月

基于51单片机的双机串行通信 摘要:串行通信是单片机的一个重要应用,本次课程设计就是要利用单片机来完成一个系统,实现爽片单片机床航通信,通信的结果使用数码管进行显示,数码管采用查表方式显示,两个单片机之间采用RS-232进行双击通信。在通信过程中,使用通信协议进行通信。 关键字:通信双机 一、总体设计 1设计目的 1.通过设计相关模块充分熟悉51单片机的最小系统的组成和原理; 2.通过软件仿真熟悉keil和proteus的配合使用; 3.通过软件编程熟悉51的C51编程规范; 4.通过实际的硬件电路搭设提高实际动手能力。 2.设计要求: 两片单片机之间进行串行通信,A机将0x06发送给B机,在B机的数码管上静态显示1,B机将0~f动态循环发送到A机,并在其数码管上显示。 3.设计方案: 软件部分,通过通信协议进行发送接收,A机先送0x06(B机数码管显示1)给B机(B机静态显示),当从机接收到后,向B机发送代表0-f的数码管编码数组。B收到0x06后就把数码表TAB[16]中的数据送给从机。 二、硬件设计

1.51单片机串行通信功能 计算机与外界的信息交换称为通信,常用的通信方式有两种:并行通信和串行通信。51单片机用4个接口与外界进行数据输入与数据输出就是并行通信,并行通信的特点是传输信号的速度快,但所用的信号线较多,成本高,传输的距离较近。串行通信的特点是只用两条信号线(一条信号线,再加一条地线作为信号回路)即可完成通信,成本低,传输的距离较远。 51单片机的串行接口是一个全双工的接口,它可以作为UART(通用异步接受和发送器)用,也可以作为同步移位寄存器用。51单片机串行接口的结构如下: 图1.AT89C51(52) (1)数据缓冲器(SBUF) 接受或发送的数据都要先送到SBUF缓存。有两个,一个缓存,另一个接受,

51单片机usart通信程序(有CRC校验)

#include #include #include #define uchar unsigned char #define uint unsigned int //uchar const table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; uchar p[]={0x01,0x03,0x25,0x23,0x00,0x01}; /* CRC 高位字节值表*/ uchar const crchi[] = { 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0/**/, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40 } ; /* CRC低位字节值表*/ uchar const crclo[] = { 0x00, 0xC0, 0xC1, 0x01, 0xC3, 0x03, 0x02, 0xC2, 0xC6, 0x06/**/, 0x07, 0xC7, 0x05, 0xC5, 0xC4, 0x04, 0xCC, 0x0C, 0x0D, 0xCD, 0x0F, 0xCF, 0xCE, 0x0E, 0x0A, 0xCA, 0xCB, 0x0B, 0xC9, 0x09, 0x08, 0xC8, 0xD8, 0x18, 0x19, 0xD9, 0x1B, 0xDB, 0xDA, 0x1A, 0x1E, 0xDE, 0xDF, 0x1F, 0xDD, 0x1D, 0x1C, 0xDC, 0x14, 0xD4, 0xD5, 0x15, 0xD7, 0x17, 0x16, 0xD6, 0xD2, 0x12, 0x13, 0xD3,

51单片机与蓝牙串口通信程序

#include #include #include #include "LCD1602.h" #include "matrix_key.h" #define uint unsigned int #define uchar unsigned char #define Nop() _nop_() sbit P10 = P1^0; /*定义独立对地按键端口*/ sbit P11 = P1^1; /*定义独立对地按键端口*/ sbit P12 = P1^2; /*定义独立对地按键端口*/ sbit P13 = P1^3; /*定义独立对地按键端口*/ //shift键 bit shift_flag; bit call_flag ; bit CallIn_flag=0; bit reci_flag; bit reci_flag1; sbit sled_en_port = P3^6; /*定义数码管数据锁存器控制端口*/ sbit led_en_port = P2^5; /*定义发光二极管数据锁存器控制端口*/ sbit ds1302_en_port = P2^2; /*定义时钟的选片脚*/ uchar CallIn_Num[15];//={"00000000000"}; uchar CallOut_Num[15]={" "}; uchar m=0; //拨号指针 uchar temp='?'; uchar code clr[16]={" "}; uchar code lcd_table[16] = {"Ky: Cm: Re: "}; //uchar send_buff[15]; uchar reci_buff[15]={" "}; uchar z; //接收缓冲区指针 uchar time;//定时器中断次数 uchar code mun_to_char[]={"0123456789ABCDEF"}; /*1MS为单位的延时程序*/ void init(); void send(uchar cc); void send_f(uchar ccc); void interrupt_pro(); void key_pro(); void call_out();

相关主题