资源描述
题 目:基于AT89S52单片机的模拟电梯设计物理与电气学院电子信息科学与技术学院:专业: 电信101班级: 学生姓名: 完成日期: 摘 要:单片机即单片微型计算机(Single-Chip Microcomputer ),是集CPU ,RAM ,ROM ,定时,计数和多种接口于一体的微控制器。其中51单片机是各种单片机中最为典型和最有代表性的一种,广泛应用于各个领域.电梯是集机械原理应用、电气控制技术、微处理器技术、系统工程学等多学科和技术分支于一体的机电设备,它是建筑中的永久垂直交通工具。本论文选择AT89S52为核心控制元件,使用宏晶公司的STC89C51RC加外围器件作控制单元,用数码管显示,使用单片机C语言进行编程制作了一个八层电梯模拟系统。其原理图可分为按键部分、显示部分、电机部分、最小系统部分。两个按键(一个电梯内,一个电梯外)对应一个楼层,另有开门、关门两个按键。芯片一旦检测到某楼层的按键被按下,就会在对应端口输出5V高电平驱动电机来到该楼层,程单序会延迟几分钟,等人进入电梯后,关门,去到要去的楼层。在整个过程中,数码管会显示楼层数。最小系统为单片机提供时钟信号和复位功能。 关键词:STC89C52 单片机 模拟电梯 四位一体数码管目 录一、设计任务11.1设计内容与要求1二、硬件系统实现22.1 AT89S52芯片简介22.2功能模块图22.3显示模块32.4复位开关模块42.5 振荡电路模块52.6程序下载模块52.7设计电路及连线6三、软件设计73.1 软件功能描述73.2 流程图设计8 3.3 单片机C语言程序88899四、系统的调试114.1 硬件的调试114.2 软件的调试11五、设计心得11六、参考文献13一设计任务1.1. 设计内容与要求随着现代高科技的发展,住房和办公用楼都已经逐渐向高层发展。电梯是高层宾馆、商店、住宅、多层仓库等高层建筑不可缺少的垂直方向的交通运输工具。1889年美国奥梯斯升降机公司推出的世界上第一部以电动机为动力的升降机,同年在纽约市马累特大厦安装成功。随着建筑物规模越来越大,楼层也越来越高,对电梯的调速精度、调速范围等静态和动态特性都提出了更高的要求。由于传统的电梯运行逻辑控制系统采用的是继电器逻辑控制线路。采用这种控制线路,存在易出故障、维护不便、运行寿命较短、占用空间大等缺点。 电梯控制系统是比较复杂的一个大型系统,在计算机诞生的几十年里,继电器控制系统为电梯控制的发展做了巨大的贡献,但在性能上和PLC还是有本质上的差距。在科技的不断发展下,单片机控制系统很快可以解决抗扰性,成为方便有效的电梯控制系统。此单片机模拟电梯用绿色发光二极管组成的箭头来指示电梯当前是处于上升状态还是下降状态,用数码管显示当前是处于哪一层,用红色发光二极管指示电梯走到哪一层会停.电源接通后,若没有人按下停止按键,它就以每层2秒的速度一直上下运行,若有人按下某一层的停止按键,它就会在相应的那一层停止4秒钟,并伴有开门和关门的声音提示。二 硬件系统实现2.1.AT89S52芯片AT89S52低功耗高性能CMOS 8位单片机,片内8k Bytes ISP(In-system programmable)的可反复擦写1000次的FLASH只读程序存储器,器件采用ATMEL公司之高密度、非易失性存储技术制造,兼容标准 MCS-51指令系统及80C51引脚结构,片上Flash允许程序存储器在系统可编程,亦适于常规编程器。单芯片上,拥有8 位CPU及在系统可编程FLASH,使AT89S52为众多嵌入式控制应用系统提供高灵活、超有效之解决方案。AT89S52之特点:40个引脚,8k Bytes Flash片内程序存储器,256 bytes的随机存取数据存储器(RAM),32个外部双向输入/输出(I/O)口,5个中断优先级2层中断嵌套中断,2个16位可编程定时计数器,2个全双工串行通信口,看门狗(WDT)电路,片内时钟振荡器。图2.1 AT89S52管脚图:AT89S52功能:8k字节FLASH,256字节RAM,32位I/O口线,看门狗定时器,2 个数据指针,三个16 位定时器/计数器,一6向量2级中断结构,全双工串行口,片内晶振及时钟电路。AT89S52可降至0Hz静态逻辑操作,支持2种软件可选节电模式。空闲模式下,CPU 停止工作,允许RAM、定时器/计数器、串口、中断继续工作。P0口8位漏极开路之双向I/O口。作为输出口,每位能驱动8个TTL逻辑电平。对P0端口写“1”时,引脚用作高阻抗输入。访问外部程序和数据存储器时,P0口亦被作为低8位地址/数据复用。在这种模式下,P0不具有内部上拉电阻。在FLASH编程时,P0口亦用来接收指令字节;在程序校验时,输出指令字节。程序校验时,需外部上拉电阻。P1口有内部上拉电阻的8位双向I/O 口,p1 输出缓冲器能驱动4 个 TTL 逻辑电平。对P1 端口写“1”时,内部上拉电阻把端口拉高,此时可作输入口用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。对P1 端口写“1”时,内部上拉电阻把端口拉高,此时可作输入口用。作输入用时,被外部拉低的引脚因内部电阻,将输出电流(IIL)。此外,P1.0及P1.2分别作定时器/计数器2之外部计数输入(P1.0/T2)及时器/计数器2之触发输入(P1.1/T2EX),详见表1所示。在flash编程及校验时,P1口接收低8位地址字节。 表2.1.1引脚号第二功能P1.0T2(定时器/计数器T2的外部计数输入),时钟输出P1.1T2EX(定时器/计数器T2的捕捉/重载触发信号和方向控制)P1.5MOSI(在系统编程用)P1.6MISO(在系统编程用)P1.7SCK(在系统编程用)P2口有内部上拉电阻的8 位双向I/O口,P2输出缓冲器能驱动4个TTL 逻辑电平。对P2 端口写“1”时,内部上拉电阻把端口拉高,此时可作输入口。作输入用时,被外部拉低的引脚因内部电阻,将输出电流(IIL)。 在访问外部程序存储器或用16位地址读取外部数据存储器,P2口送出高八位地址。在这种应用中,P2口用很强的内部上拉发送1。在用8位地址访问外部数据存储器时,P2口输出P2锁存器之内容。在FLASH编程及校验时,P2口亦接收高8位地址字节及一些控制信号。 P3口有内部上拉电阻的8位双向I/O口,p3输出缓冲器能驱动4个TTL 逻辑电平。对P3端口写“1”时,内部上拉电阻把端口拉高,此时可用作输入口。作输入用时,被外部拉低的引脚因内部电阻之原因,将输出电流(IIL)。P3口亦作为AT89S52特殊功能(第二功能)用,如表2所示。在FLASH编程及校验时,P3口亦接收些控制信号。此外,P3口亦接收些用于FLASH闪存编程及程序校验的控制信号。 表2.1.2端口引脚第二功能P3.0RXD(串行输入口)P3.1TXD(串行输出口)P3.2INTO(外中断0)P3.3INT1(外中断1)P3.4TO(定时/计数器0)P3.5T1(定时/计数器1)P3.6WR(外部数据存储器写选通)P3.7RD(外部数据存储器读选通)RST复位输入。振荡器工作时,RST引脚有两个机器周期以上高电平将是单片机复位。 ALE/PROG访问外部程序存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低8位字节。一般,ALE仍以时钟振荡频率的1/6输出固定之脉冲信号,故它可对外输出时钟或用于定时目的。需注意:每当访问外部数据存储器时将跳过一个ALE脉冲。对FLASH存储器编程期间,该引脚亦用于输入编程脉冲(PROG)。若必要,可通过对特殊功能寄存器(SFR)区中的8EH单元的D0位置位,可禁止ALE操作。该位置位后,只有一条MOVX及MOVC指令方能将ALE激活。此外,该引脚会被微弱拉高,单片机执行外部程序时,应设置ALE禁止位无效。PSEN程序储存允许(PSEN)输出是外部程序存储器之读选通信号,AT89S52由外部程序存储器取指令(或数据)时,每个机器周期两次PSEN有效,即输出两个脉冲,在此期间,当访问外部数据存储器,将跳过两次PSEN信号。 EA/VPP外部访问允许,要CPU仅访问外部程序存储器(地址为0000H-FFFFH),EA端须保持低电平(接地)。需注意:若加密位LB1被编程,复位时内部会锁存EA端状态。若EA端为高电平(接Vcc端),CPU则执行内部程序存储器之指令。 FLASH存储器编程时,该引脚加上+12V的编程允许电源Vpp,当然这须是该器件是使用12V编程电压Vpp。XTAL1振荡器反相放大器及内部时钟发生电路之输入端。XTAL2振荡器反相放大器之输出端。单片机最小系统要使单片机工作起来,最基本的电路的构成为1、 单片机电源: AT89S51单片机的工作电压范围:4.0V5.5V, 所以通常给单片机外接5V直流电源。连接方式为VCC(40脚):接电源+5V端VSS(20脚):接电源地端2、时钟电路:单片机工作的时间基准,决定单片机工作速度。时钟电路就是振荡电路,向单片机提供一个正弦波信号作为基准,决定单片机的执行速度。AT89S51单片机时钟频率范围:0 33MHz。 3、复位电路:确定单片机工作的起始状态,完成单片机的启动过程。单片机接通电源时产生复位信号,完成单片机启动,确定单片机起始工作状态。手动按键产生复位信号,完成单片机启动,确定单片机的初始状态。 通常在单片机工作出现混乱或“死机”时,使用手动复位可实现单片机“重启”。2.2.功能模块图在本设计中需用到AT89S52芯片,1个数码管,一个蜂鸣器,复位电路,8个按键,24个发光二极管。复位键 输入时钟电路 AT89S52单片机 输出显示 图2.2功能模块2.3 显示模块显示电路采用了1个LED数码管,单片机I/O的应用最典型的是通过I/O口与7段LED数码管构成显示电路。7段LED数码管,则在一定形状的绝缘材料上,利用单只LED组合排列成“8”字型的数码管,分别引出它们的电极,点亮相应的点划来显示出0-9的数字。LED数码管根据LED的接法不同分为共阴和共阳两类,了解LED的这些特性,对编程是很重要的。因为不同类型的数码管,除了它们的硬件电路有差异外,编程方法也是不同的。将多只LED的阴极连在一起即为共阴式,而将多只LED的阳极连在一起即为共阳式。以本设计共阴式为例,如把阴极接地,在相应段的阳极接上正电源,该段即会发光。当然,LED的电流通常较小,一般均需在回路中接上限流电阻。假如我们将b和c段接上正电源,其它端接地或悬空,那么b和c段发光,此时,数码管显示将显示数字“1”。而将a、b、d、e和g段都接上正电源,其它引脚悬空,此时数码管将显示“2”。 图2.3 LED数码管 2.4 复位开关模块MCS-51单片机的复位是靠外部电路实现的。MCS-51单片机工作之后,只要在它的RST引线上加载10ms以上的高电平,单片机就能有效地复位。MCS-51单片机通常采用上电自动复位和按键复位两种方式。最简单的复位电路如下图: 图2.4 复位开关上电瞬间,RC电路充电,RST引线出现正脉冲,只要RST保持10ms以上的高电平,就能使单片机有效的复位。在应用系统中,有些外围芯片也需要复位。如果这些芯片复位端的复位电平与单片机的复位电平的要求一致,则可以将复位信号与之相连。2.5 振荡器电路模块MCS-51单片机内部的振荡电路是一个增益反相放大器,引线 XTAL1和XTAL2分别为反向振荡放大器的输入及内部时钟工作电路的输入和来自反向振荡器的输出,该反向放大器可以配置为片内振荡器。单片机内部虽然有振荡电路,但要形成时钟,外部还需要附加电路。石英晶体振荡和陶瓷振荡均可采用。输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。51单片机的时钟产生方式有两种,分别为:内部时钟方式和外部时钟方式。利用其内部的振荡电路XTAL1和XTAL2引线上外接定时元件,内部振荡电路便产生自激振荡,用示波器可以观察到XTAL2输出的时钟信号。在MCS-51单片机一般常用内部时钟方式,也就是在XTAL1和XTAL2之间连接晶体振荡器与电容构成稳定的自激振荡器,晶体和电容决定了单片机的工作时间精度为1微秒。晶体可在1.2-12MHz之间选择。MCS-51单片机在通常应用情况下,使用振荡频率为6MHZ的石英晶体,而12MHZ频率的晶体主要是在高速串行通信情况下才使用,在这里我用的是12MHZ石英晶体。对电容无严格要求,但它的取值对振荡频率输出的稳定性、大小及振荡电路起振荡速度有一点影响。C1和C2可在20-100PF之间取值,一般情况取30PF。外部时钟方式是把外部振荡信号源直接接入XTAL1或XTAL2。由于XTAL2逻辑电平不是TTL的,所以还要接一个上拉电阻。2.6程序下载模块 该模块完成的功能是把源程序代码下载到AT89S51芯片中,它需要和微机上的ISP下载器软件配合使用来完成这样的功能。ISP为在线编程接口,J2为标准10P JTAG下载接口。ISP在线编程接口为89S51单片机提供了方便的在线编程方法。使用时将ISP下载线一端与PC并口相连接,一端与ISP接口相连,使用ISP下载软件即可实现MCU在线编程。下载线插接说明:两排十针下载口, 1号引脚的边上有一个小方框;下载线的凸口为正方向,凸口的右侧边的第一个插孔为1号引脚,这一点一定要切记,不然的话程序下载不进去。2.7 设计电路及连线 图2.5电路连接图 三软件设计3.1 软件功能描述此单片机模拟电梯用绿色发光二极管组成的箭头来指示电梯当前是处于上升状态还是下降状态,用数码管显示当前是处于哪一层,用红色发光二极管指示电梯走到哪一层会停.电源接通后,若没有人按下停止按键,它就以每层2秒的速度一直上下运行,若有人按下某一层的停止按键,它就会在相应的那一层停止4秒钟,并伴有开门和关门的声音提示。3.2 初始化按键查询1层按键按下2层按键按下5层按键按下6层按键按下3层按键按下7层按键按下4层按键按下8层按键按下对应中断程序流程图设计3.3 单片机C语言程序模拟电梯程序#includesbit key3=P11;sbit key2=P10;sbit key1=P12;sbit key4=P13;sbit key5=P14;sbit key6=P37;sbit key7=P36; /关门升降sbit key8=P35; /开门延时键sbit P24=P24;sbit P25=P25;sbit P26=P26;sbit P27=P27;sbit zhengzhuan=P20; /电动机正转sbit fanzhuan=P21; /电动机反转unsigned int i,j;unsigned char sanlou=0;unsigned charerlou=0;bit biaozhi=0;unsigned charyilou=0;unsigned char qusanlou=0;unsigned char querlou=0;unsigned char quyilou=0; unsigned char code tab=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90;/-延时1ms函数-void delay(unsigned int t) for(i=0;it;i+) for(j=0;j121;j+) ; /-外按三楼函数-void display3(void) if(qusanlou=1) for(i=0;i500;i+) for(j=0;j121;j+) ; if(P26=0)/如果现在在一楼则显示从一楼到三楼函数 P2=0xb0; P0=tab1; for(i=0;i500;i+) for(j=0;j121;j+) if(key2=0) /判读外二楼有没有人按下 delay(10); while(key2=0); erlou=1; if(key8=0&qusanlou=1);/同时要是之前的内三楼键按下才有效 delay(10); while(key8=0); delay(1000); /如果再次开门就延时1s if(key7=0) delay(10); while(key7=0); i=200;/把i变成200跳出延时函数 zhengzhuan=1; fanzhuan=0; /电机正转 delay(1000); delay(1000); delay(1000); delay(1000);/上一层楼的时间 P2=0xd0; P0=tab2; for(i=0;i500;i+) for(j=0;j121;j+) if(key8=0&qusanlou=1); /同时要是内三楼键按下才有效 delay(10); while(key8=0); delay(1000); /如果再次开门就延时1s if(key7=0) delay(10); while(key7=0); i=200;/把i变成200跳出延时函数 if(erlou=1) delay(1000); /在二楼停留多1s当模拟有人进出 zhengzhuan=0; fanzhuan=0; /电机停止 zhengzhuan=1; fanzhuan=0; /电机正转 delay(1000); delay(1000); delay(1000); delay(1000);/上一层楼的时间 P2=0xe0; P0=tab3; for(i=0;i500;i+) for(j=0;j121;j+) if(key8=0&qusanlou=1); /同时要是内三楼键按下才有效 delay(10); while(key8=0); delay(1000); /如果再次开门就延时1s if(key7=0) delay(10); while(key7=0); i=200;/把i变成200跳出延时函数 if(P25=0) P2=0xd0; P0=tab2; zhengzhuan=1; fanzhuan=0; /电机正转 delay(1000); delay(1000); delay(1000); delay(1000); P2=0xe0; P0=tab3; if(P24=0)/如果现在还是显示3楼 P2=0xe0; P0=tab3; sanlou=0; erlou=0; qusanlou=0; zhengzhuan=0; fanzhuan=0; /电机停止/-外按二楼函数,不过最后还是到先三楼去-void display2(void) if(querlou=1) for(i=0;i500;i+) for(j=0;j121;j+) ; if(P26=0) /如果现在在一楼则显示从一楼到二楼再到三楼函数 P2=0xb0; P0=tab1; for(i=0;i500;i+) for(j=0;j121;j+) if(key8=0&querlou=1); /同时要是内二楼键按下才有效 delay(10); while(key8=0); delay(1000); /如果再次开门就延时1s if(key7=0) delay(10); while(key7=0); i=200;/把i变成200跳出延时函数 zhengzhuan=1; fanzhuan=0; /电机正转 delay(1000); delay(1000); delay(1000); delay(1000); /上一层楼的时间 P2=0xd0; P0=tab2; for(i=0;i500;i+) for(j=0;j121;j+) if(key8=0&querlou=1); /同时要是内二楼键按下才有效 delay(10); while(key8=0); zhengzhuan=0; fanzhuan=0; /电机停止 delay(1000); /如果再次开门就延时1s if(key7=0) delay(10); while(key7=0); i=200;/把i变成200跳出延时函数 zhengzhuan=0; fanzhuan=0; /电机停止 delay(1000); delay(1000); delay(1000);/在二楼停留多1s当模拟有人进出 zhengzhuan=1; fanzhuan=0; /电机正转 delay(1000); delay(1000); delay(1000); delay(1000);/上一层楼的时间 P2=0xe0; P0=tab3; for(i=0;i500;i+) for(j=0;j121;j+) if(key8=0&querlou=1); /同时要是内二楼键按下才有效 delay(10); while(key8=0); delay(1000); /如果再次开门就延时1s if(key7=0) delay(10); while(key7=0); i=200;/把i变成200跳出延时函数 erlou=0; biaozhi=biaozhi;/为了不让在显示完上升函数时再去显示下降函数 /- / 如果现在是在三楼的话 /- if(P24=0&biaozhi=0) /如果现在在三楼的话则从三楼到二楼再到一楼 P2=0xe0; P0=tab3; for(i=0;i200;i+) for(j=0;j121;j+) if(key8=0&querlou=1); /同时要是内二楼键按下才有效 delay(10); while(key8=0); delay(1000); /如果再次开门就延时1s if(key7=0) delay(10); while(key7=0); i=200;/把i变成200跳出延时函数 zhengzhuan=0; fanzhuan=1; /电机反转 delay(1000); delay(1000); delay(1000); delay(1000);/上一层楼的时间 P2=0xd0; P0=tab2; for(i=0;i200;i+) for(j=0;j121;j+) if(key8=0&querlou=1); /同时要是内二楼键按下才有效 delay(10); while(key8=0); zhengzhuan=0; fanzhuan=0; /电机停止 delay(1000); /如果再次开门就延时1s if(key7=0) delay(10); while(key7=0); i=200;/把i变成200跳出延时函数 zhengzhuan=0; fanzhuan=0; /电机停止 delay(1000); /在二楼停留多2S当模拟有人进出 zhengzhuan=0; fanzhuan=1; /电机反转 delay(1000); delay(1000); delay(1000); delay(1000);/上一层楼的时间 P2=0xb0; P0=tab1; for(i=0;i200;i+) for(j=0;j121;j+) if(key8=0&querlou=1); /同时要是内二楼键按下才有效 delay(10); while(key8=0); delay(1000); /如果再次开门就延时1s if(key7=0) delay(10); while(key7=0); i=200;/把i变成200跳出延时函数 erlou=0; biaozhi=0; querlou=0; zhengzhuan=0; fanzhuan=0; /电机停止/-外按一楼函数-void display1(void) if(quyilou=1) for(i=0;i500;i+) for(j=0;j121;j+) ; if(P24=0) /如果现在在三楼则显示从三楼到一楼函数 P2=0xe0; P0=tab3; for(i=0;i200;i+) for(j=0;j121;j+) if(key2=0)/判读外二楼有没有人按下 delay(10); while(key2=0); erlou=1; if(key8=0&quyilou=1); /同时要是内一楼键按下才有效 delay(10); while(key8=0); delay(1000); /如果再次开门就延时1s if(key7=0) delay(10); while(key7=0); i=200;/把i变成200跳出延时函数 zhengzhuan=0; fanzhuan=1; /电机反转 delay(1000); delay(1000); delay(1000); delay(1000);/上一层楼的时间 P2=0xd0; P0=tab2; for(i=0;i200;i+) for(j=0;j121;j+) if(key8=0&quyilou=1); /同时要是内一楼键按下才有效 delay(10); while(key8=0); zhengzhuan=0; fanzhuan=0; /电机停止 delay(2000); /如果再次开门就延时2s if(key7=0) delay(10); while(key7=0); i=200;/把i变成200跳出延时函数 if(erlou=1) zhengzhuan=0; fanzhuan=0; /电机停止 delay(1000); /在二楼停留多1s当模拟有人进出 zhengzhuan=0; fanzhuan=1; /电机反转 delay(1000); delay(1000); delay(1000); delay(1000);/上一层楼的时间 P2=0xb0; P0=tab1; for(i=0;i200;i+) for(j=0;j121;j+) if(key8=0&quyilou=1); /同时要是内一楼键按下才有效 delay(10); while(key8=0); delay(2000); /如果再次开门就延时2s if(key7=0) delay(10); while(key7=0); i=200;/把i变成200跳出延时函数 yilou=0; erlou=0; if(P25=0) P2=0xd0; P0=tab2; zhengzhuan=0; fanzhuan=1; /电机反转 delay(1000); delay(1000); delay(1000); delay(1000); P2=0xb0; P0=tab1; yilou=0; if(P26=0)/如果现在还是显示3楼 P2=0xb0; P0=tab1; yilou=0; quyilou=0; zhengzhuan=0; fanzhuan=0; /电机停止/-void main (void) P2=0xb0; P0=tab1; /一开始显示一楼 while(1) if(key3=0) /判断外三楼键 delay(10); while(key3=0); sanlou=1; qusanlou=0; if(sanlou=1) display3(); /显示外三楼的函数 /- if(key2=0) /判读外二楼键 delay(10); while(key2=0); erlou=1; querlou=0; if(erlou=1) display2(); /显示外二楼的函数 /- if(key1=0) /判读外一楼键 delay(10); while(key1=0); yilou=1; quyilou=0; if(yilou=1) display1(); /显示外一楼的函数 /- / 电梯内键 /- if(key4=0)/判断内去三楼键 delay(10); while(key4=0); sanlou=1; qusanlou=1; if(key5=0)/判断内去二楼键 delay(10); while(key5=0); erlou=1; querlou=1; if(key6=0)/判断内去一楼键 delay(10); while(key6=0); yilou=1; quyilou=1; 四系统调试4.1 硬件调试硬件调试是利用开发系统、基本测试仪器(万用表、示波器等),检查用户系统硬件中存在的故障。硬件调试可分为静态调试与动态调试两步进行。 静态调试 静态调试是在用户系统未工作时的一种硬件检测。 第一步:目测。检查外部的各种元件或者是电路是否有断点。 第二步:万用表测试。先用万用表复核目测中有疑问的连接点,再检测各种电源线与地线之间是否有短路现象。 第三步:加电检测。给板加电,检测所有的插座或是器件的电源端是否符合要求的值 。第四步:联机检查。因为只有用单片机开发系统才能完成对用户系统的调试。动态调试 动态调试是在用户系统工作的情况下,发现和排除用户系统硬件中存在的器件内部故障、器件连接逻辑错误等的一种硬件检查。动态调试的一般方法是由近及远、由分到合。由分到合是指首先按逻辑功能将用户系统硬件电路分为若干块。当调试电路时,与该元件无关的器件全部从用户系统中去掉,这样可以将故障范围限定在某个局部的电路上。当各块电路无故障后,将各电路逐块加入系统中,再对各块电路功能及各电路间可能存在的相互联系进行调试,由分到合的调试就可完成。由近及远是将信号流经的各器件按照距离单片机的逻辑距离进行由近及远的分层,然后分层调试。4.2 软件调试 软件调试是通过对用户程序的汇编、连接、执行来发现程序中存在的语法错误与逻辑错误并加以排除纠正的过程。(1) 实验平台 软件调试在KEIL编译器下进行,运行在Windows XP操作系统下。源程序编译及仿真调试应分段或以子程序为单位一个一个进行,最后可结合硬件实时调试。(2) 实验步骤 1) 按照系统硬件连线图连好。 2) 把编写好的程序进行汇编并输入单片机AT89S51仿真器和对其进行初始化。3) 先按下开启键,观察LED能否正常显示,再观察发光二极管形成的上升下降信号和LED显示的数字增大减小是否一致,当这些都符合指标后,再按下任意按键,看其是否能达到预想目的。接着试验复位开关,检验能否完成清零的功能,并作出相应调整。五设计心得六、参考文献:1 AT89C52-AT89S52性能简介2 杨欣.电路设计与仿真.北京:清华大学出版社,2006 3 ATMEL AT89S51.Atmel Corporation 20014 楼然苗51系列单片机设计实例北京:航空航天大学出版社,20045 王田苗嵌入式系统设计与实例开发北京:清华大学出版社,20056 ATMEL技术资料,ATMEL官方网站7 张友德单片微型机原理应用与实验上海:复旦大学出版社,19968 万长建.用单片机实现高层电梯运行自动控制.实验技术与管理.2007,59 Intel. Microcontroller Handbook.198810 张娅莉.单片机在电梯自动控制中的应用.工业控制计算机.
展开阅读全文