汇编语言实现串口通信(PC和单片机间)教学文案
实现单片机与PC的串口通信
RS-232C接口定义(9芯)针脚定义符号1 载波检测DCD2 接收数据RXD3 发送数据TXD4 数据终端准备好DTR5 信号地SG6 数据准备好DSR7 请求发送RTS8 清除发送CTS9 振铃提示RIPin 1 Received Line Signal Detector (Data Carrier Detect)Pin 2 Received DataPin 3 Transmit DataPin 4 Data Terminal ReadyPin 5 Signal GroundPin 6 Data Set ReadyPin 7 Request To SendPin 8 Clear To SendPin 9 Ring Indicator再来看下PC机串口通信的原理串口是计算机上一种非常通用设备通信的协议(不要与通用串行总线Universal Serial Bus或者USB混淆)。
大多数计算机包含两个基于RS232的串口。
串口同时也是仪器仪表设备通用的通信协议;很多GP IB兼容的设备也带有RS-232口。
同时,串口通信协议也可以用于获取远程采集设备的数据。
串口通信的概念非常简单,串口按位(bit)发送和接收字节。
尽管比按字节(byte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。
它很简单并且能够实现远距离通信。
比如IE EE488定义并行通行状态时,规定设备线总常不得超过20米,并且任意两个设备间的长度不得超过2米;而对于串口而言,长度可达1200米。
典型地,串口用于ASCII码字符的传输。
通信使用3根线完成:(1)地线,(2)发送,(3)接收。
由于串口通信是异步的,端口能够在一根线上发送数据同时在另一根线上接收数据。
其他线用于握手,但是不是必须的。
串口通信最重要的参数是波特率、数据位、停止位和奇偶校验。
对于两个进行通行的端口,这些参数必须匹配:a,波特率:这是一个衡量通信速度的参数。
单片机与PC的串行通讯 项目实现程序
实现单片机的串行通讯的汇编语言程序如下:ORG 0000AJMP MAINORG 0100HMAIN: MOV SP, #06HMOV SCON,#50H //8位UART(1 START ,8 DA TA ,1 STOP),允许接受MOV TMOD,#20H //T1工作方式2MOV TH1, #0FDHMOV TL1, #0FDHSETB TR1KEY: MOV A, #0FFHMOV P0, AMOV A, P0JNB ACC.0, KEY0JNB ACC.1, KEY1AJMP MAINKEY0: MOV P1, #0FFHK0: JB RI,KK //是否接收到数据,有则跳至KKSJMP K0KK: MOV A,SBUF //将接收到的数据保存到累加器MOV P1,A //输出至P1CLR RI //清除RISJMP K0RETKEY1: MOV P2, #0FFHK01: JB RI,KK1 //是否接收到数据,有则跳至KKSJMP K01KK1: MOV A,SBUF //将接收到的数据保存到累加器MOV P2,A //输出至P2CLR RI //清除RISJMP K0RETEND首先是PC机事件过程与程序Dim hand As Boolean'等待回应时间到标志位,为FALSE时时间没有到,TRUE时时间到Private Sub cancel_Click ()Unload MeEndEnd SubPrivate Sub send_Click ()'变量定义Dim strsend$, strbit$Dim intsend% '发送的字符长度Dim writebuff As V ariant '写输出缓冲区Dim readbuff$ '读输入缓冲区数据strsend = txtsend.Textintsend = Len(strsend)If intsend = 0 ThenMsgBox "请输入数字字符!", , "错误"Exit SubEnd If'数据完整性验证For i = 1 To intsend Step 1strbit = Mid(strsend, i, 1)Select Case strbitCase Is < "0", Is > "9"MsgBox "输入的数据中存在非数字字符!" & vbCrLf & "请重新输入!", vbRetryCancel, "错误"txtsend.Text = ""Exit SubEnd SelectNext iOn Error GoTo comrserror'串行通信口参数设置mPort = 1 '使用Com1做为串行通信口MSComm.Settings = "9600,n,8,1" '串口属性设置MSComm.InputLen = 1 '每次从接收缓冲区读取一个字符MSComm.InputMode = comInputModeText '以字符形式从缓冲区中接受字符MSComm.InBufferCount = 0 '清除输入缓冲区MSComm.OutBufferCount = 0 '清除输出缓冲区MSComm.PortOpen = True '打开通行端口txtport.Text = "COM" & mPorttxtmsg.Text = "串口COM" & mPort & "打开成功!波特率=9600bps"'发送握手信号handle:hand = False '开始发送握手信号时回应标志位为FALSEwritebuff = Chr$(&HFF) '准备握手信号&HffhMSComm.Output = writebuff '发送握手信号Timer.Enabled = True '启动应答定时器DoDoEventsIf hand ThenGoTo handle '定时时间到未收到回应信号重发握手信号End IfLoop Until MSComm.InBufferCount '等待回应'收到对方的回应Timer.Enabled = False'读取并判断是否为规定的联络信号readbuff = MSComm.InputIf Asc(readbuff) = 255 Thenwritebuff = Chr$(intsend)MSComm.Output = writebuff '收到正确的回应,发送字符个数和数据writebuff = strsendMSComm.Output = writebuffMSComm.PortOpen = False '发送完数据关闭端口Exit SubElseGoTo handleEnd Ifcomrserror:End SubPrivate Sub Timer_Timer()Timer.Enabled = Falsehand = True '定时间到关闭定时器,设置标志位End SubPrivate Sub txtsend_Click()txtsend.Text = ""End Sub然后是单片机的源程序datanum equ 20h ;存放接收到的数据个数dataadd equ 30h ;接收到的数据存放的地址org 0000hljmp mainorg 000bhljmp t0_intorg 0100h;主程序main: mov sp,#0fh ;从0fh开始设置堆栈mov tmod,#22h ;T0、T1工作于自动重装载方式mov th1,#0fdhmov tl1,#0fdhsetb tr1 ;晶振频率11.059Mhz,波特率设置为9600mov scon,#50h ;设置串行口工作于方式一mov 50h,#40mov 51h,#100mov th0,#6mov tl0,#6 ;1s定时初始化setb tr0 ;开定时器T0setb et0 ;开定时器T0中断setb ea ;开总中断mov datanum,#0 ;初始时接收数据的个数为0 display: mov r7,#6mov r0,#40hcl_next: mov @r0,#0inc r0djnz r7,cl_next ;数据显示区初始化display0: mov r0,#45h ;r0执行待输出的数据地址处mov r7,#6 ;扫描次数mov r6,#0feh ;r6存放数码管的位码,显示初始化display1: mov p0,r6 ;P0口输出位码mov p2,@r0 ;P2口输出段码dec r0 ;r0指向下一个待输出的段码mov a,r6rl a ;位码左移mov r6,ajbc ri,handle ;display_jmp: djnz r7,display1 ;显示未结束继续本次显示sjmp display0handle: mov r5,sbuf ;接收握手信号cjne r5,#0ffh,display_jmp ;非规定的握手信号mov sbuf,#0ffh ;应答握手信号jnb ti,$ ;等待发送结束clr tijnb ri,$ ;等待接受串行传输的字符个数clr rimov a,sbuf ;接收字符个数jz display_jmp ;没有收到数据mov datanum,a ;保存新数据的个数data_ti: setb f0mov r1,#dataadddata_get: jnb ri,$clr rimov @r1,sbuf ;将数据存入数据区inc r1djnz acc,data_get ;接收下一个字符lcall asctoduan ;调用Ascii码转段码程序ljmp display;Ascii码转换成段码子程序asctoduan: mov r1,#dataadd ;r1指向待转换的数据mov r2,datanum ;r2放转换个数mov dptr,#duanma ;dptr指向段码表loop: mov a,@r1 ;取转换数据clr c ;清除借位位subb a,#48movc a,@a+dptr ;取数据的段码mov @r1,ainc r1djnz r2,loop ;数据未转换完,继续setb rs0 ;选用寄存器组一mov r0,#dataaddmov r2,datanum;setb f0 ;新数据送入显示缓冲区clr rs0 ;ret;定时器T0中断子程序,实现数据动态显示t0_int: djnz 51h,intout ;内层循环未结束退出中断程序djnz 50h,intout0 ;外层循环未结束退出中断程序;定时1s时间到执行移位显示操作setb rs0 ;选用工作寄存器组一mov 0fh,40h ;40h单元暂存mov 40h,41hmov 41h,42hmov 42h,43hmov 43h,44hmov 44h,45h ;显示缓冲区数据左移一位jb f0,datamove ;f0=1允许移动数据,否则不允许mov 45h,0fh ;原40h单元数据放入45h中sjmp intout1 ;退出中断程序,为下次左移做准备;将数据区中的数据移动到显示缓冲区的45h单元datamove: mov 45h,@r0 ;将R0指向的数据区中的数据传送到显示缓冲区inc r0 ;r0指向下一个待移动的数据djnz r2,intout1 ;没有全部移入,退出为下次移动做准备mov r3,datanumcjne r3,#6,datamove0 ;不等于6时判定大于还是小于6 datamove1: clr f0 ;等于6时不允许sjmp intout1datamove0: jc datamove1 ;小于6不允许mov r0,#dataadd ;大于6时允许再移mov r2,datanumintout1: clr rs0 ;选用工作寄存器组0mov 50h,#40intout0: mov 51h,#100intout: reti;段码表duanma: db 3fh,06h,5bh,4fh,66h,6dh ;0,1,2,3,4,5db 7dh,07h,7fh,6fh,77h,7ch ;6,7,8,9,A,Bdb 58h,5eh,7bh,71h,00h,40h ;C,D,E,F,(空格),-end最后是6.2中提到的测试程序:mov 30h,#3fhmov 31h,#06hmov 32h,#5bhmov 33h,#4fhmov 34h,#66hmov 35h,#6dhmov 36h,#7dhmov 37h,#07hmov 38h,#7fhmov 39h,#6fhmov 3ah,#77hmov 3bh,#7chmov 3ch,#58hmov 3dh,#5ehmov 3eh,#7bhmov 3fh,#71hmov 08h,#dataaddmov datanum,#3mov 0ah,datanum setb f0。
(完整word版)PC机与单片机的串口通信
(C51编程)实训报告学院名称:福建船政交通职业学院专业:11计算机控制技术题目:单片机与PC机串口通信组别:第一组组员姓名:池清清,黄倩滢,蓝春燕学号:114103101,114103111,114103116 指导教师:朱其祥,黄炳乐,武光信,陈明,任慧1实训要求与任务 (1)1.1要求 (1)1.2任务 (1)2程序代码 (1)3程序运行平台 (3)4总体设计 (3)5串行通信方案设计 (4)6 PROTEUS仿真 (5)7结论 (6)摘要串行口是计算机与外部设备之间进行数据交换的重要介质,所以串行通信在工程中有着广泛的应用。
这种通信的实现,主要是靠上位PC机与下位单片机组成的二级系统通过RS232进行通信。
此次设计通过计算机输入数据通过串口传送给单片机进而在LED上显示,使学生进一步巩固所学的单片机系统硬件知识,C语言程序设计方法,计算机通信原理,计算机可视化程序设计,综合性很强,学生得到很大的锻炼。
关键词:单片机PC机串口通信把COMPIM 放在仿真电路图中,当仿真运行起来之后,送到COMPIM 3 号引脚的串行数据,将会通过PC 机的COM1 串行口输出,如果在PC 机的COM1 串行口外接一条电缆,可将串行数据送到其它的硬件设备上。
同样道理,其它的硬件设备送到PC 机的COM1 的串行数据,也会在COMPIM 的号引脚出现,送到仿真电路里面。
由于COMPIM 组件内部,自带RS-232 和TTL 的电平转换功能,因此不需要再使用电平转换芯片。
5.2 利用VSPD 软件7结论这次实训,有很多的心得体会,有关于单片机与串口通信方面的,更多的是关于人与人之间关系方面的。
在这短短一周期间,我得到了很多老师与同学的帮助。
本组对单片机并不是很熟悉,理论联系不了实际。
串口调试与软件安装令我们束手无策了。
后来请教我们班的同学,看他边做边给我们讲解。
最后调试成功,完成了本程序。
最后说明对这次实训的感受,课堂教学考虑到大多数同学的需求,主要强调“基本”—基本知识、基本理论、基本方法、基本技能。
单片机与PC机串行通信综合课程设计
目录1 选题 (1)1.1选题背景 (1)1.2设计任务 (1)2 整体通信设计 (2)2.1 总体方框图 (2)2.2 通信过程分析 (3)2.3 通信方式的选择 (3)3 硬件电路的设计 (5)3.1 AT89C52单片机引脚及其说明 (5)3.2 MAX232芯片引脚及其说明 (6)3.3 DB9及其说明 (7)3.4 数码显示、驱动电路及说明 (9)4 PC端软件设计 (10)4.1 用户界面设计 (10)4.2 程序设计 (10)5 原理总图 (11)6 元器件清单 (12)7 调试 (13)7.1 调试过程 (13)7.2 调试结果 (13)8 小结和设计体会 (15)9 单片机程序 (16)参考文献 (16)Ⅰ1 选题1.1选题背景在各种单片机应用系统的设计中,如智能仪器仪表、各类手持设备、GPS接收器等,常常遇到计算机与外界的信息交换,即通讯。
通信的基本方式可分为并行通信与串行通信两种。
目前,在许多单片机应用系统中,上、下位机分工明确,作为下位机核心器件的单片机往往只负责数据的采集和通信,而上位机通常以基于图形界面的Windows系统为操作平台。
现阶段这种应用的核心便是数据通信,它包括单片机和上位机之间、客户端和服务器之间以及客户端和客户端之间的通信,而在单片机和上位机之间的数据通信则是整个系统的基础。
单片机和PC的通信是通过单片机的串口和PC机之间的硬件连接实现。
鉴于PC 机具有强大的监控和管理功能,单片机则具有快速以及容易控制的特点,在数据量不大、传输要求不高的情况下,一般都采用给PC机配置的RS-232标准串行接口COM1、COM2等相连接来实现应用系统与PC机之间的数据交换。
现今我国工业迅速发展的情况下,对工业中的计算机控制提出了较高的要求。
比如在常见的现场数据采集中,对各个采集点需要采集不同的数据,比如温度、湿度、压力、照度,这就需要单片机对计算机发出的不同的指令做出不同的反应,并且返回相应的采集到的数据。
单片机与pc串口通信(二)2024
单片机与pc串口通信(二)引言概述:本文将继续介绍关于单片机与PC串口通信的知识,本文主要探讨了在单片机通信程序中如何处理接收和发送数据。
在前一篇文章中,我们已经介绍了单片机与PC之间串口通信的基本原理和通信流程。
接下来,我们将进一步深入探讨如何通过单片机实现数据的接收和发送。
正文内容:1. 数据接收1.1 设定串口参数:设置波特率、数据位数、停止位等参数。
1.2 串口接收中断:使用中断机制来处理接收到的数据,避免阻塞主程序。
1.3 缓存空间:使用缓存空间来存储接收到的数据,以便后续处理。
1.4 数据处理:对接收到的数据进行处理,例如解析数据帧、提取需要的信息等。
1.5 错误处理:处理接收数据时可能出现的错误,例如校验错误、帧格式错误等。
2. 数据发送2.1 设定串口参数:设置波特率、数据位数、停止位等参数。
2.2 数据缓存:使用缓存空间来存储待发送的数据。
2.3 串口发送中断:使用中断机制来处理发送数据,避免阻塞主程序。
2.4 发送数据处理:对发送的数据进行处理,例如封装成数据帧、添加校验码等。
2.5 错误处理:处理发送数据时可能出现的错误,例如发送缓冲溢出等。
3. 常见问题与解决方法3.1 数据丢失:如何防止数据在传输过程中丢失。
3.2 数据粘包与分包:解决因数据传输速度不同而导致的数据粘连或分散问题。
3.3 数据校验:如何使用校验码来验证数据的完整性。
3.4 超时处理:处理接收或发送数据时可能出现的超时情况,避免死锁等问题。
3.5 应用实例:通过实际案例来展示单片机与PC串口通信的应用。
4. 调试与测试技巧4.1 使用调试工具:介绍常用的串口调试工具,用于验证通信是否正常。
4.2 日志记录:使用日志记录调试信息,以便分析问题。
4.3 基础问题排查:介绍常见问题的排查方式,例如检查硬件连接、确认代码逻辑等。
4.4 问题定位与修复:介绍如何定位并修复通信问题。
5. 总结本文从数据接收和发送两个方面详细介绍了单片机与PC串口通信的实现方法。
PC机与单片机进行串口通信
单片机与PC机串口通信电路1.概述部分在当今社会中信息数据的传输越来越重要,其中单片机与PC机串口通信也用的越来越广泛,故设计了单片机与PC机串口通信电路,采用AT89C51单片机为主控芯片,借助于MAX232芯片,实现单片机与PC机实现串口通信,可以在pc机上用串口调试助手发送和接收数据,电路中可以通过拨码开关设置数据,通过LED数码管显示接收的数据的功能。
2.系统组成部分2.1.系统组成框图图1 系统组成框图本系统采用AT89C51单片机为主控芯片,通过232接口来实现PC机与单片机之间进行通信,PC机上用串口可以发送接收数据,也可以通过拨码开关进行数据的设置,通过LED数码管(两位)显示接收的数据的功能。
2.2 系统的单元电路2.2.1系统的供电电路图2 系统的供电电路本电路采用+5V供电,采用电源抽头的形式,经过一大一小两个电容分别滤除低频和高频杂波。
2.2.2 系统的主控制器电路图3 系统的主控制器电路2.2.3 232接口电路MAX232实现TTL(CMOS)电平与RS232电平转换的功能。
它有两大优势:1.单电源5V供电,它内部有倍压电路,将5V可以转换成+12V和—12V,而MAX其它系列的芯片需要接双电源,如MAX231,MAX239等。
2.MAX232可以完成两路数据的输入和输出。
另外不同的芯片外接的电容值不一样,MAX232接的是0.1uf。
2.2.4数码管显示电路显示电路采用的是两个共阳极数码管的形式,采用的是74HC595的驱动形式3.软件控制流程单片机上电后,电源指示灯亮,在设置好端口和波特率后,采用字头(A5)+字长(数据的长度)+数据+校验(采用总和校验的方式)的通信协议的方式,进行数据的发送和接收,若数据的字头不是A5,则被认为是干扰数据,这组数据放弃接收,继续接收下一组数据,若数据的字长不在规定的范围内或接收的数据发生数据中断,可以采取没30US查询一次的方式,连续查询100次,查询100次后若数据仍然没有接到,则认为数据错误,每次将发送的数据通过串口显示在PC上,通过拨码开关来调节数据也可以发送数据,将数据显示在数码管上。
单片机与PC机串行通信
[3]胡汉才.单片机原理及其接口技术[M].北京:清华大学出版社,2004
教研室审核意见:教研室主任签字:
指导教师(签名)
年
月
日
学生(签名)
年
月
日
课程设计总结:经过这次课程设计,我对汇编语言、C语言及单片机芯片8051有了进一步的了解,并且巩固了对芯片功能的理解和应用,增加了我的动手能力和实践能力。并且在与老师和同学的交流过程中,开阔了自己的想法,通过使用更好的方法,程序变得更加高效。
1.4.3
功能2:设计小键盘发送程序,需要调用键盘扫描函数和按键检测函数,若有键按下,将键值发送到数码管上,并将其转化为ascii码发回PC机。同样设置一个返回键,设置小键盘右下角的“NEXT”时返回小键盘的功能选择,使函数能够循环使用。
1.5
从实际应用的角度,可以任意选择事先设计好的3种状态,当选择完一种状态时(除0),它可以无限的按照这种方案循环的运行下去,在此过程中,用户可以选择退出这种工作状态,从而实现对当前进行状态的控制,即可以令程序重新开始。当输入0时,结束。在整个串行口输入过程中可随时做出不同的输入方式,对输入数据的工作状态进行控制。
(2)课程设计要求:
①认真完成课程设计任务;
②通过老师现场验收;
③交出完整的课程设计报告。
题目背景:串行口在计算机中有重要的作用,MCS—51单片机内部有一个功能强的全双工的异步通信串行口,就是指双机之间的串行接收、发送数据可同时进行。要传送的串行数据在发方是以数据帧形式一帧一帧地发送,通过传输线由收方一帧一帧地接收。本次课设要求完成从PC机发送数据,将其传入单片机,并将其发回给PC机。然后再从LAB8000的小键盘输入数据,将其发送给PC机。
汇编语言实现串口通信(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机与下位单片机异步串行通信的通信协议其中,单片机号代表现场第几台单片机,占用1个字节,发送两次的目的是为了防止干扰;命令码则代表上位机向下位机发布的工作命令,它也占用1个字节,发送两次的目的也是为了防止干扰。
浅谈PC机与单片机间串行通信的实现
据 时 ,数 据交 换子程序从R TB f r / uf 中将所接 收的上位 e 机数据读 出并存人Wr eB f r ;在 发送数 据时 ,数 i uf 中 t e
据交换子程序把准备 向上位机发送 的数据从R a u e edB f r 中读 出存 入R T ufr ,由串 口中断程序发送 给上位 /B f 中 e
信息系统工程 I 0 1 . 1.2 2 50
9 9
为接收电平转换电路。从 P 机引出的R ̄ C (X ) T D ,经过
低 位字节与发送 的第三个字节异 或 ,得 出的8 字节为 位
下一次C C R 校验 三字节序列的第二个字节。这两个 字节 与发送 的第 四个字节再构成一个三字节序 列 ,利用递推 循环 ,完成多字节的正确校验 。
18 与单片机接收端fX ) 49 R D 相连 。由于18为两态输出不 48 能直接连在一起 ,故通过二极管组成线或 电路后接 到P C 机 的接收端( ) ,二极管的型号均为44 。 I D E 18
三 、上 下 位 机 串行 通 信 协 议 的 设 计 基 本 思路
( 1)下位 机 工作 方 式
二 、软件 设 置
^
下位 机采用半 双工工作 方式 ,分三步骤 执行 : 先 首
接 收命令 ,此时不向上 位机发送数据 ;接收完命令后处 理该 命令 ,这期 间不接 收也 不发送 ;最 后给上 位机 回
其他应用程序使用 。
、
五 、结语
P 机 与单片机 间 串联通 信 的实现是需 要有软 件和 C
MCS 5 单 片机 的 串 口中断 子程 序 的入 口地址 为 .1
0 2 H。其基本思路是 :响应 中断后 ,将接收和发送分 03 为两段处理 。在接收段中 ,若是第一次接收则判断是否
单片机与pc机串口通信
单片机与pc机串口通信单片机与 PC 机串口通信在现代电子技术领域,单片机与 PC 机之间的串口通信是一项非常重要的技术。
它为各种应用场景提供了便捷的数据传输方式,使得单片机系统能够与强大的 PC 机进行有效的信息交互。
首先,让我们来了解一下什么是单片机。
单片机,也被称为微控制器(MCU),是一种集成了 CPU、内存、I/O 接口等多种功能于一体的小型芯片。
它在各种电子设备中扮演着“大脑”的角色,负责控制和协调设备的运行。
而 PC 机,作为功能强大的通用计算机,拥有丰富的资源和强大的处理能力。
那么,为什么要实现单片机与 PC 机的串口通信呢?原因有很多。
一方面,通过串口通信,PC 机可以向单片机发送控制指令,实现对单片机所控制设备的远程操作。
另一方面,单片机可以将其采集到的数据实时传输给 PC 机,以便在 PC 机上进行进一步的处理、分析和存储。
串口通信的原理其实并不复杂。
它是一种基于串行数据传输的通信方式,通过发送和接收一系列的二进制位来实现信息的传递。
在串口通信中,数据以一位一位的顺序依次传输,相比于并行通信,虽然速度较慢,但具有线路简单、成本低、可靠性高等优点。
要实现单片机与 PC 机的串口通信,需要一些硬件和软件的支持。
在硬件方面,通常需要一个串口转换芯片,将单片机的 TTL 电平(通常为 0 5V)转换为 PC 机所使用的 RS232 电平(通常为-10V 到+10V)。
常见的串口转换芯片有 MAX232 等。
此外,还需要连接相应的数据线,将单片机的串口引脚与 PC 机的串口接口相连。
在软件方面,对于单片机来说,需要编写相应的串口通信程序,设置串口的工作模式、波特率、数据位、停止位等参数,并实现数据的发送和接收功能。
而对于 PC 机,通常可以使用各种编程语言,如 C++、C、Python 等,通过调用操作系统提供的串口通信库来实现与单片机的通信。
```cinclude <reg52h>void initUART(){TMOD = 0x20; //设置定时器 1 为模式 2TH1 = 0xfd; //波特率 9600TL1 = 0xfd;TR1 = 1; //启动定时器 1SCON = 0x50; //工作方式 1,允许接收}void sendByte(unsigned char dat){SBUF = dat;while (!TI);//等待发送完成TI = 0; //清除发送标志}void main(){initUART();while (1){sendByte('A');delay_ms(1000);}}```在这个示例中,首先通过`initUART` 函数对串口进行初始化设置,包括波特率等参数。
单片机与PC机串口通信实现
指导教师评定成绩:审定成绩:X X X X 大学自动化学院自动化专业综合设计报告设计题目:单片机与PC机串口通信实现单位(二级学院):学生姓名:专业:班级:学号:指导教师:设计时间: 2010 年 10 月XXXXX大学自动化学院制摘要计算机与计算机或计算机与终端之间的数据传送可以采用串行通讯合并航通讯二种方式。
由于串行通讯具有使用线路少、成本低,特别是在远程传输时,避免了多条线路不一致而被广发采用。
在串行通讯时,要求通讯双方都采用一个标准接口,使不同的设备可以方便地连接起来进行通讯。
RS-232C接口(又称EIA RS-232C)是目前最常用的一种串行通讯接口。
它是在1970年由美国电子工业协会(EIA)联合贝尔系统、调制解调器厂家及计算机终端厂家共同制定的用于串行通讯的标准。
它的全名是“数据终端设备(DTE)和数据通讯设备(DCE)之间串行二进制数据交换接口技术标准”,该标准规定采用一个25个脚上的DB25连接器,对连接器的每一个脚的信号内容加以规定,还对各种信号的电平加以规定。
随着计算机技术尤其是单片机微型技术的发展,人们已越来越多地采用单片机来对一些工业控制系统中如温度、流量和压力参数进行检测和控制。
PC机具有强大的监控和管理能力,而单片机则具有快速及灵活的控制特点,通过PC机的RS-232串行接口与外部设备进行通讯,使许多控制系统中常用到的一种通信解决方案。
因此如何实现PC机与单片机之间的通讯具有非常重要的现实意义。
【关键词】:串口通信单片机 PC机串口目录摘要 (1)目录 (2)1.设计题目 (3)1.1题目内容 (3)1.2实现目标 (3)1.3设计要求 (3)2.设计报告正文 (3)2.1串行通信概述 (3)2.1.1串行通信的原理 (3)2.1.2 8051单片机的串行接口结构 (4)2.1.3串行通信的数据传送方式 (5)2.2通信协议的采用 (6)2.3电平转换设计 (7)3.调试结果(负责部分) (9)3.1二进制的调试 (9)3.2字符串的调试 (9)2. 3波特率的调试 (10)4.设计总结 (12)4.1调试中遇到的问题及解决方法 (12)4.2心得体会 (12)参考文献 (13)单片机与PC机串口通信实现1.设计题目1.1题目内容单片机与PC机串口通信实现1.2实现目标1.掌握串口通信基本原理;2.掌握一种单片机基本操作与实现;3.熟悉和掌握VB程序编写;1.3设计要求1.设计电路原理图,并搭建电路;2.编制PC机与单片机通信的协议;3.完成单片机和PC机软件编写与调试;4.测试并完成报告。
单片机与PC串口通信课程设计
单片机与PC串口通信课程设计单片机与PC机的串口通信摘要单片机由于性价比高、使用灵活等优点而广泛应用于各种电子系统、自动控制系统,但是其存储容量小,处理的数据量不大。
为了克服这一缺点,我们可以将单片机连接到PC机上,由单片机采集数据,然后将数据汇总到PC机,再进行各种数据处理。
单片机与PC机一般采用串行通信,由于51系列单片机中一般集成了全双工的串行端口,只要配以电平转换的驱动电路、隔离电路就可组成一个简单可行的通信接口。
PC机具有强大的监控和管理功能,而单片机则具有快速及灵活的控制特点,本设计将通过电平转换电路实现单片机与PC机中的RS-232标准总线之间的串行通信。
这也是许多测控系统中常用的一种通信解决方案。
关键词:单片机,PC机,串行通信,电平转换,总线目录课程设计(论文)用纸第一章:绪论1.1课题研究的目标和意义单片机与PC机串行通信端口在系统控制的范畴中一直占据着及其重要的地位,它不仅没有因为时代的进步而遭淘汰,反而在规格上越来越完善,应用也越来越广泛。
作为一种基本而又灵活方便的通信方式,串口通信被广泛应用于PC与PC 或者PC与单片机之间的数据交换以及其他工业控制与自动控制中。
如今,在很多场合中,要求单片机不仅能独立完成单机的控制任务,还要能与其他数据控制设备(单片机、PC机等)进行数据交换。
因此如何实现PC机与单片机之间的通信具有非常重要的现实意义。
1.2所属领域的现状及发展状况单片机,亦称单片微电脑或单片微型计算机。
它是把中心处理器(CPU)、随机存取存储器(RAM)、只读存储器(ROM)、输入/输出端口(I/0)等主要计算机功用部件都集成在一块集成电路芯片上的微型计算机。
现在可以说单片机是百花齐放的期间,天下上各大芯片制造公司都推出了自己的单片机,从8位、16位到32位,不成胜数,应有尽有,它们各具特色,互成互补,为单片机的应用供应广漠的六合。
通用型单片机通过三总线结构扩展外围器件成为单片机应用的主流结构。
单片机与PC机串行通信的实现方法
单片机与PC机串行通信的实现方法随着单片机和微机技术的不断发展,特别是网络技术在测控领域的广泛应用,由PC机和多台单片机构成的多机网络测控系统已成为单片机技术发展的一个方向。
它结合了单片机在实时数据采集和微机对图形处理、显示的优点。
同时,windows环境下后台微机在数据库管理上具有明显的优势。
二者结合,使得单片机的应用已不仅仅局限于传统意义上的自动监测或控制,而形成了向以网络为核心的分布式多点系统发展的趋势。
本文主要介绍PC机与51系列单片机实现通信的一般方法和步骤。
硬件结构和单片机的通1S程序设计单片机和PC机的串行通信一般采用RS-232、RS-422或B3-485总线标准接口,也有采用非标准的20nnJL 电流环的。
为保证通信的可靠,在选择接口时必须注意:(1)通信的速率;(2)通信距离:(3)抗干扰能力;(4)组网方式。
本文主要介绍采用RS-232接口与单片机通信的方法。
1、 RS-232电平转换和PC机的接口电路RS-232是早期为公用电话网络数据通信而制定的标准,其逻辑电平与ITL\CMOS电乎完全不同。
逻辑"0"规定为+5- +15V之间,逻辑"1,,规定为-5~-15V之间。
由于RS-232发送和接收之间有公共地,传输采用非平衡模式,因此共模噪声会耦合到信号系统中,其标准建议的最大通信距离为15米.但实际应用中我们在300bi:/s的速率下可以达到300米。
RS-232规定的电平和一般微处理器的逻辑电平不一致,必须进行电平转换,实现逻辑电平转换可以采用以下三种方式。
采用MCl488和MCl489芯片的转换接口 MCl488和MCl489芯片为早期的RS-232至TTL逻辑电平的转换芯片,图1为实际电路。
该电路的不便之处是需要±12V电压,并且功耗较大,不适合用于低功耗的系统。
图中TXD、RXD分别接单片机的发送和接收端。
采用MAX232芯片的转换接口 MAX232是MAXIM公司生产的,包含两路驱动器和接收器的RS-232转换芯片。
PC与单片机的串口通信
PC与单片机的串口通信设计与实现摘要单片机经历TSCM、MCU、SOC三大阶段,以其超小型化、电路简单、功耗低等特点广泛应用于各个领域,本文提出了基于STC89C51单片机与PC串口通信的设计方案,从PC机对单片机数据的采集、显示,与PC机对单片机设备控制的两个方面分别论述。
在介绍PC机与单片机之间串行通信硬件组成的基础上,详细介绍了在Windows环境下用VisualC++6.0的ActiveX技术设计串行通信程序的方法,并给出了通信程序中的部分关键源头代码。
通过测定系统满足实时采集、实时处理和实时控制对速度的要求。
关键字:串行通信;VisualC++6.0;控件;单片机AbstractThe design has been verificated, and the results show that the design can achieve a variety of functions.Keyword:第一章绪论1.1 单片机概述单片机也被称为微控制器[1](Microcontroller),由芯片内仅有CPU的专用处理器发展而来。
最早的设计理念是通过将大量外围设备和CPU集成在一个芯片中,使计算机系统更小,更容易集成进复杂的而对体积要求严格的控制设备当中。
它是70年代中期发展起来的一种大规模集成电路芯片,是CPU、RAM、ROM、I/O 接口和中断系统集成于同一硅片的器件。
单片机用于控制有利于实现系统控制的最小化和单片化[2],简化一些专用接口电路,如编程计数器、锁相环(PLL)、模拟开关、A/D和D/A变换器、电压比较器等组成的专用控制处理功能的单板式微系统。
按照用途不同,单片机可分为通用型与专用型两大类。
通用型:可开发的内部资源:RAM、ROM、I/O等功能部件,全部提供给用户。
用户根据需要,设计一个以单片机芯片为核心的测试系统。
专用型:专门针对某些产品的特定用途而制作的单片机,针对性强且数量巨大。
单片机与PC机RS232串行通讯设计讲解
课程设计单片机与PC机RS232串行通讯设计班级学号学生姓名指导教师目录第一章摘要----------------------------------------------------------------- (3)第二章简介------------------------------------------------------------------(3)2.1单片机的应用模式-------------------------------------------------(3)2.2单片机在工业中的应用--------------------------------------------(4)2.3单片机与PC串口间通讯设计的应用--------------------------(4)第三章系统设计-----------------------------------------------------------(4)3.1设计思路-------------------------------------------------------------(4)3.2系统组成-------------------------------------------------------------(5)3.3 单元硬件电路设计----------------------------------------------- (5)3.3.1硬件的实现过程------------------------------------------------(5)3.3.2 RS-232接口电路----------------------------------------------- (5)3.3.2.1 MAX-232接口电路--------------------------------------(6)3.4 51单片机与PC机串行通信电路-----------------------------(8)3.5 软件设计------------------------------------------------------------(9)第四章实验结果与讨论---------------------------------------------------(9)4.1 程序设计-----------------------------------------------------------(9)4.2实验操作及运行结果--------------------------------------------(17)4.3调试分析-----------------------------------------------------------(18)第五章心得体会-----------------------------------------------------------(19)第六章参考文献-----------------------------------------------------------(19)第七章附录-----------------------------------------------------------------(20)第一章摘要51单片机是一种集CPU,RAM,FLASH ROM,I/O接口和定时中断系统于一体的微型计算机。
单片机课程设计-实现单片机与PC串行双工通信
课程设计任务书学生姓名: XXXXXX 专业班级: XXXXXXXX指导教师: XXXX 工作单位: XXXXXXXX题目:实现单片机与PC串行双工通信初始条件:具备数字电路的理论知识;具备微机原理的理论知识和实践能力;熟悉汇编语言编程技术;熟悉80X86的CPU结构和指令系统;熟悉相关常用接口电路的设计使用方法。
要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)1、分析设计原理,画出程序设计框图,编写程序代码,完成PC和单片机的串行双工通信,单片机的P1口接一共阴数码管,阴极接地。
要求PC键盘每按“0-9”数字键能发送到单片机,并显示在数码管上,单片机发送一串字符能显示在PC的屏幕上,采用查询方式。
波特率为1200。
在Proteus 中画出电路图。
2、完成程序的仿真测试,并演示系统的最终运行结果;3、独立完成课程设计说明书,课程设计说明书按学校统一规范来撰写。
时间安排:(1)、布置课程设计任务,查阅资料,完成系统需求分析一天;(2)、用Proteus实现系统原理图的设计、仿真和结果显示三天;(3)、完成课程设计报告书及答辩一天;指导教师签名:年月日系主任(或责任教师)签名:年月日摘要 (I)1 芯片介绍 (1)1.1 89C51简介 (1)1.2 MAX232简介 (1)2 原理介绍 (2)2.1 串行通信介绍 (2)2.2 串行接口标准 (2)2.3 单片机串口简介 (3)3 程序设计 (4)3.1 单片机串口编程 (4)3.2 程序流程图 (5)3.3 源程序 (6)4 Proteus电路制作 (8)4.1 Proteus简介 (8)4.2 电路图绘制 (8)5 Proteus仿真 (11)5.1 生成HEX文件 (11)5.2 Proteus仿真结果 (11)5.3 结果分析 (12)6 课程设计心得体会 (13)参考文献 (14)致谢 (15)单片机可以通过电平转换后和PC机进行串行通信,只要串口设定一致,单片机和PC机就能交换数据。
单片机与pc机之间的通信例程
单片机与PC机之间的通信例程1. 引言单片机与PC机之间的通信是嵌入式系统开发中非常重要的一部分。
通过单片机与PC机之间的通信,可以实现数据传输、命令控制等功能。
本文将介绍单片机与PC 机之间通信的基本原理以及编写通信例程的步骤。
2. 单片机与PC机通信原理单片机与PC机之间的通信可以通过串口(UART)或者USB接口实现。
串口是一种常见且简单的通信方式,适用于低速数据传输。
USB接口则具有更高的传输速率和更复杂的协议,适用于高速数据传输和复杂的控制。
2.1 串口通信原理串口通信使用两根线(TXD和RXD)进行数据传输。
发送端将数据通过TXD线发送到接收端,接收端通过RXD线接收数据。
发送端和接收端需要使用相同的波特率(Baud rate)进行通信,波特率决定了每秒钟传输的位数。
2.2 USB通信原理USB通信使用四根线进行数据传输:VCC(供电)、GND(地线)、D+、D-(数据线)。
USB接口还包括一个复杂的协议,如USB1.1、USB2.0、USB3.0等。
3. 编写通信例程的步骤编写单片机与PC机之间的通信例程,需要以下步骤:3.1 确定通信方式首先需要确定使用串口通信还是USB通信。
根据实际需求选择合适的通信方式。
3.2 配置硬件根据选择的通信方式,配置单片机和PC机的硬件接口。
如果使用串口通信,需要连接TXD和RXD线;如果使用USB通信,需要连接VCC、GND、D+、D-线。
3.3 编写单片机程序根据单片机的型号和开发环境,编写单片机程序。
程序中需要包含对串口或USB接口的初始化配置以及数据传输或命令控制的代码。
3.4 编写PC机程序在PC机上编写相应的程序,用于与单片机进行通信。
根据选择的通信方式,编写串口或USB接口相关的代码。
在使用串口通信时可以使用Python中的serial库进行串口读写操作。
3.5 测试与调试将编写好的单片机程序烧录到单片机中,并运行PC机程序。
通过监视器或调试工具查看数据传输情况,并进行必要的调试。
- 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机与下位单片机异步串行通信的通信协议其中,单片机号代表现场第几台单片机,占用1个字节,发送两次的目的是为了防止干扰;命令码则代表上位机向下位机发布的工作命令,它也占用1个字节,发送两次的目的也是为了防止干扰。
而停止标志则表明一次命令发送完毕。
使用时可依据该标志判断上位机该格式中,数据块为下位机上传到上位PC机的数据。
校验位则用于PC机对收到的数据进行奇偶校验(占1个字节)。
校验正确后,可将数据写入内存,否则发出数据传输错误信息,以要求单片机重新传输数据。
另外,作为一个完整的通信协议,只有上述约定还不够,还必须在发送和接收数据的时间间隔上加以限制。
否则,很可能由于某些原因而造成无限制的等待对方应答,使整个系统处于工作不正常状态,或者延误其它动作的处理。
具体时间限制可根据通信内容、CPU处理速度,再加上适当的余量来确定。
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。