📄 lll.asm
字号:
;*****************************************************************************
;*****************************************************************************
;*****************************************************************************
; 05楼宇毕业设计
;项目:8层电梯模拟控制
;设计成员:周强 设计时间:3月20日至今
;设计地点:江西应用工程职业学院实验单片机开发室
;指导老师:饶裕
ORG 0
XIANWEI EQU P2.0 ; 红外接收
DOWN EQU P2.1 ; 电动机反转
UP EQU P2.2 ; 正转
JINGGAO EQU P2.3 ; 报警
MEN EQU P2.4 ; 门
RS EQU P2.5
RW EQU P2.6
E EQU P2.7
DOOR EQU P3.0 ; 门开关
CHECK EQU P3.1 ; 检修开关
BAOHU EQU P3.7 ; 断电保护红外接收
MOV R2,#00H ; 电梯状态寄存器
MOV P0,#01H ; 1602B初始化
ACALL ENABLE ; 清除屏幕
MOV P0,#38H
ACALL ENABLE ; 8位点阵方式
MOV P0,#08H
ACALL ENABLE ; 显示光标不闪烁
MOV P0,#06H
ACALL ENABLE ; 显示顺序设置(左到右)
MOV P0,#80H
ACALL ENABLE ; 显示位置
ACALL DISP ; 显示当前楼层信号
MOV P0,#0CH
ACALL ENABLE
SETB XIANWEI
LPP: JNB BAOHU,MAIN ; 断电保护
CLR DOWN ; 下行
JB BAOHU,LPP ; 再次判断
AJMP MAIN ; 主程序
ORG 0BH ; 定时器0入口地址
LJMP TT0
ORG 30H
MAIN: SETB DOWN ; 停止下行
MOV R0,#20H ; 20地址送R0
MOV R3,#5FH ; 循环次数送R3
MOV P1,#0FFH
CLER: MOV @R0,#00H ; 00H送R0的内容地址
INC R0 ; 对RAM中20H~~7FH单元清0
DJNZ R3,CLER
SETB 7FH ; 门关闭信号为1
MOV TMOD,#01H ; 定时器设为方式1
MOV IE,#82H ; 开中断总允许
MOV R3,#100 ; DELAY1循环次数
MOV TH0,#3CH ; 50MS定时初值
MOV TL0,#0B0H
MOV 30H,#1 ; 楼层信号指针
SETB MEN ; 模拟门限位开关
SETB DOOR ; 保持门关
MOV R2,#0FFH ; 电梯状态寄存器
MOV P0,#01H ; 1602B初始化
ACALL ENABLE ; 清除屏幕
MOV P0,#38H
ACALL ENABLE ; 8位点阵方式
MOV P0,#08H
ACALL ENABLE ; 显示光标不闪烁
MOV P0,#06H
ACALL ENABLE ; 显示顺序设置(左到右)
MOV P0,#80H
ACALL ENABLE ; 显示位置
ACALL DISP ; 显示当前楼层信号
MOV P0,#0CH
ACALL ENABLE
setb jinggao
SCAN: ACALL KEYBORDSCAN ; 键盘扫描
JB JINGGAO,LOOP1 ; 警告判断
AJMP ERR ; 报警
LOOP1: MOV R0,#21H ; 送楼层指针给R0
CJNE @R0,#1H,LOOP ; 判断1楼是否有请求信号
CLR MEN ; 开电梯门
CLR 7FH
LOOP: MOV @R0,#0
MOV 31H,#00H
MOV R0,#22H ; 送楼层指针给R0
LP: CJNE @R0,#0,BBC ; 楼层请求信号判断
INC R0 ; 下一层
CJNE R0,#29H,LP ; 没到最顶层时返回继续判断下一层
SJMP SCAN ; 无请求返回继续扫描
BBC: JNB 7FH,SCAN ; 门是否关闭,没关闭继续接受请求信号
NEXT2: SETB MEN
MOV @R0,#0 ; 清除请求信号
SETB TR0 ; 开定时中断
SETB DOWN ; 关闭电梯向下信号
CLR UP ; 开启电梯向上信号
MOV R2,#11H ; 送电梯运行信号到R2
ACALL DISP ; 显示当前运行状态
ACALL KEYBORDSCAN ; 读取键盘信号
JB JINGGAO,NEXT3
AJMP ERR
NEXT3: MOV A,30H ; 送当前楼层指针信号到A
ADD A,#30H ; 加30H取当前楼层信号
MOV R0,A ; 保存当前楼层信号
CJNE @R0,#0FFH,NEXT1 ; 比较当前楼层信号是否需要乘坐电梯
MOV @R0,#00H ; 停止后将请求信号清除
MOV A,R0 ; 当前楼层信号指针送到A
SUBB A,#10H ; 减10H求得当前楼层
MOV R0,A ; 当前楼层信号送R0
MOV @R0,#0 ; 清除当前楼层请求信号
SETB UP ; 关闭电动机
CLR TR0 ; 关闭定时器
MOV R2,#0FFH ; 送停止信号到信号指针R2
ACALL DISP ; 显示当前状态
MOV R3,#50
SETB 7FH
CLR MEN ; 开电梯门
WAIT: ACALL KEYBORDSCAN ; 读取键盘信号
JB JINGGAO,WWW
AJMP ERR
WWW: JNB 7FH,AK
ACALL DELAY1 ; 调延时子程序
ACALL DELAY1 ; 等待
DJNZ R3,WAIT ; 等待
MOV R3,#50 ; 等待
SETB MEN ; 关闭电梯门
AK: MOV A,30H ; 将当前楼层信号送A
ADD A,#30H ; 加30H求当前楼层信号指针
NEXT1: CJNE A,#38H,NEXT2 ; 比较判断是否到达最高层
SETB UP ; 是则短暂停留
CLR TR0 ; 关闭定时器
MOV R2,#0FFH ; 送停止信号到显示指针
ACALL DISP ; 显示当前楼层信号
ACALL KEYBORDSCAN ; 读取键盘信号
NTXT11: MOV R2,#00H ; 送向下信号到R2
CLR DOWN ; 启动电动机返回向下
SETB TR0 ; 开启定时器
ACALL DISP ; 显示当前运行信号
ACALL KEYBORDSCAN ; 读取键盘信号
JB JINGGAO,NEXT22
AJMP ERR
NEXT22: MOV A,30H ; 将当前楼层信号送A
ADD A,#30H ; 加30H求当前楼层请求信号指针
MOV R0,A ; 转存到R0
CJNE @R0,#0FFH,GODOWN ; 判断当前楼层是否有电梯请求信号
MOV @R0,#00H ; 是则将当前信号清除
MOV A,R0 ; 将当前楼层请求信号指针送A
SUBB A,#10H ; 减10H求当前楼层信号指针
MOV R0,A ; 信号指针送R0
MOV @R0,#0 ; 清除当前楼层请求信号
SETB DOWN ; 关闭电动机
MOV R2,#0FFH ; 送停止信号到R2
CLR TR0 ; 关闭定时器
ACALL DISP ; 显示当前信号
CLR MEN ; 开电梯门
SETB 7FH
WAIT1: ACALL KEYBORDSCAN ; 读取键盘信号
JB JINGGAO,GGG
AJMP ERR
GGG: JNB 7FH,AKK
ACALL DELAY1 ; 等待
ACALL DELAY1 ; 等待
DJNZ R3,WAIT1 ; 等待
MOV R3,#50 ; 恢复初值
SETB MEN ; 关闭电梯门
AKK: MOV A,30H ; 当前楼层信号送A
ADD A,#30H ; 加30H求当前楼层请求信号指针
GODOWN: CJNE A,#31H,NTXT11 ; 判断是否到达最底层
SETB DOWN ; 是则关闭电动机
CLR TR0 ; 关闭定时器
MOV R2,#0FFH ; 送停止信号到R2
MOV A,R0 ; 送当前楼层请求信号指针到A
SUBB A,#10H ; 减10H求当前楼层信号指针
MOV R0,A ; 转存R0
MOV @R0,#0 ; 清除当前楼层请求信号
SETB 7FH
ACALL DISP ; 显示当前信号
AJMP SCAN ; 返回键盘扫描
;=======================================检修主程序
ERR: SETB UP ; 关闭电动机
SETB DOWN
MOV R2,#33H ; 送检修信号
ACALL DISP ; 显示当前
MOV P0,#08H ; 关显示
ACALL ENABLE
ACALL DELAY ; ...
ACALL DELAY
ACALL DELAY ; ...
ACALL DELAY
ACALL DELAY
ACALL DELAY
ACALL DELAY
MOV P0,#0CH ; 开显示
ACALL ENABLE
JB CHECK,ERR ; 检修键是否按下
ACALL DELAY
JB CHECK,ERR
ACALL DELAY
ERR3: ACALL DISP ; 显示当前
MOV P0,#08H ; 关显示
ACALL ENABLE
ACALL DELAY ; ...
ACALL DELAY
ACALL DELAY ; ...
ACALL DELAY
ACALL DELAY
ACALL DELAY ; ...
ACALL DELAY
MOV P0,#0CH ; 开显示
ACALL ENABLE
JNB CHECK,ERR3 ; 等待键松开
MOV 65H,#0FFH ; 送警告标志到65H
SETB MEN ; 关闭电梯门
SETB JINGGAO ; 关闭生光报警
MOV A,30H
ADD A,#20H
CJNE A,#21H,ERRR
AJMP ERR2
ERRR: CLR DOWN ; 向下运行
SETB TR0 ; 开启定时器
ERR2: ACALL DISP ; 显示当前
MOV P0,#08H ; 关显示
ACALL ENABLE
ACALL DELAY ; ...
ACALL DELAY
ACALL DELAY ; ...
ACALL DELAY
ACALL DELAY
ACALL DELAY ; ...
ACALL DELAY
MOV P0,#0CH ; 开显示
ACALL ENABLE
MOV A,30H
ADD A,#20H
CJNE A,#21H,ERR2 ; 是否到达最低层
SETB DOWN ; 关闭电梯
CLR TR0 ; 关闭定时器
MOV 30H,#100
ERR1: ACALL DISP ; 显示当前
MOV P0,#08H ; 关显示
ACALL ENABLE
ACALL DELAY ; ...
ACALL DELAY
ACALL DELAY ; ...
ACALL DELAY
ACALL DELAY
ACALL DELAY ; ...
ACALL DELAY
MOV P0,#0CH ; 开显示
ACALL ENABLE
JB CHECK,ERR1 ; 检修完毕??
ACALL DELAY
JB CHECK,ERR1
ACALL DELAY
ERR4: ACALL DISP ; 显示当前
MOV P0,#08H ; 关显示
ACALL ENABLE
ACALL DELAY ; ...
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -