您的当前位置:首页正文

基于usb接口的数据采集系统

2022-04-04 来源:欧得旅游网
陕西理工学院毕业设计

基于USB接口的数据采集系统

[摘要] 基于对串口通讯原理的分析和应用,实现了单片机与计算机通过USB接口进行通信。设计主要是使

用单片机进行数据采集,然后通过USB接口把信息传输到计算机上,实现串行通信。在硬件设计方面,单片机使用STC89C51,USB接口芯片使用PDIUSBD12,他们通过硬件电路的设计实现连接;在软件设计方面,PC机使用VB语言编程实现界面设计,C++设计驱动程序。单片机方面使用Keil软件编程实现数据的采集。

[关键词] PC ;单片;USB接;串行通信

Data acquisition system based on USB interface

Abstract : Analysis and application of serial communication based on the principle of the realization of

single-chip, to communicate with the computer through the USB interface. Design is the use of single-chip microcomputer for data acquisition, and then transfers the information to the computer through the USB interface, serial communication. In the aspect of hardware design, the use of SCM STC89C51, USB interface chip PDIUSBD12, they realize the connection by hardware circuit design; in software design, PC machine using the VB programming language interface design, C++ driver design. SCM software programming using Keil to realize the data acquisition.

Key words : PC;MCU;The USB Interface;Serial Communication

陕西理工学院毕业设计

目录

1前言 -------------------------------------------------------------------------------------------------------- 1

1.1 设计研究的目的 --------------------------------------------------------------------------------------------------- 1 1.2 设计研究的主要内容 -------------------------------------------------------------------------------------------- 1

1.3 预期结果 ------------------------------------------------------------------------------------------------------------ 1

2 USB协议------------------------------------------------------------------------------------------------------------------- 1

2.1 USB系统 ------------------------------------------------------------------------------------------------------------ 1

2.1.1 USB系统简介 --------------------------------------------------------------------------------------------- 1 2.1.2 USB传输方式 --------------------------------------------------------------------------------------------- 1 2.2 USB接口的电器特性--------------------------------------------------------------------------------------------- 2 2.3 USB总线协议 ------------------------------------------------------------------------------------------------------ 2

2.3.1 总线拓扑结构 --------------------------------------------------------------------------------------------- 2 2.3.2 USB的物理层 --------------------------------------------------------------------------------------------- 3 2.3.3 USB主机概述 --------------------------------------------------------------------------------------------- 3 2.3.4 USB驱动 ---------------------------------------------------------------------------------------------------- 4

3 PC与单片机通过USB通信设计 -------------------------------------------------------------------------------- 4

3.1 设计方案 ------------------------------------------------------------------------------------------------------------ 4 3.2 硬件电路的设计 --------------------------------------------------------------------------------------------------- 4

3.2.1 温度采集电路的设计 ------------------------------------------------------------------------------------ 4 3.2.2 接口电路设计 --------------------------------------------------------------------------------------------- 5 3.3 软件程序设计 ------------------------------------------------------------------------------------------------------ 6

3.3.1 单片机程序的开发 --------------------------------------------------------------------------------------- 6 3.3.2 固件设备的设计 ------------------------------------------------------------------------------------------ 6 3.3.3 固件程序设计 --------------------------------------------------------------------------------------------- 6 3.4 固件的程序流程图 ----------------------------------------------------------------------------------------------- 7

3.4.1 主循环流程 ------------------------------------------------------------------------------------------------ 7 3.4.2 中断程序流程图 ------------------------------------------------------------------------------------------ 7 3.5 USB设备驱动程序设计 ---------------------------------------------------------------------------------------- 9

3.5.1 USB驱动程序的意义 ---------------------------------------------------------------------------------- 9 3.5.2 USB驱动程序的概述 ------------------------------------------------------------------------------------ 9

4 结束语 --------------------------------------------------------------------------------------------------------------------- 10 致谢 ---------------------------------------------------------------------------------------------------------------------------- 10

参考文献 ----------------------------------------------------------------------------------------------------------------------- 11 附录 ----------------------------------------------------------------------------------------------------------------------------- 12

陕西理工学院毕业设计

1 前言

1.1 设计研究的目的

随着计算机领域和单片机领域的飞速发展,越来越多地的人采用单片机来制作一些工业控制系统。例如对温度、压力和流量等参数进行控制和监测。相比于其他工具,单片机具有许多优点。由于PC机具有强大的监控和管理能力,如果利用PC机和单片连接进行设备的监控,这将大大方便了系统的监控,这也是常用的一种通信方案。随着USB接口技术的的成熟和使用的普及,和USB接口有着RS-232串口无法相比的优点,RS-232串口通信正在渐渐被USB 接口所代替。现在大多数笔记本电脑,出于节省传输速度和物理空间等原因,RS-232串口已不再被设置,而是采用USB接口,这就大大增强了基于USB串口与PC 机联络的单片机设备的使用范围。目前USB接口慢慢取代RS-232串口已成大势所趋,单片机同PC机通过USB通信在实际工作中的应用也将越来越广。本文介绍的单片机和PC机的USB通信方法,电路简单,可移植性强,故可广泛应用于工业和电子产品的开发中。因此研究如何实现PC机与单片机通过USB之间的通信具有非常重要的现实意义。

通信是指计算机与外界信息的交换。基本的通信方式包括并行通信和串行通信。串行通信是指一条信息按顺序传送信息的通信。它是按数据位传送的,依照位的顺序进行传送,可以用一根线进行传输,它的成本成本很低但是传送速度却快,其通信的距离可以从几米到长达几千米。

不同的独立系统利用线路互相交换数据这就是通信,它主要是把数据从一处传送到另一处,实现数据之间的交换。现代的工业控制常采用计算机作为上位机与下层设备连接来进行实时控制与监测。设备通过一个数据收集器把信息传回给PC机,同样PC机也通过数据收集器向设备发命令。串行通信因有结构简单、执行速度快、抗干扰能力强等优点,已被广泛应用在数据信息采集和控制等领域。

1.2 设计研究的主要内容

1) 数据采集系统的设计;

2) 单片机和PC机通过USB实现串行通信设计与实现。 设计主要包含以下两个方面

1) 硬件设计:单片机及外围电路设计,通信模块的设计;

2) 软件设计:单片机的采集程序和通信控制程序, PC机的驱动程序和应用程序。 1.3 预期结果

通过上位机软件和驱动程序的编写实现以下功能:

1)完成驱动程序的编写,实现上位机能发现USB设备,并使上位机能正确配置设备。同时在显示界面上显示出找到设备。

2)完成上位机软件的编写,并可以在设备没有连接时显示连接错误。

3)实现双向传输。在上位机软件中可以控制USB设备中的相应显示,同时可以接收到USB设备传回的消息,并在显示界面上显示。达到一个PC机与USB设备信息的交互,完成通信。

2 USB协议

2.1 USB系统

2.1.1 USB系统简介

USB系统包括三个部分:USB互连、USB设备、USB主机。

USB设备与主机之间进行连接和通信的操作称为USB互联,主要包括四个方面: 1)总线的拓扑结构,它是指USB设备与主机之间的各种连接;

2)内部层次关系,他是指USB分为许多层,执行它的任务被分在其中;

3)数据流模式,它是指数据通过USB接口从产生数据的地方到使用他的地方的流动方式; 4)USB的调度,它是指USB可以对PC机和设备之间的连接进行调度,以便他可以进行头公布数据传送。

USB设备是指可以和上位机通过过USB接口进行通信的设备。它包括网络集线器和功能器件。

第 1 页 共 20 页

陕西理工学院毕业设计

网络集线器提供了更多的连接点;功能器件维系厅提供更多的功能,例如:扬声器,数字游戏杆等。选用单片机作为系统的核心部件,实现控制与处理的功能。单片机具有资源丰富、速度快、编程容易等优点。利用单片机内部的随机存储器(RAM)和只读存储器(ROM)及其引脚资源,外接液晶显示(LCD),键盘输入等实现数据的处理传输和显示功能,基本上能实现设计指标。

USB设备与上位机的连接需要了解:USB协议的运用;对标准USB操作的反馈,如设置和复位;标准性能的描述性信息。只有这样才能更好地设计好电路。 2.1.2 USB传输方式

轮讯方式是USB总线的特点,PC机通过usb控制端口初始化所有数据的传输。总线执行每一条最多可传送三个数据包,按照数据传输前PC机和设备制定好的协议,每一次传输主机控制器先发送一个设备描述符,然后USB设备通过读取解码后的数据包取出自己所需要的信息。通过这些信息判断确定数据的传输方向,数据传输不是从主机到设备就是从设备到主机。传输一开始,通过读取标识符来确定数据的传输方向,发送端通过发送数据包(包含信息)或发送空指令。如果发送成功,接收端发送一个握手包以表明是传送成功。主机和设备之间通过USB接口进行数据传输,其连接可成为一个传输通道。他们通过通东进行数据传输,通道的类型与数据带宽、端口特性等内容有关。 2.2 USB接口的电器特性

USB接口有四种传输方式。分别为控制方式、同步方式、中断方式和大量。如果通过硬件来设计整个系统,那还要选择一个适用的传输方式,而如果只是设计驱动程序,我们只需要弄清楚其采用了那种工作方式。通常由PC机控制设备的传输方式。

控制传输方式可以进行双向的传输,由于传输的数据量通常比较小,所以主要用来进行数据的查询、配置和给USB设备发送命令。它通常可以传输8、16、32和64字节的数据,具体传送主要依据与设备的传输速度。在主计算机和USB外设之间的端点0之间的传输常用控制传输。同步传输方式是提供了确定的带宽和时间间隔的方式。通常要求有恒定的数据传输率的即时传输中要用到它,也可以用于对时间要求严格和有较强容错性的流数据传输中。例如,网络电话、网络视频等,最好是用同步传输方式。在同步数据传输中通常要求有确定的带宽和最大传输次数。同步传输看中的是即使数据的传输,相比而言完美的精度和数据的完整性就显得不是那么重要了。中断方式顾名思义,就是应用于设备的中断,主要用于定时检测设备看看是否有中断,然后响应中断进行数据的传输。它通常是为了查询频率,查询从1到255m。在少量的、分散的和不可预测数据进行传输时常常用到它。例如,键盘、鼠标和操纵杆。大量方式在数据大量传输和接受数据上应用较广,通产要求没有带宽和间隔时间的情况下,要求能够进行数据传输。例如,扫描仪和打印机。通常数据传输量大、传输速度慢、大量的数据被延时等时候用到它。 2.3 USB总线协议 2.3.1 总线拓扑结构

图2.1 USB总线拓扑结构

第 2 页 共 20 页

陕西理工学院毕业设计

如图是USB的物理连接图,它采用分层的菊花链结构,一个Host下面分许多层,通过集线器(hub)和设备的连接。每一层都可以连接USB设备,PC机做为主机和根Hub,用户可以可以直接和他相连接也可以和他的下端Hub连接。这种结构最多可以支持5个Hub层以及127个外设。这大大增强了USB接口的应用,为我们和PC机的连接提供了很大方便。 2.3.2 USB的物理层

图2.2 USB的电缆特性

如图所示,这是一个USB接口连接的物理图,它由四根线组成。其中,D+和D-是一对差模的信号线,用来进行数据的传输;VBus和GND提供了+5V的电源,它可以给一些设备(包括Hub)供电,但是要受到一些条件的限制。USB的物理接口具有电气特性和机械特性。就是因为这些特性,才有了USB接口的一些使用规则。

USB接口有多种,它包括USB1.0、USB1.1、USB2.0、USB3.0不同的版本传输速度不同。其中USB1.0、USB1.1只适合低速模式(1.5Mb)和全速模式(12Mb),而USB2.0、USB3.0除了具有这些速度以外还具有快速模式和超高速模式。这些模式通常可以应用于一个系统中。低速模式的使用,主要是为了降低要求不高的设备的成本,例如,鼠标、键盘等。

高速模式下USB线必须使用最长不超过5m的带有屏蔽的双绞线;然而在低速模式中通常可以不使用带屏蔽的双绞线,其使用的长度可以达到3m。由于电压的关系,为了达到设备与终端的匹配,以提供信号电压的稳定,通常在每一个终端都使用了负载,以确保电压信号的稳定。通过这种带负载的终端来检测设备的连接与否,而且它还可以区分这个设备时运行在高速情况下还是低端情况下。 2.3.3 USB主机概述

图2-4展示了USB通信模型之间基本的信息流与互连关系:

客户 功能部件 USB系统 USB设备 主机控制器 USB 总线接口 实际的信息流 逻辑的信息流 图2.3 通信模型层次关系图

第 3 页 共 20 页

陕西理工学院毕业设计

上图展示了主机和USB设备之间怎样进行信息交流,他把主机和USB设备都分为三层,每一层都用来实现不同的功能,横向层进行逻辑信息的交流,总想进行实际的信息交流。但是有一层是例外,那就是主控制器和USB总线之间的信息交流,它也是进行着实际的信息交流。主机和设备之间的数据交流都是基于USB接口然后通过一根导线连接的。主机上客户软件和设备功能部件之间的通信是基于设备所能提供的能力。

主机在系统中是独一无二的,他通过系统管理设备,它包括USB总线接口、USB系统和USB客户。USB总线接口是实现和设备的连接的端口,其作用是处理电气及协议层的一边设备与接口的互连。相比于USB设备总线接口,主机系统具有特殊性,它的总线接口上还必须具有主机控制器一边随设备的控制。USB系统是连接主机和设备的软件系统,他通过设置主机和设备的软件来完成主机对设备的控制。 2.3.4 USB驱动

USB驱动是提供操作系统组件,尤其是设备驱动程序来访问设备接口。操作系统组件可以通过访问USB驱动程序来对USB进行操作。在不同的操作系统,一个USB总线驱动可以访问一个或多个HCD,HCD也可以连接一个或多个主机控制器。有些操作系统可能会允许设立USB驱动初始化。但是,从顾客的角度,USB驱动和客户管理着所有连接的USB设备的通信。

1)USB驱动初始化

不同的操作系统有不同的USB驱动初始化。在USB系统初始化后,系统会创建USB管理信息,创建的内容包括缺省地址设备及它的标准通道。当一个设备与USB连接时,设备会响应特殊的缺省地址,主机通过对它的识别、响应,会付给他一个唯一的地址。在设备在刚连上总线时,为了保证USB系统能够识别新的设备并进行进行通信,主机给USB设备的缺省地址必须是有用的。然后设备开始初始化,在初始化期间,主机通过识别设备会给设备一个唯一的地址。

2)USB驱动通道使用

主机与USB设备通过USB接口连接的系统是一个通道。通道是主机与设备的逻辑结构,改变通道的使用者通道的基本属性不变。但是会对通道有一些影响,他们之间还是会存在一定性的差异。通道分为标准通道和其他通道。标准通道由USB驱动拥有和管理,然而其他的通道由USB驱动的客户拥有和管理。

虽然一些客户通过命令接口所传递的请求经常有标准通道来完成,但是客户还是不能直接访问标准通道的。

3 PC与单片机通过USB通信设计

3.1 设计方案

我设计的题目是基于USB接口的数据采集系统,基于此我把我的设计分为了两个方面和几个小的方面。大的方面分为硬件电路的设计和软件编程的设计。其中硬件方面又分为温度采集电路和基于PDIUSBD12的USB接口电路设计。软件编程方面用单片机实现温度的采集和PDIUSBD12地固件程序的设计用以实现USB接口的识别;再通过Visual Studio和Windows DDK来编程实现系统的驱动程序,以实现单片机和PC机更好的联机;进一步实现系统应用程序的设计,用来管理单片的各个流程。

设计的过程中可能会用到各种模拟软件和VB和C++等语言来实现程序的设计,实际完成后将实现,但单片机通过USB接口连接上PC机只后主机会显示USB设备已连接,通过打开USB应用程序来完成数据的传送和接输,界面上会显示单签的温度并绘制温度曲线。 3.2 硬件电路的设计

3.2.1 温度采集电路的设计

通过单片机设计一个最小系统,P0口实现与液晶屏的连接,P2.2口实现和DS18B20温度计的连接,连接图如下:

第 4 页 共 20 页

陕西理工学院毕业设计

图3.1 温度采集电路

P0口是一个没有上拉电阻的漏极开路三态I/O口所以使用它是需要加上拉电阻,而单总线的温 度传感器通常需要加一个5k的电阻。通过程序的写入,液晶显示屏上将实现显示温度和时间(年、月、日)。

3.2.2 接口电路设计

通过单片机的P0口和PDIUSBD12的数据端口连接,实现8位数据并口传输。WR/P3.6与WR_N连接,DR/P3.7与DR_N连接。PDIUSBD12的ALE和CS_N都接地。其中D+、D-、VCC、GND与USB接口连接。连接图如下:

图3.2 USB接口电路

3.3 软件程序设计

第 5 页 共 20 页

陕西理工学院毕业设计

3.3.1 单片机程序的开发

单片机的程序开发我们常用的是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,采用C语言编程。C语言是一种高级语言相比较而言它的使用简便、灵活,很适合单片机软件的开发。在Keil C51中有许多库函数,他方便了我们进行函数的调用,浙大打击感了我们的编程实践和编程效率。而且他还有强大的集成开发调试工具,他方便了我们警醒程序的检错和修改。最重要的是他声称目标代码的效率非常高,而且容易理解。在开发大型软件时更能体C语言的优势。 对于 Windows系统,我们常采用Keil C51的工具包中的UVision,进行开发,它可以完成编辑——>编译——>连接——>调试——>仿真等整个开发流程。开发人员通过C语言的编程环境编写源代码。然后编译生成目标文件(.OBJ)。目标文件再由LIB51创建生成库文件,或与库文件一起经L51连接定位生成绝对目标文件(.ABS)。ABS文件由OH51转换成标准的Hex文件,以供调试器dScope51或tScope51使用进行源代码级调试,也可由仿真器使用直接对目标板进行调试,也可以直接写入程序存贮器如EPROM中。

3.3.2 固件设备的设计

固件程序通俗的讲就是固化到内存中的程序,当运行该程序时,通过显示与操作才能实现该设备的功能。说白了就是程序。我们要实现某个功能,首先要对用到的硬件的各个单元进行初始化,然后给他配备新的设备,通过对A/D转换器的采样;定时器的定时、计数;

中断源的控制来实现我们需要的功能。这里我们的目的是控制芯片PDIUSBD12接受并处理USB驱动程序的请求及应用程序发出的控制指令来实现对温度数据的采集和显示。

USB接口与设备进行数据陈述的过程是:USB控制器(PDIUSBD12)先从USB总线检测看是否有主机启动的某一传输请求,如果没有则继续检测,如果有,则USB控制器(PDIUSBD12)通过中断方式通知89C51的内部系统,然后89C51将通过访问USB控制器的状态寄存器和数据寄存器获得与此次传输有关的各种参数,并根据具体的传输参数,对USB控制器的控制寄存器和数据寄存器进行相应的操作,以完成主机的传输请求。流程图如下:

主循环开始 初始化I/O端口、定时器和中断,重新连接到USB总线 循环 USB中断 是

图3.3 接口与单片机的传输流程图

否 中断服务程序 3.3.3 固件程序设计

固件程序的设计实际上是为了单片机和PC机可以交流而设计的,它主要是为了让PC机可以检测和识别单片机这个设备。在这里我们常采用C语言编程来实现。通常他的设计与实现与硬件电路

第 6 页 共 20 页

陕西理工学院毕业设计

密不可分,它是软硬件结合的结果。在设计过程中我们通常要写入连接USB协议、中断处理、寄存器的读取等指令。固件程序一般放入MCU中,但我们完成这些后,连接设备和主机,主机上会显示发现新的设备,然后建立连接。固件程序的设计是关系到我们能否连接上主机的关键,我们通过对它的设计可以学会USB通信的一般流程。

USB固件程序大体上可以非为三部分:首先要初始化单片机的各个单元和所有的外围电路(包括PDIUSBD12);其次设计实现可以进行温度的采集、传送和显示过程;最后也是最重要的,设计中断服务程序,当主机发送命令请求时,PDIUSBD12接收请求并向单片机发出中断命令,单片机要立即响应中断。

单片机与PDIUSBD12的通信主要是靠单片机给PDIUSBD12发命令和数据来实现的。PDIUSBD12的命令字分为三种:初始化命令字、数据流命令字和通用命令字。PDIUSBD12数据手册给出了各种命令的代码和地址。单片机先给PDIUSBD12的命令地址发命令,根据不同命令的要求再发送或读出不同的数据。因此,可以将每种命令做成函数,用函数实现各个命令,以后直接调用函数即可。 3.4 固件的程序流程图 3.4.1 主循环流程

启动USB设备

失败

检测USB设备 显示错误信息返回

成功

设置设备参数

报告数据丢失 请求上传数据包 是

否 下组数据准备就绪 获得有效数据包 是 存储显示数据 延时至下组数据包准备就绪

图3.4 主循环流程图

主流程图是设备写入估计按程序后,设备连接上主机后系统的响应模式。

对于微处理器,当它每一次上电后就需要他所练级的所有设备进行初始化。这些设备包括所有端口、存储区、定时器和中断服务程序。之后MCU将重新连接USB,包括将Soft_Connect寄存器设置为ON,这是为了确保在微处理器准备好服务PDIUSBD12之前PDIUSBD12不会进行操作,所以是很重要的。上图为主循环流程。 3.4.2 中断程序流程图

第 7 页 共 20 页

陕西理工学院毕业设计

中断服务程序 读取D12中断寄存器 是 控制端点发送数据处理 控制输入 否 是 控制端点接收数据 控制输出 否 是 端点1输入 端点1发送数据处理 否 是 端点1接输数据处理 端点1输出 否 是 端点2发送数据处理 端点2输入 否 是 端点2输出 端点2接收数据 否 是 DMA传输技术处理 DMA传输结束 否 是 设置挂起改变标志 挂起改变 否 是 设置中现复位标志 总线复位 中断服务结束 图3.5 中断服务程序流程图

中断服务程序是PDIUSBD12响应主机而产生的。他通过主机发送请求,指挥单片机产生中断,

第 8 页 共 20 页

陕西理工学院毕业设计

单片机通过读取从他传过来的信息,判断属于哪种响应,然后按相应的响应执行操作。 3.5 USB设备驱动程序设计 3.5.1 USB驱动程序的意义

USB外设之所以称为USB外设是因为它能通过USB接口和主机通信,如果不能通信,纳闷这个USB外设一点用也没有。在Windows完全支持的USB设备中,人机接口设备就是其中典型的一种,其中应用程序可以使用操作系统内设置的驱动与人机接口设备通信。但与人机接口设备通信不同的是,它不是打开一个端口,设定几个参数,然后就可以读写数据那么简单,在应用程序能与人机接口设备交换数据之前,它先要找到设备,获取有关它的相关信息。为做到这些,应用程序必须通过访问通信API函数,使位于上层的应用程序与位于下层的设备驱动程序进行数据交换。应用程序可以使用任何能访问API函数的程序语言,VB是一种能访问API函数的功能强大的语言,因此,我们应用VB环境下编写与USB设备通信的Windows程序。 3.5.2 USB驱动程序的概述

设备驱动程序是一个软件组件,属于软件与硬件之间为他们之间的沟通桥梁的软件。首先,必须有能编写设备驱动程序的软件环境:Visual Studio和Windows DDK。大多数软件开发人员习惯于利用Driver Studio编写设备驱动程序,因为它生成的代码是C风格,可以包装形式类似的应用,如由内核开发一个应用程序,所以这个工具是非常有用的。一些使用DDK来开发计划,这样可以避免快速更新的Windows操作系统和其他原因造成的。

在USB的概念,一个USB设备设置有一些相同的设备属性。通常这些设备归为一组,以提供基于主机的设备驱动程序的开发。帧的设备规格的装置,设备,属于作业类的定义。设备驱动程序的开发可以从分离设备制造商规范开始。硬件开发和硬件制造商可以专注于他们,而软件开发人员可以专注于开发自己的软件和驱动程序,但所有的USB设备必须符合USB协议,设备也必须符合本规范。那一个USB设备类驱动的通信过程规范。基于USB接口的数据采集系统进行了讨论,USB接口没有定义该类设备。由于本设备的应用方式上不同,所以它是许多常见的摘要非常困难,因此需要开发USB设备驱动程序。

设备驱动程序提供主要的操作系统和硬件接口,支持用户和应用需求信息流。由于对数据处理有要求的用户,驱动程序必须现在比数据的发送和接受更多的工作。为设备驱动程序的编写,我们使用Windows32驱动模式驱动程序模型,该模型主要有以下特点:

1)支持即插即用(PNP)和电源管理。也就是说,外部设备可以添加或删除系统中的操作,操作系统可以在任何硬件资源配置所需的设备,在系统用电设备的动态电源管理。电源管理设备的WDM驱动程序的支持,相关设备和系统的能耗和设备工作。

2)提供系统总线驱动程序。设备驱动程序通过总线驱动程序控制在USB总线上的设备,总线驱动程序提供了一个较高层次的接口,这个接口可以接收系统对USB设备的请求,驱动程序的功能设备对象不需要直接和USB控制器交互信息。

3)支持WMI(Windows Management Instrumentation),它是一种系统管理员报告管理信息的协议,这个协议能测量和管理消耗在本地或者是网络中客户机上的资源信息,WDM驱动程序必须支持WMI,一般这种请求是通过IRP_MJ_SYSTEM_CONTROL请求传递给PDO的。

4)支持类驱动程序/微驱动程序分层结构。用windows32驱动模式驱动程序使用的分层结构,以及其他相关的驱动程序,接收装置提供服务的驱动,也可以驱动发送IRP请求其它。WDM驱动程序采用分层处理的方法,用户不需要直接和硬件打交道,只需要访问硬件提供的底层驱动接口。

虚拟设备驱动程序是一个用户模式组件,基于DOS处理的、x86计算机上硬件的应用程序。VDD(虚拟设备驱动程序)的I / O使屏蔽控制端口操作,必须模拟硬件操作,对于那些在裸机上的硬件操作方便,直接应用。内核模式驱动程序包含许多子分支,这个分支,PNP驱动程序是用来管理Windows2000即插即用的协议的;一个WDM驱动程序添加到电源管理协议,一种在Windows98、Windows2000 PNP和兼容的驱动程序。在WDM下的驱动程序,有许多不同种类的司机,一类定义的驱动程序管理。和微驱动器提供供应商特定的驱动在一类设备;显示驱动器显示和打印的内核驱动程序,其主要特点是数据的可视化;在本地硬盘或网络上的文件系统,PC机程序实现标准文件系

第 9 页 共 20 页

陕西理工学院毕业设计

统驱动系统模型(其中包括目录文件名称的层次结构);传统设备驱动程序是一种可以直接而不需要额外的驱动程序内核驱动程序控制的硬件设备,包括那些在以前版本的Windows NT驱动程序的开发,仍然是在Windows2000下运行的。

4 结束语

通过这次毕业设计使我了解到单片机的应用面广,功能强大,使用方便,已经广泛地应用在各种机械设备和生产过程的各个方面。仍然处于不断的发展之中其功能不断增强,更为开放。编程软件技术更是工业设计领域不可缺少的一部分,单片机仍然处于不断的发展之中其功能不断争强,更为开放,它不但是单机自动化中应用最广泛的控制设备,在大型工业网络控制系统中也占有不可动摇的地位。使我对单片机的应用有了更好的了解和认识,在课程设计过程中不仅巩固了我们的基础理论知识,而且使我们各个方面的能力都有很大的提高。从一开始的无从下手,资料的整理,在到老师的帮助下,无疑是对我们查阅资料的能力、设计报告的能力、电脑绘图等能力的进一步提高。很好的锻炼了理论联系实际,与具体项目、课题相结合,开发、设计产品的能力的进一步在课程设计中使我学会了很多,也对自己的能力有了进一步的提高,为以后的学习和工作加强。在设计过程中,总是遇到这样或那样的问题。有时发现一个问题的时候,需要做大量的工作,花大量的时间才能解决。为以后的工作积累了经验,增强了信心。既让我们懂得了怎样把理论应用于实际,又让我们懂得了在实践中遇到的问题怎样用理论去解决,它更是自己综合运用所学知识,发现、提出、分析和解决实际问题,锻炼实践能力的重要环节。

其次,调试是项目开发的难点。理论上的东西,是别人总结出来的东西,因此非常抽象,跟实践相比往往省略了许多细节,而项目开发有时候就是根据抽象的理论,来重新实现细节。但很多理论问题的实现不是一次就能成功的,这就需要调试,定位问题的所在,解决问题。调试的时候经验非常重要,并且经验与能力的增长是相辅相成的。如果某个问题在做第一遍不清楚,那么做第二遍时就一定知道了,就可以直接得到正确的结论。这里还要掌握调试手段,像在程序中添加了一些串口打印语句,就会影响程序的正确运行等问题的解决,如果完全凭借资料,是很难解决的。

致谢

在设计的写作和制作过程中,我的指导教师刘东倾注了大量的心血,从选题到开题报告,从写作提纲,到一遍又一遍地指出每稿中的具体问题,严格把关,循循善诱。同时,感谢所有任课老师和所有同学在这四年来给自己的指导和帮助,是他们教会了我专业知识,教会了我如何学习。

回首既往,自己一生最宝贵的时光能于这样的校园之中,能在众多学富五车、才华横溢的老师们的熏陶下度过,实是荣幸之极。在这四年的时间里,我在学习上和思想上都受益非浅,这除了自身的努力外,与各位老师、同学和朋友的关心、支持和鼓励是分不开的。

第 10 页 共 20 页

陕西理工学院毕业设计

参考文献

[1]孙践知.PC硬件技术基础教程[M].北京:科技出版社,2003.23-34. [2]袁新艳.计算机外设与接口技术[M].高等教育出版社,2009.76-90.

[3]曹卫彬等.C/C++串口通信典型应用实例编程实践[M].北京:电子工业出版社,2009.61-78. [4]谢其中.微型计算机常用外部设备(第4版)[M].武汉:华中科技大学出版社,2005.24-60. [5]萧世文.USB2.0硬件设计[M].北京:清华大学出版社,2003.12-32. [7]陈再清.微机—单片机通信浅谈[J].电气时代期刊论文,2001.20-46.

[8]王绍伟,巫丹.89C51单片机USB接口的设计与实现[J].科技创新导报,2009.33-47.

[9](美)李(Lee, W.M). 田国发,吴兰陡译. C#与VB.NET网络通信开发实战[M].人民邮电出版社,2008.96-112. [10]李朝青.单片机原理与接口技术(简明修订版)[M].北京:北京航空航天大学出版,2005.124-146. [11]Axelson,Jan.USB Complete[M]. Independent Pub Group,2005.7-27.

[12]E A Nichols. J C Nichols. K R Mason. Serial Communication Programming Design Based on C Language[J]. JOURNAL OF TRANSDUCER TECHNOLOGY,2002 .15-61.

[13]Allen Denver.Serial Communications in Win32[M]. Independent Pub Group .December 11, 1995.6-40.

第 11 页 共 20 页

陕西理工学院毕业设计

附录:

#ifndef __1602_H__ #define __1602_H__

sbit en=P2^2; sbit rs=P2^0; sbit wr=P2^1; uchar table[][8]={

{0x00,0x0A,0x15,0x11,0x0A,0x04,0x00,0x00},//心 {0x08,0x0f,0x12,0x0f,0x0a,0x1f,0x02,0x00},//年 {0x0f,0x09,0x0f,0x09,0x0f,0x09,0x11,0x00},//月 {0x1f,0x11,0x11,0x1f,0x11,0x11,0x1f,0x00},//日 {0x00,0x1C,0x09,0x08,0x09,0x08,0x00,0x00},//T {0x18,0x18,0x07,0x08,0x08,0x08,0x07,0x00},//C {0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x06},//点 }; uint nian;

char yue,ri,shi,fen,miao,count; void delay(uint z) { uint i,j; for(i=z;i>0;i--) for(j=110;j>0;j--); }

void read_busy() { rs=0; P0=0; wr=1; en=1; delay(5); en=0;

while(P0&0x80); } {

read_busy(); }

第 12 页 共 20 页

wr=0; rs=0; P0=com; en=1; delay(5); en=0;

void write_com(uchar com)

void write_deta(uchar deta) {

read_busy(); wr=0; rs=1; P0=deta; en=1; delay(10); en=0;

}

void write(uchar z) {

uchar i,j; for(i=0;iwrite_com(0x40|j); for(j=0;j<8;j++) { write_deta(table[i][j]);

}

} }

void init_1602() { nian=2011; yue=12; ri=4; shi=0; fen=0; miao=0; write(7); en=0; TMOD=0x10; TH1=0x3c; TL1=0xb0; write_com(0x38); write_com(0x0c); write_com(0x06); write_com(0x01); EA=1; ET1=1;

陕西理工学院毕业设计

第 13 页 共 20 页

TR1=1;

}

void n(uchar add,uint deta) {

uchar qian,bai,shi,ge; qian=deta/1000; bai=deta%1000/100; shi=deta%100/10; ge=deta%10; write_com(0x80+add); write_deta(0x30+qian); write_deta(0x30+bai); write_deta(0x30+shi); write_deta(0x30+ge); }

void ds18b20_t(uchar add,uint t) { uchar point,shi,ge; shi=t/100; ge=t%100/10;

point=t%10; write_com(0x80+add); write_deta(0x30+shi); write_deta(0x30+ge); write_com(0x80+0x4e); write_deta(0x30+point); }

void yrsfm(uchar add,uchar deta)

{

uchar shi,ge; shi=deta/10; ge=deta%10; write_com(0x80+add); write_deta(0x30+shi); write_deta(0x30+ge); }

void lcd_1602() {

write_com(0x0c);

write_com(0x82); write_deta(0);

n(3,nian); write_com(0x87);

write_deta(1);

陕西理工学院毕业设计

第 14 页 共 20 页

yrsfm(8,yue); write_com(0x8a);

write_deta(2);

yrsfm(11,ri); write_com(0x80+13);

write_deta(3); yrsfm(64,shi);

write_com(0x80+0x42);

write_deta(':'); yrsfm(67,fen); write_com(0x80+0x45);

write_deta(':'); yrsfm(70,miao); write_com(0x80+0x48); write_deta(' ');

if(flag2==0) {

switch(T__count) { case 1: write_com(0x80+0x4e); write_com(0x0e);

break; case 2:

write_com(0x80+0x4c); write_com(0x0e);

break; case 3:

write_com(0x80+0x4b); write_com(0x0e);

break;

} }

}

void time_1() interrupt 3 { TH1=0x3c; TL1=0xb0; count++;

陕西理工学院毕业设计

第 15 页 共 20 页

陕西理工学院毕业设计

if(count==20) { count=0;

miao++; if(miao==60) {

miao=0; fen++; if(fen==60) { fen=0; shi++; if(shi==24) { shi=0;

if((yue==1)|(yue==3)|(yue==5)|(yue==7)|(yue==8)|(yue==10)|(yue==12)) {

if(ri==31) { }

ri=1; if(yue==12) }

{ yue=1; nian++; }

else ri++;

else if((yue==4)|(yue==6)|(yue==9)|(yue==11)) {

if(ri==30) { ri=1; } else ri++; }

if(yue==12) { yue=1; nian++; } else yue++;

if(((nian/4==0)&&(nian/100!=0))|(nian/400==0)&&(yue==2)) {

第 16 页 共 20 页

陕西理工学院毕业设计

}

}

void outportb(unsigned char port, unsigned char val)

} lcd_1602();

}

if(ri==29) {

ri=1; if(yue==12) { yue=0; } else yue++; }

nian++;

else ri++; }

else { }

if((ri==28)&&(yue==2)) {

ri=1; if(yue==12) { yue=1; } else yue++; }

nian++;

else ri++; }

#endif {

unsigned char xdata *ext_address; ext_address=0xff00 + port; *ext_address = val; }

unsigned char inportb(unsigned char port) {

第 17 页 共 20 页

陕西理工学院毕业设计

unsigned char c;

unsigned char xdata *ext_address; ext_address=0xff00 + port; c = *ext_address ; return c; }

/* 数据采集子程序 */ unsigned char ADC_DATA;

void adc_handler(void) {

ADC_DATA=IN_PORT;

D12_WriteEndpoint(3, 1, &ADC_DATA); IN_PORT=0x00;

if(bEPPflags.bits.ep1_rxdone) { } }

/* 主程序循环 */

if(D12SUSPD == 1) { //挂器处理

D12SUSPD = 0; P0 = 0xFF;

第 18 页 共 20 页

if (bEPPflags.bits.suspend) { //挂起改变中断处理

DISABLE;

bEPPflags.bits.suspend= 0; ENABLE;

if (bEPPflags.bits.bus_reset) { //设备复位中断处理 }

DISABLE;

bEPPflags.bits.bus_reset = 0; ENABLE; D12SUSPD = 1; }

if(bEPPflags.bits.configuration) adc_handler();

while(TRUE){

if(bEPPflags.bits.adc_isr){ //数据采集处理 DISABLE;

bEPPflags.bits.adc_isr = 0; ENABLE; DISABLE;

bEPPflags.bits.ep1_rxdone = 0; ENABLE;

ADC_IN_ID =0x7FF8+GenEpBuf[3];

陕西理工学院毕业设计

if (bEPPflags.bits.setup_packet){ //Setup包中断处理 }

DISABLE; ENABLE; control_handler(); D12SUSPD = 1; }

}

P1 = 0xFF; P2 = 0xFF; P3 = 0xFF; D12SUSPD = 1; PCON |= 0x02; while (1);

bEPPflags.bits.setup_packet = 0;

} // End Main Loop

void D12_SetAddressEnable(unsigned char bAddress, unsigned char bEnable); //设置地址使能 void D12_SetEndpointEnable(unsigned char bEnable); //设置端点使能 void D12_SetMode(unsigned char bConfig, unsigned char bClkDiv); //设置模式 unsigned short D12_ReadInterruptRegister(void); //读中断寄存器 unsigned char D12_SelectEndpoint(unsigned char bEndp); //选择端点

unsigned char D12_ReadLastTransactionStatus(unsigned char bEndp); //读最后处理状态 unsigned char D12_ReadEndpointStatus(unsigned char bEndp); //读端点状态

void D12_SetEndpointStatus(unsigned char bEndp, unsigned char bStalled); //设置端点状态 void D12_SendResume(void); //发送恢复

unsigned short D12_ReadCurrentFrameNumber(void); //读取当前帧号 unsigned short D12_ReadChipID(void); //读D12芯片ID

unsigned char D12_ReadEndpoint(unsigned char endp, unsigned char len, unsigned char * buf);//读取端点数据 unsigned char D12_WriteEndpoint(unsigned char endp, unsigned char len, unsigned char * buf);//写端点数据 void D12_AcknowledgeEndpoint(unsigned char endp);//设置端点应答 void D12_AcknowledgeEndpoint(unsigned char endp);//设置端点应答

3.4.3 中断服务程序ISR.C 中断服务处理的部分代码如下: //USB中断处理 usb_isr() interrupt 0 { }

void fn_usb_isr() {

unsigned int i_st;

第 19 页 共 20 页

DISABLE; fn_usb_isr(); ENABLE;

陕西理工学院毕业设计

}

//A/D转换中断处理 adc_isr() interrupt 1 {

DISABLE;

bEPPflags.bits.adc_isr = 1; ENABLE; }

第 20 页 共 20 页

bEPPflags.bits.in_isr = 0; }

if(i_st & D12_INT_EOT)

dma_eot();

bEPPflags.bits.suspend = 1; ep0_txdone(); ep0_rxdone(); ep1_txdone(); ep1_rxdone();

if(i_st & D12_INT_SUSPENDCHANGE) if(i_st & D12_INT_ENDP0IN) if(i_st & D12_INT_ENDP0OUT) if(i_st & D12_INT_ENDP1IN) if(i_st & D12_INT_ENDP1OUT) bEPPflags.bits.in_isr = 1;

i_st = D12_ReadInterruptRegister(); if(i_st != 0) {

if(i_st & D12_INT_BUSRESET) { }

bus_reset();

bEPPflags.bits.bus_reset = 1;

ep1_rxdone();

if(i_st & D12_INT_ENDP2IN)

main_txdone(); main_rxdone();

if(i_st & D12_INT_ENDP2OUT)

因篇幅问题不能全部显示,请点此查看更多更全内容