⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lll.asm

📁 此系统是本人做毕业设计时候的老东西了
💻 ASM
📖 第 1 页 / 共 2 页
字号:
;*****************************************************************************
;*****************************************************************************
;*****************************************************************************
;							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 + -