Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ;====================================================================
- ; Main.asm file generated by New Project wizard
- ;
- ; Created: Чт окт 20 2016
- ; Processor: AT89C52
- ; Compiler: ASEM-51 (Proteus)
- ;====================================================================
- $NOMOD51
- $INCLUDE (80C52.MCU)
- ;====================================================================
- ; DEFINITIONS
- ;====================================================================
- ;====================================================================
- ; VARIABLES
- ;====================================================================
- ;====================================================================
- ; RESET and INTERRUPT VECTORS
- ;====================================================================
- RED_LED BIT P3.5
- RED_ENABLE BIT 2AH.0
- INDIC_VAL DATA 2BH
- START BIT P0.0
- STOP BIT P0.1
- RST BIT P0.2
- FLAG BIT 2AH.2
- TIMER_COUNTER DATA 2CH
- CNT1 DATA 30h
- CNT2 DATA 31h
- RES DATA 32h
- TMP DATA 33h
- LEFT_IND BIT P3.6
- RIGHT_IND BIT P3.7
- LEFT_IND_VAL DATA 2DH
- RIGHT_IND_VAL DATA 2EH
- ORG 0000H
- JMP INIT
- ORG 000BH
- JMP HANDLE_TIMER
- org 0013h
- CLR IE1
- RETI
- ORG 0003H
- JMP BUTTON
- ORG 100H
- ARRAY_1:
- mov 60h, #0h
- mov 61h, #1h
- mov 62h, #6h
- mov 63h, #3h
- mov 64h, #4h
- ret
- ARRAY_2:
- mov 65h, #2h
- mov 66h, #6h
- mov 67h, #7h
- mov 68h, #8h
- mov 69h, #9h
- ret
- SSEG_MAP:
- mov 40h, #00111111b
- mov 41h, #00000110b
- mov 42h, #01011011b
- mov 43h, #01001111b
- mov 44h, #01100110b
- mov 45h, #01101101b
- mov 46h, #01111101b
- mov 47h, #00000111b
- mov 48h, #01111111b
- mov 49h, #01101111b
- mov 4Ah, #01110111b
- mov 4Bh, #01111100b
- mov 4Ch, #01111001b
- mov 4Dh, #11011110b
- mov 4Eh, #11111001b
- mov 4Fh, #11110001b
- mov 50h, #11110110b ;H
- ret
- BUTTON:
- JB RST, NOT_RESET
- SETB FLAG
- JMP INIT
- NOT_RESET:
- JB STOP, NO_STOP
- ;JNB TR0, NO_STOP
- CLR TR0
- ;CLR ET0
- JMP DISPOSE
- NO_STOP:
- JNB START, START_TIMER
- JMP DISPOSE
- START_TIMER:
- ;SETB ET0;
- SETB TR0;
- DISPOSE:
- RETI
- INIT:
- call ARRAY_1
- call ARRAY_2
- call SSEG_MAP
- call Find
- MOV P0, #255;
- MOV P2, #255;
- ;INIT INDICATOR
- MOV INDIC_VAL, #0
- MOV LEFT_IND_VAL, #11000000B
- MOV RIGHT_IND_VAL, #11000000B
- ;INIT TIMER
- MOV TIMER_COUNTER, #244
- MOV TL0, #0
- MOV TH0, #-8
- MOV TMOD, #01100001B
- SETB EA;Enable all interrupt
- CLR TR0;Timer0 run control
- SETB EX0;External interrupt
- SETB EX1
- SETB ET0;Timer overflow interrupt
- SETB IT0;Timer control register
- SETB IT1
- ;INIT LED
- SETB RED_LED
- CLR RED_ENABLE
- JB FLAG, HANDLE;
- JMP IND_LOOPER
- SJMP $
- IND_LOOPER:
- CLR RIGHT_IND
- MOV P2, LEFT_IND_VAL
- SETB LEFT_IND
- CLR LEFT_IND
- MOV P2, RIGHT_IND_VAL
- SETB RIGHT_IND
- JMP IND_LOOPER
- HANDLE_TIMER:
- MOV TH0, #-8
- DJNZ TIMER_COUNTER, RETS ;decrement and if TIMER_COUNTER !=0 go to RETS
- MOV TIMER_COUNTER, #244
- JNB RED_ENABLE, M1; if RED_ENABLE == 0 go to M1
- SETB RED_LED
- CLR RED_ENABLE
- INC INDIC_VAL;
- JMP INDICATE;
- RETI
- M1:
- CPL RED_LED
- SETB RED_ENABLE
- RETS:
- RETI
- HANDLE:
- CLR FLAG
- JMP RETURN
- INDICATE:
- MOV A, INDIC_VAL
- RTRY0:
- CJNE A, #0, RTRY1 ; compare a and #0 if a != 0 then go to rtry1
- MOV RIGHT_IND_VAL, #11000000B
- JMP RETURN;
- RTRY1:
- CJNE A, #1, RTRY2
- MOV RIGHT_IND_VAL, #11111001B;
- JMP RETURN;
- RTRY2:
- CJNE A, #2, RTRY3
- MOV RIGHT_IND_VAL, #10100100B;
- JMP RETURN;
- RTRY3:
- CJNE A, #3, RTRY4
- MOV RIGHT_IND_VAL, #10110000B;
- JMP RETURN;
- RTRY4:
- CJNE A, #4, RTRY5
- MOV RIGHT_IND_VAL, #10011001B;
- JMP RETURN;
- RTRY5:
- CJNE A, #5, RTRY6
- MOV RIGHT_IND_VAL, #10010010B;
- JMP RETURN;
- RTRY6:
- CJNE A, #6, RTRY7
- MOV RIGHT_IND_VAL, #10000010B;
- JMP RETURN;
- RTRY7:
- CJNE A, #7, RTRY8
- MOV RIGHT_IND_VAL, #11111000B;
- JMP RETURN;
- RTRY8:
- CJNE A, #8, RTRY9
- MOV RIGHT_IND_VAL, #10000000B;
- JMP RETURN;
- RTRY9:
- CJNE A, #9, RTRY10
- MOV RIGHT_IND_VAL, #10010000B;
- JMP RETURN;
- RTRY10:
- CJNE A, #10, RTRY11
- MOV LEFT_IND_VAL, #11111001B;
- MOV RIGHT_IND_VAL, #11000000B;
- JMP RETURN;
- RTRY11:
- CJNE A, #11, RTRY12
- MOV LEFT_IND_VAL, #11111001B;
- MOV RIGHT_IND_VAL, #11111001B;
- JMP RETURN;
- RTRY12:
- CJNE A, #12, RTRY13
- MOV LEFT_IND_VAL, #11111001B;
- MOV RIGHT_IND_VAL, #10100100B;
- JMP RETURN
- RTRY13:
- CJNE A, #13, RTRY14
- MOV LEFT_IND_VAL, #11111001B;
- MOV RIGHT_IND_VAL, #10110000B;
- JMP RETURN;
- RTRY14:
- CJNE A, #14, RTRY15
- MOV LEFT_IND_VAL, #11111001B;
- MOV RIGHT_IND_VAL, #10011001B;
- JMP RETURN;
- RTRY15:
- CJNE A, #15, RTRY16
- MOV LEFT_IND_VAL, #11111001B;
- MOV RIGHT_IND_VAL, #10010010B;
- JMP RETURN;
- RTRY16:
- CJNE A, #16, CLEAR
- MOV LEFT_IND_VAL, #11111001B;
- MOV RIGHT_IND_VAL, #10000010B;
- JMP RETURN;
- CLEAR:
- MOV INDIC_VAL, #0;
- MOV LEFT_IND_VAL, #11000000B
- MOV RIGHT_IND_VAL, #11000000B
- JMP RETURN;
- RETURN:
- RETI
- Find:
- mov RES, #10h
- mov CNT1, #60h
- FindLoop:
- mov CNT2, #65h
- mov R0, CNT1
- mov a, CNT1
- mov TMP, @R0
- IntLoop:
- mov R0, CNT2
- mov a, R0
- mov a, @R0
- xrl a, TMP
- jz FindSuccess
- inc CNT2
- mov a, CNT2
- cjne a, #6Ah, IntLoop
- inc CNT1
- mov a, CNT1
- cjne a, #65h, FindLoop
- FindEnd:
- mov a, RES
- add a, #40h
- mov R0, a
- mov P1, @R0
- ret
- FindSuccess:
- mov RES, TMP
- jmp FindEnd
- ret
- END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement