元器件封装规格大全
上传时间: 2013-10-20
上传用户:ddddddd
MSC-51单片机题库
上传时间: 2014-12-26
上传用户:448949
元器件封装大全
标签: 元器件封装
上传时间: 2013-11-23
上传用户:muhongqing
第五章 Keil C51库函数参考 C51强大功能及其高效率的重要体现之一在于其丰富的可直接调用的库函数,多使用库函数使程序代码简单,结构清晰,易于调试和维护,下面介绍C51的库函数系统。 1. 第一节 本征库函数(intrinsic routines)和非本征证库函数 C51提供的本征函数是指编译时直接将固定的代码插入当前行,而不是用ACALL和LCALL语句来实现,这样就大大提供了函数访问的效率,而非本征函数则必须由ACALL及LCALL调用。 C51的本征库函数只有9个,数目虽少,但都非常有用,列如下: _crol_,_cror_:将char型变量循环向左(右)移动指定位数后返回 _iror_,_irol_:将int型变量循环向左(右)移动指定位数后返回 _lrol_,_lror_:将long型变量循环向左(右)移动指定位数后返回 _nop_: 相当于插入NOP _testbit_: 相当于JBC bitvar测试该位变量并跳转同时清除。 _chkfloat_: 测试并返回源点数状态。 使用时,必须包含#inclucle 一行。 如不说明,下面谈到的库函数均指非本征库函数
上传时间: 2013-10-19
上传用户:1184599859
目录: 1. Character Type Functions - 字符类型函数 2. Standard C Input/Output Functions - 标准输入输出函数 3. Standard Library Functions - 标准库和内存分配函数 4. Mathematical Functions - 数学函数 5. String Functions - 字符串函数 6. BCD Conversion Functions - BCD 转换函数 7. Memory Access Functions - 存储器访问函数 8. Delay Functions - 延时函数 9. LCD Functions - LCD函数 10. LCD Functions for displays with 4x40 characters - 4×40 字符型LCD函数 11. LCD Functions for displays connected in 8 bit memory mapped mode -以8 位外部存储 器模式接口的LCD显示函数 12. I2C Bus Functions - I2C 总线函数 13. National Semiconductor LM75 Temperature Sensor Functions - LM75 温度传感器函数 14. Dallas Semiconductor DS1621 Thermometer/Thermostat Functions - DS1621 温度计函 数 15. Philips PCF8563 Real Time Clock Functions - PCF8563 实时时钟函数 16. Philips PCF8583 Real Time Clock Functions - PCF8583 实时时钟函数 17. Dallas Semiconductor DS1302 Real Time Clock Functions - DS1302 实时时钟函数 18. Dallas Semiconductor DS1307 Real Time Clock Functions - DS1307 实时时钟函数 19. 1 Wire Protocol Functions - 单线通讯协议函数 20. Dallas Semiconductor DS1820/DS1822 Temperature Sensors Functions - DS1820/1822 温度传感器函数 21. SPI Functions - SPI 函数 22. Power Management Functions - 电源管理函数 23. Gray Code Conversion Functions - 格雷码转换函数
上传时间: 2013-10-22
上传用户:归海惜雪
本浮点子程序库有三个不同层次的版本,以便适应不同的应用场合:1.小型库(FQ51A.ASM):只包含浮点加、减、乘、除子程序。2.中型库(FQ51B.ASM):在小型库的基础上再增加绝对值、倒数、比较、平方、开平方、数制转换等子程序。3.大型库(FQ51.ASM):包含本说明书中的全部子程序。
上传时间: 2013-10-18
上传用户:xiaohanhaowei
protel的原件库文件
标签: 元件库
上传时间: 2013-10-13
上传用户:569342831
世界著名厂家单片机简介1.Motorola 单片机:Motorola是世界上最大的单片机厂商,品种全,选择余地大,新产品多,在8位机方面有68HC05和升级产品68HC08,68HC05有30多个系列200多个品种,产量超过20亿片.8位增强型单片机68HC11也有30多个品种,年产量1亿片以上,升级产品有68HC12.16位单片机68HC16也有十多个品种.32位单片机683XX系列也有几十个品种.近年来以PowerPC,Codfire,M.CORE等作为CPU,用DSP作为辅助模块集成的单片机也纷纷推出,目前仍是单片机的首选品牌.Motorola单片机特点之一是在同样的速度下所用的时钟较Intel类单片机低的多因而使得高频噪声低,抗干扰能力强,更适合用于工控领域以及恶劣环境.Motorola 8位单片机过去策略是掩膜为主,最近推出OTP计划以适应单片机的发展,在32位机上,M.CORE在性能和功耗上都胜过ARM7.2.Microchip 单片机:Microchip 单片机是市场份额增长最快的单片机.他的主要产品是16C系列8位单片机,CPU采用RISC结构,仅33条指令,运行速度快,且以低价位著称,一般单片机价格都在1美元以下.Microchip 单片机没有掩膜产品,全部都是OTP器件(现已推出FLASH型单片机).Microchip强调节约成本的最优化设计,是使用量大,档次低,价格敏感的产品.3.Scenix单片机:Scenix单片机的I/O模块最有创意.I/O模块的集成与组合技术是单片机技术不可缺少的重要方面.除传统的I/O功能模块如并行I/O,URT,SPI,I2C,A/D,PWM,PLL,DTMF等,新的I/O模块不断出现,如USB,CAN,J1850,最具代表的是Motorola 32位单片机,它集成了包括各种通信协议在内的I/O模块,而Scenix单片机在I/O模块的处理上引入了虚拟I/O的概念. Scenix单片机采用了RISC结构的CPU,使CPU最高工作频率达50MHz.运算速度接近50MIPS.有了强有力的CPU,各种I/O功能便可以用软件的办法模拟.单片机的封装采用20/28引脚.公司提供各种I/O的库函数,用于实现各种I/O模块的功能.这些软件完成的模块包括多路UART,多种A/D,PWM,SPI,DTMF,FSK,LCD驱动等,这些都是通常用硬件实现起来相当复杂的模块.4.NEC单片机:NEC单片机自成体系,以8位机78K系列产量最高,也有16位,32位单片机.16位单片机采用内部倍频技术,以降低外时钟频率.有的单片机采用内置操作系统.NEC的销售策略注重服务大客户,并投入相当大的技术力量帮助大客户开发新产品.5.东芝单片机:东芝单片机从4位倒64位,门类齐全.4位机在家电领域仍有较大市场.8位机主要有870系列,90系列等.该类单片机允许使用慢模式,采用32KHz时钟功耗低至10uA数量级.CPU内部多组寄存器的使用,使得中断响应与处理更加快捷.东芝公司的32位机采用MIPS3000 ARISC的CPU结构,面向VCD,数字相机,图象处理市场.6.富士通单片机:富士通也有8位,16位和32位单片机,但是8位机使用的是16位的CPU内核.也就是说8位机与16位机指令相同,使得开发比较容易.8位机有名是MB8900系列,16位机有MB90系列.富士通注重服务大公司,大客户,帮助大客户开发产品.7.Epson 单片机:Epson公司以擅长制造液晶显示器著称,故Epson单片机主要为该公司生产的LCD配套.其单片机的LCD驱动做的特别好.在低电压,低功耗方面也很有特色.目前0.9V供电的单片机已经上市,不久LCD显示手表将使用0.5V供电.
上传时间: 2014-12-28
上传用户:leyesome
有两种方式可以让设备和应用程序之间联系: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
单片机汇编语言程序库内容有运算子程序,通讯子程序,扩展接口程序,中断服务子程序,代码转换,逻辑操作,数据结构,其他。
上传时间: 2013-10-09
上传用户:libinxny