Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- $INCLUDE (REG52.INC)
- ; PUNKT STARTOWY PROGRAMU
- ORG 0
- ;ALIASY DLA WYSWIETLACZA I DIÓD
- DANE EQU P3.0
- CLOCK EQU P3.1
- LOAD EQU P3.2
- OFF EQU P3.3
- SCL EQU P1.1
- SDA EQU P1.2
- DIODA1 EQU P3.7
- DIODA2 EQU P3.6
- DIODA3 EQU P3.5
- DIODA4 EQU P3.4
- ;ALIASY DLA PRZYCISKÓW
- ESCAPE EQU P1.4
- UP EQU P1.5
- DOWN EQU P1.6
- ENTER EQU P1.7
- ;ALIASY DLA KOMÓREK PAMIECI PRZECHOWUJACYCH CYFRY
- CYFRA_WYBRANA EQU 34h
- CYFRA1 EQU 30h
- CYFRA2 EQU 31h
- CYFRA3 EQU 32h
- CYFRA4 EQU 33h
- ;USTAWIENIE POCZATKOWEJ WARTOSCI WYSWIETLACZA I ZEGARA
- INICJALIZACJA:
- MOV CYFRA_WYBRANA,#0
- MOV CYFRA1,#1
- MOV CYFRA2,#2
- MOV CYFRA3,#2
- MOV CYFRA4,#5
- ACALL USTAW_CZAS
- ;GLOWNA PETLA PROGRAMU
- GLOWNA_PETLA:
- ACALL POBIERZ_CZAS
- ACALL AKTUALIZUJ_WYSWIETLACZ
- ACALL OBSLUGA_KLAWISZY
- SJMP GLOWNA_PETLA
- ;WYSWIETLENIE ZAWARTOSCI KOMOREK PAMIECI Z CYFRAMI NA WYSWIETLACZU
- AKTUALIZUJ_WYSWIETLACZ:
- MOV A,CYFRA4
- ACALL WYSLIJ_NA_WYSWIETLACZ
- MOV A, CYFRA3
- ACALL WYSLIJ_NA_WYSWIETLACZ
- MOV A,CYFRA2
- ACALL WYSLIJ_NA_WYSWIETLACZ
- MOV A,CYFRA1
- ACALL WYSLIJ_NA_WYSWIETLACZ
- CLR LOAD
- SETB LOAD
- CLR OFF
- RET
- ;PODPROGRAM OBSLUGI KLAWISZY
- OBSLUGA_KLAWISZY:
- ;WARUNEK WEJSCIA DO PETLI KLAWISZY
- JNB ESCAPE, GLOWNA_PETLA_KLAWISZY
- RET
- ;GLOWNA PETLA KLAWISZY
- GLOWNA_PETLA_KLAWISZY:
- ; ZAPALENIE ODPOWIEDNIEJ DIODY DLA EDYTOWANEJ CYFRY
- ACALL USTAW_DIODY
- ; ODSWIEZENIE WYSWIETLACZA
- ACALL AKTUALIZUJ_WYSWIETLACZ
- ; OPOZNIENIE
- ACALL CZEKAJ
- ; OCZEKIWANIE NA NACISNIECIE PRZYCISKU
- JNB UP, WCISNIETY_UP
- JNB DOWN, WCISNIETY_DOWN
- JNB ENTER, WCISNIETY_ENTER
- SJMP GLOWNA_PETLA_KLAWISZY
- ; OBSLUGA PRZYCISKU UP
- WCISNIETY_UP:
- MOV A,CYFRA_WYBRANA
- ADD A,#CYFRA1
- MOV R0, A
- MOV A,@R0
- ; NIE MOZNA ZWIEKSZYC POWYZEJ 9
- CJNE A,#9,ZWIEKSZ_CYFRE
- AJMP GLOWNA_PETLA_KLAWISZY
- ZWIEKSZ_CYFRE:
- INC A
- MOV @R0,A
- AJMP GLOWNA_PETLA_KLAWISZY
- ; OBSLUGA PRZYCISKU DOWN
- WCISNIETY_DOWN:
- MOV A,CYFRA_WYBRANA
- ADD A,#CYFRA1
- MOV R0, A
- MOV A,@R0
- ; NIE MOZNA ZMNIEJSZYC PONIZEJ 0
- CJNE A,#0,ZMNIEJSZ_CYFRE
- AJMP GLOWNA_PETLA_KLAWISZY
- ZMNIEJSZ_CYFRE:
- DEC A
- MOV @R0,A
- AJMP GLOWNA_PETLA_KLAWISZY
- ; OBSLUGA PRZYCISKU ENTER
- WCISNIETY_ENTER:
- MOV A,CYFRA_WYBRANA
- CJNE A,#3,PRZESUN_POZYCJE
- ACALL USTAW_CZAS
- ACALL ZERUJ_DIODY
- MOV CYFRA_WYBRANA,#0
- SJMP GLOWNA_PETLA
- PRZESUN_POZYCJE:
- CPL DIODA4
- INC CYFRA_WYBRANA
- AJMP GLOWNA_PETLA_KLAWISZY
- ; PODPROGRAM USTAWIENIA CZASU ZEGARA RTC
- USTAW_CZAS:
- MOV A CYFRA3
- RL A
- RL A
- RL A
- RL A
- ORL A,CYFRA4
- ANL A,#07Fh
- MOV R1,A
- MOV A,CYFRA1
- RL A
- RL A
- RL A
- RL A
- ORL A,CYFRA2
- MOV R2,A
- ACALL BIT_STARTU
- MOV A,#0D0H
- ACALL WYSLIJ_BAJT
- MOV A,#000H
- ACALL WYSLIJ_BAJT
- MOV A,R1
- ACALL WYSLIJ_BAJT
- MOV A,R2
- ACALL WYSLIJ_BAJT
- ACALL BIT_STOPU
- RET
- ; PODPROGRAM POBRANIA CZASU ZEGARA RTC
- POBIERZ_CZAS:
- MOV A,#000H
- ACALL POBIERZ_WARTOSC_ZEGARA
- MOV R2,A
- ANL A,#00FH
- MOV CYFRA4,A
- MOV A,R2
- ANL A,#070H
- RR A
- RR A
- RR A
- RR A
- MOV CYFRA3,A
- MOV A,#001H
- ACALL POBIERZ_WARTOSC_ZEGARA
- MOV R2,A
- ANL A,#00Fh
- MOV CYFRA2,A
- MOV A,R2
- ANL A,#070H
- RR A
- RR A
- RR A
- RR A
- MOV CYFRA1,A
- RET
- ; PODPROGRAM POBRANIA KOMORKI PAMIECI
- POBIERZ_WARTOSC_ZEGARA:
- MOV R2,A
- ACALL BIT_STARTU
- MOV A,#0D0h
- ACALL WYSLIJ_BAJT
- MOV A,R2
- ACALL WYSLIJ_BAJT
- ACALL BIT_STARTU
- MOV A,#0D1H
- ACALL WYSLIJ_BAJT
- ACALL ODBIERZ_BAJT
- ACALL BIT_STOPU
- RET
- ; WYSLANIE BITU STARTU NA MAGISTRALE I2C
- BIT_STARTU:
- SETB SCL
- SETB SDA
- CLR SDA
- CLR SCL
- RET
- ;WYSLANIE BITU STOPU NA MAGISTRALE I2C
- BIT_STOPU:
- CLR SCL
- CLR SDA
- SETB SCL
- SETB SDA
- RET
- ;WYSLANIE BITU ACK NA MAGISTRALE ACK
- BIT_POTWIERDZENIA:
- SETB SDA
- BIT_POTWIERDZENIA_CZEKAJ:
- JB SDA,BIT_POTWIERDZENIA_CZEKAJ
- SETB SCL
- CLR SCL
- RET
- ;WYSLANIE 1 BAJTU DANYCH Z AKUMULATORA NA MAGISTRALE I2C
- WYSLIJ_BAJT:
- MOV R0,#8
- WYSLIJ_BAJT_NASTEPNY_BIT:
- RLC A
- MOV SDA,C
- SETB SCL
- CLR SCL
- DJNZ R0,WYSLIJ_BAJT_NASTEPNY_BIT
- ACALL BIT_POTWIERDZENIA
- RET
- ;ODEBRANIE 1 BAJTU DANYCH Z I2C DO AKUMULATORA
- ODBIERZ_BAJT:
- MOV R0,#8
- ODBIERZ_BAJT_NASTEPNY_BIT:
- MOV C,SDA
- RLC A
- SETB SCL
- CLR SCL
- DJNZ R0,ODBIERZ_BAJT_NASTEPNY_BIT
- RET
- ;PODPROGRAM OPOZNIAJACY
- CZEKAJ:
- MOV R0,#0
- MOV R1,#0
- CZEKAJ_PETLA:
- DJNZ R0,CZEKAJ_PETLA
- DJNZ R1,CZEKAJ_PETLA
- RET
- ;PODPROGRAM GASZACY WSZYSTKIE DIODY
- ZERUJ_DIODY:
- SETB DIODA1
- SETB DIODA2
- SETB DIODA3
- SETB DIODA4
- RET
- ;ZAPALENIE DIODY ODPOWIADAJACEJ MODYFIKOWANEJ CYFRZE
- USTAW_DIODY:
- MOV A,CYFRA_WYBRANA
- WLACZ_DIODA1:
- CJNE A,#0,WLACZ_DIODA2
- ACALL ZERUJ_DIODY
- CLR DIODA1
- RET
- WLACZ_DIODA2:
- CJNE A,#1,WLACZ_DIODA3
- ACALL ZERUJ_DIODY
- CLR DIODA2
- RET
- WLACZ_DIODA3:
- CJNE A,#2,WLACZ_DIODA4
- ACALL ZERUJ_DIODY
- CLR DIODA3
- RET
- WLACZ_DIODA4:
- ACALL ZERUJ_DIODY
- CLR DIODA4
- RET
- ;WYSLANIE DO WYSWIETLACZA CYFR Z REJESTROW
- WYSLIJ_NA_WYSWIETLACZ:
- MOV DPTR, #TABLICA
- MOVC A, @A+DPTR
- MOV R0, #8
- NASTEPNY:
- RLC A
- MOV DANE, C
- CLR CLOCK
- SETB CLOCK
- DJNZ R0, NASTEPNY
- RET
- ;TABLICA WARTOSCI ZNAKOW DLA WYSWIETLACZA 7-SEGMENTOWEGO
- TABLICA:
- DB 03H ; = 0
- DB 9FH ; = 1
- DB 25H ; = 2
- DB 0DH ; = 3
- DB 99H ; = 4
- DB 49H ; = 5
- DB 41H ; = 6
- DB 1FH ; = 7
- DB 01H ; = 8
- DB 09H ; = 9
- END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement