- $MOD842
- liczbaPrzerwan EQU 1
- licznik EQU 15536
- liczbaPrzerwan2 EQU 200
- ORG 0
- SJMP START
- ;Liczy 2 000 000 ~1 sekunda
- ;2kk = 50k * 40
- ORG 00Bh ;Timer 0 przerwanie
- CALL USTAW_LICZNIK0
- DJNZ R5, KONIEC0
- INC R1
- CJNE R1, #00001010b, Dalej ;Młodsza sekunda licznona 0 - 9
- JMP Max1
- Dalej:
- MOV R5, #liczbaPrzerwan
- KONIEC0:
- RETI
- ORG 01Bh
- CALL USTAW_LICZNIK1
- DJNZ R6, KONIEC1
- CPL F0
- MOV R6, #liczbaPrzerwan2
- KONIEC1:
- RETI
- Max1: ;Starsza sekunda licznona 0 - 5
- MOV R1, #00000000b
- INC R2
- CJNE R2, #00010110b, Dalej
- JMP Max2
- Max2: ;Młodsza minuta liczona 0 - 9
- MOV R2, #00010000b
- INC R3
- CJNE R3, #01101010b, Dalej
- JMP Max3
- Max3: ;Starsza minuta liczona 0 - 5
- MOV R3, #01100000b
- INC R4
- CJNE R4, #00110110b, Dalej
- JMP Max4
- Max4: ;Młodsza godzina 0 - 9
- MOV R4, #00110000b
- INC R7
- CJNE R7, #00000100b, Nofour ;4
- CJNE R0, #00010010b, Dalej;2
- MOV R7, #00000000b
- MOV R0, #00010000b
- CJNE R3, #01101010b, Dalej
- JMP Dalej
- Nofour:
- CJNE R7, #00001010b, Dalej ;10
- JMP Max7
- Max7:
- MOV R7, #00000000b
- INC R0
- JMP Dalej
- START:
- ;0 na wyszystkich wyświetlaczach
- MOV R1, #00000000b
- MOV R2, #00010000b
- MOV R3, #01100000b
- MOV R4, #00110000b ;R1 - R4 przechowuja wartosci minut i sekund
- MOV R7, #00000000b
- MOV R0, #00010000b ;R0 i R7 to odpowiednio młodszy i starszy bit godzin wyświetlanych na przemian z minutami/sekundami
- MOV R5, #liczbaPrzerwan ;liczba przerwan do timera0
- MOV R6, #liczbaPrzerwan2 ;liczba przerwan do timera1
- ;SETB RS0 = 1, Przejście do banku 1, RS0 = 0, powrót do zerowego
- MOV IE, #10001010b ;przerwania dla licznika 1, licznika 0
- MOV TMOD, #010001b ;Tryb licznikow
- CALL USTAW_LICZNIK0
- CALL USTAW_LICZNIK1
- SETB TR0
- SETB TR1
- ;wyświetlanie na wyszystkich wyświetlaczach
- Petla:
- JB F0, WyswietlajGodziny ;Skok jezeli R7.0 != 0
- ;WyswietlajMinuty:
- MOV P2, R1
- CALL SHORT_DELAY
- MOV P2, R2
- CALL SHORT_DELAY
- MOV P2, R4
- CALL SHORT_DELAY
- MOV P2, R3
- CALL SHORT_DELAY
- JMP Petla
- WyswietlajGodziny:
- MOV P2, R0
- CALL SHORT_DELAY
- MOV P2, R7
- CALL SHORT_DELAY
- JMP Petla
- SHORT_DELAY:
- MOV DPTR,#0FFh
- DJNZ DPL, $
- DJNZ DPH, $
- RET
- USTAW_LICZNIK0: ;Ustawia poczatkowa wartosc licznika
- MOV TL0, #low licznik
- MOV TH0, #high licznik
- RET
- USTAW_LICZNIK1: ;Ustawia poczatkowa wartosc licznika
- MOV TL1, #low licznik
- MOV TH1, #high licznik
- RET
- END