Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ;STOPER
- A:
- FLAGA EQU 20H
- CZAS EQU 21H
- JEDNOSCI EQU 22H
- DZIESIETNE_SEKUDNY EQU 23H
- DZIESIATKI EQU 24H
- SETNE_SEKUDNY EQU 25H
- TYSIECZNE_SEKUDNY EQU 26H
- LJMP START
- ORG 03H ;EXT0 obsługa external 0
- RETI ; zabezpieczenie przed śmieciami
- ORG 0BH ; timer0
- LJMP STOPER
- ORG 13H ; ext1
- RETI
- ORG 1BH ; timer1
- RETI
- ORG 23H ; serial
- RETI
- ORG 100H
- START:
- LCALL LCD_INIT ; WSYZSTKIE PRZERWANIA PRZY OKAZJI SIE ZERUJA
- MOV FLAGA, #0
- MOV CZAS, #0
- MOV JEDNOSCI, #0
- MOV DZIESIATKI, #0
- MOV DZIESIETNE_SEKUDNY, #0
- LCALL WYPISANIE
- MOV TMOD, #21H ; ustawienie dla obu liczników trybu pracy 1
- MOV TH0, #256-136 ; 10 ms
- MOV TL0, #0 ; Pomiedzy TH0-TL0 (220) impulsami jest około 10 ms
- MOV TH1, #256-192 ; 300Bd
- MOV TL1, #256-192 ;
- SETB TR0
- SETB ET0
- SETB EA
- OBROT:
- LCALL WAIT_KEY ; zwraca numer klawisza przekonfertowany na od 0-15
- CJNE A, #14, KLAW_1 ; DOPUKI NIE NACISNE ENTER TO SKACZ DO OBROT
- XRL FLAGA, #1 ; lub CPL FLAGA.0
- SJMP OBROT
- KLAW_1:
- LCALL WAIT_KEY
- CJNE A, #15, KONIEC
- LCALL ZEROJ_WSZYSTKO
- SJMP KONIEC
- KONIEC:
- SJMP OBROT
- STOPER: ; OBSLUGA PRZERWANIA
- MOV TH0, #256-36 ; CZESCI DOLNEJ (TL0) NIE RUSZAMY !
- PUSH PSW ; PRZERWANIE NIE MOZE NICZEGO ZNISZCZYC
- PUSH ACC ; -||- INNE PUSHE
- PUSH 0 ; PUSH AKTYWNEGO BANKU (TU R0), BEDZIE NA EGZAMINIE
- MOV A, FLAGA
- JZ POSTOJ
- ;MOV A, CZAS
- ;ADD A, #1 ; NIE INC (inc NIE ustawia flag w tym przeniesienia polowkowego)
- ;DA A ; KOREKTA BCD, ZAMIENIA LICZENIE Z HEX NA DZIESIETNY, CZYLI PO 09 BEDZIE 10 A NIE 0A
- ;MOV CZAS,A
- ;LCALL WRITE_HEX
- LCALL WYPISANIE
- INC TYSIECZNE_SEKUDNY
- MOV A, #10
- CLR C
- SUBB A, TYSIECZNE_SEKUDNY
- ;JZ ZWIEKSZ_JEDNOSCI
- JZ ZWIEKSZ_SETNE
- ZWIEKSZ_SETNE:
- MOV TYSIECZNE_SEKUDNY, #0
- INC SETNE_SEKUDNY
- MOV A, #10
- CLR C
- SUBB A, SETNE_SEKUDNY
- JZ ZWIEKSZ_DZIESIETNE
- POSTOJ5:
- POP 0 ; I INNE POP
- POP ACC
- POP PSW
- RETI
- ZWIEKSZ_DZIESIETNE:
- MOV SETNE_SEKUDNY, #0
- INC DZIESIETNE_SEKUDNY
- MOV A, #10
- CLR C
- SUBB A, DZIESIETNE_SEKUDNY
- JZ ZWIEKSZ_JEDNOSCI
- POSTOJ:
- POP 0 ; I INNE POP
- POP ACC
- POP PSW
- RETI
- ZWIEKSZ_JEDNOSCI:
- MOV DZIESIETNE_SEKUDNY, #0
- INC JEDNOSCI
- MOV A, #10
- CLR C
- SUBB A, JEDNOSCI
- JZ ZWIEKSZ_DZIESIATKI
- POSTOJ3:
- POP 0 ; I INNE POP
- POP ACC
- POP PSW
- RETI
- ZWIEKSZ_DZIESIATKI:
- MOV JEDNOSCI, #0
- INC DZIESIATKI
- MOV A, #10
- CLR C
- SUBB A, DZIESIATKI
- JZ ZEROJ_WSZYSTKO
- POSTOJ1:
- POP 0 ; I INNE POP
- POP ACC
- POP PSW
- RETI
- ZEROJ_WSZYSTKO:
- MOV DZIESIATKI, #0
- MOV JEDNOSCI, #0
- MOV DZIESIETNE_SEKUDNY, #0
- POSTOJ2:
- POP 0 ; I INNE POP
- POP ACC
- POP PSW
- RETI
- WYPISANIE:
- LCALL LCD_CLR
- MOV A, #0 ; USTAW_KURSOR NA 2 MIEJSCE OD LEWEJ
- LCALL USTAW_KURSOR
- MOV DPTR, #LICZBY ; PODAJ LICZBY DO DPTR
- MOV A, DZIESIATKI
- MOVC A, @A+DPTR
- LCALL PISZ_ZNAK ; WYPISZ 0
- MOV A, JEDNOSCI
- MOVC A, @A+DPTR
- LCALL PISZ_ZNAK
- MOV A, #1
- MOV DPTR, #KROPKA ; PODAJ LICZBY DO DPTR
- LCALL PISZ_TEKST
- MOV DPTR, #LICZBY ; PODAJ LICZBY DO DPTR
- MOV A, DZIESIETNE_SEKUDNY
- MOVC A, @A+DPTR
- LCALL PISZ_ZNAK ; WYPISZ 0
- RETI
- LCD_GOTOWY:
- PUSH PSW
- PUSH ACC
- PUSH DPL
- PUSH DPH
- MOV DPTR,#LCDRC+0FF00H
- ODCZEKAJ:
- MOVX A,@DPTR
- JB ACC.7, ODCZEKAJ; Jezeli bit ACC.7 == 1, gotowy
- POP DPH
- POP DPL
- POP ACC
- POP PSW
- RET
- ;PISZ ROZKAZ DO LCD (WE:A)
- PISZ_ROZKAZ:
- LCALL LCD_GOTOWY
- PUSH PSW
- PUSH ACC
- PUSH DPL
- PUSH DPH
- MOV DPTR, #LCDWC + 0FF00H ; wpis rozkazów
- MOVX @DPTR, A;kopiuj dane do pamieci zewnetrznej
- POP DPH
- POP DPL
- POP ACC
- POP PSW
- RET
- ;PISZ ZNAK (WE:A ASCII)
- PISZ_ZNAK:
- LCALL LCD_GOTOWY
- PUSH PSW
- PUSH ACC
- PUSH DPL
- PUSH DPH
- MOV DPTR, #LCDWD+0FF00H
- MOVX @DPTR, A
- POP DPH
- POP DPL
- POP ACC
- POP PSW
- RET
- ;czytaj znak (wy:a)
- CZYT_ZNAK:
- LCALL LCD_GOTOWY
- PUSH PSW
- PUSH DPL
- PUSH DPH
- MOV DPTR, #LCDRD + 0FF00H
- MOVX A,@DPTR
- POP DPH
- POP DPL
- POP PSW
- RET
- ;ustaw kursor (we:A)
- USTAW_KURSOR:
- LCALL LCD_GOTOWY
- PUSH PSW
- PUSH ACC
- PUSH DPL
- PUSH DPH
- ORL A,#80H
- MOV DPTR, #LCDWC + 0FF00H
- MOVX @DPTR, A
- POP DPH
- POP DPL
- POP ACC
- POP PSW
- RET
- ;znajdz kursor (wy:A)
- ZNAJDZ_KURSOR:
- LCALL LCD_GOTOWY
- PUSH PSW
- PUSH DPL
- PUSH DPH
- MOV DPTR, #LCDRC+0FF00H
- MOVX A,@DPTR
- POP DPH
- POP DPL
- POP PSW
- RET
- ;pisz tekst
- ;we: DPTR (tekst w ROM), A - ile znakow
- ;wy:A - ile faktycznie znakow
- PISZ_TEKST:
- JZ WYKONANE; skok gdy A=0
- PUSH PSW
- PUSH B
- MOV B, A
- CLR A ; zeruj akumulator
- PUSH ACC; a potem go zapamietej ? mamy pamiętać pusty ?
- POWTARZAJ:
- POP ACC; czyli mamy tu pusty
- PUSH ACC
- MOVC A, @A+DPTR
- JZ TERMINATOR
- LCALL PISZ_ZNAK
- POP ACC
- INC A
- PUSH ACC
- DJNZ B, POWTARZAJ; skok gdy B!=0, skoro B jest nie używane to po co to ?
- TERMINATOR:
- POP ACC
- POP B
- POP PSW
- WYKONANE:
- RET
- GAZETA:
- DB 'To jest wiadomosc'
- DB 'Nowe dane'
- ;czytanie klawiatury
- ;wy A - statust klawiszy 0-7, B -status klawiszy 8-F
- CZYT_KLAWISZ:
- PUSH PSW
- MOV A,R0
- PUSH ACC
- MOV A, R1
- PUSH ACC
- ;A - BAJT
- PISZ_BIN:
- PUSH PSW
- PUSH ACC
- PUSH B
- PUSH ACC
- MOV B,#8
- DALSZE:
- POP ACC
- RL A
- PUSH ACC
- ANL A,#1
- ADD A,#30H
- LCALL PISZ_ZNAK
- DJNZ B, DALSZE
- POP ACC
- POP B
- POP ACC
- POP PSW
- RET
- ;A - BAJT
- PISZ_HEX:
- PUSH PSW
- PUSH ACC
- PUSH B
- MOV B,A
- SWAP A; ZAMIANA TETRAD
- ANL A,0FH
- ADD A,#30H
- CJNE A, #39H + 1, ZAKR_1
- ZAKR_1:
- JC PISZ_1
- ADD A,#41H -30H -10
- PISZ_1:
- LCALL PISZ_ZNAK
- MOV A, B
- ANL A, #0FH
- ADD A, #30H
- CJNE A, #39H + 1, ZAKR_2
- ZAKR_2:
- JC PISZ_2
- ADD A, #41H - 30H -10
- PISZ_2:
- LCALL PISZ_ZNAK
- POP B
- POP ACC
- POP PSW
- RET
- ;A - BAJT
- PUSH_DEC:
- PUSH PSW
- PUSH ACC
- PUSH B
- MOV B, #10
- DIV AB
- PUSH B
- MOV B, #10
- DIV AB
- PUSH B
- MOV B, #10
- DIV AB
- PUSH B
- POP ACC
- ADD A, #30H
- LCALL PISZ_ZNAK
- POP ACC
- ADD A, #30H
- LCALL PISZ_ZNAK
- POP ACC
- ADD A, #30H
- LCALL PISZ_ZNAK
- POP B
- POP ACC
- POP PSW
- RET
- KROPKA:
- DB '.',0
- LICZBY:
- DB '0123456789',0
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement