基于单片机的智能电梯控制系统设计.doc 联系客服

发布时间 : 星期三 文章基于单片机的智能电梯控制系统设计.doc更新完毕开始阅读5231004974c66137ee06eff9aef8941ea66e4b58

B ACC PSW IP P3 IE P2 F0H E0H D0H B8H B0H A8H A0H B寄存器 累加器 程序状态字 中断优先级控制寄存器 P3口锁存器 中断允许控制寄存器 P2口锁存器 串行口锁存器 串行口控制寄存器 P1口锁存器 定时器/计数器1(高8位) 定时器/计数器1(低8位) 定时器/计数器0(高8位) 定时器/计数器0(低8位) 定时器/计数器方式控制寄存器 定时器/计数器控制寄存器 数据地址指针(高8位) 数据地址指针(低8位) 堆栈指针 P0口锁存器 电源控制寄存器 SBUF 99H SCON 98H P1 TH1 TH0 TL1 TL0 90H 8DH 8CH 8BH 8AH TMOD 89A TCON 88H DPH DPL SP P0 83H 82H 81H 80H PCON 87H 表2.2 STC89C52单片机内部寄存器表

堆栈介绍:日常生活中,我们都注意到过这样的现象,家里洗的碗,一只一只摞起来,最晚放上去的放在最上面,而最早放上去的则放在最下面,在取的时候正好相反,先从最上面取,这种现象我们用一句话来概括:“先进后出,后进

先出”。请大家想想,还有什么地方有这种现象?其实比比皆是,建筑工地上堆放的砖头、材料,仓库里放的货物,都是“先进后出,后进先出”,这实际是一种存取物品的规则,我们称之为“堆栈”。

在单片机中,我们也可以在RAM中构造这样一个区域,用来存放数据,这个区域存放数据的规则就是“先进后出,后进先出”,我们称之为“堆栈”。为什么需要这样来存放数据呢?存储器本身不是可以按地址来存放数据吗?对,知道了地址的确就可以知道里面的内容,但如果我们需要存放的是一批数据,每一个数据都需要知道地址那不是麻烦吗?如果我们让数据一个接一个地放置,那么我们只要知道第一个数据所在地址单元就可以了(看图2)如果第一个数据在27H,那么第二、三个就在28H、29H了。所以利用堆栈这种方法来放数据可以简化操作

那么51中堆栈什么地方呢?单片机中能存放数据的区域有限,我们不能够专门分配一块地方做堆栈,所以就在内存(RAM)中开辟一块地方,用于堆栈,但是用内存的哪一块呢?还是不好定,因为51是一种通用的单片机,各人的实际需求各不相同,有人需要多一些堆栈,而有人则不需要那么多,所以怎么分配都不合适,怎样来解决这个问题?分不好干脆就不分了,把分的权利给用户(编程者),根据自已的需要去定吧,所以51单片机中堆栈的位置是可以变化的。而这种变化就体现在SP中值的变化,看图2.2,SP中的值等于27H不就相当于是一个指针指向27H单元吗?当然在真正的51机中,开始指针所指的位置并非就是数据存放的位置,而是数据存放的前一个位置,比如一开始指针是指向27H单元的,那么第一个数据的位置是28H单元,而不是27H单元,为什么会这样,我们在学堆栈命令时再说明。其它的SFR,我们在用到时再介绍。

图2.2堆栈指示

第三章 软件设计

1.程序设计流程图

主程序流程图如图3.1所示。程序编写为了达到可读性强,所有功能都做了划分,分别封装成不同的子程序,要执行哪个子程序只要在主程序当中调用即可。

图3.1主程序流程图

按键排队子程序流程图如图3.2所示。这部分实现的主要功能是按照时间的先后顺序分别将四层电梯的电梯外及电梯内的按键动作做好排队。等待按键处理程序的调用。排队原则按照先按键的先排队,后按后排对,同一按键按下并排队后,在未处理前,不做再次排队的原则。