ORG 0000H AJMP START ORG 000BH AJMP
tiME ORG 001BH AJMP TIME1;*********START
启动程序***********START: MOV TMOD,#11H MOV IE,#8AH MOV TH0,#3CH ;
定时100ms MOV TL0,#0B0H MOV TH1,#0ECH ;
定时10ms MOV TL1,#78H SETB TR0 MOV SP,#6FH;*********STOP
停止程序***********STOP: CLR P0.6 CLR P0.7 MOV R3,#0 MOV DPTR,#06H ;
数码管显示“1” JB P1.7,$ ;
等待开始工作指令 CLR P2.4 CLR P2.5 ;
电动机制动 SETB P0.6 SETB P2.7 ;
蜂鸣器报警 SETB TR1 ;
启动T1 ;10ms
一次读取按键;*********
一楼上升按键选择程序***********UP1: MOV A,20H ;
目前在1楼 ORL A,21H ;
取得>1楼请求情况 ORL A,22H ANL A,#0EH JZ UP1 ;
无请求,则等待 CLR P0.7 ;
上升指示灯亮 SETB P2.5 SETB P2.7 ;
电动机正转上升;*********
二楼上升按键选择程序***********UP2: MOV DPTR,#5BH ;
到达2楼,数码管显示“2” JB 20H.1,UP21 ;
是2楼电梯间的上升请求,转UP21 JB 22H.1,UP21 ;
是电梯内目标2楼请求,转UP21 SJMP UP22UP21: CLR 20H.1 ;
清二楼电梯间上升请求标志位 CLR 22H.1 ;
清电梯内目标2楼请求标志位 SETB P0.7 ;
上升指示灯灭SETB P2.4 SETB P2.6 ;
电机正转电梯门开 MOV R2,#0 ;5s
定时开始 CJNE R2,#50,$ ;
等待5s延时 CLR P2.6 ;
门关SETB P2.5 SETB P2.7 ;
电动机正转上升UP22: MOV A,20H ORL A,21H ORL A,22H ANL A,#0CH ;
取得>2楼请求情况 JNZ UP23 AJMP DOWN22 ;>2
楼无请求,转2楼下降UP23: CLR P0.7 ;
上升指示灯亮SETB P2.5 SETB P2.7 ;
电动机正转上升 ;*********
三楼上升按键选择程序***********
UP3: MOV DPTR,#4FH ;
到达3楼,数码管显示“3” JB 20H.2,UP31 ;
是3楼电梯间的上升请求,转UP31 JB 22H.2,UP31 ;
是电梯内目标3楼请求,转UP31 SJMP UP32 UP31: CLR 20H.1 ;
清3楼电梯间上升请求标志位 CLR 22H.1 ;
清电梯内目标3楼请求标志位 SETB P0.7 ;
上升指示灯灭SETB P2.4 SETB P2.6 ;
门开MOV R2,#0 ;5s
定时开始CJNE R2,#50,$ ;
等待5s延时 CLR P2.6 ;
门关 SETB P2.5 SETB P2.7 ;
电动机正转上升 UP32: MOV A,20H ORL A,21H ORL A,22H ANL A,#08H ;
取得>3楼请求情况 JNZ UP33 AJMP DOWN32 ;>3
楼无请求,转3楼下降UP33: CLR P0.7 ;
上升指示灯亮SETB P2.5 SETB P2.7 ;
电动机正转上升 UP34: MOV DPTR,#66H ;
到达4楼,数码管显示“4”;*********
四楼下降按键选择程序***********UP41: CLR 20H.3 ;
清4楼电梯间下降请求标志位 CLR 22H.3 ;
清电梯内目标4楼请求标志位 SETB P0.7 ;
上升指示灯灭 SETB P2.4 SETB P2.6 ;
门开MOV R2,#0 ;5s
定时开始CJNE R2,#50,$ ;
等待5s延时 CLR P2.6 ;
门关 SETB P2.5 SETB P2.7 ;
电动机正转上升UD4: MOV A,50H ORL A,21H ORL A,22H ANL A,#07H ;
取得<4楼的请求情况 JNZ DOWN4 AJMP UD4DOWN4: CLR P0.6 ;
下降指示灯亮 SETB P2.5 CLR P2.7 ;
下降 ;*********
三楼下降按键选择程序***********DOWN3: MOV DPTR,#4FH ;
到达3楼,数码管显示“3” JB 21H.2,DOWN31 ;
是3楼电梯间的下降请求,转DOWN31 JB 22H.2,DOWN31 ;
是电梯内目标3楼请求,转DOWN31 SJMP DOWN32DOWN31:CLR 21H.2 ;
清3楼电梯间下降请求标志位 CLR 22H.2 ;
清电梯内目标3楼请求标志位 SETB P0.6 ;
下降指示灯灭 SETB P2.4 SETB P2.6 ;
门开MOV R2,#0 ;5s
定时开始CJNE R2,#50,$ ;
等待5s延时 CLR P2.6 ;
门关 SETB P2.5 CLR P2.7 ;
下降DOWN32:MOV A,20H ORL A,21H ORL A,22H ANL A,#03H ;
取得<3楼的请求情况 JNZ DOWN33 AJMP UP32 ;<3
无楼请求,转3楼上升DOWN33:CLR P0.6 ;
下降指示灯亮 SETB P2.5 CLR P2.7 ;
下降;*********
二楼下降按键选择程序***********DOWN2: MOV DPTR,#5BH ;
到达2楼,数码管显示“2” JB 21H.1,DOWN21 ;
是2电梯间的下降请求,转DOWN21 JB 22H.1,DOWN2 ;
是电梯内目标3楼请求,转DOWN21 SJMP DOWN22DOWN21:CLR 21H.1 ;
清2楼电梯间下降请求标志位 CLR 22H.1 ;
清电梯内目标2楼请求标志位 SETB P0.6 ;
下降指示灯灭 SETB P2.4 SETB P2.6 ;
门开MOV R2,#0 ;5s
定时开始CJNE R2,#50,$ ;
等待5s延时 CLR P2.6 ;
门关 SETB P2.5 CLR P2.7 ;
下降DOWN22:MOV A,20H ORL A,21H ORL A,22H ANL A,#02H ;
取得<2的请求情况 JNZ DOWN23 AJMP UP22 ;<2
楼请求,转2楼上升DOWN23:CLR P0.6 ;
下降指示灯亮 SETB P2.5 CLR P2.7 ;
下降DOWN1: MOV DPTR,#06H ;
到达1,数码管显示“1”DOWN11:CLR 21H.0 ;
清电梯内目标1请求标志位 SETB P0.6 ;
下降指示灯灭 SETB P2.4 SETB P2.6 ;
门开MOV R2,#0 ;5s
定时开始CJNE R2,#50,$ ;
等待5s延时 CLR P2.6 ;
门关 SETB P2.5 CLR P2.7 ;
下降CJNE R3,#0,DOWN12 ;Stop
键是否按下过 AJMP UP1DOWN12:CLR P0.6 ;
若Stop键按下过,转S1停止工作 CLR P0.7 AJMP STOP;
定时器T0中断服务程序:5s计时TIME: MOV TH0,#3CH MOV TL0,#0B0H INC R2 ;R2
计数器 RETI;********* T1
中断服务程序:按键状态检查***********TIME1: MOV TH1,#0ECH ;
每10s检查一次按键 MOV TL1,#78H MOV 6EH,A MOV 30H,P1 ;
读入所有按键状态 MOV 31H,P3 JB P1.6,TIME11 ;
若Stop键未按下,则正常运行 MOV R3,#0FFH ;Stop
键按下,标志R3置非0数 MOV 20H,#0 ;
清除全部电梯间上升请求 MOV 21H,#0 ;
清除全部电梯间下降请求 MOV 22H,#0 ;
清除全部电梯内目标楼层请求 MOV 30H,#0FFH ;
修改读入的按键状态,使之为 MOV 31H,#0FEH ;
电梯内目标为一楼 CLR TR1 ;
并关闭T1,不再读取按键TIME11: MOV A,30H CPL A ANL A,#07H ;
取得电梯间上升请求 ORL 20H,A MOV A,20H ;
取得上升指示灯状态 CPL A ANL A,#07H MOV 32H,A MOV A,30H CPL A ANL A,#38H ;
取得电梯间下降请求 RR A RR A ORL 21H,A MOV A,21H CPL A ANL A,#0EH RL A RL A ORL 32H,A MOV A,P0 ANL A,#0C0H ORL A,32H MOV P0,A ;
刷新上升、下降请求指示灯 MOV A,31H ANL A,#0FH ;
取得电梯内目标楼层请求 ORL 22H,A MOV A,22H CPL A MOV P2,A ;
刷新电梯内目标楼层指示灯TIME12: MOV A,6EH RETI;********* 2s
延时程序***********DLY: MOV R5,#20DLY1: MOV R6,#100DLY2: MOV R7,#250 DJNZ R7,$ DJNZ R6,DLY2 DJNZ R5,DLY1 RET END;**************** PWM
控制电梯门开关程序 ************************ ORG 0000H LMP START ORG 000EH LMP ZDCX ORG 0100H START:MOV SP,#30H ;
系统初始化,定时值为0.1 MOV DPTR,#TAB MOV TL0,#9CH MOV TH0,#9CH MOV TMOD,#02H ;
定时器T0工作方式2 MOV IE,#82H SETB TR0 LCALL QUZHI ;
取第一个R0的值 MOV R0,#A CLR P2.4 LP: JNB 20H,LP ;
输出PWM波形 CLR 20H DJNZ R0,LP CPL P2.4 LCALL QUZHI; CNE #55H,LP1 ;
当所取的数是结束标志55时, ;
程序重新开始 LMP START LP1:MOV R0,A LMP LP QUZHI:MOV A,#00H ;
取值子程序 MOVC A,@+DPTR INC DPTR RET ZDCX:SETB 20H RETI TAB:DB 7,6,15,12,24,6,30,6,24,12,15,6,7,55 ;55
为结束标志 END;*************PWM
控制电梯上升与下降程序************* ORG 0000H LMP START ORG 000EH LMP ZDCX ORG 0100H START:MOV SP,#30H MOV DPTR,#TAB MOV TL0,#9CH MOV TH0,#9CH MOV TMOD,#02H MOV IE,#82H SETB TR0 LCALL QUZHI MOV R0,#A CLR P2.5 LP: JNB 20H,LP CLR 20H DJNZ R0,LP CPL P2.5 LCALL QUZHI; CNE #55H,LP1 LMP START LP1:MOV R0,A LMP LP QUZHI:MOV A,#00H MOVC A,@+DPTR INC DPTR RET ZDCX:SETB 20H RETI TAB:DB 5,10,15,20,5,10,15,5,5,10,15,20,5,10,5,55 END
看到你好几次了!亲,有兴趣一起研究吗!
一周热门 更多>