اطلاعیه

Collapse
No announcement yet.

برنامه اسانسور با 8051

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    برنامه اسانسور با 8051

    خواهش میکنم برنامه اسانسور 4طبقه 8051 را را سایت بذارید

    #2
    پاسخ : برنامه اسانسور با 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

    دیدگاه

    لطفا صبر کنید...
    X