




已阅读5页,还剩46页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
毕业设计课题名称: 多串口多线程的数据管理系统的设计 摘 要本论文首先简要介绍了多串口多线程能量管理系统的现状及发展前景,基于串口通信实现计算机与其他设备通信具有实现简单,使用灵活,数据传输可靠等优点,本文从系统的总体结构(由上位机和下位机构成)的设计,分析各部分系统的功能,上位机通过串口控制单片机进行数据采集,以监控其他设备运行情况。下位机将采集的数据再通过串口传回上位机以供存储分析,以实现集中管理和最优控制。然后是通信程序的编写(包括上位机通信程序和下位机通信程序的设计)两个方面,着重介绍实现多串口通信的基本方法,采用VC+6并结合定时器和多线程技术编写,提出了实现多串口通信的方法,使用多个串口并行通信,从而实现大规模的数据采集与高速数据传输操作。该课题的研究在实际运用中也有重大意义,在工业监控数据采集和实时监控系统中得到了广泛的应用。故使得PC机和单片机之间的通信更重要。关键词:多串口;多线程;串口通信;VC+ABSTRACT This paper firstly introduces the multi-serial port multi- threading energy management system based on the current situ- ation and development prospect realizes serial communication, computer and other equipment communication is easier, use agile, data transmission and reliable, this article from the general structure of the system and by PC (a agencies into) the design, analysis of the parts system function, PC through a serial port control SCM in data collection, to monitor the other equipment operation. Lower place machine will of the data collected through serial again returned PC for storage ana- lysis, in order to realize the centralized management and optimal control. Then is the communication program written (including PC communication procedures and lower level comp- uter communication program design) two aspects, introduced emphatically realize the basic method of serial communication more, using VC+ 6 and combined with timer and multi-thread technology, this paper points out many written, the method of serial communication serial parallel communication, use more so as to realize the large-scale data acquisition and the high-speed data trans- mission operation. This topic research in actual use also was significant, in industrial monitoring data acquisition and real-time monitoring system has been widely used. So make PCS and of communication between the microcontroller is more important. Key words: multi-serial ; multithread; serial communication; VC + ; 目 录1. 绪论111课题的意义112 能量管理系统的发展历史113 多串口多线程技术发展现状及前景22. 系统结构设计22. 1 硬件结构设计2211上位机的工作原理4212下位机的工作原理43.通信软件程序设计53. 1串行通信实现的方法532上位机通信软件的设计12321通信的主程序1532. 2子通信线程1633下位机通信软件的设计184. 串口通信协议1941 单片机的参数设置1942 PC机的串口协议225. 结语25参考文献:151 绪论1.1课题的意义随着计算机技术的不断发展 ,在线监控在现代工业企业中的需求日趋上升 ,采用串口通信实现计算机与其他设备通信具有实现简单 ,使用灵活 ,数据传输可靠等优点 ,因此在工业监控、数据采集和实时监控系统中得到了广泛应用。由于监控设备的增多 ,仅用 PC机提的两个串口已不能满足通信数量的要求 ,因此我们可以借助多用户卡 ,扩展出八个串口 ,由于多路串行通信在实际的编程中比较复杂。目前 ,大部分资料在解决多串口通信问题时 几乎都采用多线程编程 ,本文在此基础上提出了解决多路串行通信的方法同时,在一些典型的实时系统和规模较大的数据采集系统中多任务的要求比较普遍。这时系统中需要有线程专门负责数据采集,以实现实时多任务并行的需要。线程是Windows9X/2000的基本执行单位,是Window为程序分配CPU时间的基本实体。每个进程由一个或多个线程组成,同一进程中的多个线程,可以共享地址空间和所有的处理器资源,避免了用多进程实现并行性的缺陷。1.2能量管理系统的发展历史能量管理系统(Energy Management System)是以计算机技术和电力系统应用软件技术。为支撑的现代电力系统综合自动化系统,也是能量系统和信息系统的一体化或集成。EMS 是以调度自动化为核心内容。随着计算机技术和计算技术的发展,EMS 使传统的调度自动化向广义的调度功能一体化乃至全网的综合自动化方向发展。 最初的 EMS系统是在 20世纪 70 年代中期产生的。它在数据收集和监控系统 SCADA 的基础上,将自动发电控制 AGC(Automatic Generation Control)和部分网络分析软件功能集成一体,用数字计算机系统实现其全部功能。 计算机硬件系统经历了从初期采用专用控制型计算机到全部采用通用计算机的过程。EMS 的计算机软件经历了从专门设计控制程序到采用通用控制系统、专门开发数据库和画面编译系统及形成专门的 EMS 支持平台的过程。随着电力系统模型与算法的发展,EMS的高级应用软件也逐步完善和丰富。尤其是面向电力市场的环境,电网管理由垄断走向开放,EMS 的功能将面临新的改造和更新。 我国的 EMS 经历了 70 年代基于专用计算机和专用操作系统的 SCADA 系统的第一代;80年代基于通用计算机的第二代;90 年代基于 RISC/UNIX 的开放式分布式的第三代。第四代的主要特征是采用 JAVA、因特网、面向对象等技术并综合考虑电力市场环境中的安全运行及商业化运营要求,它将在本世纪诞生。1.3多串口多线程发展现状及前景线程可以定义为进程中的异步代码路径。在支持多线程技术的操作系统中,进程可以包含多个线程,这些线程可以按照与多用户操作系统同时支持多进程相同的方式同时运行。从本质上讲,多线程可以在一个进程内同时运行。在目前的工控系统中,工控仪器如何把可靠数据成功传送给计算机终端已经是一个至关重要的环节,而串行通信以其方便易行,信道成本比较低廉的优势,常常作为计算机与外部串行设备之间的首选数据传输通道,又因为许多设备和计算机都可以通过串口对外设进行控制、检测,串口通讯日益成为计算机和外设进行通讯、获取由外设采集到的监测数据的一个非常重要的手段。而采用单线程进行多串口通信 ,接收数据、显示数据、发送数据串行执行 ,此种方法进行程序设计简单 ,易于调试 ,系统便于管理 ,但系统等待时间长 ,执行效率比较低 ,实时性差 ,适用对实时性要求不高的场合。而开启读写两个线程进行多串口通信 ,数据接收、数据显示、发送数据三者同时执行 ,减少了系统的等待时间 ,使系统具有更好的响应性和高效性。为每个串口开启一个监视线程进行多串口通信 ,使得系统对于多路串行通信进行同时控制 ,这种方法适用于对于多路通信接收所耗费的时间差别较大的情况 ,这时可以减少对某一路接收信息的等待时间 ,如果接收耗费时间相当 。由于串口通信实现计算机与其他设备通信具有实现简单 ,使用灵活 ,数据传输可靠等优点,从而促进了对多串口多线程技术的研究,因此在工业监控、数据采集和实时监控系统中得到了广泛应用。2 系统结构设计分块的系统结构对整个系统来说是相当重要的,而层次结构能将一个复杂的问题分解成若干个简单的问题,然后逐个解决。2.1硬件结构设计该多路串行通信系统由上位机和下位机构成 ,如图 1所示 , PC机多用户卡转换板转换板单片机单片机目标控制器数据采集器数据采集器目标控制器 图1 多串口通信模型上位机为 PC 机,内部加一个MOXA 的多串口卡,可扩展出 32 个串口。下位机为单片机构成的监测和数据采集系统。二者通过调制解调器和电话网进行通信连接该框图中,起着重要作用的是RS-232C通信接口电路(即图1中的转换版)。它是上位机和下位机之间信息传递的枢纽,一切数据的传输必需由它完成,上位机直接利用它的RS-232串行口,为此,采用了RS-232串行通信来接收或上传数据和指令。但RS-232信号的电平和单片机串口信号的电平不一致,必须进行二者之间的电平转换。在此电路中,采用MAX232实现TTL逻辑电平和RS-232电平之间的相互转换。 MAX232由单一的+5V电源供电,只需配接5个高精度10F/50V的钽电容即可完成电平转换。因此,避免了用1488和1489时必需两路电源的麻烦。转换后的串行信号TXD、RXD直接与PC机的串行口连接。如此设计,既可发挥出PC机的强大的计算和显示功能,又可以体现出单片机灵活的控制功能,有利于对现场信号的实时采集、处理和监控。下位机的主要功能是定时采集传感器上的信息并临时保存, 以及根据上位机发出的控制命令执行控制操作和上报数据。一个下位机可以对多个数据点进行监测和控制。通常PC机和单片机之间的通信是通过串行总线RS-232实现的。因此采用一种以MAX232为核心的通信接口电路。该接口电路适用于由一台PC机与多个8051单片机串行通信的设计,其原理和方法同样适用于PC机与其它单片机之间的串行数据通信2.1.1 上位机的工作原理上位机为 PC机 , PC机通过多用户卡可扩展出八个串口。上位机直接利用RS-232串行口,为此,采用了RS-232串行通信来接收或上传数据和指令.下位机为单片机。与传统的 TTL等数字电路的逻辑电平不同 , RS-232串行通信是美国电气工业协会(EIA)与BELL公司等一起开发的一种标准通信协议,现在它在终端、外设与计算机中被广泛采用,该标准规定了21个信号和25个引脚,它采用双极性的逻辑信号,0逻辑信号为+3V+12V,1逻辑信号为- 12V - 3V,它的传输速率最大为20Kbps,传输距离仅为15m 。由于RS-232主要完成电平移位、转换和信号的反相等,所以它有自己的电平转换和驱动芯片。在系统结构中, RS-232C通信接口电路,它是上位机和下位机之间信息传递的枢纽,一切数据的传输必需由它完成。此电路中,采用MAX232实现TTL逻辑电平和RS-232电平之间的相互转换。 MAX232由单一的+5V电源供电,只需配接5个高精度10F/50V的钽电容即可完成电平转换后的串行信号TXD、RXD直接与PC机的串行口连接。如此设计,既可发挥出PC机的强大的计算和显示功能,又可以体现出单片机灵活的控制功能,有利于对现场信号的实时采集、处理和监控。RS2232标准规定信号电压在 - 12 - 3V和 312V,传号和空号之间至少有 6V的电压差 ,提高了数据传输的可靠性和抗干扰能力。因此 ,单片机与 PC机需要用一个电平转换板 ,要用 MAX232芯片实现 TTL 电平和 RS-232电平相互转换。因为MAX232本身带有电源电压变换器,可以把+5V和-5V电压变换成RS-232输出电平所需的+10V和-10V电压,实现RS-232的技术指标,并只需要+5V电源,为串行通信带来好性能。二者通过调制解调器和电话网进行通信连接。2.1.2 下位机的工作原理下位机的作用是将传感器采集到的模拟信号进行 A/D转换并临时保存 ,然后向上位机发送采集到的数字量 ,同时根据上位机发来的控制指令控制目标控制器执行相应的操作;上位机的作用是利用多串口多线程的通信软件,接收下位机采集的数据 ;在 PC机上实时地显示控制变量的状态 ,同时针对发生的情况 ,向下位机发送控制指令;根据系统的不同要求,通过通信软件调整下位机的各种参数。 上位机和下位机这样配合,一起构成一个能实现遥控、遥测、遥调功能的远程控制测量系统。 该系统硬件连接简单,稳定可靠。通信软件采用VC实现,将收集到的各种数据信息保存到数据库中,为后续的数据处理提供了极大的方便。数据库系统采用MSSQLServer,VC通过ODBC接口对其进行访问。 3 通信软件程序设计3.1 串口通信实现方法开发串口通信软件 可以利用VC+6. 0 , VC+运行时标准通信函数、MSComm 控件、WindowsAPI函数、第三方类实现串行通信。1) 用VC+运行时标准通信函数实现串口编程利用 C进行异步通信编程 ,其实是对 UART内部寄存器的读出或写入操作。由于运用标准通信函数需要对硬件电路的结构原理非常了解 ,编程比较复杂。2) 用 MSComm控件进行串口编程MSComm控件是微软公司提供的 Windows环境下实现串行通信的 ActiveX控件 ,利用它可以非常简单地实现串行通信。它提供了两种处理通信问题的方法:事件驱动方法和查询法。MSComm控件虽然简单易用 ,但在实际测试中也发现了其本身的一些缺点 ,如实时性不高、高速通信时准确率较差和处理速度较慢等缺点;另外 ,由于其本身存在一定的内存泄露 ,在长期运行的系统中有时会造成系统崩溃 。3) 用 WindowsAPI函数实现串口编程利用 WindowsAPI函数进行串口程序设计 ,具有很强的灵活性 ,但需要用户详细了解串口程序开发过程和一些复杂的 API函数。在 Windows系统中 ,串口和其他通信设备是作为文件处理的。串口的打开、关闭、读取和写入所用的函数和操作文件的函数完全一致。对于不同的应用程序,虽然界面不同,但是如果采用串口与主机之间的通信,对串口的处理方式大致相似,无非就是通过串口收发数据,对于通过串口接收到的数据,交给上层软件处理显示,对于上层要发给串口的数据,进行转发。但在实际编程中,由于采用的通信方式和流控不同,串口设置也不同,这就涉及到 DCB的初始化问题和读写串口等细节问题。串口通信应用程序设计的总体思路(即操作过程)是:首先,确定要打开的串口名、波特率、奇偶校验方式、数据位、停止位,传递给CreateFile()函数打开特定串口;其次,为了保护系统对串口的初始设置,调用 GetCommTimeouts()得到串口的原始超时设置;然后,初始化DCB对象,调用SetCommState() 设置DCB,调用SetCommTimeouts()设置串口超时控制;再次,调用SetupComm()设置串口接收发送数据的缓冲区大小,串口的设置就基本完成,之后就可以启动读写线程了。一般来说,串口的读写由串口读写线程完成,这样可以避免读写阻塞时主程序死锁。对于全双工的串口读写,应该分别开启读线程和写线程;对于半双工和单工的,建议只需开启一个线程即可。在线程中,按照预定好的通信握手方式,正确检测串口状态,读取发送串口数据。在读线程中调用 CreateEvent函数创建一个事件 ,然后调用函数WaitCommEvent等待窗口事件 , 当检测到 EV RXCHAR事件时 ,调用 ReadFile函数将数据读入缓冲区内然后将缓冲区的数据进行处理显示。因为在写线程创建的时候被挂起 ,故要调用写线程函数须要先调用 ResumeThread 函数恢复线程 , 然后调用WriteFile函数向串口写入数据。当数据发送成功后 ,调用SuspendThread函数挂起写线程。创建读写线程 ,实现串行通信如图 2所示 :打开串口配置串口监视串口状态创建读线程创建写线程数据显示关闭串口接受事件发生数据接收保存通信是否结束终止线程是否结束否否是是否主线程是读线程 图2多线程实现多串口通信打开并配置完串口后 ,开启两个线程 ,一个读线程和一个写线程 ,主线程主要负责将所有串口接收到的数据进行处理显示以及各个子线程的调度和管理 ,读线程负责读取八个串口的数据 ,写线程负责向需要控制的串口中写入数据。在实际应用中向串口写入数据的操作并不频繁 ,所以写线程在刚开始创建时即被挂起 ,当需要向串口发送数据时才激活写线程;当写操作完成后 ,又被挂起 ,以减少系统开销,提高程序的执行效率。串口状态:(1)通信事件:用SetCommMask()函数设置想要得到的通信事件的掩码,再调用WaitCommEvent()函数检测通信事件的发生。可设置的通信事件标志(即SetCommMask()函数所设置的掩码)可以有EV_BREAK、EV_CTS、EV_DSR、 EV_ERR、EV_RING、EV_RLSD、EV_RXCHAR、EV_RXFLAG、EV_TXEMPTY。注意:1对于EV_RING标志的设置,WIN95是不会返回EV_RING事件的,因为WIN95不检测该事件。2设置EV_RXCHAR,可以检测到字符到达,但是在绑定此事件和ReadFile()函数一起读取串口接收数据时,可能会出现错误,造成少读字节数,具体原因查看MSDN帮助。可以采用循环读的办法,另外一个比较好的解决办法是调用ClearCommError()函数,确定在一次读操作中在缓冲区中等待被读的字节数。(2)错误处理和通信状态:在串口通信中,可能会产生很多的错误,使用ClearCommError()函数可以检测错误并且清除错误条件。(3)Modem状态:用SetcommMask()可以包含很多事件标志,但是这些事件标志只指示在串口线路上的电压变化情况。而调用 GetCommModemStatus()函数可以获得线路上真正的电压状态。 扩展函数:如果应用程序想用自己的流控,可以使用 EscapeCommFunction()函数设置DTR和RTS线路的电平。通信超时:在通信中,超时是个很重要的考虑因素,因为如果在数据接收过程中由于某种原因突然中断或停止,如果不采取超时控制机制,将会使得I/O线程被挂起或无限阻塞。串口通信中的超时设置分为两步,首先设置 COMMTIMEOUTS结构的五个变量,然后调用SetcommTimeouts()设置超时值。对于使用异步方式读写的操作,如果操作挂起后,异步成功完成了读写,WaitForSingleObject()或 WaitForMultipleObjects()函数将返回WAIT_OBJECT_0,GetOverlappedResult()返回TRUE。其实还可以用GetCommTimeouts()得到系统初始值。关闭串口:程序结束或需要释放串口资源时,应该正确关闭串口,关闭串口比较简单,使用API调用CloseHandle()关闭串口的句柄就可以了。调用方法为:CloseHandle(hComm);但是值得注意的是在关闭串口之前必须保证读写串口线程已经退出,否则会引起误操作,一般采用的办法是使用事件驱动机制,启动一事件,通知串口读写线程强制退出,在线程退出之前,通知主线程可以关闭串口。以下是用 Windows API函数编写的关键部分的代码:1)添加全局变量。HANDLE hCom8 ;DCB dcb8 ;BOOL m_CreateFlag;HANDLE m_hThreadRead;HANDLE m_hThreadWrite;2)添加按钮打开配置串口 ,并创建读写线程。在按钮单击响应函数中添加以下代码:int n Index;CString strCom8 = COM1 , COM2 , COM3 , COMCOM5 , COM6 , COM7 , COM8;if (!m_CreateFlag) for (n Index = 0; n I ndex m_bStation1Exit) AfxEndThread(TRUE); /接到 1 号站停止标志,停止线程 ReadMask=0; ReadNum=0; WaitCommEvent(lpSerialComm1-m_hCOM,&ReadMask,&os); /等待串口通信事件的发生 ,检测返回的 dwEvtMask,知道发生了什么串口事件 Event = WaitForMultipleObjects(2, lpSerialComm1-m_hEventArray, FALSE, INFINITE); /m_hEventArray0为读事件,m_hEventArray1为写事件 switch(Event) case 0: /read event if(ReadMask & EV_RXCHAR = EV_RXCHAR) Sleep(600); COMSTAT ComStat; DWORD dwLength; DWORD dwErrorFlags; EnterCriticalSection(&lpSerialComm1-m_csCommunicationSync); ClearCommError(lpSerialComm1-m_hCOM,&dwErrorFlags, &ComStat); LeaveCriticalSection(&lpSerialComm1-m_csCommunicationSync); dwLength = ComStat.cbInQue; /输入缓冲区有多少数据? if (dwLength 0) EnterCriticalSection(&lpSerialComm1-m_csCommunicationSync); BOOL fReadStat ; fReadStat = ReadFile(lpSerialComm1-m_hCOM, lpSerialComm1-m_COMInput, dwLength, &ReadNum, &os); /读数据 if (!fReadStat) /*查询错误信息*/ LeaveCriticalSection(&lpSerialComm1-m_csCommunicationSync); if(!lpSerialComm1-m_bStation1Exit) /调用数据处理函数 :SendMessage(m_hStation1Wnd,WM_COM_EVENT,1,NULL); break; case 1: /write eventlpSerialComm1-SendOutChar(lpSerialComm1-nOutChar,lpSerialComm1-m_numbyte); break; return TRUE; 32. 1 上位机的串口通信该过程采用 P J Naughter 提供的串口通信类实现, 并在其基础上针对 modem通信扩展了拨号、挂断等功能。通信协议参照标准远动规约,报文内容以字节为单位,结构如图 3所示。其中报文类型用来说明报文的类型和功能, 数据长度用来说明数据区的字节数,8 位校验码为累加和校验。用户界面对话框与命令响应:进行通信和数据抄录的用户界面,首先处理界面上用户选择的需要通信和控制的下位机,并用如下指令启动通信主线程: AfxBeginThread(ThreadMainCommunication,GetSafeHwnd(); 报文格式 图3报文格式 如果多个串口都采用查询方式进行输入 ,则可以在一个通信线程中完成通信任务。但是 ,如果每个串口都采用中断方式进行输入 ,或有的串口采查询方式而有的串口采用中断方式 ,则一个线程很难满足通信要求 ,应当采用多个通信线程来满足各串口的通信要求。因为如果采用同一个线程进行多个串口的通讯 ,则一旦某个采用中断方式输入的串口通信中断 ,则该通信线程将挂起 ,无法进行其它串口的通信。所以 ,如果某个串口采用中断方式进行输入 ,则该串口的通信应当采用一个专用线程。理论上 ,每个串口都有自己的数据发送、 接收缓冲区 ,数据的发送、 接收都是由硬件独立自动完成的。因此 ,每个串口都可以利用一个线程进行数据的发送和接收。但是 ,如果线程太多,必然增大线程管理 (包括线程同步 )和共享数据互斥访问的难度。所以 ,原则上讲 ,能在一个线程内顺序执行的任务最好都安排在一个线程中 ,只有需要进行优先级调度控制或并行执行的任务才采用多个线程。322 通信主线程(ThreadMainCommunication)通信主线程的主要功能是对各个通信子线程进行调度和管理。在通信主线程中首先根据可用的串口数定义一个信号量变量。如下所示,其中变量m_com_usable为可用的串口个数。 S_comnum=CreateSemaphore(NULL,m_com_usable,m_com_usable,NULL); 然后再用下面的语句为每个可用的串口创建一个对应的子通信线程,主要代码如下所示: for(ii=0;iim_readstatus=1)/如果需要进行通信 WaitForSingleObject(S_comnum,INFINITE);/等待一个空闲的可用串口 intcur_com=0; ComstLock.Lock();/进入互斥操作区 while(cur_com32&m_comstcur__status=0) /寻找空闲串口 cur_com+; if(cur_comm_tel_number; . E_startdialcur_com.SetEvent(); /通知对应的子通信线程开始连接 . ComstLock.Unlock(); /离开互斥操作区 323 子通信线程 每个子通信线程对应一个串口,每个子通信线程负责通过对应的串口进行数据的读写。主线程通过向子线程依次传递不同的电话号码从而使一个串口依次与不同的下位机进行连接。子通信线程中首先对串口进行初始化,然后就进入到循环等待本串口的开始连接信号到来的状态。如果开始连接的信号到来了,就可以进行连接,然后再进行数据的发送和接收。接收的 数据数据发送和接受处理完成后,就可以关闭连接,并释放一个信号量。代码的主要部分如下: CSerialPortm_port; intthreadid=*ii;/传进来的参数,用来区分读数线程(031) intm_comid=*ii+1; m_port.Open(m_comid);/打开串口,初始化 while(1)/无限循环,直到主线程通知结束 :WaitForSingleObject(E_startdialthreadid.m_hObject,INFINITE); if(m_comstthreadid.telephone.IsEmpty() /如果为空,则表示主线程希望子线程结束 ReleaseSemaphore(S_comnum,1,NULL); break; m_port.ClearReadBuffer(); m_port.ClearWriteBuffer(); /清空缓冲区 m_rlt=m_port.Dialing(m_telnum); /与指定的下位机建立通信连接 if(m_rlt.m_success) /如果拨号成功,则进行数据收发 ./在此加入数据发送和接收的处理程序。 M_port.HangUp();/关闭连接 Sleep(2000); m__status=1; /修改MODEM状态为可用 ReleaseSemaphore(S_comnum,1,NULL);/释放一个信号量 if(:WaitForSingleObject(E_endthreadid,0)=WAIT_OBJECT_0) break;/如果收到结束信号,就中止 33 下位机通信软件的实现 下位机主要由单片机构成,通过调制解调器和电话网与上位机连接。下位机轮流扫描各个传感器并将读数保存。当上位机需要进行连接时,响应上位机的连接请求,并根据上位机的要求将数据送出或对本地设备进行控制操作。数据包的格式与前面的格式相同。下载下位机进行数据采集所需参数,一旦查询到下位机回复了设定的信号则开启对应站号的线程。实现函数为: if(m_nStationNum=1)/ m_nStationNum为站点号 m_hStation1Thread = CreateThread(LPSECURITY_ATTRIBUTES)NULL, 0, (LPTHREAD_START_ROUTINE)WaitStation1Event, / WaitStation1Event 为1号站辅助线程的处理函数 (LPVOID)this, 0, &wStation1ThreadId); if (m_hStation1Thread=NULL) AfxMessageBox(创建线程失败!); return; 4 串行通信协议4. 1 单片机的参数设置要实现单片机与PC机之间的正常通信,必须正确设定它们两者之间的通信方式,保证双方都用相同的波特率、起始位、停止位、奇偶校验位,并且要建立通信的应答信号。单片机的结构和特殊寄存器,这是你编写软件的关键。至于串口通信需要用到那些特殊功能寄存器呢,它们是SCON,TCON,TMOD,SCON等,各代表什么含义呢? SBUF 数据缓冲寄存器这是一个可以直接寻址的串行口专用寄存器。有朋友这样问起过“为何在串行口收发中,都只是使
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 计算机主板主要功能判断考试题及答案
- 计算机应用服务器配置考试题及答案
- 计算机接口易用性测试考试题及答案
- 公务员政策理解加深面试题及答案
- 纺粘针刺非织造布制作工抗压考核试卷及答案
- 电影摄影设备装配调试工三级安全教育(车间级)考核试卷及答案
- 对位芳纶聚合工理念考核试卷及答案
- 河道修防工三级安全教育(班组级)考核试卷及答案
- 矿用燃油车司机理念考核试卷及答案
- 列车值班员成本控制考核试卷及答案
- 2025年12123学法减分考试题库及答案
- (高清版)DG∕TJ 08-15-2020 绿地设计标准 附条文说明
- (正式版)JBT 14449-2024 起重机械焊接工艺评定
- 网御星云网闸技术宝典
- 高一新生入学调查表
- 部编人教版历史七年级上册全册教学课件
- 《高等数学》全册教案教学设计
- 交通管理与控制3平面交叉口管理课件
- 医学自我口腔保健方法-预防口腔医学课程教学
- 一、问题解决型课题QC小组成果案例
- 亮化工程(夜景照明)施工组织方案(施工组织设计方案)
评论
0/150
提交评论