微机原理与接口技术课程设计报告电梯调度模拟系统 Word格式.docx
《微机原理与接口技术课程设计报告电梯调度模拟系统 Word格式.docx》由会员分享,可在线阅读,更多相关《微机原理与接口技术课程设计报告电梯调度模拟系统 Word格式.docx(16页珍藏版)》请在冰豆网上搜索。
因为每一楼层上都有2个上行、下行按钮(第一层和第
五层除外),实验设备上仅有8个开关,因此这里我们将楼层设置为5层,用幵关状态的变化模拟表示哪一楼层上行或者下行按钮被按下。
开关与楼层对应关系如下:
K1:
第一层向上
K2:
第二层向上
K3:
第三层向上
K4:
第四层向上
K5:
第二层向下K 6:
第三层向下
K7:
第四层向下
K8:
第五层向下
8255A8255A8255A可以选用并行接口芯片的PA端口读取开关的状
态,题目要求当电梯运行时,用红色发光二极管表示电梯上行,绿色发光二极管表示电梯下行,因此可以用的PB端口控制两个二极
管的亮灭(连线要与控制字一致,且为低电平时灯才亮),在电梯运
行过程中保持灯处于点亮的状态,到达目的楼层后将灯熄灭。
用户进入电梯后通过键盘输入目的楼层,电梯继续运行。
同时在电梯运行过程中,用7段数码管表示电梯当前所处的楼层,用7段数码管显示不同数字表示上行或者下行过程,这个过程可以使用8254定时器进行7段数码管定时显示的功能,也可以书写一段延时程序进行延时。
7段数码管显示时需要给它低电平、显示的数、高电平,因此可以用的PC口控制给7段数码管送高低电平和显示的
第三部分
流程
8255A8255A程序利用的PA口循环读取开关的变化,当开关有变化时跳出循环,编写程序查找哪个开关变化,并对应记录该楼层处运行的方向。
初始化时电梯在第一层,若为K1幵关变化,则等待用
户键盘输入目的楼层(模拟用户进入电梯后的按键动作),若为其他
开关变化,则进入上行或者下行。
上行时先用的PB口给红色发光二极管送个低电平,点亮红灯,表示上行,将当前的楼层数作为参数传递给7段数码管,然后调用7段数码管显示当前楼层,经过一段延时之后将当前楼层数减1,查看是否到达目的楼层,若没有到达则继续调用7段数码管显示当前楼层,直至电梯到达目的楼层,
此时将灯熄灭;
同理可得下行的过程。
当电梯到达目的楼层后,等待用户键盘输入要去的楼层数,应注意目的楼层不大于S层且不小于1层,然后将输入的楼层数与当前的楼层数比较,比较过程同上到达目的楼层后电梯停下,二极管熄灭,7段数碍管的输入参数保持不变,继续等待用户输入目的楼层
原理电路图:
ADO
ADI
AD2
AD3
PAO
AD4
8255单元......
AD5
PA7
Zz.XI2.^1/—
AD6
PBO
巴及几一izihT
AD7
4Ei汉儿.-wL
A0
PB1
A1
PCO
□—
CE
PCI
RD
WR
DODID2D3D4...
总DS线D6接D7红
nAO
A1CLKIOY0DIIORDIOWR
原理电路图说明:
8255A8255A8255A的WR、RD分别接到PC104总线接口模块的
IOWR和IORD,选通线CE接IOYO,的数据线AD0~AD7、地址线
A0〜A7分别用线连接到PC104总线接口模块的数据(D0~D7)、地址线(A0~A7),的 PA口(PA0~PA7)对应接开关 K1~K8,PB口 PB
0、PB1分别接红色发光二极管和绿色发光二极管,PC口的PC0、
PCI分别接7段数码管的CLK和DI
程序代码:
STACK1SEGMENTSTACK;
堆栈段
STACK1ENDS
DATASEGMENT;
数据段P8255_AEQU0180H
P8255—BEQU 0181HP8255_CEQU0182H
P825S—CONTROLEQU0183H
OF;
QIDUANDB 9H ;
1 0A ;
DB 4H ;
2
;
DBOBOH;
3
DB99H;
4
DB92H;
5
INDIRDB1;
人在电梯内部要向哪个方向走,1为向上走,0为向下走SETlDB0;
初始化第一层时候的判断条件
SHOWDB*Thecurrentflooris:
V$'
DCLKOEQU00000000B;
CLK低电平DCLK1EQU00000001B;
CLK髙电平DINOEQU00000010B;
给PCI口送一个0DIN1EQU0000001IB;
给PCI口送一个1DELAY_SETEQU0OFFH;
延时常数DATAENDS
CODESEGMENT;
代码段ASSUMECSXODE,DS:
DATA
START:
MOVAX,DATA;
DS段初始化MOVDS,AX
;
8个开关变化表示该层有按键:
K1:
K2:
K3:
KS:
第二层向下
K6:
MOVDX,P8255—CONTROL
MOVAL,90H;
PA口输入(读取开关的状态),PB口输出(控制灯的亮度),PC口用来控制七段数码管DX,ALOUT
MOV AUOFFH ;
因力AL与A H比较是在独处开关状态后进行比较的,如果幵始令开关全为1那么不用赋初值,否则电梯幵始就要动
MOVAH,OFFH;
AH记录开关前-•时刻的状态,这里初始化开关状态要和AL-•样值
MOVCL,31H;
初始化楼层,CL代表电梯所处楼层
MOVBL,31H;
初始化为第一层,BL代表开关变化所处楼层MAIN:
PUSHAX;
保护AH和AL
MOV DX,P825S一B
MOVAL,OFFH;
给PB口送FF将灯熄灭DX,ALOUT
POPAX
CMPSETl,0;
程汴运行的吋候给七段数码管初始化敁示1,之后被墀蔽掉JNEXCALLQIDUANSHOW
INCSET1
X:
CMPCL35H;
楼层为5的吋候敁示-•次S即可,否则会不停的给七段数码管送数,会看不清楚数字的
JETEMP
CMPCL,31H;
楼层为1的时候显示一次1即可,否则会不停的给七段数码管送数,会看不淸楚数字的
CALLQIDUANSHOW;
调用七段数码管显示电梯所处楼层,把CL传递给七段数码管
TEMP:
MOVDX,P82SS—A
INAL,DX;
把开关的状态传递给8255的PA口,AL记录当前时刻的开关状态,下面将用到AL=CL,AH=CH,先保护好现场
MOVAH,1
INT21H
CMPAL,AH;
AH是前-•吋刻开关的状态
JEMAIN;
开关未变化则返回主程序继续等待
不相等说明开关肯定有变化,找哪个开关变化了
必须PUSH,保护当前时刻的开关状态AL,前一时刻的开关状态AHPUSHCX;
保护一下现场
MOVBH,0;
BH表示比较了几次,再写程序判断足哪个楼层,目的楼层想要往哪个方向走
判断哪一层开关有变化,用当前开关状态与开关前一状态比较
FLNUM:
ADDBH,1;
BH表示比较了几次,再写程序判断是哪个楼层,目的楼层想要往哪个方向走SHLAH,1;
左移一位
JCAH1;
记录移位值,如果为1则跳至H1
JMPAH0
AH1:
MOVCH,1;
CH表示前一时刻的开关状态JMPTEMPH;
CH记录初始化值的每一位移位值
AH0:
MOVCH,0
TEMPH:
SHLAL,1;
右移-位
JCAL1JMPALO
AL1:
MOVCL,1JMPTEMPLALO:
MOVCL,0TEMPL:
CMPCL,CH;
AL记录开关变化识读取开关状态的每一位移位值,CH记录初始化值(前一时刻)的每一位移位值JEFLNUM
相等说明这一位没有变化,则继续向下査找是哪个楼层
不相等则说明到了査找到是哪-层
MOVAH,1;
这里再用INDIR表示按键者想要往哪个方向走,初始化为1,表示向上走,为0则按键者想要向下走MOVINDIR,AHCMPBH,1
JEFI;
是第一层则跳转至n
CMPBH,2;
不是第一层,判断是否为第二层
JEF2;
目的楼层为第二层,按键者想要向上走CMPBH,5
JED0WN2;
目的楼层为第二戾,想要向下走
CMPBH,3;
不是第二层,判断是否为第三层
JEF3;
足第三层,想要向上走CMPBH,6
JED0WN3;
是第三层,想要向下走
CMPBH,4;
不是第三层,判断是否为第四层JE F4;
是第四层,想要向上走
CMPBH/7
JED0WN4;
第四层,想要向下走
MOVAH,O;
为第五层则只能向下走MOVINDIR,AH
JMPF5
DOWN2:
MOVAH,0MOVINDIR,AH;
INDR=OJMPF2
DOWN3:
MOVAH,0MOVINDIR,AH;
INDR=0JMPF3
DOWN4:
INDR=OJMPF4
GOMAINJMPMAIN;
通过一个GOMAIN来跳回到MAIN
FI:
POPCX
POPAX;
第1层要求坐电梯
MOVBL,31H;
BL代表目的楼层CMPCL,BL
JEGO_UP;
电梯在第一层,肯定要向上走,直接将人送到第五层
JAGO_DOWN;
电梯不在第一层,电梯要先下来F2:
POPCXPOPAX
MOVBL,32H;
第2层要求坐屯梯CMPCL,BL
JEGOMAIN
JAGO一DOWNJBGOJJP
F3:
POPCX;
第3层要求坐电梯
POPAXMOVBL,33HCMPCL,BL
JEGOMAIN;
通过一个GOMAIN来跳回到MAIN
JAGO_DOWNJBGO.UP
F4:
PO