Labview与单片机机通讯程序 介绍利用LabVIEW实现PC(上位机)与下位机(调制解调器(Modem)、串行打印机、各种监控模块、PLC、摄像头云台、数控机床、单片机及智能设备等)单片机串口通信的程序设计方法
上传时间: 2013-05-30
上传用户:3到15
(GZDW)高频开关直流电源柜采用国内最新的有源三相功率因数校正技术,最大限度地提高了电力电源的功率因数,减少了对电网的污染,降低了电网损耗。交流输入三级分区防雷保护。智能直流绝缘监测系统及时监测母线对地绝缘故障,自动接地选线。高频开关直流电源柜具有高智能化、高可靠性、安全性好、易操作等优点。具备“遥测、遥控、遥信、遥调”功能,通过MODEM和通信网可实现对电源系统的远程监控,实现无人值守。
上传时间: 2014-12-24
上传用户:zhyiroy
内容提要: 本书深入浅出,全面系统地介绍了PC机及单片机数据通信技术.内容包括:数据通信的基本概念,MODEM及编/解码技术、串行通信总线标准及接口技术、8051单片机间串行通信技术、PC机间的通信技术和PC机与8051间的通信技术。 本书内容丰富、新颖、实用,便于自学。适合作为大、中专院校计算机通信及相关专业的教材或参考书,也可供广大工程技术人员和爱好者参考。 第1章 数据通信基础 1.1 串行数据通信 1.1.1 数据通信的概念 1.1.2 串行通信的传送方式 1.1.3 异步通信和同步通信 1.1.4 波特率和接收/发送时钟 1.2 串行通信的过程及通信协议 1.2.1 串一并转换与设备同步 1.2.2 串行通信协议 1.3 通信介质的选择 1.3.1 通信同轴电缆 1.3.2 双绞线 1.3.3 电话线 1.3.4 电力线 1.3.5 光缆 第2章 数据通信中... [显示全部]
上传时间: 2013-11-22
上传用户:bruce5996
单片机微控制器以其体积小、功耗低、使用方便等特点,广泛应用于各种工业、民用的嵌入式系统中;而 随着互联网(Internet)的兴起与普及,使微控制器通过互联网传送数据就变得非常有意义。目前使微控制 器上网的解决方案一般有两种:一种是采用微控制器驱动网卡,通过以太网连接Internet;另一种是使微 控制器直接驱动调制解调器(MODEM)通过电话线向ISP 拨号上网。这两种方案的缺点在于都要使用有线 的网络,无法应用于在边远地区或可移动系统中。
上传时间: 2013-11-18
上传用户:tangsiyun
本书深入浅出、全面系统地介绍了PC机及单片机数据通信技术。内容包括:数据通信的基本概念、MODEM及编解码技术、串行通信总线标准及接口技术、8051单片机间串行通信技术、PC机间的通信技术和PC机与8051间的通信技术。 本书内容丰富、新颖、实用、便于自学。适于作为大、中专院校计算机通信及相关专业的教材或参考书,也可供广大工程技术人员和爱好者参考。
上传时间: 2013-10-17
上传用户:wangdean1101
第一章 数据通信基础 第二章 通用串行通信标准和通用MODEM命令 第三章 嵌入式汇编语言开发通信程序 第四章 MSCOMM控件应用 第五章 线程开发... ......................
上传时间: 2013-10-14
上传用户:swaylong
交换机与多个现场单片机连通。现场单片机完成对各物理参量的数据采集,进行数字滤波、数据处理、比值告警、现场显示及对现场设备进行控制等,并定时或随机地向中央管理PC机报告过程情况。中央管理PC机定时或随机地汇集各测试点的信息,进行数据处理、显示打印、声光报警,并负责全局的综合控制、管理调度和策划指挥等任务。中央PC机可通过电话网依次自动拨号呼叫下属各现场单片机,单片机收到呼叫并建立联接后发送数据到中央管理PC机,各现场单片机之间则不能进行呼叫联络。由于单片机应用系统的安装数量和分布范围不同,与中心站的距离一般为几公里到几十公里,在单片机与PC机之间需要传送的数据量不是很大的情况下,采用调制解调器通过电话线路进行通信较为适用。下位单片机以其所在单位的电话号码作为其唯一的地址,并由单片机控制电话的使用,可以实现无人值守自动通信。每当电话响铃一定次数后仍无人接听,则单片机自动接入线路,通过不同标志来判断是主机呼叫还是人打电话。若是主机呼叫,表示中心站要求通信,单片机将保持与上位PC机连接,将各种测量数据发送出去并接收主机发来的命令;若是人打电话,则断开连接继续进行数据采集,并接通模拟响铃电路,提醒人们接听。
上传时间: 2014-12-27
上传用户:赵一霞a
随着通信技术的不断发展,计算机网络系统通信是当今技术发展的一个重要的方向,然而在网络系统中利用现有电话网作为通信方式则是最经济、最方便和最可靠的方法。当前电话通信网已经进入程控交换时代,技术比较先进,速度快,容量大,因此采用电话通信网建立数据通信系统确实具有其独特的优越性。利用单片机系统可用于采集灌区水位、水流量、电力抄表等方面,实现无人职守,方便管理。2.系统硬件设计:本系统采用了MODEM将前端单片机采集的数据通过电话网远程传输到中心站PC机,并实现一对多点通信(站点数、通信距离均不限),后台PC机通过拨号的方式对各站点进行数据接收并实时存储记录、查询、打印。单片机系统从传感器直接采集数字信号,通过RS-232接口送给本端的MODEM,MODEM将数字信号调制成音频模拟信号在电话线上传输,再经中心站MODEM调制成数字信号送往PC机。系统中MODEM采用F-E56CSD-V1型嵌入MODEM,用户使用贺氏标准AT命令呼叫和应答,实现与远程系统的通信。
上传时间: 2013-11-05
上传用户:alan-ee
概述 CH341是一个USB总线的转接芯片,通过USB 总线提供异步串口、打印口、并口以及常用的 2线和4线等同步串行接口。 在异步串口方式下,CH341提供串口发送使能、串口接收就绪等交互式的速率控制信号以及常用的MODEM联络信号,用于将普通的串口设备直接升级到 USB 总线。 在打印口方式下,CH341提供了兼容USB相关规范和 Windows操作系统的标准 USB打印口,用于将普通的并口打印机直接升级到USB总线。 在并口方式下,CH341提供了EPP方式或MEM方式及 BUS扩展方式的 8位并行接口,用于在不需要单片机/DSP/MCU 的环境下,直接输入输出数据。 除此之外,CH341A 芯片还支持一些常用的同步串行接口,例如 2 线接口(SCL 线、SDA 线)和 4线接口(CS线、CLK线、DIN线、DOUT线)等。
上传时间: 2014-12-27
上传用户:yanyangtian
有两种方式可以让设备和应用程序之间联系:1. 通过为设备创建的一个符号链;2. 通过输出到一个接口WDM驱动程序建议使用输出到一个接口而不推荐使用创建符号链的方法。这个接口保证PDO的安全,也保证安全地创建一个惟一的、独立于语言的访问设备的方法。一个应用程序使用Win32APIs来调用设备。在某个Win32 APIs和设备对象的分发函数之间存在一个映射关系。获得对设备对象访问的第一步就是打开一个设备对象的句柄。 用符号链打开一个设备的句柄为了打开一个设备,应用程序需要使用CreateFile。如果该设备有一个符号链出口,应用程序可以用下面这个例子的形式打开句柄:hDevice = CreateFile("\\\\.\\OMNIPORT3", GENERIC_READ | GENERIC_WRITE,FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL ,NULL);文件路径名的前缀“\\.\”告诉系统本调用希望打开一个设备。这个设备必须有一个符号链,以便应用程序能够打开它。有关细节查看有关Kdevice和CreateLink的内容。在上述调用中第一个参数中前缀后的部分就是这个符号链的名字。注意:CreatFile中的第一个参数不是Windows 98/2000中驱动程序(.sys文件)的路径。是到设备对象的符号链。如果使用DriverWizard产生驱动程序,它通常使用类KunitizedName来构成设备的符号链。这意味着符号链名有一个附加的数字,通常是0。例如:如果链接名称的主干是L“TestDevice”那么在CreateFile中的串就该是“\\\\.\\TestDevice0”。如果应用程序需要被覆盖的I/O,第六个参数(Flags)必须或上FILE_FLAG_OVERLAPPED。 使用一个输出接口打开句柄用这种方式打开一个句柄会稍微麻烦一些。DriverWorks库提供两个助手类来使获得对该接口的访问容易一些,这两个类是CDeviceInterface, 和 CdeviceInterfaceClass。CdeviceInterfaceClass类封装了一个设备信息集,该信息集包含了特殊类中的所有设备接口信息。应用程序能有用CdeviceInterfaceClass类的一个实例来获得一个或更多的CdeviceInterface类的实例。CdeviceInterface类是一个单一设备接口的抽象。它的成员函数DevicePath()返回一个路径名的指针,该指针可以在CreateFile中使用来打开设备。下面用一个小例子来显示这些类最基本的使用方法:extern GUID TestGuid;HANDLE OpenByInterface( GUID* pClassGuid, DWORD instance, PDWORD pError){ CDeviceInterfaceClass DevClass(pClassGuid, pError); if (*pError != ERROR_SUCCESS) return INVALID_HANDLE_VALUE; CDeviceInterface DevInterface(&DevClass, instance, pError); if (*pError != ERROR_SUCCESS) return INVALID_HANDLE_VALUE; cout << "The device path is " << DevInterface.DevicePath() << endl; HANDLE hDev; hDev = CreateFile( DevInterface.DevicePath(), GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL ); if (hDev == INVALID_HANDLE_VALUE) *pError = GetLastError(); return hDev;} 在设备中执行I/O操作一旦应用程序获得一个有效的设备句柄,它就能使用Win32 APIs来产生到设备对象的IRPs。下面的表显示了这种对应关系。Win32 API DRIVER_FUNCTION_xxxIRP_MJ_xxx KDevice subclass member function CreateFile CREATE Create ReadFile READ Read WriteFile WRITE Write DeviceIoControl DEVICE_CONTROL DeviceControl CloseHandle CLOSECLEANUP CloseCleanUp 需要解释一下设备类成员的Close和CleanUp:CreateFile使内核为设备创建一个新的文件对象。这使得多个句柄可以映射同一个文件对象。当这个文件对象的最后一个用户级句柄被撤销后,I/O管理器调用CleanUp。当没有任何用户级和核心级的对文件对象的访问的时候,I/O管理器调用Close。如果被打开的设备不支持指定的功能,则调用相应的Win32将引起错误(无效功能)。以前为Windows95编写的VxD的应用程序代码中可能会在打开设备的时候使用FILE_FLAG_DELETE_ON_CLOSE属性。在Windows NT/2000中,建议不要使用这个属性,因为它将导致没有特权的用户企图打开这个设备,这是不可能成功的。I/O管理器将ReadFile和WriteFile的buff参数转换成IRP域的方法依赖于设备对象的属性。当设备设置DO_DIRECT_IO标志,I/O管理器将buff锁住在存储器中,并且创建了一个存储在IRP中的MDL域。一个设备可以通过调用Kirp::Mdl来存取MDL。当设备设置DO_BUFFERED_IO标志,设备对象分别通过KIrp::BufferedReadDest或 KIrp::BufferedWriteSource为读或写操作获得buff地址。当设备不设置DO_BUFFERED_IO标志也不设置DO_DIRECT_IO,内核设置IRP 的UserBuffer域来对应ReadFile或WriteFile中的buff参数。然而,存储区并没有被锁住而且地址只对调用进程有效。驱动程序可以使用KIrp::UserBuffer来存取IRP域。对于DeviceIoControl调用,buffer参数的转换依赖于特殊的I/O控制代码,它不在设备对象的特性中。宏CTL_CODE(在winioctl.h中定义)用来构造控制代码。这个宏的其中一个参数指明缓冲方法是METHOD_BUFFERED, METHOD_IN_DIRECT, METHOD_OUT_DIRECT, 或METHOD_NEITHER。下面的表显示了这些方法和与之对应的能获得输入缓冲与输出缓冲的KIrp中的成员函数:Method Input Buffer Parameter Output Buffer Parameter METHOD_BUFFERED KIrp::IoctlBuffer KIrp::IoctlBuffer METHOD_IN_DIRECT KIrp::IoctlBuffer KIrp::Mdl METHOD_OUT_DIRECT KIrp::IoctlBuffer KIrp::Mdl METHOD_NEITHER KIrp::IoctlType3InputBuffer KIrp::UserBuffer 如果控制代码指明METHOD_BUFFERED,系统分配一个单一的缓冲来作为输入与输出。驱动程序必须在向输出缓冲放数据之前拷贝输入数据。驱动程序通过调用KIrp::IoctlBuffer获得缓冲地址。在完成时,I/O管理器从系统缓冲拷贝数据到提供给Ring 3级调用者使用的缓冲中。驱动程序必须在结束前存储拷贝到IRP的Information成员中的数据个数。如果控制代码不指明METHOD_IN_DIRECT或METHOD_OUT_DIRECT,则DeviceIoControl的参数呈现不同的含义。参数InputBuffer被拷贝到一个系统缓冲,这个缓冲驱动程序可以通过调用KIrp::IoctlBuffer。参数OutputBuffer被映射到KMemory对象,驱动程序对这个对象的访问通过调用KIrp::Mdl来实现。对于METHOD_OUT_DIRECT,调用者必须有对缓冲的写访问权限。注意,对METHOD_NEITHER,内核只提供虚拟地址;它不会做映射来配置缓冲。虚拟地址只对调用进程有效。这里是一个用METHOD_BUFFERED的例子:首先,使用宏CTL_CODE来定义一个IOCTL代码:#define IOCTL_MYDEV_GET_FIRMWARE_REV \CTL_CODE (FILE_DEVICE_UNKNOWN,0,METHOD_BUFFERED,FILE_ANY_ACCESS)现在使用一个DeviceIoControl调用:BOOLEAN b;CHAR FirmwareRev[60];ULONG FirmwareRevSize;b = DeviceIoControl(hDevice, IOCTL_MYDEV_GET_VERSION_STRING, NULL, // no input 注意,这里放的是包含有执行操作命令的字符串指针 0, FirmwareRev, //这里是output串指针,存放从驱动程序中返回的字符串。sizeof(FirmwareRev),& FirmwareRevSize, NULL // not overlapped I/O );如果输出缓冲足够大,设备拷贝串到里面并将拷贝的资结束设置到FirmwareRevSize中。在驱动程序中,代码看起来如下所示:const char* FIRMWARE_REV = "FW 16.33 v5";NTSTATUS MyDevice::DeviceControl( KIrp I ){ ULONG fwLength=0; switch ( I.IoctlCode() ) { case IOCTL_MYDEV_GET_FIRMWARE_REV: fwLength = strlen(FIRMWARE_REV)+1; if (I.IoctlOutputBufferSize() >= fwLength) { strcpy((PCHAR)I.IoctlBuffer(),FIRMWARE_REV); I.Information() = fwLength; return I.Complete(STATUS_SUCCESS); } else { } case . . . } }
上传时间: 2013-10-17
上传用户:gai928943