基于单片机和USB接口技术的高速数据采集系统的设计说明_第1页
基于单片机和USB接口技术的高速数据采集系统的设计说明_第2页
基于单片机和USB接口技术的高速数据采集系统的设计说明_第3页
基于单片机和USB接口技术的高速数据采集系统的设计说明_第4页
基于单片机和USB接口技术的高速数据采集系统的设计说明_第5页
已阅读5页,还剩43页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

YyyyYyyy图3.8控制端的安处理程序转换从上面的流程图3.8中可以看出,MCU需要通过选择控制输出端点提取建立包的容来决定端点是为满还是空。如果控制端点为满,MCU将从缓冲区读出容并将其存入存储区。之后,它将从存储区使主设备请求生效。如果是一个有效的请求,MCU必须向控制输出端点发送应答建立命令以重新使能下一个建立阶段接下来MCU需要证实控制传输是控制读还是写,这可以通过读建立包中bmRequestType的第8位来实现。如果控制传输是一个控制读类型,那就是说器件需要在下一个数据阶段向主机发回数据包。MCU需要设置一个标志以指示USB设备现在正处于传输模式,即准备在主机发送请求时发送数据。如图3.9所示为控制输出处理程序。为了说明它,举一个主机请求的例子叫做“GetDescriptor()”的标准设备请求。当USB器件D12接收到建立包,将产生一个中断通知MCU,微控制器响应中断,通过读D12中断寄存器决定包是发到控制端点还是普通端点。如果包是送往控制端点,MCU要通过读D12的最后处理状态寄存器进一步确定数据是否是一个建立包,第一个包必须是建立包。NONONONONOYesYesYes读端点处理状态清中断标志控制输入入口发送状态子程序结束剩下0字节发送16个字节数据设置为发送状态发送剩下数据设置为等待状态态图3.9控制输入处理流程建立阶段结束之后,主机会执行数据阶段。D12等待接收Control_In包,如下图3.10。NONONONONONONOYesYesYesYesYesYesYes控制输出入口读端点处理状态清中断标志建立包?接收数据出错读取断电数据并保对控制输入端点和控制输出断电进行建立数据对应包设置等待状态停止控制端点设置为等待状态数据长度出错子程序结束处于接收状态设置等待状态,设置建立包标志标志设置发送状态,设置建立包标志标志设置等待状态带数据的要求:读取要求?读取端点数据并保存接收完毕?设置为等待状态设置建立包标志NO图3.10控制输出处理流程MCU首先需要通过读D12的最后处理状态寄存器清零Control_In中断标志位,接着MCU再确认D12处于传输模式后进行数据包的发送。由于D12的控制端点只有16字节FIFO,如果传输的长度大于16字节,MCU在传输阶段就必须控制数据的数量。MCU必须检查要发送到主机的当前和剩余的数据大小。如果剩下的字节数大于16,MCU将先发送16字节并用减去参考长度(要求的长度)16。当下一个Corntol_In标志来到时,MCU将确定剩余的字节是否为零。如果己经没有数据要发送,MCU需要发送一个空的包以指示主机数据已经发送完毕。如果建立包为Set-Descriptor()请求,那么建立包中的控制传输将指示此包为控制写类型。在执行完Set_Descriptor请求过程后,MCU等待数据阶段。主机发送一个Control_Out标志,MCU从D12缓冲区中减去数据。流程现在处于Control_Out处理程序的右端。MCU首先确认D12是否处于USB_Receive模式。然后MCU通过检查选择控制输出端点确认缓冲区是否己满并将数据从缓冲区读出。普通端点:端点1和端点2这里定义为普通输入输出。普通输出端点配置为从主机接收数据包。当MCU从主机接收Generic_Out标志(通过读中断寄存器识别)时,D12中断位必须清零。选择端点将清零Generic_Out缓冲区,接下来MCU需要确认数据的长度并把数据读出,然后设置收到数据标志位bEPPflag。对于普通输入端点的中断,只要读取端点号的最后处理状态寄存器来消除中断寄存器的相应位,把状态清零就可以了。Generic_In标志是在发送完数据后才产生的,当还有数据要发送时可以在中断程序里接着继续发。注意:这里的数据发送完成标志是指在主机的一个有效的IN事务后才发生的。当主机发出IN事务而设备没有送出数据时,是不会产生中断的3.2.5主循环MAINLOOP.CMCU一旦上电就需要初始化其所有端口、存储区、定时器和中断服务程序。之后MCU将重新连接USB,包括将Soft_Connect寄存器设置为ON。这些过程是很重要的,因为它确保了在MCU准备好服务D12之前D12不会进行操作。在主循环程序中MCU对键盘进行轮询。如果任何一个特定的按键被按下,键处理命令将执行子程序并返回主循环。增加该子程序的目的仅仅是为了调试。1ms定时器用于激活该子程序以检测在评估板上的任何按键。当轮询到了检测建立包时,它确认建立标志在之前是否被中断服务程序所置位。如果建立标志置位,它将向协议层发送一个器件请求进行处理。3.2.6驱动程序开发工具的介绍WindowsDDKWindowsDDK是Microsoft公司提供的一个开发Windows驱动程序的工具,是Microsoft出品的设备驱动程序开发工具包DDK(DeviceDeveloperKit),它有Windows98DDK和Windows2000DDK两个版本。前者能够开发Windows95/98/Me/NT下的VxD,KMD和WDM驱动程序,后者可以开发Windows98/Me/NT/2000下的KMD和WDM驱动程序。利用DDK开发Windows驱动程序是一种比较传统的方法。它要求设计者必须对Windows的体系结构、设备驱动程序的结构、虚拟机管理器(VMM)以与IntelCPU体系结构有深入的了解,而且需要保护模式的汇编语言编程经验。因此,在实际的开发过程中,DDK一般不常被人们所使用,取而代之的是另外两种工具:DriverStudio和WinDriverDriverStudio是由Compuware公司提供的驱动程序开发工具,简化了Windows驱动程序的开发、调试和测试,完整的版本是由SoftICE,DriverWorks,DriverNetWorks、VtoolsD,BoundsChecker,TrueTimeDriver,TrueCoverageDriver等工具组成。WinDriver是美国KRFTech公司出品的用于编写驱动程序的另一种工具包。它包括代码生成器WinDriverWizard,WinDriverDebuggingMonitor,WinDriver发行包和一些公用程序和实例。WinDriver支持ISA,EISA,PCI,Plug&Play和DMA,它能自动地发现硬件并产生驱动程序,不需要牵涉到很低层的东西即可在很短的时间里编出驱动程序。使用WinDriver的优点是:开发者并不需要熟悉任何部操作系统或kernelprogramming或DDK与任何驱动程式。WinDriver同时允许开发者能在自己所熟悉的开发环境下,利用使用者模式(UserMode)来开发出所需的驱动程序,如使用MSDEVVisualC/C++,BorlandC++Builder,Delphi或任何Win32编译器。使用WinDriver所开发的驱动程式均可用于WindowsXP,Windows9x,NT/2000,CE,LinuxandSolaris等平台。3.2.7USB设备驱动程序设计USB设备驱动程序是支持即插即用功能的标准WDM(WindowsDriverModel)驱动程序,它与VXD和NT式的驱动程序不同,它是核态程序,采用了分层处理的方式,不需要直接和硬件打交道。当USB设备插入USB集线器时,USB集线器驱动程序会检测到一个新设备的插入。PnP管理器使用厂商ID或设备类信息选择要运行的驱动程序。一般情况下,调用驱动程序的AddDevice例程,并发出其他的PnPIRP。USB设备驱动程序决不会收到任何硬件资源(如端口或中断),因为USB类驱动程序处理所有的低层I/O。在编写驱动程序时,需要包含以下几个头文件:USBl00.h:包含有USB设备驱动程序中所用到的各种常量和结构;USBioctl.h:IOCTL的定义,包括各种驱动程序通用的数据结构;USBdlib.h:URB构造和各种例程,定义了USBD所输出的服务;USBdi.h:USBDI例程,包括URB结构、各种驱动程序通用的数据结构。在编译驱动程序时,build将会在欲编译的驱动程序所在的目录中寻找一个叫sources的文件,这个文件将告诉编译程序,应该怎么做。在该文件中,以下五个容是必须包含的:(1)TARGETNAME:表示编译出的结果名称;(2)TARGETTYPE:表示编译出的结果类型(例如驱动程序);(3)TARGETPATH:表示在当前目录(sources文件所在的目录)中建立一个什么名称的子目录来保存中间结果;(4)TARGETLIBS:表示编译过程中需要那些库;(5)SOURCE:表示需要编译那些文件。在本系统的驱动程序开发中,主要的分发例程有:DriverEntry():是驱动程序的入口,主要完成各种初始化操作,同时把注册表复制到一个全局变量中,并告诉系统那些IRP由哪个例程处理,这部分被I/O系统直接调用。USB_D12_Create():主要是用来在USB设备和驱动程序之间建立连接,当以打开文件的名义打开设备准备读写时,调用它。USB_D12_pnp():处理即插即用的操作。USB_D12_power():处理和电源相关的操作。USB_D12_Read()/USB_D12_Write():用来读写数据,把数据读到数据缓存区或把数据从缓存区写到端点专用寄存器,由此发往USB主机。USB_D12_DeviceloControl():设备操作,一般是用来对硬件发出一些控制命令。USB_D12_closeHandle():当用户关闭文件时,调用它清扫系统,卸载驱动程序。。USB_D12_AddDevice()第一次安装硬件(插上板子)时使用USB_D12_DriverUnload():卸载硬件时使用,当硬件完全卸载后,调用它清理此硬件在系统中留下的痕迹,释放全局变量中注册表路径字符串所占的存。以上是驱动程序中的几个重要的分发历程,只有上述这些例程正确执行,编译生成的*.SYS文件才是有效的,驱动程序才可以使用,设备才能和上位机通信。设备插上主机后,主机发现新硬件并提示安装驱动程序。3.2.8USB设备驱动程序的调用USB设备通过客户驱动程序与设备打交道并响应核或用户应用程序请求。在核级,命令由客户驱动程序使用部的IOCTL发送给USB系统,而不能用于用户态应用程序。最有用的IOCTL是IOCT_INTERNALUSB_SUBMIT_URB,它发出USB请求块(URB)给系统USB驱动程序。URB允许发出多个功能调用给USB系统,通过URB进行与USB设备的大多数交互。用户只需在相应的分发例程中构造URB块(读取USB的描述表、选择配置和接口),并根据设备所支持的传输类型和设备自有的命令字将其通过USBDI发送下去,由USB类驱动程序处理所有的低层I/O,从而实现对USB设备的控制。USB总线驱动程序由操作系统提供,它位于USB功能驱动程序的下面,负责与实际的硬件打交道,实现烦琐的低层通信。USB功能驱动程序由设备开发者编写,位于USB总线驱动程序的上面,不与实际的硬件打交道,而是通过向USB总线驱动程序发送包含URB(RequestBlock,USB请求块)的IRP(I/ORequestPacket,IRP请求包),来实现对USB设备信息的发送或接收。采用这种分层驱动程序的方法有两个优点:(1)多个USB设备可以通过USB总线驱动程序来协调它们的工作;(2)编写分层驱动程序较之编写单一驱动程序相对简单,且可以节省存和资源,不易出错。整个驱动程序模型如图3.11所示。图3.11USB设备驱动程序的调用第4章方案设计的分析与本研究的创新策略4.1方案的可行性、实验过程、数据的处理与分析4.1.1系统硬件设计分析89C52通过P1.4和读、写控制线来控制转换器的模拟输入通道地址锁存、启动和允许输出。编程时注意启动AD0809后,EOC在一定时间才能变成低电平。89C52的ALE和PD12的ALE相接,表示采用单独地址和数据总线配置。其AO脚接高电平用于控制命令或数据输入到PDIUSBDI2,也就是编程中outportcmd()和outportdata()函数。此外89C52的多位地址/数据复用总线PO可直接与PDIUSBD12的数据总线相连,CLKOUT时钟输出为89C52提供时钟输入。在该数据采集系统中,用ADC0809采集0-5V的电压信号,经A/D转换后将数字量存入预先设定的缓冲区里,利用接口芯片D12将数据送至USB总线上。设备应用程序从缓冲区里取数据显示,通过数值说明USB接口的采集速率比一般的串行总线速度高。当前端的电压信号不断变化的同时,在PC上可以观察到数据的变化,这就表明利用USB接口在数字采集系统中进行数据传输是能够实现的,而且能够很好的实现。4.1.2系统软件设计分析在编写PDIUSBDI2固件程序时需要注意:[1]单片机的中断应设置为电平触发:中断后一定要读上次传输状态寄存器(命令40-45H),以清除中断寄存器中的中断标志。这样,PDIUSBD12的中断输出才能变回高电平。这一点非常重要。[2]在接收到Setup包后,一定要调用ACKsetup命令重新使能端口0。[3]在向IN端点写完数据后,一定要调用ValidateBuffer(命令FAH),指明缓冲区中的数据有效,可以发送到主机。[4]读完数据后,一定要调用ClearBuffer(命令F2H),以保证可以接收新的包。[5]可以通过调用ReadChipID(命令FDH)检查PDIUSBDI2是否工作。该命令要读两个字节数据。USB初始化过程为:[1]SetAddressEnable;[2]SetEndpointEnable(此时LED亮);[3]Disconnect;[4]delay(1-2s);[5]Connect(即用43h参数调用SetMode,此时LED灭);[6]ReadInterruptRegister;完成初始化工作后就可作其它的前台工作了,并在前台判断是否有Setup包(通过一个变量,当中断服务程序检测到有Setup包时,设置该变量),然后执行响应的控制传输。若USB驱动程序想对设备进行I/O操作,它便使用WindowsAPI函数对WIN32子系统进行WIN32调用。此调用由I/O系统服务接收并通知I/O管理器,I/O管理器将此请求构造成一个合适的I/O请求包(I/ORequestPacketIRP)并把它传送给USB功能驱动程序。USB功能驱动程序接收到这个IRP以后,根据IRP中包含的具体操作代码,构造相应的USB请求块把该URP放到一个新的IRP中,并通过USBDI传送给USB驱动程序(USBD),USBD驱动程序根据IRP包含的不同传输类型将IRPs分解开来,并调用主控制器驱动程序来处理IRPs,同时将处理结果返还给I/O管理器,并最终返还给应用程序,从而实现了应用程序对设备的读写操作。在此过程中,应用程序通过文件名(即设备名)和文件描述符找到设备驱动程序,驱动程序通过设备描述符和设备标识使用设备,三者为一链式调用方式。功能驱动程序除负责处理应用程序的I/O请求外,还要处理PnP管理器发送给它的PnP请求(如设备启动请求IRP_MN_START_DEVICE,设备删除请IRPMNREMOVEDEVICE等)。通过对这些请求的处理,USB功能驱动程序可支持设备的热插拔和即插即用功能。4.2本次设计的创新与改进本次设计没有采用以往以AVR单片机ATmegal28作为主控制器,通过基于CH375的USB接口实现数据传输的方式,而是采用AT89C52单片机和Philips公司的PDIUSBD12(USB1.1)接口芯片配合的方式。由于51系列的单片机是应用非常广泛的一种微处理器,在其基础上开发了大量的软件包,对其部结构和工作原理我们都非常了解。而PDIUSBDI2能够完成将数据信号到符合USB规的信号的转换。为此,我们利用89C52中丰富的软件资源和USB总线技术即插即用、热插拔特性来完成高速数据采集系统。PDIUSBD12可使设计者选择最合适的微控制器,减少开发时间、风险与费用,是最实用最快捷的方法实现最经济的USB外设的方案。这样配合方式使的数据采集速度更快,设计周期更短。这种方案的实际体现是价格便宜、接口形式多样、可靠性高、灵活性大,尤其适合于产品的改型设计这样可以降低开发成本,缩短开发周期、降低风险。结论通过实际系统的设计、开发和调试,我们觉得对于现在各种以串行口、并行口为接口的产品,都可以设计成带USB接口的产品。在硬件设计时,只需把串口控制芯片或并口控制芯片换成USB接口芯片即可。目前USB芯片的价格也不是很高,一般的只需十几元或几十元人民币即可,这样不仅没有增加成本,而且极大提高了数据传输速度,同时也使得系统具有USB所具有的支持即插即用、热插拔、灵活、方便等技术优势,极改善了系统的性能,给用户带来了极大的方便,尤其是适用于产品改造型设计。USB接口完全可以代替串行口和并行口实现数据传输。从实用性的角度来说,本系统的数据库管理软件还需进一步完善,操作界面可以采用更直观的图形化按钮;将AD转换的核做到FPGA当中,将采集设备中的数字器件集成到FPGA中,会大大的简化电路,并且有利于将来系统的升级。也可以把USB控制的核一并做到FPGA中,则电路将会更加简单,不过对于FPGA的工作量就会比较繁重一些。USB2.0的出现极提高了USB的通信速度,但是,随着USB应用领域的逐渐扩大,人们对USB的期望也越来越高.无线USB(WUSB)技术的提出是USB技术的又一革命性创新。2004年春季Intel技术峰会(美国)上,无线USB促进联盟(WirelessUSBPromoterGroup)宣布成立。这个联盟包括7家有相当实力的业界巨擎:AgereSystems惠普,英特尔,微软,NEC,飞利浦半导体和国三星。这个联盟的每个成员都被授权可以制订WUSB的详细规格。在详细规格上,已经达成共识的是每秒480Mb的传输速率,这一规格和有线的USB2.0设备间高速传输规格维持一致。未来,WUSB将会向整合的方向发展,变成一个标准芯片组的一部分。如同有线的USB技术一样,无线的WUSB将会提供一些USB所不能提供的功能。无线WUSB联盟正在努力的制订一个标准的规格书,同时,工业上也在开发WUSB产品,为消费者提供更好的方便性和移动性。无线USB的实现将把人们的生活全面带进无线环境当中。致本文是在雪娇老师的指导下完成的,感导师这么久以来对我在毕业设计上的悉心指导,因为从开始指导到个人编写程序,设计修改,直到完成,老师无不倾注着心血和辛劳。就是再忙,老师也经常对我进行悉心教导。我所取得的每一点成绩和进步都凝聚了老师对我的教诲和心血,这让我深受感动。导师严谨的治学态度、认真的求学精神、脚踏实地的工作作风、敏锐的思维、渊博的专业学识、超前的学术眼光、深邃的学术思想、勤勉塌实的治学作风、诲人不倦的精神无不让人感动,给我留下了深刻的印象,成为我一生中一笔宝贵的财富,使我终生受益。在这里我衷心的说一声,老师,辛苦了!同时在整个设计的过程中,也十分感唐老师,文献作者,图书管理员和信息技术学院2005级电子2班同学的帮助,他们使我获得了不少启发,让我受益匪浅。在此对他们表示诚挚的意。论文的编写过程就是一个知识不断积累的过程。在写论文的过程中,我感到指导老师们的知识是那么的丰富,而我与之比较真是相差甚远。这更加激励我要不断的学习。只有不断学习才能不断的进步。我得到了老师的指导和帮助,学到了很多课本中学习不到的知识,提高了自己的动手能力,得到了巨大的收获。今后,我将继续努力,争取把在本次论文中学到的知识运用到工作和学习当中,努力发扬吃苦耐劳的精神,取得更大的进步。由于时间仓促和自己水平有限,在论文中难免存在很多不足之处,恳请各位老师批评指正。最后,对雪娇老师的耐心指导再次表示感!并祝老师在今后的工作里工作愉快!合家欢乐!参考文献[1]田良.王尧.黄正瑾.建元.束海泉.综合电子设计与实践[M].:东南大学,2002,1-314.[2]自美.电子线路设计[M].:华中科技大学,2000,1-514.[3]康华光.邹寿彬.电子技术基础数字部分[M].:高等教育,2000,1-536.[4]涵芳.徐爱卿.MCS-51/96系列单片机原理与应用[M].:航空航天大学,1996,1-409.[5]吴产乐.微机系统与接口技术[M].:华中科技大学,2002,1-384.[6]美明.温冬婵.IBM-PC汇编语言程序设计[M].:清华大学,1991,1-482.[7]StevenLaub.AT89C52datesheets[OL]./read.php?tid=26915,1991.[8]幸云辉.16位微型计算机原理与应用[M].:邮电大学,1992,1-404.附录AAt89c52datesheetsAT89C52Chipexplains

CompatiblewithMCS-51TMProducts

8KbytesofIn-SystemReprogrammableFlashMemory

Endurance:1,000Write/EraseCycles

FullyStaticOperation:0Hzto24MHz

Three-LevelProgramMemoryLock

256x8-BitInternalRAM

32ProgrammableI/OLines

Three16-BitTimer/Counters

EightInterruptSources

ProgrammableSerialChannel

LowPowerIdleandPowerDownModes

Description

TheAT89C52isalow-power,high-performanceCMOS8-bitmicrocomputerwith8KbytesofFlashprogrammableanderasablereadonlymemory(PEROM).ThedeviceismanufacturedusingAtmel’shighdensitynonvolatilememorytechnologyandiscompatiblewiththeindustrystandard80C51and80C52instructionsetandpinot.Theon-chipFlashallowstheprogrammemorytobereprogrammedin-systemorbyaconventionalonvolatilememoryprogrammer.Bycombiningaversatile8-bitCPUwithFlashonamonolithicchip,theAtmelAT89C52isapowerfulmicrocomputer,whichprovidesahighlyflexibleandcosteffectivesolutiontomanyembeddedcontrolapplications.

TheAT89C52providesthefollowingstandardfeatures:8KbytesofFlash,256bytesofRAM,32I/Olines,three16-bittimer/counters,asix-vectortwo-levelinterruptarchitecture,afullduplexserialport,on-chiposcillator,andclockcircuitry.Inaddition,theAT89C52isdesignedwithstaticlogicforoperationdowntozerofrequencyandsupportstwosoftwareselectablepowersavingmodes.TheIdleModestopstheCPUwhileallowingtheRAM,timer/counters,serialport,andinterruptsystemtocontinuefunctioning.

ThePowerDownModesavestheRAMcontentsbutfreezestheoscillator,disablingallotherchipfunctionsuntilthenexthardwarereset.

PinDescription

VCC

Supplyvoltage.

GND

Ground.

Port0

Port0isan8-bitopendrainbidirectionalI/Oport.Asanoutputport,eachpincansinkeightTTLinputs.When1sarewrittentoport0pins,thepinscanbeusedashigh-impedanceinputs.

Port0canalsobeconfiguredtobethemultiplexedlow-orderaddress/databusduringaccessestoexternalprogramanddatamemory.Inthismode,P0hasinternalpullups.

Port0alsoreceivesthecodebytesduringFlashprogrammingandoutputsthecodebytesduringprogramverification.Externalpullupsarerequiredduringprogramverification.

Port1

Port1isan8-bitbidirectionalI/Oportwithinternalpullups.ThePort1outputbufferscansink/sourcefourTTLinputs.When1sarewrittentoPort1pins,theyarepulledhighbytheinternalpullupsandcanbeusedasinputs.Asinputs,Port1pinsthatareexternallybeingpulledlowwillsourcecurrent(IIL)becauseoftheinternalpullups.Inaddition,P1.0andP1.1canbeconfiguredtobethetimer/counter2externalcountinput(P1.0/T2)andthetimer/counter2triggerinput(P1.1/T2EX),respectively,asshowninthefollowingtable.

Port1alsoreceivesthelow-orderaddressbytesduringFlashprogrammingandprogramverification.

Port2

Port2isan8-bitbidirectionalI/Oportwithinternalpullups.ThePort2outputbufferscansink/sourcefourTTLinputs.When1sarewrittentoPort2pins,theyarepulledhighbytheinternalpullupsandcanbeusedasinputs.Asinputs,Port2pinsthatareexternallybeingpulledlowwillsourcecurrent(IIL)becauseoftheinternalpullups.Port2emitsthehigh-orderaddressbyteduringfetchesfromexternalprogrammemoryandduringaccessestoexternaldatamemorythatuse16-bitaddresses(MOVXDPTR).Inthisapplication,Port2usesstronginternalpullupswhenemitting1s.Duringaccessestoexternaldatamemorythatuse8-bitaddresses(MOVXRI),Port2emitsthecontentsoftheP2SpecialFunctionRegister.Port2alsoreceivesthehigh-orderaddressbitsandsomecontrolsignalsduringFlashprogrammingandverification.

Port3

Port3isan8-bitbidirectionalI/Oportwithinternalpullups.ThePort3outputbufferscansink/sourcefourTTLinputs.When1sarewrittentoPort3pins,theyarepulledhighbytheinternalpullupsandcanbeusedasinputs.Asinputs,Port3pinsthatareexternallybeingpulledlowwillsourcecurrent(IIL)becauseofthepullups.

Port3alsoservesthefunctionsofvariousspecialfeaturesoftheAT89C51,asshowninthefollowingtable.

Port3alsoreceivessomecontrolsignalsforFlashprogrammingandprogrammingverification.

RST

Resetinput.Ahighonthispinfortwomachinecycleswhiletheoscillatorisrunningresetsthedevice.

PSEN

ProgramStoreEnableisthereadstrobetoexternalprogram

memory.

WhentheAT89C52isexecutingcodefromexternalprogrammemory,PSENisactivatedtwiceeachmachinecycle,exceptthattwoPSENactivationsareskippedduringeachaccesstoexternaldatamemory.

EA/VPP

ExternalAccessEnable.EAmustbestrappedtoGNDinordertoenablethedevicetofetchcodefromexternalprogrammemorylocationsstartingat0000HuptoFFFFH.Note,however,thatiflockbit1isprogrammed,EAwillbeinternallylatchedonreset.

EAshouldbestrappedtoVCCforinternalprogramexecutions.Thispinalsoreceivesthe12-voltprogrammingenablevoltage(VPP)duringFlashprogrammingwhen12-voltprogrammingisselected.

XTAL1

Inputtotheinvertingoscillatoramplifierandinputtotheinternalclockoperatingcircuit.

XTAL2

Outputfromtheinvertingoscillatoramplifier.

SpecialFunctionRegisters

Amapoftheon-chipmemoryareacalledtheSpecialFunctionRegister(SFR)spaceisshowninTable1.

Notethatnotalloftheaddressesareoccupied,andunoccupiedaddressesmaynotbeimplementedonthechip.Readaccessestotheseaddresseswillingeneralreturnrandomdata,andwriteaccesseswillhaveanindeterminateeffect.

Usersoftwareshouldnotwrite1stotheseunlistedlocations,sincetheymaybeusedinfutureproductstoinvokenewfeatures.Inthatcase,theresetorinactivevaluesofthenewbitswillalwaysbe0.

Timer2RegistersControlandstatusbitsarecontainedinregisters

T2CON(showninTable2)andT2MOD(showninTable4)forTimer2.Theregisterpair(RCAP2H,RCAP2L)aretheCapture/ReloadregistersforTimer2in16-bitcapturemodeor16-bitauto-reloadmode.InterruptRegistersTheindividualinterruptenablebitsareintheIEregister.TwoprioritiescanbesetforeachofthesixinterruptsourcesintheIPregister.

DataMemory

TheAT89C52implements256bytesofon-chipRAM.Theupper128bytesoccupyaparalleladdressspacetotheSpecialFunctionRegisters.Thatmeanstheupper128byteshavethesameaddressesastheSFRspacebutarephysicallyseparatefromSFRspace.

Whenaninstructionaccessesaninternallocationaboveaddress7FH,theaddressmodeusedintheinstructionspecifieswhethertheCPUaccessestheupper128bytesofRAMortheSFRspace.InstructionsthatusedirectaddressingaccessSFRspace.

Forexample,thefollowingdirectaddressinginstructionaccessestheSFRatlocation0A0H(whichisP2).

MOV0A0H,#dataInstructionsthatuseindirectaddressingaccesstheupper128bytesofRAM.Forexample,thefollowingindirectaddressinginstruction,whereR0contains0A0H,accessesthedatabyteataddress0A0H,ratherthanP2(whoseaddressis0A0H).

MOVR0,#data

Notethatstackoperationsareexamplesofindirectaddressing,sotheupper128bytesofdataRAMareavailableasstackspace.

Timer0and1

Timer0andTimer1intheAT89C52operatethesamewayasTimer0andTimer1intheAT89C51.

Timer2

Timer2isa16-bitTimer/Counterthatcanoperateaseitheratimeroraneventcounter.ThetypeofoperationisselectedbybitC/T2intheSFRT2CON(showninTable2).Timer2hasthreeoperatingmodes:capture,auto-reload(upordowncounting),andbaudrategenerator.ThemodesareselectedbybitsinT2CON,asshowninTable3.

Timer2consistsoftwo8-bitregisters,TH2andTL2.IntheTimerfunction,theTL2registerisincrementedeverymachinecycle.Sinceamachinecycleconsistsof12oscillatorperiods,thecountrateis1/12oftheoscillatorfrequency.

IntheCounterfunction,theregisterisincrementedinresponsetoal-to-0transitionatitscorrespondingexternalinputpin,T2.Inthisfunction,theexternalinputissampledduringS5P2ofeverymachinecycle.Whenthesamplesshowahighinonecycleandalowinthenextcycle,thecountisincremented.ThenewcountvalueappearsintheregisterduringS3P1ofthecyclefollowingtheoneinwhichthetransitionwasdetected.Sincetwomachinecycles(24oscillatorperiods)arerequiredtorecognizea1-to-0transition,themaximumcountrateis1/24oftheoscillatorfrequency.Toensurethatagivenlevelissampledatleastoncebeforeitchanges,thelevelshouldbeheldforatleastonefullmachinecycle.

CaptureMode

Inthecapturemode,twooptionsareselectedbybitEXEN2inT2CON.IfEXEN2=0,Timer2isa16-bittimerorcounterwhichuponoverflowsetsbitTF2inT2CON.Thisbitcanthenbeusedtogenerateaninterrupt.IfEXEN2=1,Timer2performsthesameoperation,butal-to-0transitionatexternalinputT2EXalsocausesthecurrentvalueinTH2andTL2tobecapturedintoRCAP2HandRCAP2L,respectively.Inaddition,thetransitionatT2EXcausesbitEXF2inT2CONtobeset.TheEXF2bit,likeTF2,cangenerateaninterrupt.ThecapturemodeisillustratedinFigure1.

Auto-Reload(UporDownCounter)

Timer2canbeprogrammedtocountupordownwhenconfiguredinits16-bitauto-reloadmode.ThisfeatureisinvokedbytheDCEN(DownCounterEnable)bitlocatedintheSFRT2MOD(seeTable4).Uponreset,theDCENbitissetto0sothattimer2willdefaulttocountup.WhenDCENisset,Timer2cancountupordown,dependingonthevalueoftheT2EXpin.

Figure2showsTimer2automaticallycountingupwhenDCEN=0.Inthismode,twooptionsareselectedbybitEXEN2inT2CON.IfEXEN2=0,Timer2countsupto0FFFFHandthensetstheTF2bituponoverflow.Theoverflowalsocausesthetimerregisterstobereloadedwiththe16-bitvalueinRCAP2HandRCAP2L.ThevaluesinRCAP2HandRCAP2Larepresetbysoftware.IfEXEN2=1,a16-bitreloadcanbetriggeredeitherbyanoverfloworbyal-to-0transitionatexternalinputT2EX.ThistransitionalsosetstheEXF2bit.BoththeTF2andEXF2bitscangenerateaninterruptifenabled.

SettingtheDCENbitenablesTimer2tocountupordown,asshowninFigure3.Inthismode,theT2EXpincontrolsthedirectionofthecount.Alogic1atT2EXmakesTimer2countup.

Thetimerwilloverflowat0FFFFHandsettheTF2bit.Thisoverflowalsocausesthe16-bitvalueinRCAP2HandRCAP2Ltobereloadedintothetimerregisters,TH2andTL2,respectively.

Alogic0atT2EXmakesTimer2countdown.ThetimerunderflowswhenTH2andTL2equalthevaluesstoredinRCAP2HandRCAP2L.TheunderflowsetstheTF2bitandcauses0FFFFHtobereloadedintothetimerregisters.

TheEXF2bittoggleswheneverTimer2overflowsorunderflowsandcanbeusedasa17thbitofresolution.Inthisoperatingmode,EXF2doesnotflaganinterrupt.At89c52数据表AT89C52单片机芯片说明与MCS-51产品指令和引脚完全兼容

8KB字节可重擦写FLASH闪存存储器

1000次写/擦除周期

完全静态操作:0Hz到24MHz

三级程序存储器锁定

256×8位部存

32个可编程I/O线

3个16位定时器/计数器8个中断源

可编程串行UART通道

低功耗空闲和掉电模式

描述

该AT89C52单片机是一种低功耗,高性能CMOS8位单片机与8KB的闪存和可擦除可编程只读存储器(PEROM)。该设备是采用Atmel的高密度,非易失性储存技术,并兼容业界标准的80C51和80C52指令集的片上闪存.允许程序存储器重新编程的系统或常规记忆程序相结合的多功能8位CPU与Flash的单片芯片.Atmel公司的AT89C52是一个功能强大的微型计算机,从而提供了高度灵活的和成本有效地解决许多嵌入式控制应用。

在AT89C52单片机提供以下标准功能:8KB的闪存,256B的RAM,32I/O线,三个16位定时器/计数器,一个6向量两级中断结构,全双工串行端口,对片上振荡器和时钟电路。此外,AT89C52单片机设计的静态逻辑操作到零频率和支持两种软件可选节电模式。空闲模式停止的CPU,同时允许的RAM,定时器/计数器,串行接口和中断系统继续运作。

在断电模式保存RAM的容,但停止振荡器,停用所有其他芯片的功能,直到下一个硬件复位。

引脚描述

虚拟通道连接电源电压。

接地地面。

端口0

端口0是一个8位漏极开路双向I/O端口。作为一个输出端口,每个引脚可汇8的TTL投入。当1秒写入端口0引脚,该引脚可作为高阻抗输入。

端口0也可以配置为复8位地址/数据总线,在访问外部程序和数据存储器。在这种模式下,P0了部pullups。

端口还收到0字节的代码在Flash编程和产出字节的代码在程序核查。外部pullups必须在计划的核查。

端口1

端口1是一个8位双向I/O端口与部pullups。端口1输出缓冲器可以汇/源四的TTL投入。当1秒写入端口1针,他们是拉高的部pullups,可作为投入。作为投入,端口1引脚的外部被拉低将电源电流(IIL)由于部pullups。此外,P1.0和P1.1可配置为定时器/计数器2的外部计数输入(P1.0/T2)和定时器/计数器2触发输入(P1.1/T2EX),分别显示,下列表格中。

端口1还收到低字节为了解决在Flash编程和程序验证。

端口2

端口2是一个8位双向I/O端口与部pullups。端口2输出缓冲器可以汇/源四的TTL投入。当1秒写入港2针,他们是拉高的部pullups,可作为投入。作为投入,端口2引脚的外部被拉低将电源电流(IIL)由于部pullups。端口2排放高阶地址字节在获取外部程序存储器和在访问外部数据存储器,使用16位地址(MOVXDPTR)。在此应用程序,端口2使用强大的部pullups当发光谱。在访问外部数据存储器,使用8位地址(MOVX里),端口2发出的容,P2的特殊功能寄存器。端口2还收到高阶地址位和一些控制信号在Flash编程和核查。

端口3

端口3是8位双向I/O端口与部pullups。端口3输出缓冲器可以汇/源四的TTL投入。当1秒写入端口3针,他们是拉高的部pullups,可作为投入。作为

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论