第十三章单片机系统的开发知识目标与技能目标•知识目标:掌握单片机系统的开发一般过程;掌握单片机系统的开发方法;•技能目标:能够开发简单的单片机系统;能够协助开发复杂的单片机系统;项目四任务10数字万年历单片机系统的开发•要求:开发完整的数字万年历系统,包括时钟芯片的使用、温度传感器的使用、液晶字符显示模块的使用,键盘程序的编制,整个系统的联调。分析:•单片机系统的开发一般方法是怎样的?对于像万年历这一较复杂的系统进行开发,应有比较固定的方法与工具。如果还要扩展系统又应如何进行呢?数字万年历中的时钟芯片如何选择?温度传感器有何特点,如何使用?整个系统的程序是怎样的?单片机系统的开发方法•对于一个实际的课题和项目,从任务的提出到系统的选型、确定、研制直至投入运行要经过一系列的过程。•通常,开发一个单片机应用系统需要经过以下几个过程:开发过程•·系统需求调查;•·可行性分析;•·系统方案设计;•·系统建造;•·系统调试;•·系统方案局部修改、再调试;•·生成正式产品。•1.系统需求调查•调查的主要内容包括:①原有系统的结构、功能以及存在的问题;②国内外同类系统的最新发展情况以及与新系统有关的各种技术资料;③同行业中哪些用户已经采用了新的系统,它们的结构、功能、使用情况以及所产生的经济效益。2.可行性分析•从以下几个方面进行论证:①市场或用户需求;②经济效益和社会效益;③技术支持与开发环境;④现在的竞争力与未来的生命力。3.系统方案设计•主要内容包括:①系统结构设计;②系统功能设计;③系统实现方法。4.系统建造•将前面产生的系统方案付诸实施,将硬件框图转化为具体电路,软件流程用程序加以实现。•设计硬件电路时,单片机的选用对电路结构及复杂度有较大影响。•一个合适的单片机将会最大限度地降低其外围连接电路,从而简化整个系统的硬件。5.系统调试•系统调试检验所设计系统的正确与可靠,从中发现组装问题或设计错误。6.系统方案局部修改、再调试•对于系统调试中发现的问题或错误以及出现的不可靠因素要提出有效的解决方法,然后对原方案做局部修改,再进入调试。7.生成正式系统(或产品)•提供一个能正确可靠运行的系统(或产品),而且还应提供关于该系统(或产品)的全部文档。•这些文档包括系统设计方案、硬件电原理图、软件程序清单、软/硬件功能说明、软/硬件装配说明书、系统操作手册等。•在开发产品时,还要考虑到产品的外观设计、包装、运输、促销、售后服务等商品化问题。开发过程流程图图13.1单片机系统开发过程流程图两种开发方法•方法1:通过硬件仿真器开发单片机开发系统图13.2单片机系统开发示意图•在PC机中进行程序设计与开发,通过仿真器与用户系统相连接,在仿真器中运行程序,在用户系统中观察运行结果,看是否符合设计要求。•如果有不符合的地方再回到计算机中修改,然后重复上述过程。•直到符合设计要求后,将程序用编程器写入用单片机中,用单片机代替仿真头,让用户系统脱离计算机及仿真器独立运行。方法2:软件模拟开发系统•现代由于开发周期缩短及开发成本压缩的需要,经常用软件模拟硬件来进行系统开发。•基于Proteus(Keil)仿真软件及KeilC编辑开发软件的单片机设计与开发具有很大的优越,已成为主流的开发方法。•这种开发方法,不需要花费任务硬件,效率高。•当然,最终还是要让程序在硬件系统上运行,但一般来说,仿真的结果与实际硬件执行的结果是一致的。单片机系统的扩展•程序存储器的扩展;•数据存储器的扩展;知识目标与技能目标•知识目标:掌握存储器的扩展方法;掌握片外存储器地址的确定方法;•技能目标:能够正确扩展单片机的存储系统;能够编写对片外存储器操作的程序;1程序存储器扩展•当系统软件较大、片内ROM容量不够时:•●改用片内带较大容量ROM的单片机型号,如宏晶科技的STC89C51系列单片机,其程序存储空间由4K~64K可选。•虽然单片机价格随程序存储器容量增大而有所增加,但由于系统集成度高,电路简单,可靠性高,这一方案是性价比较高的首选方案。•●在单片机外部扩展程序存储器,可扩展以下程序存储器常用芯片:•①紫外线擦除电可编程EPROM型(ErasableProgrammableReadOnlyMemory),如2716(2K×8)、2732(4K×8)、2764(8K×8)、27128(16K×8)、27256(32K×8)、27512(64K×8)等;•②电可擦除可编程EEPROM型,如2816(2K×8)、2864(8K×8)等;•③FlashROM型如AT29**系列、AT49**系列并行Flash等。•单片机的CPU指挥一个电子单元需要三类信息(如同邮递员送邮件一样):地址(门牌-到哪里?)、数据(货物-送什么?)、控制(要求-什么时间送?)三种总线:CB、AB、DBCPUROMRAMT/C……控制总线ControlBus数据总线D/AtaBus地址总线AddressBus图13.3单片机三总线结构•地址总线(AB):传送地址信息;•数据总线(DB):传递数据信息;•控制总线(CB):传递控制信息。•总线结构的特点:结构简单、规则、易于扩展。单片机引脚与片外总线的关系图13.4程序存储器扩展电路图•数据总线——P0口•控制总线——P3口+控制引脚•地址总线——P0+P2•地址锁存器——低8位地址暂时存放处•地址总线宽度为16位(A0~A15),片外可寻址范围216=64K控制总线:•ALE接74LS373的锁存端LE,为高电平时打开,为低电平时锁存,ALE与LE的要求刚好一至(ALE在一个时钟周期内,先为高电平,这时单片机P0口上送出的地址的低8位,然后变为低电平-锁存了地址,随后P0变为数据总线(74LS373由于地址已锁存,保持不变。));•单片机的与存储器的输出允许信号相连,在单片机读存储器是,用来选通存储器。PSENOE•使用外部程序存储器,故内外程序存储器选择信号要接地。EA2数据存储器及外部设备的扩展SCM外设1外设2外设n外设n控制总线CB数据总线DB地址总线AB图13.5数据存储器及外设扩展总线图•单片机还可扩展外部数据存储器,它将外围设备也当作数据存储器处理,即外部数据存储器与外围设备共用一个地址区(64KB)。•单片机内部采用的是总线式结构,单片机与外部设备的连接也需要总线方式。控制存储器的引脚•:控制程序存储器的读操作,在执行指令的取指阶段和从程序存储器中取数据时有效(在外部数据存储器中没有用);•:控制数据存储器的读操作,从外部数据存储器中读取数据时有效(在外部程序存储器中不用);这里与输出允许端相连。•:控制数据存储器的写操作,向外部数据存储器中写数据时有效。这里与写允许端相连。•ALE还是与锁存器74LS373的锁存湍相连,其作用与上例相同。PSENRDWROECE图13.6用6116扩展数据存储器•P0口作为数据总线直接与数据存储器的数据总线相连(I/O0-I/O7)。•P0经过锁存后与数据存储器的地址低8位A0-A7相连,•P2.0-P2.2与数据存储器的地址高位A8-A10相连,•同时还通过P2.7选中它的片选有效信号(只有它有效,数据存储器才能选中。)。外部数据存储器相对于单片机的地址•0xxxx00000000000B-0xxxx11111111111B=0H-07ffH(假定x=0).C51访问外部RAM的方法1•在程序中加入专用语句:•#includeabsacc.H//含有宏定义的包含语句•#define变量名XBYTE[地址常数]//地址定义语句•此后,便可通过对已定义变量访问所需的端口•例如,对占用片外RAM100H的端口进行读操作:•#includeabsacc.h•#defineportXBYTE[0x100];•unsignedchartemp1,temp2;•……•temp1=port;//读端口操作•port=temp2;//写端口操作•……C51访问外部RAM的方法2•将访问的外部端口用指针变量表示,指针变量的存储类型设置为xdata,在程序中为指针变量设置访问单元。•例如,同样针对上述举例,程序设计如下:•unsignedcharxdata*PORT;//定义xdata指针变量•unsignedchartemp1,temp2;•……•PORT=0x100;//指向0x100地址•……•temp=*PORT;//读0x100端口•*PORT=temp2;//写0x100端口•……项目设计训练•请为8051系统扩展8K的外部RAM(建议采用6264);•设计一个程序将你的学号存入XRAM的第一个存储单元,并从第一个单元读出这一数据(到单片机中RAM),验证是否为你的学号。•请为8051系统扩展32K的外部RAM(建议采用62256);•设计一个程序将你的学号存入XRAM的地址号最大的存储单元,并从这一单元读出这一数据(到单片机中RAM),验证是否为你的学号。地址的计算•①.各存储器芯片的类型•②.各存储器芯片的地址范围A15A14A13A12A11A10A8ALEAD7AD0PSENRDWRIC6Y3Y2Y1Y0G2AG2BCBAA10A8A7A0D7D0OECSA10A8A7A0D7D0OECSA10A8A7A0D7D0CSA10A8A7A0D7D0CSIC1IC2IC3IC4RDWRRDWR+IC58051图13.23习题五-2电路图•现有8031单片机、74ls373锁存器、1片2764EPROM和2片6116RAM,请使用它们组成1个单片机应用系统,要求:•(1)画出硬件电路连线图,并标注主要引脚;•(2)指出该应用系统程序存储空间和数据存储器各自的地址范围。I2C应用实例AT24C01XTAL218XTAL119ALE30EA31PSEN29RST9P0.0/AD039P0.1/AD138P0.2/AD237P0.3/AD336P0.4/AD435P0.5/AD534P0.6/AD633P0.7/AD732P1.01P1.12P1.23P1.34P1.45P1.56P1.67P1.78P3.0/RXD10P3.1/TXD11P3.2/INT012P3.3/INT113P3.4/T014P3.7/RD17P3.6/WR16P3.5/T115P2.7/A1528P2.0/A821P2.1/A922P2.2/A1023P2.3/A1124P2.4/A1225P2.5/A1326P2.6/A1427U1AT89C51SCK6SDA5WP7U224C01B•AT24C系列串行E2PROM具有I2C总线接口功能,功耗小,宽电源电压(根据不同型号2.5V~6.0V),工作电流约为3mA,静态电流随电源电压不同为30μA~110μA。AT24C系列E2PROM接口及地址选择写一个字节的时序图连续写的时序图读任意地址内容应用程序•/*=======================================================•24C01存储器I2C总线实验C语言例子•=======================================================•电路图如图所示•#includereg51.h•#includeintrins.h•sbitSDA=0x90;•sbitSCL=0x91;•//函数声明•unsignedchari2c_read(unsignedchar);•voidi2c_write(unsignedchar,unsignedchar);•voidi2c_send8bit(unsignedchar);•unsignedchari2c_receive8bit(void);•voidi2c_start(void);•voidi2c_stop(void);•biti2c_ack(void);•//=======================================================•voidmain(void)