PC与单片机的串口通信_第1页
PC与单片机的串口通信_第2页
PC与单片机的串口通信_第3页
PC与单片机的串口通信_第4页
PC与单片机的串口通信_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、PC与单片机的串口通信设计与实现摘要单片机经历TSCM、MCU、SOC三大阶段,以其超小型化、电路简单、功耗低等特点广泛应用于各个领域,本文提出了基于STC89C51单片机与PC串口通信的设计方案,从PC机对单片机数据的采集、显示,与PC机对单片机设备控制的两个方面分别论述。在介绍PC机与单片机之间串行通信硬件组成的基础上,详细介绍了在Windows环境下用VisualC6.0的ActiveX技术设计串行通信程序的方法,并给出了通信程序中的部分关键源头代码。通过测定系统满足实时采集、实时处理和实时控制对速度的要求。关键字:串行通信;VisualC6.0;控件;单片机AbstractThe de

2、sign 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接口和中断系统集成于同一硅片的器件。单片机

3、用于控制有利于实现系统控制的最小化和单片化2,简化一些专用接口电路,如编程计数器、锁相环(PLL)、模拟开关、A/D和D/A变换器、电压比较器等组成的专用控制处理功能的单板式微系统。按照用途不同,单片机可分为通用型与专用型两大类。通用型:可开发的内部资源:RAM、ROM、I/O等功能部件,全部提供给用户。用户根据需要,设计一个以单片机芯片为核心的测试系统。专用型:专门针对某些产品的特定用途而制作的单片机,针对性强且数量巨大。1.2 课题的来源及研究意义在各种单片机应用系统的设计中,常常遇到单片机与PC的通信问题,在速度要求不高、传送距离不远的场合一般采用RS232标准串行接口实现,在传送距离较

4、远的场合,可以通过网络实现PC间的通信,与单片机相连的PC通过网络将数据发送到远程电脑,从而实现远程控制3。随着信息技术的发展,计算机和网络越来越普及,对单片机的远程控制与测量的要求也越来越多,而本地PC与单片机的串口通信是实现单片机远程控制的前提与基础。本文在结合现有研究的基础上,对相关的设计进行一定得改进和创新,设计一个本地PC机与单片机串口通信系统。通过VC可视化编程,使本地PC获取单片机指定存储器中数据,并并显示在PC程序页面上;也可通过VC可视化编程,控制单片机上的设备运行。1.3本文所作的工作本文主要研究了基于STC89C51单片机与PC的串口通信技术,并以此为基础从两个方面进行设

5、计实现。第一个方面,PC采集单片机中数据,以单片机采集温度,PC机获取温度并显示在人机界面上为实例。第二个方面,PC控制单片机中的设备,以通过PC中的人机界面,控制单片机上的LED灯状态。最后完成了代码编写、功能验证。1.4论文的组织结构第一章 对 单片机 进行了简要介绍,并对PC与单片机串口通信技术发展趋势以及本课题的来源和工作做了简要概述。 第二章 从整体上描述了STC89C51单片机结构和片内存储子系统。 第三章 对PC采集单片机数据的实现方案做了详细论述,主要论述了PC页面上VC代码的实现,与单片机中代码的实现。 第四章 对PC控制单片机设备的实现方案做了详细论述,主要论述了PC页面上

6、的VC代码的实现、与单片机中代码的实现。 第五章 分别对两个方案进行了测试,充分验证了PC与单片机串口通信的正确性。总结与展望 对本课题的工作做了小结,并谈了进一步研究和工作展望。最后对给予我无私帮助的所有老师、同学和朋友表示感谢,并且给出本文的参考文献。第二章 STC89C51单片机结构STC单片机是一款增强型51单片机,完全兼容MCS-514。STC89C51可以代替AT89C51,而且功能更强,速度更快,寿命更长,价格更低。该单片机具有40个引脚,采用双列直插DIP-40封装。STC89C51可以完成ISP在线编程功能,而AT89C51则不能。因此,将AT89C51中的程序直接烧录到ST

7、C89C51中后,STC89C51就可以代替AT89C51直接工作。STC推出的系列51单片机芯片全面兼容其它51单片机。STC89C51内部有E2PROM,可以再程序中修改,而且断电不丢失数据。此外,还增加了两级中断优先级等等,STC89系列单片机的基本特性如图所示:图2.1 STC89C51结构单片机89C51的串行端口有4种工作方式,通过编程设计,可以使其工作在任一方式,以满足不同场合的需要5。其中,方式0主要用于外接移位寄存器,以扩展单片机的I/O电路;方式1主要用于双机之间或外设电路的通信;方式2、3除有方式1的功能外,还可用作多机通信,以构成多微机系统,方式2、3的区别在于波特率的

8、不同。单片机的串行通信的波特率6可以程控设定,在不同的工作方式下,由时钟振荡频率的分频值或由定时器T1的定时溢出时间确定。单片机的串行端口有2个控制寄存器,用来设置工作方式、发送或接收的状态、特征位、数据传送的波特率以及中断标志TI和RI。单片机的串行端口有1个数据寄存器SBUF,该寄存器为发送和接收所共有,在一定条件下,向SBUF写入数据就启动了发送过程,读SBUF就启动了接收过程。单片机可以采用循环方式或中断方式实现串行数据的传送。在循环方式下,单片机循环对数据寄存器SBUF进行读写来实现数据的接收和发送;在中断方式下,对方式1、2来说,1帧数据发送或接收完后,TI/RI自动置1,请求串行

9、中断,若CPU响应中断,则执行串行中断服务程序,并把TI/RI清0以再次响应中断。对在方式2、3下的接收,还要视串口控制寄存器SCON的设置才可确定RI是否被置位以及串口中断是否开放。实时控制中,由于事件的突发性,常采用中断的方式进行数据传送,中断方式能更大限度地提高资源的利用率,使CPU在不进行数据通信时做其他的工作。下面重点介绍单片机在方式1下的中断方式编程7。方式1是10位异步通信方式,其中包括1个起始位,8个数据位和1个停止位。波特率由定时器T1的溢出率和串口控制寄存器SMOD的状态确定,在CPU的晶振为11.0592MHz时,波特率常采用9600b/s。第三章 PC采集单片机数据本文

10、中采用STC89C51单片机采集周围环境温度,PC机从单片机中取得该温度,并在人机界面显示出来。系统由三个部分组成,分别是:数据采集部分8、单片机控制电路部分、PC机人机界面部分。数据采集部分负责将模拟信号采入,转换成较小模拟信号传送给控制电路。由于单片机需要的是数字信号,因此,所采数据还需经过AD转换芯片的转换才能送给单片机。其中单片机控制电路部分为整个测试仪的核心部分,单片机要实现对硬件电路的控制。在主控电路板上,所有元件在允许范围内要排列紧密,减小电路板的面积,以期减小测试仪的体积,使测试系统尽可能小型化。单片机与计算机连接是通过串行通讯实现的。单片机和计算机两部分的串口是通过标准串行通

11、讯协议连接起来,以供数据传输,而在计算机终端需要编写一个人机界面来实现这一连接,这一界面用VisualC6.0程序语言来编写,最终的数据处理以及图形显示都在这一界面里完成。3.1 数据采集系统数据采集(Data Acquisition)是信号分析与处理的一个重要环节,在许多工业控制与生产状态监控中,都需要对各种物理量进行数据采集与分析。试验测试产生的物理信号通过传感器转换为电压或者电流一类的电信号,然后通过数据采集卡将电信号采集传入PC ,借助软件控制数据采集卡进行数据分析、处理。数据采集系统一般由传感器,信号调理电路,A/D转换,数据采集卡,接收端组成。数据采集原理图如图所示图3.1 数据采

12、集原理图系统的信号采集模块使用DS18B20温度传感器,它是Dallas公司生产的单总线(One-wire)数字化温度传感器,采用单根信号线传输数据,而且数据传输是双向的。能直接读出被测温度,不需使用A/D转换模块。因此可以通过简单的编程实现温度显示与温度控制。图3.2 DS18B20芯片结构DS18B20具有如下特性:1.测试范围:-55-1252.转换精度:9-12位(包括符号位),可编程决定转换精度的位数。3.测温分辨率:9位精度为0.5,12位精度为0.0625。4.转换时间:9位精度为93.75ms,12位精度为750ms。5.具有非易失去性,上、下 设定功能。DS18B20采集的信

