Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- DSEG
- DISP_BUF: DS 10
- SEGMENT: DS 1
- DIGIT: DS 1
- MS: DS 1
- S: DS 1
- MINUTES: DS 1
- CSEG AT 0
- SYS_INIT:
- ;T0 - 16b, TO REFRESH DIGITS
- ;T1 - 16b, TO COUNT MS
- MOV TMOD, #00010001B
- SETB TR0 ;T0 ENABLE
- MOV TH0, #11100000B ;TODO: T0 INITIAL VALUE
- SETB TR1 ;T1 ENABLE
- MOV TH1, #11100000B ;TODO: T1 INITIAL VALUE
- ;INTERRUPT ENABLE
- SETB ET1
- SETB ET0
- SETB EA
- ;DATA INITIALIZATION
- MOV SEGMENT,#10000000B ;WHICH SEGMENT
- MOV DIGIT,#00000000B ;WHAT DIGIT
- MOV MS,#00000000B ;ms
- MOV S,#00000000B ;s
- MOV MINUTES,#00000000B ;min
- MOV R7,#0H
- MOV R5, #DISP_BUF
- MOV DPTR, #TO_7SEG
- LP:
- MOV A, R7
- CJNE A,#10,LP_OK
- SJMP DONE
- LP_OK:
- MOVC A,@A+DPTR
- MOV @R5,A
- INC R5
- INC R7
- SJMP LP
- DONE:
- SJMP $
- MAIN:
- SJMP MAIN
- TIMER_0_DISPLAY_REFRESH:
- ;ROTATE SEGMENT
- MOV A,SEGMENT
- RR A
- MOV SEGMENT, A
- ;WE WANT TO ROTATE ONLY 6
- CJNE SEGMENT, #00000010B, SEGMENT_NOT_OVERFLOWN
- MOV SEGMENT,#10000000B
- SEGMENT_NOT_OVERFLOWN:
- MOV P2, SEGMENT
- ;PREPARE FOR DIVISION
- MOV B, #10
- ;CHOOSE WHICH DIGIT DO DISPLAY
- JBC SEGMENT.0, REFRESH_MINUTES_1 ;MOZE 6 ZAMIAST 0, ZOBACZY SIE; MOZE 1 ZAMIAST 0, ZALEZY CZY INDEKSOWANE OD 0
- JBC SEGMENT.1, REFRESH_MINUTES_2
- JBC SEGMENT.2, REFRESH_SECONDS_1
- JBC SEGMENT.3, REFRESH_SECONDS_2
- JBC SEGMENT.4, REFRESH_MS_1
- JBC SEGMENT.5, REFRESH_MS_2
- TIMER_0_I_DONE:
- MOV TH0, #11100000B ;TODO: T0 INITIAL VALUE
- RETI
- REFRESH_MINUTES_1:
- MOV A, MINUTES
- AJMP REFRESH_1
- REFRESH_MINUTES_2:
- MOV A, MINUTES
- AJMP REFRESH_2
- REFRESH_SECONDS_1:
- MOV A, S
- AJMP REFRESH_1
- REFRESH_SECONDS_2:
- MOV A, S
- AJMP REFRESH_2
- REFRESH_SECONDS_1:
- MOV A, MS
- AJMP REFRESH_1
- REFRESH_SECONDS_2:
- MOV A, MS
- AJMP REFRESH_2
- REFRESH_1:
- DIV AB
- MOV P1, @DISP_BUF + A ;MOZE #
- AJMP TIMER_0_I_DONE
- REFRESH_2:
- DIV AB
- MOV P1, @DISP_BUF + B
- AJMP TIMER_0_I_DONE
- TIMER_1_COUNT_MS:
- INC MS;
- CJNE MS, #100, TIMER_1_I_DONE
- MOV MS,#0
- INC S
- CJNE S, #60, TIMER_1_I_DONE
- MOV S, #0
- INC MINUTES
- CJNE MINUTES, #99, TIMER_1_I_DONE
- MOV MINUTES, #0
- TIMER_1_I_DONE:
- MOV TH1, #11100000B ;TODO: T1 INITIAL VALUE
- RETI
- ORG 000BH
- AJMP TIMER_0_DISPLAY_REFRESH
- ORG 001BH
- AJMP TIMER_1_COUNT_MS
- TO_7SEG:
- DB 01111011B ;0
- DB 01000001B ;1
- DB 00110111B ;2
- DB 01100111B ;3
- DB 01001101B ;4
- DB 01101110B ;5
- DB 01111110B ;6
- DB 01000011B ;7
- DB 01111111B ;8
- DB 01101111B ;9
- END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement