2012TI杯陕西赛题H题,2012TI杯陕西赛题B题--频率补偿电路.
上传时间: 2013-10-07
上传用户:ysystc670
附件附带破解补丁 浩辰CAD 2012专业版破解方法: 按正常安装浩辰CAD 2012专业版,点击安装KeyGen.exe。 浩辰CAD2012,以增强软件实用性、易用性为主要目标,新增了大量实用功能,改进了着色、消隐的正确性,提升了大幅面光栅图像处理的性能,同时改进了LISP\VBA二次开发接口的正确性和兼容性。 浩辰CAD 2012根据国内外用户的需求,增加了大量实用功能,例如动态块、DWF文件插入、隔离隐藏对象、转换EXCEL表格、块属性管理器、放样、超级填充等。 浩辰cad2012新增功能: 1、动态块(bedit) 动态块具有灵活性和智能性。 用户在操作时可以轻松地更改图形中的动态块参照。 可以通过自定义夹点或自定义特性来操作动态块参照中的几何图形。 a)通过设置图块中元素的可见性,一个图块中可以包含一种图形的多种形态,如下图的汽车模块就包含跑车、轿车和卡车的各向视图,只需在可见性列表中选择一个选项,就可以显示相应的图形。 还可对图块中的图形设置参数和动作,可对图块的整体或部分图形进行移动、旋转、翻转、缩放、阵列等;并可建立查询列表,对图块进行参数化控制。通过图块的动作设置,一个图块可以派生出数个图块,如下图所示: 2、DWF参考底图(dwfattach) 可以将dwf文件插入到当前图中作为参考底图,并可以捕捉到底图的端点、中点,如下图所示: 3、对象隔离、对象隐藏、取消对象隔离 可将选择的对象暂时隐藏,也可将选择对象以外的其他所有对象隐藏。当图中对象较多,利用此命令可以简化图纸,方便后续操作,操作起来比图层隔离更加简便、直观。 4、冻结其它图层和锁定其它图层 浩辰CAD 之前版本提供了图层隔离的功能,冻结其他图层和锁定其它图层与图层隔离功能类似,可以通过选择需要显示或可编辑对象,将其他图层进行冻结和锁定。 5、CAD表格转EXCEL表格 可以直接选择CAD中由直线、多段线和单行文字、多行文字组成的表格输出为EXCEL表格。 6、文字递增 可以对序号、编号、数值进行递增复制,间距、数量和增量均可随心所欲地控制。 7、多段线布尔运算 可直接对封闭的多段线进行差并交计算,无需转换面域,有时比修剪更简便。 8、拼写检查(spell) 此功能实现对用户输入的单词或文章进行单词校验,提示匹配的单词列表,方便用户进行正确的单词填写工作。可以实现不同语言的单词校验工作,包括英文,德文,等8种语言。 可以对全部实体(包括布局,模型中的所有实体)进行校验。 可以分别对布局或模型中的实体进行校验。 可以单独对一个实体或一个选择集进行校验。 方便用户自定义词典。 兼容的自定义词典。 支持文字,块内文字,块属性,属性,标注的校验。 9、放样(Loft) 通过对包含两条或者两条以上的横截面曲线的一组曲线进行放样(绘制实体或曲面)来创建三维实体或曲面。 10、块属性管理器(battman) 创建带属性的块后,执行 battman 对块中属性定义进行查询和修改,如果将修改应用到所有块参照,则对应块的块参照中属性实体也会做对应修改。 11、超级填充(superhatch) 超级填充命令有点像hatch命令,不同的是,可以使用该命令将光栅图像、块、外部参照和擦除这些实体作为填充实体对闭合区域进行填充。 12、线上写字 可以在选择线上书写文字,线会被自动打断,文字会放到线中间。 ◆ 重要功能改进 1、超链接 浩辰CAD 2012版的超链接不仅修改了以前存在的一些错误,而且提供了更为丰富的功能。 a)支持web链接的浏览和连接的设置。 b)支持打开操作系统可打开的所有文件。 c)支持dwg图纸的视图定位。 d)支持超链接的复制粘贴。 e)可以通过鼠标光标状态来判断是否存在链接,方便用户判断是否存在链接。 f)可以通过ctrl+鼠标点击打开设置的文件,方便用户的操作。 g)可以通过右键打开块内实体的链接。 2、光栅图像 浩辰CAD 2012版不仅增加了图像格式的支持,同时提升了大分辨率光栅图像的插入、显示和打印的效果和速度。 a) 增加了对多种图像格式的支持,诸如:CALS-1(*.cal,*.mil,*.rst,*.cg4)、RLC、GEOSPORT(.bil)、PICT(.pct/.pict)、IG4、Autodesk Animator(.fil/.flc)。 b) 内存使用问题,可以插入多张图片,内存不会增加。 c) 光栅图像打印问题(不清晰)。 d) 插入大图像时,预览速度大幅提升。 3、二次开发改进 浩辰CAD 2012版针对二次开发商和用户提出的一些LISP及VBA与AutoCAD存在的兼容性问题进行了系统梳理,兼容性有明显提升,此外还针对国外二次开发商的需求开发了Lisp调试器。 a) Lisp改进 处理了线程问题、命令范围值问题、VLX解析问题,对Lisp程序执行速度进行了优化。 b) VBA改进 处理了VBA的文档管理、接口不全、接口错误、类派生关系错误问题。 c) Lisp调试器 用户在使用浩辰CAD时,由于LISP与AutoCAD不完全兼容,用户需要一个工具进行调试,以协助用户解决及分析报告LISP问题。此系统以完成调试功能为主,不处理词法分析前的映射。适用于中级以上开发用户。
上传时间: 2013-11-10
上传用户:giraffe
PSHLY-B回路电阻测试仪介绍
上传时间: 2013-11-05
上传用户:木子叶1
针对目前使用的RS232接口数字化B超键盘存在PC主机启动时不能设置BIOS,提出一种PS2键盘的设计方法。基于W78E052D单片机,采用8通道串行A/D转换器设计了8个TGC电位器信息采集电路,电位器位置信息以键盘扫描码序列形式发送,正交编码器信号通过XC9536XL转换为单片机可接收的中断信号,软件接收到中断信息后等效处理成按键。结果表明,在满足开机可设置BIOS同时,又可实现超声特有功能,不需要专门设计驱动程序,接口简单,成本低。 Abstract: Aiming at the problem of the digital ultrasonic diagnostic imaging system keyboard with RS232 interface currently used couldn?蒺t set the BIOS when the PC boot, this paper proposed a design method of PS2 keyboards. Based on W78E052D microcontroller,designed eight TGC potentiometers information acquisition circuit with 8-channel serial A/D converter, potentiometer position information sent out with keyboard scan code sequentially.The control circuit based on XC9536 CPLD is used for converting the mechanical actions of the encoders into the signals that can be identified by the MCU, software received interrupt information and equivalently treatmented as key. The results show that the BIOS can be set to meet the boot, ultrasound specific functionality can be achieved at the same time, it does not require specially designed driver,the interface is simple and low cost.
上传时间: 2013-10-10
上传用户:asdfasdfd
I/O 型单片机使用手册 目录 间接寻址寄存器 – IAR, IAR0, IAR1 .............................................35间接寻址指针 – MP, MP0, MP1 ......................................................35存储区指针 – BP .........................................................................36累加器 – ACC...................................................................................37程序计数器低字节寄存器 – PCL....................................................37表格寄存器 – TBLP,TBHP,TBLH....................................................37看门狗定时寄存器 – WDTS............................................................38状态寄存器 – STATUS.....................................................................38中断控制寄存器 – INTC,INTC0,INTC1 .........................................39定时/计数寄存器...............................................................................39输入/输出端口和控制寄存器...........................................................40UART 寄存器 .USR,UCR1,UCR2,TXR/RXR,BRG.......................40输入/输出端口..........................................................................................41上拉电阻............................................................................................41PA 口的唤醒......................................................................................41输入/输出端口控制寄存器...............................................................41引脚共享功能....................................................................................42编程注意事项....................................................................................45定时/计数器..............................................................................................46配置定时/计数器输入时钟源...........................................................47定时/计数寄存器 – TMR, TMR0,TMR0L/TMR0H,TMR1L/TMR1H,TMR2.....................................................................49定时/计数控制寄存器 – TMRC,TMR0C,TMR1C,TMR2C............50定时器模式........................................................................................53事件计数器模式................................................................................53脉冲宽度测量模式............................................................................54可编程分频器(PFD)和蜂鸣器的应用..............................................55预分频器(Prescaler)...........................................................................56输入/输出接口...................................................................................56编程注意事项....................................................................................57定时/计数器应用范例.......................................................................57中断............................................................................................................59中断寄存器........................................................................................59中断优先权........................................................................................62外部中断............................................................................................63定时/计数器中断...............................................................................64UART 中断........................................................................................64编程注意事项....................................................................................65复位和初始化............................................................................................66复位....................................................................................................66目录iii异步串行口——UART............................................................................74UART 特性..........................................................................................74UART 外部引脚..................................................................................74数据发送.............................................................................................75UART 状态控制寄存器......................................................................75波特率发生器.....................................................................................79UART 设置与控制..............................................................................81UART 发送器......................................................................................83UART 接收器......................................................................................84接收错误处理.....................................................................................85接收中断图解.....................................................................................86地址检测模式.....................................................................................86暂停模式下的UART 功能.................................................................87UART 应用范例.................................................................................87振荡器........................................................................................................89系统时钟配置....................................................................................89系统晶体/陶瓷振荡器.......................................................................89系统电阻电容振荡器........................................................................90内部系统电阻电容振荡器................................................................90RTC 振荡器........................................................................................91看门狗定时振荡器............................................................................91暂停和唤醒................................................................................................92暂停.....................................................................................................92进入暂停.............................................................................................92静态电流.............................................................................................92唤醒....................................................................................................92看门狗定时器............................................................................................94掩膜选项....................................................................................................96应用电路....................................................................................................97第二部份 程序语言.....................................................................99第二章 指令集介绍.................................................................................101指令集......................................................................................................101指令周期..........................................................................................101数据的传送......................................................................................101算术运算..........................................................................................102逻辑和移位运算..............................................................................102分支和控制的转换..........................................................................102位运算..............................................................................................102查表运算..........................................................................................103其它运算..........................................................................................103指令设定一览表......................................................................................104惯例..................................................................................................104I/O 型单片机使用手册iv第三章 指令定义.....................................................................................107第四章 汇编语言和编译器.....................................................................121常用符号..................................................................................................121语句语法..................................................................................................122名称..................................................................................................122操作项..............................................................................................122操作数项..........................................................................................122注解..................................................................................................122编译伪指令..............................................................................................123条件编译伪指令..............................................................................123文件控制伪指令..............................................................................124程序伪指令......................................................................................126数据定义伪指令..............................................................................130宏指令..............................................................................................132汇编语言指令..........................................................................................136名称..................................................................................................136助记符..............................................................................................136操作数、运算子和表达式..............................................................136其它..........................................................................................................139前置引用..........................................................................................139局部标号..........................................................................................139汇编语言保留字..............................................................................140编译器选项..............................................................................................141编译列表文件格式..................................................................................141源程序列表......................................................................................141编译总结..........................................................................................142其它..................................................................................................142第三部份 开发工具................................................................... 145第五章 单片机开发工具.........................................................................147HT-IDE 集成开发环境............................................................................147盛群单片机仿真器(HT-ICE) ..................................................................149HT-ICE 接口卡.................................................................................149OTP 烧写器.....................................................................................149OTP 适配卡.....................................................................................149系统配置..................................................................................................150HT-ICE 接口卡设置........................................................................151安装..........................................................................................................153系统要求..........................................................................................153硬件安装..........................................................................................153软件安装..........................................................................................154目录v第六章 快速开始.....................................................................................159步骤一:建立一个新项目..............................................................159步骤二:将源程序文件加到项目中..............................................159步骤三:编译项目..........................................................................159步骤四:烧写OTP 单片机.............................................................160步骤五:传送程序与掩膜选项单至Holtek ..................................160附录............................................................................................... 161附录A 特性曲线图...................................................................................163附录B 封装信息.......................................................................................173
上传时间: 2013-10-18
上传用户:blacklee
at91rm9200启动过程教程 系统上电,检测BMS,选择系统的启动方式,如果BMS为高电平,则系统从片内ROM启动。AT91RM9200的ROM上电后被映射到了0x0和0x100000处,在这两个地址处都可以访问到ROM。由于9200的ROM中固化了一个BOOTLOAER程序。所以PC从0X0处开始执行这个BOOTLOAER(准确的说应该是一级BOOTLOADER)。这个BOOTLOER依次完成以下步骤: 1、PLL SETUP,设置PLLB产生48M时钟频率提供给USB DEVICE。同时DEBUG USART也被初始化为48M的时钟频率; 2、相应模式下的堆栈设置; 3、检测主时钟源(Main oscillator); 4、中断控制器(AIC)的设置; 5、C 变量的初始化; 6、跳到主函数。 完成以上步骤后,我们可以认为BOOT过程结束,接下来的就是LOADER的过程,或者也可以认为是装载二级BOOTLOER。AT91RM9200按照DATAFLASH、EEPROM、连接在外部总线上的8位并行FLASH的顺序依次来找合法的BOOT程序。所谓合法的指的是在这些存储设备的开始地址处连续的存放的32个字节,也就是8条指令必须是跳转指令或者装载PC的指令,其实这样规定就是把这8条指令当作是异常向量表来处理。必须注意的是第6条指令要包含将要装载的映像的大小。关于如何计算和写这条指令可以参考用户手册。一旦合法的映像找到之后,则BOOT程序会把找到的映像搬到SRAM中去,所以映像的大小是非常有限的,不能超过16K-3K的大小。当BOOT程序完成了把合法的映像搬到SRAM的任务以后,接下来就进行存储器的REMAP,经过REMAP之后,SRAM从映设前的0X200000地址处被映设到了0X0地址并且程序从0X0处开始执行。而ROM这时只能在0X100000这个地址处看到了。至此9200就算完成了一种形式的启动过程。如果BOOT程序在以上所列的几种存储设备中找到合法的映像,则自动初始化DEBUG USART口和USB DEVICE口以准备从外部载入映像。对DEBUG口的初始化包括设置参数115200 8 N 1以及运行XMODEM协议。对USB DEVICE进行初始化以及运行DFU协议。现在用户可以从外部(假定为PC平台)载入你的映像了。在PC平台下,以WIN2000为例,你可以用超级终端来完成这个功能,但是还是要注意你的映像的大小不能超过13K。一旦正确从外部装载了映像,接下来的过程就是和前面一样重映设然后执行映像了。我们上面讲了BMS为高电平,AT91RM9200选择从片内的ROM启动的一个过程。如果BMS为低电平,则AT91RM9200会从片外的FLASH启动,这时片外的FLASH的起始地址就是0X0了,接下来的过程和片内启动的过程是一样的,只不过这时就需要自己写启动代码了,至于怎么写,大致的内容和ROM的BOOT差不多,不同的硬件设计可能有不一样的地方,但基本的都是一样的。由于片外FLASH可以设计的大,所以这里编写的BOOTLOADER可以一步到位,也就是说不用像片内启动可能需要BOOT好几级了,目前AT91RM9200上使用较多的bootloer是u-boot,这是一个开放源代码的软件,用户可以自由下载并根据自己的应用配置。总的说来,笔者以为AT91RM9200的启动过程比较简单,ATMEL的服务也不错,不但提供了片内启动的功能,还提供了UBOOT可供下载。笔者写了一个BOOTLODER从片外的FLASHA启动,效果还可以。 uboot结构与使用uboot是一个庞大的公开源码的软件。他支持一些系列的arm体系,包含常见的外设的驱动,是一个功能强大的板极支持包。其代码可以 http://sourceforge.net/projects/u-boot下载 在9200上,为了启动uboot,还有两个boot软件包,分别是loader和boot。分别完成从sram和flash中的一级boot。其源码可以从atmel的官方网站下载。 我们知道,当9200系统上电后,如果bms为高电平,则系统从片内rom启动,这时rom中固化的boot程序初始化了debug口并向其发送'c',这时我们打开超级终端会看到ccccc...。这说明系统已经启动,同时xmodem协议已经启动,用户可以通过超级终端下载用户的bootloader。作为第一步,我们下载loader.bin.loader.bin将被下载到片内的sram中。这个loder完成的功能主要是初始化时钟,sdram和xmodem协议,为下载和启动uboot做准备。当下载了loader.bin后,超级终端会继续打印:ccccc....。这时我们就可以下在uboot了。uboot将被下载到sdram中的一个地址后并把pc指针调到此处开始执行uboot。接着我们就可以在终端上看到uboot的shell启动了,提示符uboot>,用户可以uboot>help 看到命令列表和大概的功能。uboot的命令包含了对内存、flash、网络、系统启动等一些命令。 如果系统上电时bms为低电平,则系统从片外的flash启动。为了从片外的flash启动uboot,我们必须把boot.bin放到0x0地址出,使得从flash启动后首先执行boot.bin,而要少些boot.bin,就要先完成上面我们讲的那些步骤,首先开始从片内rom启动uboot。然后再利用uboot的功能完成把boot.bin和uboot.gz烧写到flash中的目的,假如我们已经启动了uboot,可以这样操作: uboot>protect off all uboot>erase all uboot>loadb 20000000 uboot>cp.b 20000000 10000000 5fff uboot>loadb 21000000 uboot>cp.b 210000000 10010000 ffff 然后系统复位,就可以看到系统先启动boot,然后解压缩uboot.gz,然后启动uboot。注意,这里uboot必须压缩成.gz文件,否则会出错。 怎么编译这三个源码包呢,首先要建立一个arm的交叉编译环境,关于如何建立,此处不予说明。建立好了以后,分别解压源码包,然后修改Makefile中的编译器项目,正确填写你的编译器的所在路径。 对loader和boot,直接make。对uboot,第一步:make_at91rm9200dk,第二步:make。这样就会在当前目录下分别生成*.bin文件,对于uboot.bin,我们还要压缩成.gz文件。 也许有的人对loader和boot搞不清楚为什么要两个,有什么区别吗?首先有区别,boot主要完成从flash中启动uboot的功能,他要对uboot的压缩文件进行解压,除此之外,他和loader并无大的区别,你可以把boot理解为在loader的基础上加入了解压缩.gz的功能而已。所以这两个并无多大的本质不同,只是他们的使命不同而已。 特别说名的是这三个软件包都是开放源码的,所以用户可以根据自己的系统的情况修改和配置以及裁减,打造属于自己系统的bootloder。
上传时间: 2013-10-27
上传用户:wsf950131
单片机语言C51应用实战集锦使用C语言开发速度快,代码可重复使用,程序结构清晰、易懂、易维护,易开发一些比较大型的项目。目前,许多编译器都已经支持了C51,而且是Windows视窗界面。Kelic51是目前单片机开发最为流行的软件。本书收集并整理了许多实用的采用C51单片机开发的程序,这些程序既可以给读者以开拓思路,参考的用途又是实际的开发程序,可以直接作为程序应用在相同的开发系统上。通过本书的学习,读者可以进一步了解和掌握C51编程的思路和方法。单片机语言C51应用实战集锦目录:程序一 实时时钟芯片DS1302的C51程序例子程序二 C430与CSI的一点区别程序三 一个菜单的例子程序四 DS1820单芯片温度测量程序五 keilc 6.20c版直接嵌入汇编的方法程序六 用计算机并口模拟SPI通信的C源程序程序七 CRC 16-SIANDARD的快速算法程序八 在PC上用并行口模拟I(平方)C总线的C源代码程序九 一种在C51中写二进制的方法程序十 CRC算法原理及C语言实现程序十一 软件陷阶程序十二 一个简单的VB串口发送程序程序十三 12864汉字液晶显示驱动程序程序十四 12232点阵液晶基本驱动程序程序十五 串口中断服务函数集程序十六 93C46读写程序程序十七 20045读写程序程序十八 一组小程序集锦程序十九 AVR asm源程序程序二十 AVR单片机一个简单的通信程序程序二十一 TG19264A接口程序程序二十二 TG19264A接口程序(AVR模拟方式)程序二十三 常用的几种码制转换BCD,HEX,BIN程序二十四 16x2字符液晶屏驱动演示程序一程序二十五 16x2字符液晶屏驱动演示程序二程序二十六 PS7219代码程序二十七 2051的AD代码程序二十八 ARV19264型液晶显示字库程序二十九 液晶CKW19264A型接口程序(模拟方式)程序三十 I(平方)C总线驱动程序程序三十一 240128型液晶代码程序三十二 飞机游戏程序三十三 PC键代码程序三十四 拼音输入法模块程序三十五 串行口代码程序三十六 蛇游戏代码程序三十七 与液晶模块T6963C连接代码程序三十八 键盘输入法设计草案程序三十九 16*4液晶汉字代码程序四十 智能化家电控制附录C 单片机C51编程几个有用的模块附录D 头文件W77E58.h附录A MCS-51单片机定点运算子程序库附录B MCS-51单片机浮点运算子程序库
上传时间: 2013-11-02
上传用户:kbnswdifs
有两种方式可以让设备和应用程序之间联系: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
《现代微机原理与接口技术》实验指导书 TPC-H实验台C语言版 1.实验台结构1)I / O 地址译码电路如上图1所示地址空间280H~2BFH共分8条译码输出线:Y0~Y7 其地址分别是280H~287H、288H~28FH、290H~297H、298H~29FH、2A0H~2A7H、2A8H~2AFH、2B0H~2B7H、2B8H~2BFH,8根译码输出线在实验台I/O地址处分别由自锁紧插孔引出供实验选用(见图2)。 2) 总线插孔采用“自锁紧”插座在标有“总线”区引出数据总线D7~D0;地址总线A9~A0,读、写信号IOR、IOW;中断请求信号IRQ ;DMA请求信号DRQ1;DMA响应信号DACK1 及AEN信号,供学生搭试各种接口实验电路使用。3) 时钟电路如图-3所示可以输出1MHZ 2MHZ两种信号供A/D转换器定时器/计数器串行接口实验使用。图34) 逻辑电平开关电路如图-4所示实验台右下方设有8个开关K7~K0,开关拨到“1”位置时开关断开,输出高电平。向下打到“0”位置时开关接通,输出低电平。电路中串接了保护电阻使接口电路不直接同+5V 、GND相连,可有效地防止因误操作误编程损坏集成电路现象。图 4 图 55) L E D 显示电路如图-5所示实验台上设有8个发光二极管及相关驱动电路(输入端L7~L0),当输入信号为“1” 时发光,为“0”时灭6) 七段数码管显示电路如图-6所示实验台上设有两个共阴极七段数码管及驱动电路,段码为同相驱动器,位码为反相驱动器。从段码与位码的驱动器输入端(段码输入端a、b、c、d、e、f、g、dp,位码输入端s1、 s2)输入不同的代码即可显示不同数字或符号。
上传时间: 2013-11-22
上传用户:sssnaxie
串行编程器源程序(Keil C语言)//FID=01:AT89C2051系列编程器//实现编程的读,写,擦等细节//AT89C2051的特殊处:给XTAL一个脉冲,地址计数加1;P1的引脚排列与AT89C51相反,需要用函数转换#include <e51pro.h> #define C2051_P3_7 P1_0#define C2051_P1 P0//注意引脚排列相反#define C2051_P3_0 P1_1#define C2051_P3_1 P1_2#define C2051_XTAL P1_4#define C2051_P3_2 P1_5#define C2051_P3_3 P1_6#define C2051_P3_4 P1_7#define C2051_P3_5 P3_5 void InitPro01()//编程前的准备工作{ SetVpp0V(); P0=0xff; P1=0xff; C2051_P3_5=1; C2051_XTAL=0; Delay_ms(20); nAddress=0x0000; SetVpp5V();} void ProOver01()//编程结束后的工作,设置合适的引脚电平{ SetVpp5V(); P0=0xff; P1=0xff; C2051_P3_5=1; C2051_XTAL=1;} BYTE GetData()//从P0口获得数据{ B_0=P0_7; B_1=P0_6; B_2=P0_5; B_3=P0_4; B_4=P0_3; B_5=P0_2; B_6=P0_1; B_7=P0_0; return B;} void SetData(BYTE DataByte)//转换并设置P0口的数据{ B=DataByte; P0_0=B_7; P0_1=B_6; P0_2=B_5; P0_3=B_4; P0_4=B_3; P0_5=B_2; P0_6=B_1; P0_7=B_0;} void ReadSign01()//读特征字{ InitPro01(); Delay_ms(1);//----------------------------------------------------------------------------- //根据器件的DataSheet,设置相应的编程控制信号 C2051_P3_3=0; C2051_P3_4=0; C2051_P3_5=0; C2051_P3_7=0; Delay_ms(20); ComBuf[2]=GetData(); C2051_XTAL=1; C2051_XTAL=0; Delay_us(20); ComBuf[3]=GetData(); ComBuf[4]=0xff;//----------------------------------------------------------------------------- ProOver01();} void Erase01()//擦除器件{ InitPro01();//----------------------------------------------------------------------------- //根据器件的DataSheet,设置相应的编程控制信号 C2051_P3_3=1; C2051_P3_4=0; C2051_P3_5=0; C2051_P3_7=0; Delay_ms(1); SetVpp12V(); Delay_ms(1); C2051_P3_2=0; Delay_ms(10); C2051_P3_2=1; Delay_ms(1);//----------------------------------------------------------------------------- ProOver01();} BOOL Write01(BYTE Data)//写器件{//----------------------------------------------------------------------------- //根据器件的DataSheet,设置相应的编程控制信号 //写一个单元 C2051_P3_3=0; C2051_P3_4=1; C2051_P3_5=1; C2051_P3_7=1; SetData(Data); SetVpp12V(); Delay_us(20); C2051_P3_2=0; Delay_us(20); C2051_P3_2=1; Delay_us(20); SetVpp5V(); Delay_us(20); C2051_P3_4=0; Delay_ms(2); nTimeOut=0; P0=0xff; nTimeOut=0; while(!GetData()==Data)//效验:循环读,直到读出与写入的数相同 { nTimeOut++; if(nTimeOut>1000)//超时了 { return 0; } } C2051_XTAL=1; C2051_XTAL=0;//一个脉冲指向下一个单元//----------------------------------------------------------------------------- return 1;} BYTE Read01()//读器件{ BYTE Data;//----------------------------------------------------------------------------- //根据器件的DataSheet,设置相应的编程控制信号 //读一个单元 C2051_P3_3=0; C2051_P3_4=0; C2051_P3_5=1; C2051_P3_7=1; Data=GetData(); C2051_XTAL=1; C2051_XTAL=0;//一个脉冲指向下一个单元//----------------------------------------------------------------------------- return Data;} void Lock01()//写锁定位{ InitPro01();//先设置成编程状态//----------------------------------------------------------------------------- //根据器件的DataSheet,设置相应的编程控制信号 if(ComBuf[2]>=1)//ComBuf[2]为锁定位 { C2051_P3_3=1; C2051_P3_4=1; C2051_P3_5=1; C2051_P3_7=1; Delay_us(20); SetVpp12V(); Delay_us(20); C2051_P3_2=0; Delay_us(20); C2051_P3_2=1; Delay_us(20); SetVpp5V(); } if(ComBuf[2]>=2) { C2051_P3_3=1; C2051_P3_4=1; C2051_P3_5=0; C2051_P3_7=0; Delay_us(20); SetVpp12V(); Delay_us(20); C2051_P3_2=0; Delay_us(20); C2051_P3_2=1; Delay_us(20); SetVpp5V(); }//----------------------------------------------------------------------------- ProOver01();} void PreparePro01()//设置pw中的函数指针,让主程序可以调用上面的函数{ pw.fpInitPro=InitPro01; pw.fpReadSign=ReadSign01; pw.fpErase=Erase01; pw.fpWrite=Write01; pw.fpRead=Read01; pw.fpLock=Lock01; pw.fpProOver=ProOver01;}
上传时间: 2013-11-12
上传用户:gut1234567