13、号,由于已经为数字信号,因此直接存入单片机的外部数据存储器中;之后单片机将采集到的数据送入上位机,由VC6.O编写的数据处理软件进行处理显示。3.2 硬件系统设计3.2.1 系统结构图图3.3 系统结构图3.2.2 元器件的选择单片机选择STC89C5l,STC系统单片机具有超强抗干扰性、高抗静电性、较低功耗,Power Down<O.1uA,可外部中断唤醒;工作频率范围宽,6M时钟/机器周期和12M时钟/机器周期任意设置;而且这个系列的单片机可以直接在线烧写程序9,不需要额外的编程器和下载线,直接通过串口就可以下载程序,下载的电路就是RS-232的通信电路。开发方便,而且价格低廉,而且

14、其内核完全兼容51单片机,超强加密。信号采集模块使用DS18B20温度传感器。存储器选择Atmel公司的Ar24C32芯片,它是32K的电可擦写的EEPROM芯片。串行通讯选择常用的MAX232芯片,使用简单方便,加几个电容即可完成单片机与PC机的连接。3.2.3 供电模块设计本系统是单一电源系统,使用共地电源:+5V,在实验室内可提供两种供电方案:一是使用直流稳压电源,调节出+5V电压为系统供电;另一种方案是考虑到PC机的USB传输接口正是+5V电压,因此可以采用直接用PC机自带的USB接口为系统供电。PC机的USB接口由四根线组成:VCC、D+、D-、GND,本文主要用USB提供电源,因此

15、只用到VCC和GND两根线,焊接时要注意不能错焊到D+或D-引脚上,否则Windows系统会提示“发现不可识别的设备”。3.2.4 振荡复位电路8051内部有一个高增益反相放大器,用于构成振荡器,引脚XTALl和XTAL2分别是此放大器的输入端和输出端。在XTALl和XTAL2两端跨接晶体或陶瓷谐振器,就构成了稳定的自激振荡器,其发出的脉冲直接送入内部时钟电路,见图3.4。外接晶振时,C1和C2值通常选择为30pF左右;外接陶瓷谐振器时,Cl和C2约为47pF。Cl、C2对频率有微调作用,振荡频率范围是12MHz12MHz。为了减少寄生电容,更好地保证振荡器稳定可靠地工作,谐振器和电容应尽可能

16、安装得与单片机芯片靠近。图3.4晶振电路计算机在启动运行时,都需要复位,使CPU和系统中其他部件都处于一个确定的初始状态,并从这个状态开始工作。图3.5 复位电路8051复位结构见图35。复位引脚RST/VPD10通过片内一个斯密特触发器(抑制噪声作用)与片内复位电路相连,斯密特触发器的输出在每个机器周期的S5P2由复位电路采样一次。当RST/VPD引脚端保持两个机器周期(24个振荡周期)以上的高电平时,8051进入复位状态。复位时,ALE和PSEN成输入状态,即ALE=PSEN=l,片内RAM不受复位影响。复位后,PC指向0000H,使单片机从起始地址0000H开始重新执行程序。所以单片机运

17、行出错或进入死循环,可按复位键重新启动。单片机复位电路设计的好坏,直接影响到整个系统工作的可靠性。系统出现“死机"、“程序跑飞”等现象,主要是单片机的复位电路设计不可靠引起的。 复位电路的基本功能是:系统上电时提供复位信号,直至系统电源稳定后,撤销复位信号。复位时必须使RST引脚加上持续两个机器周期(即24个振荡周期)的高电平。本文采用时钟频率为12MHz,每机器周期为1s,则只需2s以上时间的高电平,在RST引脚出现高电平后的第二个机器周期执行复位。本文采用按键复位电路。该电路除具有上电复位功能外,若要复位,只需按3.2.5 通讯接口设计单片机与PC机进行通讯是通过串行通讯完成的。

18、串行通讯是CPU与外界交换信息的一种基本通信方式。串行通讯分为同步和异步两种方式,同步通讯没有开始和结束的标志位,因此传输速度高,但这种方式对硬件结构要求较高;异步通讯设有一个起始位“0"和一个停止位“1",通讯双方只需按约定的帧格式来发送和接收数据,所以硬件结构比同步通讯方式简单,此外它还能利用校验位检测错误,所以这种通讯方式应用较为广泛。本文选择串行异步通讯8,半双工传送方式,无奇偶校验位,即为常见的N.8.1帧格式。3.3 单片机中软件系统设计3.3.1 软件开发环境(1)KEIL uVision2集成开发环境KEIL软件是KEIL公司的产品。KEIL公司是一家业界领

19、先的微控制器(MCU)软件开发工具的独立供应商。KEIL C51标准C编译器为8051微控制器的软件开发提供了C语言环境,同时保留了汇编代码高效,快速的特点。C5l编译器的功能不断增强,使用户可以更加贴近CPU本身,及其它的衍生产品。C51已被完全集成到usion2的集成开发环境中,这个集成开发环境包含:编译器,汇编器,实时操作系统,项目管理器,调试器。uVisioll2 DE可为它们提供单一而灵活的开发环境。(2)ISP在线烧写程序软件传统的编程方式,以单片机应用系统开发为例,如果想要对单片机进行写入程序11,必须要先把单片机从电路板上取下来,然后用编程器进行编程烧写,写入程序后再次插入电路

20、板调试。ISP(InSystem Programming)在线系统编程,指电路板上的空白器件可以编程写入最终用户代码, 而不需要从电路板上取下器件,已经编程的器件也可以用ISP方式擦除或再编程。无论在单片机上,还是在CPLDFPGA上都得到了广泛的应用,ISP技术是未来发展的方向!3.3.2 数据采集程序采用DS18B20温度传感器采集温度,产生的为数字信号,因此无需使用A/D转换器。主要步骤如下:1. 启动并初始化DS18B20设备,代码如下:void Init_DS18B20(void) unsigned char x=0; DQ=1; /DQ先置高 delay(8); /稍延时 DQ=0

21、; /发送复位脉冲 delay(80); /延时(>480us) DQ=1; /拉高数据线 delay(5); /等待(1560us) x=DQ; /用X的值来判断初始化有没有成功,18B20存在的话X=0,否则X=1 delay(20); 2. 通过数据线向DS18B20中写入数据,代码如下:void WriteOneChar(unsigned char dat) unsigned char i=0; /数据线从高电平拉至低电平,产生写起始信号。15us之内将所需写的位送到数据线上, for(i=8;i>0;i-) /在1560us之间对数据线进行采样,如果是高电平就写1,低写0

22、发生。 DQ=0; /在开始另一个写周期前必须有1us以上的高电平恢复期。 DQ=dat&0x01; delay(5); DQ=1; dat>>=1; delay(4);3. 从DS18B20读出数据12,并解析出温度,代码如下:void ReadTemperature(void) Init_DS18B20(); /初始化 WriteOneChar(0xcc); /跳过读序列号的操作 WriteOneChar(0x44); /启动温度转换 delay(125); /转换需要一点时间,延时 Init_DS18B20(); /初始化 WriteOneChar(0xcc); /跳

23、过读序列号的操作 WriteOneChar(0xbe); /读温度寄存器(头两个值分别为温度的低位和高位) tempL=ReadOneChar(); /读出温度的低位LSB tempH=ReadOneChar(); /读出温度的高位MSB if(tempH>0x7f) /最高位为1时温度是负 tempL=tempL; /补码转换,取反加一 tempH=tempH+1; fg=0; /读取温度为负时fg=0 sdate = tempL/16+tempH*16; /整数部分xiaoshu1 = (tempL&0x0f)*10/16; /小数第一位xiaoshu2 = (tempL&a

24、mp;0x0f)*100/16%10;/小数第二位xiaoshu=xiaoshu1*10+xiaoshu2; /小数两位disbuf3 = sdate/10;disbuf2 = sdate%10;disbuf1 = xiaoshu1;disbuf0 = xiaoshu2;3.3.3 单片机中串口通信程序在串行通信中13,收发双方对发送或接收的数据速率(即波特率)要有一定的约定。通过软件对805l串行口编程可约定4种工作方式,本文选择方式l,可通过对串行口控制寄存器SCON编程实现。方式1波特率=2SMOD32·T1溢出率。当定时器T1作波特率发生器使用时,通常是选用自动重装载模式,即

25、模式2。在模式2中,TLl作计数用,而自动重装载的值放在THl内,设计数初值为X,那么每过“256-X”个机器周期,定时器T1就会产生一次溢出。为了避免因溢出而产生不必要的中断,此时应禁止T1中断。溢出周期为:12fosc·(256一X)溢出率为溢出周期之倒数,所以波特率=2SMOD32·fosc(12·(256-X)则定时器T1方式2的初始值为:X=256-fosc·(SMOD+1)(384·波特率)本文选用定时器T1工作方式2作波特率发生器,波特率为9600波特14,设波特率控制位SMOD为l,则X=256一110592·106&

26、#183;(1+1)384·19200=253=FDH所以THl=TLl=FDH 串行通信部分下位机端用于单片机初始化的部分程序:void main()TMOD=0x20; /用定时器设置串口波特率 9600TH1=0xfd;TL1=0xfd;TR1=1;REN=1; /串口初始化SM0=0;SM1=1;EA=1; /开启总中断ES=1;while(1)ES=0;num=0;SBUF=a;/数据a为温度(已经从温度传感器中获取到)发送数据a到SBUF,即将单片机的数据发送到计算机while(!TI);TI=0;ES=1;3.4 PC中软件系统设计3.4.1 MSComm控件由于系统需

27、要进行数据通讯,因此要用到VC6.0的通信功能15。MSComm控件是VC6.O提供的串行通信控件,利用它可以很方便的实现设备之间的串行口通信。它允许上位机与其他通信设备(如单片机)建立串口通信,还可以发送命令、进行数据交换以及监视和响应在通信过程中所发生的各种错误和事件,从而可以利用它创建全双工的、事件驱动的、高效实用的通信程序。MSComm控件提供了两种处理通信问题的方法:事件驱动法和查询法。事件驱动通信是处理连接端口通信的一种有效方法。在串口接收缓冲区有字符,CD或TRS线上一个字符到达或一个变化发生的情况下,可利用MSComm控件的OnCom事件捕获并处理这些通信事件。OnCom事件还

28、可以检查和处理通信错误。编程过程中可在OnCom事件处理函数中加入相应的处理代码。这种方法的优点是程序响应及时、可靠性高。3.4.2 在VC程序中插入MSComm控件打开VC6.0,建立一个基于对话框的MFC应用程序,选择Project菜单下Add To Project子菜单中的 Components and Controls选项,在弹出的对话框中双击Registered ActiveX Controls项,则所有注册过的ActiveX控件出现在列表框中。 选择Microsoft Communications Control, version 6.0,单击Insert按钮将它插入到我们的Pro

29、ject中来,接受缺省的选项。这时在ClassView视窗中就可以看到CMSComm类了,(注意:此类在ClassWizard中看不到,重构clw文件也一样),并且在控件工具栏Controls中出现了电话图标(如图3.6所示),现在要做的是用鼠标将此图标拖到对话框中,程序运行后,这个图标是看不到的。图3.6 VC控件列表利用ClassWizard定义CMSComm类控制对象,打开ClassWizard>Member Viariables选项卡,选择CSCommTestDlg类,为IDC_MSCOMM1添加控制变量:m_ctrlComm,这时,在对话框头文件中自动加入了/AFX_INCLU

30、DES()  #include "mscomm.h"  /AFX_INCLUDES。3.4.2 打开串口和设置串口参数在程序中做一个打开串口按钮,在该按钮的处理函数中打开串口,如下代码:图3.7 串口初始化页面void CMyDlg:OnButtonOpenck() / TODO: Add your control notification handler code here/打开串口CString SetSettings;UpdateData(true);SetSettings=m_strBaudRate+","+m_strPari

31、ty.Mid(0,1)+","+m_strDataBits+","+m_strStopBits;/关闭串口if(m_Comm.GetPortOpen()m_Comm.SetPortOpen(false);/必须在关闭串口的情况下对串口进行初始化m_Comm.SetCommPort(atoi(m_strCkNum.Mid(3,1);/设置串口号m_Comm.SetRThreshold(1);/设置响应事件发生的条件 m_Comm.SetInputMode(1);/以二进制方式接受数据m_Comm.SetSettings(SetSettings);/设置波特

32、率 m_Comm.SetInBufferSize(1024);m_Comm.SetOutBufferSize(521);/设置接收缓冲区与发送缓冲区的大小m_Comm.SetInputLen(0);/设置接受的长度if(!m_Comm.GetPortOpen()m_Comm.SetPortOpen(true);/串口初始化后打开串口GetDlgItem(IDC_BUTTON_CLOSECK)->EnableWindow(true);GetDlgItem(IDC_BUTTON_OPENCK)->EnableWindow(false);/当前状态m_ctrlPortStatus=&qu

33、ot;STATUS:"+m_strCkNum+" OPENED"+","+m_strBaudRate+","+m_strParity+","+m_strDataBits+","+m_strStopBits;m_ctrlIconOpenoff.SetIcon(m_hIconRed);UpdateData(false);3.4.3添加串口事件消息处理函数OnComm() 打开ClassWizard>Message Maps,选择对话框类,选择IDC_MSCOMM1,双击消息OnCom

34、m,将弹出的对话框中将函数名改为OnComm。这个函数是用来处理串口消息事件的,如每当串口接收到数据,就会产生一个串口接收数据缓冲区中有字符的消息事件,刚才添加的函数就会执行,在OnComm()函数加入相应的处理代码就能实现想要的功能了。在函数中加入如下代码:void CSCommTestDlg:OnComm()     / TODO: Add your control notification handler code here    VARIANT variant_inp;    COleS

35、afeArray safearray_inp;    LONG len,k;    BYTE rxdata2048; /设置BYTE数组 An 8-bit integerthat is not signed.    CString strtemp;    if(m_ctrlComm.GetCommEvent()=2) /事件值为2表示接收缓冲区内有字符      variant_inp=m_ctrlComm.GetInput(); /读

36、缓冲区        safearray_inp=variant_inp; /VARIANT型变量转换为ColeSafeArray型变量        len=safearray_inp.GetOneDimSize(); /得到有效数据长度        for(k=0;k<len;k+)        

37、;    safearray_inp.GetElement(&k,rxdata+k);/转换为BYTE型数组        for(k=0;k<len;k+) /将数组转换为Cstring型变量                    BYTE bt=*(char*)(rxdata+k); /字符型

38、0;           strtemp.Format("%c",bt); /将字符送入临时变量strtemp存放            m_strRXData+=strtemp; /加入接收编辑框对应字符串               &

39、#160; UpdateData(FALSE); /更新编辑框内容下图为人机界面的数据接收显示窗体16,窗体中文本框是用来显示单片机通过串口发给主机的温度数据。图3.8 温度显示页面3.5 本章小结本章详细介绍了PC采集单片机数据的数据采集模块,硬件系统设计,单片机软件的组成与PC软件的组成,其中包括数据采集程序、以单片机为下位机的通信程序设计、MSComm的属性和驱动事件、以PC机为上位机的通信程序设计,以及人机界面部分的结构和功能。第四章 PC控制单片机设备本章主要以PC中的人机界面,控制单片机上的LED灯设备状态为例,论证了PC通过串口控制单片机设备的正确性。系统由两部分组成,分别是:P

40、C机人机界面部分、单片机控制电路部分。单片机与计算机连接是通过串行通讯实现的17。计算机人机界面来用VisualC6.0程序语言来编写,修改人机界面上设备状态控制单片机上对应的设备。上一章已经对单片机的硬件设计,VC中MSComm控件作了详细说明,本章不再累述,只从单片机软件设计与PC页面的软件设计两方面作详细讲述。4.1 PC中软件系统设计4.1.1 获取页面的选择状态PC上人机界面如下图所示,选择需要点亮的LED灯,点击发送按钮,将数据发送至单片机。图4.1 人机交互页面将左侧的8个多选框控件关联到8个BOOL类型的变量中,当点击发送按钮时,通过读取这8个变量可以获取到页面的选择结果。代码

41、如下所示:void CMyDlg:OnSendData() UpdateData(TRUE);/将页面数据存入关联的变量中short state = m_check1 + m_check2<<1 + m_check3<<2 + m_check4<<3 + m_check5<<4 + m_check6<<5 + m_check7<<6 + m_check8<<7;/1-8号灯状态/调用串口发送数据CString senddata; senddata.Format(%d,state);m_Comm.SetOutpu

42、t(COleVariant(senddata); /发送8位数据 TX_count+=m_strSend.GetLength(); /发送计数CString strTemp;strTemp.Format("TX:%d",TX_count);m_ctrlTXCount.SetWindowText(strTemp); /显示计数GetDlgItem(IDC_BUTTON_SEND)->EnableWindow(TRUE);UpdateData(false);4.1.2 向串口发送数据代码如上所示,调用m_Comm控件的SetOutput方法向串口发送数据。4.2 单片机中

43、软件系统设计单片机与电脑通过串口连接,单片机一直监听串口中数据,当接收到数据时,从缓存中取得数据18,将数据各个位赋值到相应LED管脚,从而实现页面对单片机设备的控制。实现代码如下:void main()TMOD=0x20; /用定时器设置串口波特率 9600TH1=0xfd;TL1=0xfd;TR1=1;REN=1; /串口初始化SM0=0;SM1=1;EA=1; /开启总中断ES=1;/开启串口中断while(1)if(num=1) LED=dat;/将PC中传来的数据赋值给LED灯管脚ES=1; /打开串口中断num=0;4.3本章小结本章主要介绍了PC通过串口控制单片机设备的实现方案,

44、以PC控制单片机LED灯为例,介绍了PC上人机界面的软件实现,以及单片机中的通信程序的实现。第五章 实验及结果分析PC采集单片机温度实验,数据分为两部分,一部分为实验时单片机测量到的温度值;另一部分为PC从单片机获取到的温度值19。通过对比同一时间的两部分数据,可以验证串口通信的正确性,与实时性。为了能够方便验证,将单片机采集到的温度数据显示在单片机中的数码管上。使用上面的验证方法对系统进行测试,在一定时间内,观察PC人机界面与单片机数码管上数据,经过严格的测试,发现最终所有的测试结果和预期得到的结果完全相同。 PC控制单片机LED管实验,通过人机页面控制单片机的LED20,只需比较选择的结果

45、与实际单片机LED结果,若一致则可以验证串口通信的正确性。同样经过反复测试,所有的测试结果和预期得到的结果完全相同。总结与展望本文的主要内容以PC与单片机的串口通信为背景。 本课题在分析了单片机结构与VC6.0中MSComm控件基础上,设计并实现了PC读取单片机温度与PC控制单片机LED灯两个实验。其中,PC读取单片机温度实验,单片机从温度传感器中取得温度21,发送至串口,PC中页面当检测到该串口有数据时,触发MSComm控件的OnComm()消息,在其中读取串口数据并且把数据显示到页面的List控件中22,以便查看。PC控制单片机LED等试验,在人机页面上选择各个灯的状态,并点击发送按钮,将触发按钮的按下事件,在其中完成页面数据的获取,并把数据发送给单片机,当单片机收到此数据后,作出对应的控制。在完成了设计以后,又对部分代码进行了较为完备的功能验证,进行了语法排错和对一些比较明显的设计缺陷进行排查,功能较好地满足了设计要求。通过本论文的研究工作,不仅锻炼了科研工作能力,为今后的系统开发积累了经验,而且还为进一步探讨单片机的设计提供了很好的借鉴。所有的设计和功能验证目前已经完成,实现的功能还需要扩展还需要大量的工作去做。随着单片机的广泛应用和网络的不断发展,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论