$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