خواهش میکنم برنامه اسانسور 4طبقه 8051 را را سایت بذارید
اطلاعیه
Collapse
No announcement yet.
برنامه اسانسور با 8051
Collapse
X
-
پاسخ : برنامه اسانسور با 8051
HS0 EQU P2.4
HS1 EQU P2.5
HS2 EQU P2.6
HS3 EQU P2.7
PB1 EQU P0.0
PB2 EQU P0.1
PB3 EQU P0.2
PB4 EQU P0.3
PB5 EQU P0.4
PB6 EQU P0.5
SS_A EQU P0.6
SS_B EQU P0.7
MOTOR_A EQU P2.0
MOTOR_B EQU P2.1
CAR_POS EQU 30H ; variable for current car position
TAR_FLR EQU 31H ; variable for targeted floor
ORG 0000H ; origin to address 0
HOME:
MOV CAR_POS, #3 ; assume car position at level 3
MOV TAR_FLR, #0 ; set targeted floor to 0
CALL WAIT ; call wait subroutine
SCAN:
JB PB1, SCAN1 ; check for key pressed
JNB PB1, $ ; hold until key released
MOV TAR_FLR, #0 ; set targeted floor to 0
CALL WAIT ; call wait subroutine
SCAN1:
JB PB2, SCAN2 ; check for key pressed
JNB PB2, $ ; hold until key released
MOV TAR_FLR, #1 ; set targeted floor to 1
CALL WAIT ; call wait subroutine
SCAN2:
JB PB3, SCAN3 ; check for key pressed
JNB PB3, $ ; hold until key released
MOV TAR_FLR, #1 ; set targeted floor to 1
CALL WAIT ; call wait subroutine
SCAN3:
JB PB4, SCAN4 ; check for key pressed
JNB PB4, $ ; hold until key released
MOV TAR_FLR, #2 ; set targeted floor to 2
CALL WAIT ; call wait subroutine
SCAN4:
JB PB5, SCAN5 ; check for key pressed
JNB PB5, $ ; hold until key released
MOV TAR_FLR, #2 ; set targeted floor to 2
CALL WAIT ; call wait subroutine
SCAN5:
JB PB6, SCAN6 ; check for key pressed
JNB PB6, $ ; hold until key released
MOV TAR_FLR, #3 ; set targeted floor to 3
CALL WAIT ; call wait subroutine
SCAN6:
SJMP SCAN
WAIT:
MOV A, TAR_FLR ; compare current car position with
; targeted floor
CLR C
SUBB A, CAR_POS
JZ WAIT_EXIT ; go to WAIT_EXIT if reached
JC WAIT1 ; go to WAIT1 if targeted floor is
; above the current car position
CALL UP ; else, call UP subroutine
SJMP WAIT2
WAIT1:
CALL DOWN ; call DOWN subroutine
WAIT2:
JB HS0, WAIT3 ; if Hall sensor 0 is ON
MOV CAR_POS, #0 ; set car position to 0
CLR SS_A ; set 7-seg display to 0
CLR SS_B
WAIT3:
JB HS1, WAIT4 ; if Hall sensor 1 is ON
MOV CAR_POS, #1 ; set car position to 1
CLR SS_A ; set 7-seg display to 1
SETB SS_B
WAIT4:
JB HS2, WAIT5 ; if Hall sensor 2 is ON
MOV CAR_POS, #2 ; set car position to 2
SETB SS_A ; set 7-seg display to 2
CLR SS_B
WAIT5:
JB HS3, WAIT ; if Hall sensor 3 is ON
MOV CAR_POS, #3 ; set car position to 3
SETB SS_A ; set 7-seg display to 3
SETB SS_B
SJMP WAIT
WAIT_EXIT:
CALL STOP ; call STOP subroutine
RET ; return from subroutine
DOWN:
CLR MOTOR_A ; car moves down
SETB MOTOR_B
RET ; return from subroutine
UP:
SETB MOTOR_A ; car moves up
CLR MOTOR_B
RET ; return from subroutine
STOP:
SETB MOTOR_A ; car stops
SETB MOTOR_B
RET ; return from subroutine
END
دیدگاه