汇编语言实现串口通信(PC和单片机间)
单片机与pc机通信

单片机与pc机通信
单片机与PC机通信可以通过多种方式实现,常见的方法包括串口通信、USB通信和以太网通信。
1. 串口通信:串口是最常用的单片机与PC机通信方式之一。
单片机通常具有UART模块,可以通过串口与PC机进行
通信。
通过串口,可以实现数据的发送和接收。
单片机通
过串口发送数据时,需要将数据转换为串口通信所需的格
式(如ASCII码),PC机在接收到数据后,也需要进行相应的解析和处理。
2. USB通信:USB是一种更快的通信方式,可以直接连接单片机和PC机,通过USB接口实现数据的传输。
在这种
通信方式中,单片机需要支持USB接口,并通过USB协议与PC机进行通信。
一般情况下,需要在单片机上实现
USB设备的功能,以及相应的USB驱动程序。
3. 以太网通信:以太网是一种常用的网络通信方式,可以通过以太网接口实现单片机与PC机之间的通信。
单片机需要具备以太网接口,并通过以太网协议进行通信。
在这种通信方式中,单片机可以作为TCP/IP客户端或服务器来连接PC机和网络,实现数据的传输。
无论使用何种通信方式,都需要在单片机和PC机上实现相应的软件和驱动程序,进行数据的传输和处理。
具体的实现方法和细节,可以参考相关的开发文档和资料。
51单片机串口通信程序。。含详细例子

4.//////////////// /////////////////////////////////////////////////////////
pw.fpReadSign(); SendData();//通知上位机,送出读出器件特征字 }
void Erase()//擦除器件 {
pw.fpErase(); SendData();//通知上位机,擦除了器件 }
void Write()//写器件 {
BYTE n; pw.fpInitPro();//编程前的准备工作 SendData();//回应上位机表示进入写器件状态,
{
unsigned char c;
TMOD = 0x20; // 定时器 1 工作于 8 位自动重载模式, 用于产生波特率
TH1=(unsigned char)(256 - (XTAL / (32L * 12L * baudrate)));
TL1=(unsigned char)(256 - (XTAL / (32L * 12L * baudrate))); SCON = 0x50; PCON = 0x00; TR1 = 1; IE = 0x00; // 禁止任何中断 while(1) {
///////////////////////////////////////////////////////////////////////////////// //所支持的 FID,请在这里继续添加
///////////////////////////////////////////////////////////////////////////// extern void PreparePro00();//FID=00:AT89C51 编程器 extern void PreparePro01();//FID=01:AT89C2051 编程器 extern void PreparePro02();//FID=02:AT89S51 编程器
PLC与单片机串口通信的实现探讨

PLC与单片机串口通信的实现探讨随着科技的不断发展,工业自动化已经成为了现代工业生产的主要发展方向之一。
在自动化控制系统中,PLC(Programmable Logic Controller,可编程逻辑控制器)和单片机是两种常见的控制设备。
它们在工业控制领域中起着非常重要的作用。
在很多情况下,PLC与单片机需要进行互联,实现数据的传输和交换。
本文将从PLC与单片机串口通信的实现方式进行探讨,为工业自动化控制系统的设计和实现提供一些参考和帮助。
一、PLC与单片机串口通信的基本原理PLC与单片机之间的串口通信,通常采用的是RS232或RS485通信协议。
RS232是一种点对点的通信协议,通信距离较短,适用于PLC与单片机之间的本地通信。
而RS485是一种多点通信协议,通信距离较远,适用于大型工业控制系统中的远程通信。
通过串口通信,PLC和单片机可以进行数据的传输和交换,实现控制指令的发送和接收,从而实现工业自动化控制系统的协调运行。
1. RS232串口通信在使用RS232串口通信时,PLC和单片机之间需要通过串口模块进行连接。
一般情况下,PLC的通信口是RS232接口,而单片机需要通过RS232转TTL模块来实现与PLC的通信。
通过串口模块的连接,PLC与单片机之间可以实现双向通信,进行数据的传输和交换。
在通信过程中,需要注意串口通信协议的设置和数据格式的统一,以确保数据的准确传输和接收。
PLC与单片机串口通信广泛应用于工业自动化控制系统中,例如:自动化生产线、工业机器人、智能仓储系统等。
在这些应用场景中,PLC负责整个控制系统的统一管理和协调运行,而单片机则负责局部设备的具体控制和操作。
通过串口通信,PLC和单片机可以实现实时的数据交换和控制指令的传输,从而实现整个控制系统的高效运行和协调工作。
在进行PLC与单片机串口通信时,需要注意以下几个方面:首先是通信协议的选择和配置,需要根据具体的通信要求选择合适的通信协议和数据格式,并进行相应的设置和调试。
串口通讯方法的三种实现

串口基本信息用一台电脑实验串口自发自收,实验前要将串口(以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/fb50bd45d4d8d15abf234e12.png)
现实生活中,我们总是要与人打交道,互通有无。
单片机也一样,需要跟各种设备交互。
例如汽车的显示仪表需要知道汽车的转速及电动机的运行参数,那么显示仪表就需要从汽车的底层控制器取得数据。
而这个数据的获得过程就是一个通信过程。
类似的例子还有控制器通常是单片机或者PLC与变频器的通信。
通信的双方需要遵守一套既定的规则也称为协议,这就好比我们人之间的对话,需要在双方都遵守一套语言语法规则才有可能达成对话。
通信协议又分为硬件层协议和软件层协议。
硬件层协议主要规范了物理上的连线,传输电平信号及传输的秩序等硬件性质的内容。
常用的硬件协议有串口,IIC,SPI,RS485,CAN和USB。
软件层协议则更侧重上层应用的规范,比如modbus协议。
好了,那这里我们就着重介绍51单片机的串口通信协议,以下简称串口。
串口的6个特征如下。
(1)、物理上的连线至少3根,分别是Tx数据发送线,Rx数据接收线,GND共用地线。
(2)、0与1的约定。
RS232电平,约定﹣5V至﹣25V之间的电压信号为1,﹢5V至﹢25V之间的电压信号为0 。
TTL电平,约定5V的电压信号为1,0V电压信号为0 。
CMOS电平,约定3.3V的电压信号为1,0V电压信号为0 。
其中,CMOS电平一般用于ARM芯片中。
(3)、发送秩序。
低位先发。
(4)、波特率。
收发双方共同约定的一个数据位(0或1)在数据传输线上维持的时间。
也可理解为每秒可以传输的位数。
常用的波特率有300bit/s, 600bit/s, 2400bit/s, 4800bit/s, 9600bit/s。
(5)、通信的起始信号。
发送方在没有发送数据时,应该将Tx置1 。
当需发送时,先将Tx置0,并且保持1位的时间。
接受方不断地侦测Rx,如果发现Rx常时间变高后,突然被拉低(置为0),则视为发送方将要发送数据,迅速启动自己的定时器,从而保证了收发双方定时器同步定时。
(6)、停止信号。
发送方发送完最后一个有效位时,必须再将Tx保持1位的时间,即为停止位。
单片机与PC机串行通信系统硬件及上位机程序设计【精选】

目录1 引言 (1)1.1 单片机与PC机串行通信研究背景 (1)1.2 单片机与PC机串行通信研究目的和意义 (1)2 串口通信基础 (1)2.1 两种常用接口方式 (2)2.1.1 并行接口 (2)2.1.2 串行接口 (2)2.2 RS-232串行接口标准 (2)3 系统总体设计 (3)3.1 系统指标设计 (3)3.1.1 通信协议设定 (3)3.1.2 系统实现描述 (3)3.2 总体方案设计 (3)4 硬件接口电路设计 (4)4.1 主要芯片 (4)4.1.1 AT89C51 (4)4.1.2 单电源转换芯片MAX232 (6)4.1.3 74LS245LED驱动芯片 (7)4.2 LED显示器 (7)4.2.1 LED显示器工作原理 (8)4.2.2 LED显示器接口 (8)4.3 系统设计 (8)5 PC机程序设计 (9)5.1 MSComm控件 (9)5.1.1 MSComm控件处理通信的方式 (9)5.1.2 MSComm控件的主要属性 (10)5.2 应用界面设计流程 (10)5.2.1 创建项目文件 (10)5.2.2 加入串口通信控件 (11)5.2.3 设计窗体界面 (12)5.3 代码实现 (12)6 仿真调试及结果分析 (15)7 结语 (17)参考文献 (18)致谢 (19)2.1 两种常用接口方式2.1.1 并行接口并行接口是指8位数据同时通过并行线进行传送,这样数据的传输率能得到极大的提高。
但在并行传输中,干扰会随线路长度的增加而增加,产生传输错误。
因此,并行传输主要应用在近距离数据传输中,如连接打印机端口。
并行接口主要使用36针接头和25针D形接头,目前以25针D形接头为主[4]。
2.1.2 串行接口串行口也是计算机的一种标准接口,PC机一般至少有两个串行口Com1和Com2。
串行口不同于并行口,它的数据和控制信息是一位接一位在一根传输线上传送的,这样串行口较并行口能够进行远距离传送信息。
上位机串口通信编程
上位机串⼝通信编程摘要本⽂主要描述了利⽤PC机与AT89C51单⽚机之间的通信程序设计实现温度显⽰。
并详述了在VC6.0环境下,上位机利⽤MSCOMM通信控件与单⽚机之间串⼝通信实现温度显⽰。
由单⽚机采集⼀个温度信号,将采集到的温度信号传送给PC机显⽰,PC机⽤VC6.0编写程序,单⽚机程序⽤C语⾔编写,最后⽤PROTUES软件进⾏仿真实现温度显⽰。
关键词:单⽚机MSCOMM控件VC6.0 AT89C51 温度显⽰⽬录摘要1 引⾔ (1)2 结构设计与⽅案选择 (2)2.1设计任务 (2)2.1.1单⽚机的选择 (2)2.1.2电平转换 (2)2.1.1单⽚机的选择 (2)2.1.3单⽚机与pc机通信原理 (2)2.2软件⽅案选择 (2)2.2.1 上位机编程⽅案选择 (3)2.2.2 单⽚机编程⽅案选择 (3)2.3 总体⽅案选择 (2)3 硬件设计 (8)3.1单⽚机主要特性 (5)3.2 MAX232电平芯⽚介绍10 (10)3.3 硬件电路设计图 (11)3.3.1 PC机与单⽚机通信接⼝电路设计框图 (11)3.3.2整体设计原理图 (11)4软件设计 (12)4.1上位机程序设计 (12)4.2下位机程序设计 (13)5 软硬件调试部分 (21)5.1 PROTEUS软件仿真 (21)5.1.1 Protues简介 (21)5.1.2 Protues仿真电路图 (22)5.2 VC软件仿真 (21)结束语 (27)致谢 (28)参考⽂献 (29)1引⾔随着⼈们⽣活⽔平的不断提⾼,单⽚机控制⽆疑是⼈们追求的⽬标之⼀,它所给⼈带来的⽅便也是不可否定的,要为现代⼈⼯作、科研、⽣活、提供更好的更⽅便的设施就需要从单⽚机技术⼊⼿,⼀切向着数字化控制,智能化控制⽅向发展。
现代化集中管理需要对现场数据进⾏统计、分析、制表、打印、绘图、报警等,同时,⼜要求对现场装置进⾏实时控制,完成各种规定操作,达到集中管理的⽬的。
利用VB实现电脑与单片机通讯
VB实现电脑跟单片机通讯任务说明:电脑端通过串口将数字(00,01,….,FF,十六进制)发送给单片机,单片机收到后回传这个数字,电脑接收到回传数据后显示出来,若发送的数据和接受的数据一致,则串口通讯正常,否则错误。
起始符是数字00,结束符是数字FF。
一、软件界面设计如下:二、VB程序代码如下:'将数字(0,1,2,3...255,转换为16进制)传给单片机,单片机收到后回传这个数字,PC机接收到回传数据后显示出来,'若发送和接收的数据相同,显示通信正常,否则通信不正常'发送以00开始,以FF结束'定义变量Dim data, data1 As V ariant '串口初始化'在窗体的Load事件中加入下列代码对串口进行初始化:Private Sub Form_Load()mPort = 1MSComm1.InputMode = 1MSComm1.RThreshold = 1MSComm1.SThreshold = 1MSComm1.Settings = "9600,n,8,1"MSComm1.PortOpen = Truesenddata.Text = "00"End Sub'单击清空文本框Private Sub senddata_Click()senddata.Text = ""Cmdsend.Enabled = TrueEnd SubPrivate Sub senddata_Change()senddata.Text = UCase(senddata.Text)End SubPrivate Sub senddata_KeyPress(KeyAscii As Integer)If (KeyAscii >= Asc("a") And KeyAscii <= Asc("f")) ThenKeyAscii = KeyAscii - 32End IfEnd Sub'向单片机发送数据Private Sub Cmdsend_Click()If Len(senddata.Text) <> 2 ThenMsgBox ("请输入2位16进制数!")Exit SubEnd Ifc = senddata.TextIf (c = "FF") Thendata1 = "&H" & cdata = Chr(data1)Elsea = Left(c, 1) '截取senddata左边字符b = Right(c, 1) '截取senddata右边字符data1 = "&H" & senddata.Text 'data1没有将senddata中的字符拆开data = Chr("&H" & a) & Chr("&H" & b) '将senddata中的字符拆开存入data中,这样就会解决例如A1接收不正确的问题End IfMSComm1.Output = dataCmdsend.Enabled = FalseEnd Sub'获取温度测量值并显示'每发送一次指令,触发下面事件,返回数据串Private Sub MSComm1_OnComm()Dim Inbyte() As ByteDim buffer As Variant'读取仪表返回数据串Select Case mEventCase comEvReceiveInbyte = MSComm1.InputFor i = LBound(Inbyte) To UBound(Inbyte)buffer = buffer + Hex(Inbyte(i))Next iCase comEvSendEnd SelectIf Len(Trim(buffer)) = 1 Thenreturndata.Text = Str("0") & bufferElsereturndata.Text = bufferEnd IfIf "&H" & buffer = data1 ThenLabel1.ForeColor = QBColor(13)Label1.Caption = "通信正常!"End IfIf "&H" & buffer <> data1 ThenLabel1.ForeColor = QBColor(12)Label1.Caption = "通信不正常!"Label1.Caption = "未接收到数据"End IfIf Trim(buffer) = "FF" ThenLabel1.ForeColor = QBColor(12)Label1.Caption = "输入00重新开始!"End IfEnd Sub'当退出程序时,关闭串行口Private Sub Cmdquit_Click()Unload MeEnd SubPrivate Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer) MSComm1.PortOpen = False '关闭串口End Sub三、单片机代码:。
单片机双机之间的串行通信设计
单片机双机串行实验报告实验报告:单片机双机串行通信实验一、实验目的本实验旨在通过单片机实现双机间的串行通信,包括数据的发送和接收,并利用这种通信方式完成一定的任务。
二、实验原理1.串行通信:串行通信是将数据一个个位发送或接收的方式。
数据通过一个线路逐位发送或接收,可以减少通信所需的线路数目。
2. UART串口通信:UART是通用异步收发传输器(Universal Asynchronous Receiver/Transmitter)的简称,是一种最常用的串口通信方式,通常用于单片机与计算机、单片机与单片机之间的通信。
3.串口模块:串口模块是负责将数据转变为串行传输的硬件模块,包括发送端和接收端。
通过设置波特率、数据位、校验位和停止位等参数,可以实现数据的可靠传输。
4.单片机串口通信:单片机内部集成了UART串口通信接口,只需要通过相应的寄存器配置,可以实现串口通信功能。
5.双机串行通信:双机串行通信是通过串口将两台单片机进行连接,一台单片机作为发送端,负责将数据发送出去;另一台单片机作为接收端,负责接收并处理发送的数据。
三、实验器材与软件1.实验器材:两台单片机、USB转TTL模块、杜邦线若干。
2. 实验软件:Keil C51集成开发环境。
四、实验内容与步骤1.配置发送端单片机(1)连接单片机和USB转TTL模块,将USB转TTL模块的TXD端连接到单片机的P3口,将GND端连接到单片机的地线。
(2)在Keil C51环境下创建新工程,编写发送端程序。
(3)配置串口通信的波特率、数据位、校验位和停止位,并打开串口发送中断。
(4)循环发送指定的数据。
2.配置接收端单片机(1)连接单片机和USB转TTL模块,将USB转TTL模块的RXD端连接到单片机的P3口,将GND端连接到单片机的地线。
(2)在Keil C51环境下创建新工程,编写接收端程序。
(3)配置串口通信的波特率、数据位、校验位和停止位,并打开串口接收中断。
单片机串口通讯实验报告
单片机串口通讯实验报告本实验是基于单片机和串口通讯的实验,旨在通过掌握单片机与计算机之间的串口通讯原理、方法和技巧,提高学生在单片机应用方面的操作技能和实践能力。
本实验将分为以下三个部分进行讲解:一、实验原理串口是指通过一条通信线路,将数据以一定的格式传输到一个设备或计算机上。
单片机是一种非常常见的嵌入式系统,具有很好的应用前景。
通过学习单片机串口通信原理,可以更好地理解嵌入式系统的应用场景。
串口发送数据的基本原理是将二进制的数据码转换成特定规则的数据帧,发送到串口的通信线路上。
串口接收数据的基本原理是从串口线路上读取二进制码,对码进行格式化解码,再存储到相应的缓存区中。
计算机和单片机通讯的原理基本一致,但是具体的实现方法和细节要根据所用的串口模块和单片机芯片来确定。
二、实验步骤该实验将从计算机到单片机的数据传输进行实验。
其中,计算机上将使用串口终端软件RealTERM,单片机使用TTL串口。
1.连接TTL串口首先,将串口线连接到单片机的TTL串口上(RX、TX、GND)。
2.串口设置打开RealTERM软件,设置串口参数(波特率、数据位、奇偶校验、停止位等)。
在Windows系统中,可以通过设备管理器查看串口设备,从而确定串口号(通常为COM1、COM2等)。
3.单片机程序设计单片机程序中需要设置串口参数、发送数据和接收数据等功能。
在发送数据时,需要将发送缓存区中的数据转换成相应的数据帧格式,再通过串口发送到计算机上。
在接收数据时,需要从串口接收缓存区中读取数据,并且解析成特定的格式,再将数据存储到所需的区域。
4.进行实验打开串口终端软件后,点击“打开串口”按钮,可以看到从单片机发送的数据。
可以通过键盘输入数据,以进行数据的发送和接收。
具体操作步骤可以根据实际需要来确定,可以设置不同的数据帧格式和接收响应逻辑。
三、实验结果通过上述实验,可以掌握单片机串口通信的基本原理和实现方法。
可以通过实验得到一些操作技巧,例如:1.根据计算机和单片机所使用的串口模块和相关参数,选择合适的波特率、数据位、奇偶校验和停止位等控制参数。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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机与下位单片机异步串行通信的通信协议2 单片机通信程序设计单片机的数据通信由串行口完成,定时器T1 作为波特率发生器,其波特率要与PC 机一致。
数据的传送格式为1 位起始位、8 位数据位和1 位停止位。
采用中断方式发送和接收数据,定时器T1 设置为工作工作模式2,串行口设置为工作方式3,由第9位判断停止。
具体的程序流程图见下。
①单片机中断方式接收程序当PC 机不发送任何数据的时候,从机单片机始终处于等待状态(P.),直到PC 机发送数据过来。
由于PC 机在发送有效数据之前会加一个开始符(FFH),在有效数据之后会加一个开始符(7FH),所以单片机接收到主机发送来的FFH 之后,置RAM 存贮单元的初始地址30H 单元,用来放紧接着接收的数据,程序中还用了一个计数器COUNTER 来计接收到的数据位数,直到接收到7FH 为止。
单片机接收主程序MAIN 及中断服务程序STR 清单如下:COUNTER EQU 40HPOINT EQU 41HORG 0000HLJMP MAINORG 0023HLJMP SRTMAIN:MOV SP,#60HMOV TMOD,#20H ;定时器T1 的方式2MOV PCON,#00H ;串行口波特率控制位MOV TH1,#0F4H ;2400Kb/sMOV TL1,#0F4HMOV 30H,#15MOV COUNTER,#1MOV R0,#30H ;接收数据存放区MOV R1,#30HSETB TR1 ;开始计数CLR ET1 ;清定时中断MOV SCON,#50H ;串行口控制寄存器给值SETB EA ;开总中断SETB ES ;开串行口中断MOV IP,#10HMAIN1: ACALL DISPSJMP MAIN1SRT: PUSH ACCPUSH 01HJBC RI,GETSJMP EXITGET: MOV A,SBUFCJNE A,#0FFH,GET1 ;判断是否为开始字符,不是跳GET1 放数据存贮MOV R0,#30H ;是开始符就置存贮区首地址30H,计数器清0 并跳出中断MOV COUNTER,#0SJMP EXITGET1: CJNE A,#07FH,GET2 判断是否为结束符,不是跳GET2 放数据存贮区MOV R5,COUNTER ;是结束符,放发送缓存区开始字符INC R5MOV POINT,#30HMOV SBUF,#255SJMP EXITGET2: MOV @R0,AINC R0INC COUNTEREXIT: POP 01HPOP ACCRETI②单片机中断方式发送程序由于本次设计的系统要实现的功能是将PC 机送到单片机的数据回送到PC机,所以单片机要在接收完PC 机数据后立即将数据回送到PC 机。
也就是说要将RAM 存贮单元的初始地址30H 单元内数据逐一发送出去。
程序框图见下。
单片机发送主程序MAIN 及中断服务程序SEND清单如下:COUNTER EQU 40HPOINT EQU 41HORG 0000HLJMP MAINORG 0023HLJMP SRTMAIN:MOV SP,#60HMOV TMOD,#20H ;定时器T1 的方式2MOV PCON,#00H ;串行口波特率控制位MOV TH1,#0F4H ;2400Kb/sMOV TL1,#0F4HMOV 30H,#15MOV COUNTER,#1MOV R0,#30H ;接收数据存放区MOV R1,#30HSETB TR1 ;开始计数CLR ET1 ;清定时中断MOV SCON,#50H ;串行口控制寄存器给值SETB EA ;开总中断SETB ES ;开串行口中断MOV IP,#10HMAIN1: ACALL DISPSJMP MAIN1SRT: PUSH ACCPUSH 01HJBC RI,GET ;判断是否为接收,是跳GET 接收程序,否执行发送程序CLR TIDJNZ R5,SEND1SJMP EXITSEND1: MOV R1,POINTMOV A,@R1MOV SBUF,AINC R1MOV POINT,R1SJMP EXITEXIT: POP 01HPOP ACCRETI③单片机显示程序单片机显示部分可以用来检测接收到的数据是否正确,单片机显示程序主要将接AT89C51 从串行口收到的数据显示出来。
在程序设计中,在AT89C51RAM 存贮器中的四个显示缓冲器单元30H-34H,分别存放着由PC 机方发送过来的数据,AT89C51 的P2 口扫描输出总是只有一位为高电平,即4 位显示器中仅有一位公共阴极为低电平,其它位为高电平,AT89C51 的P0 口相应位(阴极为低)的显示数据的段数据,使该位显示出一个字符,其它们为暗,依次地改变P2 口输出为高的位,P0 口输出对应的段数据,4 位显示器就显示出由缓冲器中显示数据所确定的字符。
程序框图见下:单片机显示子程序清单如下:DISP: PUSH ACCMOV DPTR,#TABMOV R1,#30HMOV A,COUNTERJZ DISP2 ;没有接收到数据,跳出DISP 继续显示P.等待状态MOV R2,AMOV R6,#08HDISP1:MOV A,@R1CPL AANL A,#0FHMOVC A,@A+DPTRMOV P0,A ;送字形码到P0 口MOV A,R6MOV P2,A ;送位控制到P2 口RR AMOV R6,ADJNZ R7,$INC R1DJNZ R2,DISP1 ;判断接收位数DISP2:MOV R1,#30HPOP ACCRETTAB: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FHDB 77H,7CH,39H,5EH,79H,0F3HEND3 PC机通信程序PC 通信程序采用Visual Basic 语言编程,VB 提供了串行端口控制Mscomm来为应用程序提供串行通讯。
该控件屏蔽了通信过程中的底层操作,我们可以设置、监视Mscomm 控件的属性和事件,结合Timer 控件即可完成对串行口的初始化和数据的输入输出工作。
主程序按照通信协议的要求,首先确定波特率和信息帧格式,然后调用发送子程序将键盘输入的数据发送出去,为了使主机能够对整个检测过程进行控制,须要在发送命令以后设定等待的时间,也可以通过条件判断下一步是发送还是接收命令。
对发送的命令,可能是文本方式或二进制代码。
在发送二进制代码时,应特别注意发送的格式。
PC 机通信程序清单:Private Sub Command1_Click()Dim outstring As StringDim i As IntegerDim de As Integeroutstring = Text1.TextMSComm1.RThreshold = Len(Text1.Text) + 2MSComm1.Output = Chr(255)For i = 1 To Len(outstring)MSComm1.Output = Chr(Asc(Mid(outstring, i, 1)) - 48)Next iMSComm1.Output = Chr(127)End SubPrivate Sub Command2_Click()Text2.Text = ""End SubPrivate Sub Command3_Click()If MSComm1.PortOpen = False ThenMSComm1.PortOpen = TrueCommand3.Caption = "关闭端口"ElseMSComm1.PortOpen = FalseCommand3.Caption = "打开端口"End IfEnd SubPrivate Sub Form_Load()mPort = 1 '定义用端口COM1MSComm1.Settings = "2400,n,8,1" '波特率,无奇偶校验,8 位数据,1 位停止位MSComm1.PortOpen = True '打开端口Command3.Caption = "关闭端口"End SubPrivate Sub MSComm1_OnComm()Dim lenth As Integer, i As Integerlenth = Len(Text1.Text) + 2ReDim instring(1 To lenth) As IntegerSelect Case mEventCase comEvReceiveFor i = 1 To lenthinstring(i) = MSComm1.Input(0)Next iEnd SelectText2.Text = ""For i = 1 To lenthIf instring(i) <> 255 And instring(i) <> 127ThenText2.Text = Text2.Text & instring(i)End IfNext iEnd SubPrivate Sub Timer1_Timer()Text3.Text = DateText4.Text = Time()End SubPrivate Sub Timer2_Timer()Text1 = Text1 + 1If Text1 > 9999 Then Text1 = 1000Command1_Click7End Sub单片机通信程序清单:COUNTER EQU 40HPOINT EQU 41HORG 0000HLJMP MAINORG 0023HLJMP SRTMAIN:MOV SP,#60HMOV TMOD,#20H ;定时器T1的方式2MOV PCON,#00H ;串行口波特率控制位MOV TH1,#0F4H ;2400Kb/sMOV TL1,#0F4HMOV 30H,#15MOV COUNTER,#1MOV R0,#30H ;接收数据存放区MOV R1,#30HSETB TR1 ;开始计数CLR ET1 ;清定时中断MOV SCON,#50H ;串行口控制寄存器给值SETB EA ;开总中断SETB ES ;开串行口中断MOV IP,#10HMAIN1:ACALL DISPSJMP MAIN1;********中断服务子程序**********SRT: PUSH ACCPUSH 01HJBC RI,GET ;判断是否为接收,是跳GET 接收程序,否执行发送程序CLR TIDJNZ R5,SEND1SJMP EXITSEND1: MOV R1,POINTMOV A,@R1MOV SBUF,AINC R1MOV POINT,R1SJMP EXITGET: MOV A,SBUFCJNE A,#0FFH,GET1;判断是否为开始字符,不是跳GET1 放数据存贮区MOV R0,#30H ;是开始符就置存贮区首地址30H,计数器清0 并跳出中断MOV COUNTER,#0SJMP EXITGET1: CJNE A,#07FH,GET2 ;判断是否为结束符,不是跳GET2 放数据存贮区MOV R5,COUNTER ;是结束符,放发送缓存区开始字符INC R5MOV POINT,#30HMOV SBUF,#255SJMP EXITGET2: MOV @R0,AINC R0INC COUNTEREXIT: POP 01HPOP ACCRETI;*********显示程序**********DISP: PUSH ACCMOV DPTR,#TABMOV R1,#30HMOV A,COUNTERJZ DISP2 ;没有接收到数据,跳出DISP 继续显示P.等待状态MOV R2,AMOV R6,#08HDISP1:MOV A,@R1ANL A,#0FHMOVC A,@A+DPTRMOV P0,A ;送字形码到P0 口MOV A,R6MOV P2,A ;送位控制到P2 口RR AMOV R6,ADJNZ R7,$INC R1DJNZ R2,DISP1 ;判断接收位数DISP2:MOV R1,#30HPOP ACCRETTAB: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FHDB 77H,7CH,39H,5EH,79H,0F3HENDPC 机通信程序清单:Private Sub Command1_Click()Dim outstring As StringDim i As IntegerDim de As Integeroutstring = Text1.TextMSComm1.RThreshold = Len(Text1.Text) + 2MSComm1.Output = Chr(255)For i = 1 To Len(outstring)MSComm1.Output = Chr(Asc(Mid(outstring, i, 1)) - 48)Next iMSComm1.Output = Chr(127)End SubPrivate Sub Command2_Click()Text2.Text = ""End SubPrivate Sub Command3_Click()If MSComm1.PortOpen = False ThenMSComm1.PortOpen = TrueCommand3.Caption = "关闭端口"ElseMSComm1.PortOpen = FalseCommand3.Caption = "打开端口"End IfEnd SubPrivate Sub Form_Load()mPort = 1 '定义用端口COM1MSComm1.Settings = "2400,n,8,1" '波特率,无奇偶校验,8 位数据,1 位停止位MSComm1.PortOpen = True '打开端口Command3.Caption = "关闭端口"End SubPrivate Sub MSComm1_OnComm()Dim lenth As Integer, i As Integerlenth = Len(Text1.Text) + 2ReDim instring(1 To lenth) As IntegerSelect Case mEventCase comEvReceiveFor i = 1 To lenthinstring(i) = MSComm1.Input(0)Next iEnd SelectText2.Text = ""For i = 1 To lenthIf instring(i) <> 255 And instring(i) <> 127ThenText2.Text = Text2.Text & instring(i) End IfNext iEnd SubPrivate Sub Timer1_Timer()Text3.Text = DateText4.Text = Time()End SubPrivate Sub Timer2_Timer()Text1 = Text1 + 1If Text1 > 9999 Then Text1 = 1000 Command1_Click7End Sub欢迎您的下载,资料仅供参考!致力为企业和个人提供合同协议,策划案计划书,学习资料等等打造全网一站式需求。