51单片机简易电梯控制程序
ORG 00H N1 EQU 0020H ;系统初始化 ORG 0030H MOV R0,#8 MOV R7,#0 MOV N1,#0 START: MOV R2,#15 CALL XS JNB P3.5,$ CALL XIAODOU
JNB P3.5,$
CALL XINCEN CALL ANJ JMP START XINCEN: JB P3.5,B0
CALL XIAODOU JB P3.5,B0
CALL XIAODOU JB P3.5,B0
CALL XIAODOU JB P3.5,B0
CALL XIAODOU
JB P3.5,B0
SETB P0.7 SETB P0.5
MOV N1,#0 MOV R2,#0
JMP START RET
B0: JB P0.3,B1 CALL XIAODOU JB P0.3,B1
CALL XIAODOU
JB P0.3,B1 CALL XIAODOU JB P0.3,B1
CALL XIAODOU
JB P0.3,B1 MOV R0,#1
;显示数据;检测急停键是否弹起;扫描急停键;关闭输出;清空指令代码;返回开始;扫描一楼行程,获取楼层信号
;载入1层代码1,2表示1层半,3表示2层,4表
示2层半,5表示3层,6表示3层半,7表示4层 MOV R7,#1
CALL XS RET
B1: JB P0.2,B2 CALL XIAODOU JB P0.2,B2 CALL XIAODOU JB P0.2,B2 CALL XIAODOU JB P0.2,B2 CALL XIAODOU JB P0.2,B2 MOV R0,#3 MOV R7,#2
CALL XS
RET
B2: JB P0.1,B3 CALL XIAODOU JB P0.1,B3 CALL XIAODOU JB P0.1,B3 CALL XIAODOU JB P0.1,B3 CALL XIAODOU JB P0.1,B3 MOV R0,#5 MOV R7,#3
CALL XS RET
B3: JB P0.0,ANJ CALL XIAODOU
JB P0.0,ANJ CALL XIAODOU
JB P0.0,ANJ CALL XIAODOU
JB P0.0,ANJ CALL XIAODOU
JB P0.0,ANJ MOV R0,#7 MOV R7,#4
CALL XS RET
;显示数据
;扫描2楼行程,获取楼层信号;载入2层代码;扫描3楼行程,获取楼层信号;载入3层代码;扫描4楼行程,获取楼层信号;载入4层代码
ANJ: JB P2.0,C1 CALL XIAODOU
JB P2.0,C1
CALL XIAODOU JB P2.0,C1
CALL XIAODOU
JB P2.0,C1
CALL XIAODOU
JNB P2.0,$
MOV N1,#1 MOV R6,#1
MOV R2,#10 CALL XS
CALL BIJAORET
C1: JB P2.1,C2
CALL XIAODOU
JB P2.1,C2
CALL XIAODOU JB P2.1,C2
CALL XIAODOU
JB P2.1,C2
CALL XIAODOU
JNB P2.1,$
MOV N1,#3 MOV R6,#3
MOV R2,#11 CALL XS
CALL BIJAO RET
C2: JB P2.2,C3
CALL XIAODOUJB P2.2,C3
CALL XIAODOU JB P2.2,C3
CALL XIAODOUJB P2.2,C3
CALL XIAODOU
JNB P2.2,$
MOV N1,#5 MOV R6,#5
MOV R2,#12 CALL XS
CALL BIJAO
;扫描按键,获取目的层;载入目的1楼代码,R6为副寄存器
;载入目的2楼代码,R6为副寄存器;载入目的3楼代码,R6为副寄存器
RET
C3: JB P2.3,TIAO
CALL XIAODOU JB P2.3,TIAO CALL XIAODOU JB P2.3,TIAO CALL XIAODOU JB P2.3,TIAO CALL XIAODOU
JNB P2.3,$
MOV N1,#7 MOV R6,#7
MOV R2,#4 CALL XS CALL BIJAO RET
TIAO:JMP XINCEN RET
BIJAO: MOV A,R0 小 CJNE A,N1,DIFF JMP START
DIFF: JNC NEXT JMP UP RET
NEXT: JMP DOWN RET
UP: CLR P0.4 CALL OPEN SETB P0.4 CALL OPENDOOR K1: SETB P0.5 CLR P0.7 CALL XINCEN CALL CUZUO MOV A,R0
CJNE A,N1,D1 上行,返回开始
SETB P0.7
CALL OPENDOORCLR P0.6 CALL OPEN ;载入目的4楼代码,R6为副寄存器;楼层比较子程序;楼层数与目的层不相等则转到大小比较段,比较大;没有进位,说明目的层小于楼层,转到下行段;有进位,说明目的层大于楼层,转到上行段
;输出关门指令
;关门时间延时;关门完成;上行子程序段,禁止向下动作,输出上行指令;扫描行程,按键;检测否出错
;判断是否到达指定层,没有则继续上行,到达则关闭;输出开门指令;关门时间延时
SETB P0.6 ;关门完成 JMP START D1: JNC K2 INC R0 JMP K1
RET
DOWN: CLR P0.4 ;输出关门指令
CALL OPEN ;关门时间延时
SETB P0.4 ;关门完成
CALL OPENDOOR K2: SETB P0.7 ;下行子程序段,禁止向上动作,输出下行指令 CLR P0.5 CALL XINCEN ;扫描行程,按键
CALL CUZUO ;检测是否出错
MOV A,R0
CJNE A,N1,D2 ;判断是否到达指定层,没有则继续下行,到达则关闭下行,返回开始
SETB P0.5
CALL OPENDOOR CLR P0.6 ;输出开门指令 CALL OPEN ;关门时间延时
SETB P0.6 ;关门完成 JMP START D2: JC K1
DEC R0 JMP K2
RETXS: ;显示数据 子程序
MOV A,R7 SWAP A ADD A,R2 MOV P1,A
RET
CUZUO:MOV A,N1 ;出错比较子程序 CJNE A,#1,Y1 ;出错更正,若目的数不是1,2,3,4层的代码,则将副寄存器R6的值写入主寄存器N1中 RET
Y1: CJNE A,#3,Y2 RET
Y2: CJNE A,#5,Y3 RET
Y3: CJNE A,#7,Y4 RET
;开门延时子程序
;消抖动延时子程序
Y4: MOV N1,R6
RET
XIAODOU: MOV R3,#60 F1: MOV R4,#248 DJNZ R4,$ DJNZ R3,F1 RET
OPEN: MOV R3,#80 L1: MOV R4,#200 L2: MOV R5,#248 DJNZ R5,$ DJNZ R4,L2 DJNZ R3,L1 RET
OPENDOOR: MOV R3,#100 L3: MOV R4,#20 L4: MOV R5,#248 DJNZ R5,$ DJNZ R4,L4 DJNZ R3,L3 RET END
;延时开门子程序
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- dfix.cn 版权所有 湘ICP备2024080961号-1
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务