avatar
Untitled

Guest 17 20th Nov, 2024

MARKUP 4.32 KB
                                           
                         ; POD ZADNYM POZOREM NIE WPISYWAC ORG 100 LUB ORG 200
; piny przerwan to 3.2 i 3.3
; reset to org0

org 0                   ; Ustawienie początkowego adresu na 0, to jest początek programu (adres po restarcie)
sjmp st                 ; Skok bezwarunkowy do etykiety 'st', rozpoczęcie głównej części programu

org 0x3                 ; Ustawienie adresu obsługi przerwania INT0 (przerwanie zewnętrzne 0)
acall timer             ; Wywołanie funkcji 'timer' (obsługuje licznik)
acall timer             ; Wywołanie funkcji 'timer' (powtórzenie wywołania)
acall timer             ; Wywołanie funkcji 'timer' (powtórzenie wywołania)
acall timer             ; Wywołanie funkcji 'timer' (powtórzenie wywołania)
acall timer             ; Wywołanie funkcji 'timer' (powtórzenie wywołania)
reti                    ; Powrót z przerwania INT0 (zakończenie obsługi przerwania)

org 0x13                ; Ustawienie adresu obsługi przerwania INT1 (przerwanie zewnętrzne 1)
reti                    ; Powrót z przerwania INT1 (zakończenie obsługi przerwania)

st:                     ; Etykieta st (początek głównej części programu)
clr ea                  ; Wyczyszczenie flagi przerwań globalnych (ea = 0, przerwania są wyłączone)
setb tcon.2             ; Ustawienie flagi TCON.2 (uruchomienie przerwania od Timera 1)
setb tcon.0             ; Ustawienie flagi TCON.0 (uruchomienie przerwania od Timera 0)
setb et1                ; Włączenie przerwania od Timera 1 (ET1 = 1)
setb et0                ; Włączenie przerwania od Timera 0 (ET0 = 1)
setb ea                  ; Ustawienie flagi przerwań globalnych (ea = 1, włączenie przerwań)
mov a, #03h             ; Załadowanie do rejestru A wartości 03h
mov p1, a               ; Przypisanie wartości z rejestru A do portu P1
mov p1, #02h            ; Ponowne ustawienie portu P1 na wartość 02h
mov p0, #0C0h           ; Ustawienie portu P0 na wartość 0C0h (dla wyświetlacza, np. segmentowego)

init:                    ; Etykieta 'init' - początek pętli inicjalizacyjnej
mov R3, #00Ah           ; Załadowanie wartości 0Ah do rejestru R3 (licznik pętli)

main:                    ; Etykieta 'main' - początek głównej pętli programu
mov DPTR, #TAB          ; Załadowanie wskaźnika danych DPTR adresem tabeli 'TAB'
back:                    ; Etykieta 'back' - początek pętli odczytu danych z tablicy
clr a                   ; Wyczyść rejestr A
movc a, @a+DPTR         ; Odczyt danych z pamięci (z tabeli 'TAB', wskazywanej przez DPTR)
mov p1, #01h            ; Ustawienie portu P1 na wartość 01h
mov p0, a               ; Przypisanie wartości z rejestru A do portu P0
acall timer             ; Wywołanie funkcji 'timer' (obsługuje licznik)
acall timer             ; Wywołanie funkcji 'timer' (powtórzenie wywołania)
inc DPTR                ; Zwiększenie wskaźnika DPTR (przejście do kolejnego elementu w tabeli)
djnz R3, back           ; Dekrementacja rejestru R3 i skok do etykiety 'back', jeśli R3 != 0 (pętla wykonuje się 10 razy)
sjmp init               ; Skok bezwarunkowy do etykiety 'init', po zakończeniu pętli wróci do 'init'

timer:                   ; Etykieta 'timer' - definicja funkcji timera
mov tmod, #01h           ; Ustawienie trybu pracy timera 0 na tryb 1 (16-bitowy timer)
mov th0, #0h             ; Załadowanie rejestru TH0 (górny bajt) wartością 0
mov tl0, #0h             ; Załadowanie rejestru TL0 (dolny bajt) wartością 0
setb tr0                 ; Ustawienie bitu TR0 (uruchomienie Timera 0)
jnb tf0, $               ; Czekanie na ustawienie flagi przerwania tf0 (po zakończeniu odliczania)
clr tf0                  ; Czyszczenie flagi tf0 (po zakończeniu odliczania)
ret                      ; Powrót z funkcji 'timer'

; POD ZADNYM POZOREM NIE WPISYWAC ORG 100 LUB ORG 200

TAB: DB 0C0h, 0F9h, 0A4h, 0B0h, 99h, 92h, 82h, 0F8h, 80h, 90h
                        ; Definicja tabeli 'TAB', która zawiera wartości do wyświetlenia (np. kodów segmentowych dla wyświetlacza)

counter equ 0x40         ; Zdefiniowanie etykiety 'counter' jako adresu 0x40 w pamięci

END                      ; Koniec programu
                      
                                       
To share this paste please copy this url and send to your friends
RAW Paste Data
Recent Pastes
Ta strona używa plików cookie w celu usprawnienia i ułatwienia dostępu do serwisu oraz prowadzenia danych statystycznych. Dalsze korzystanie z tej witryny oznacza akceptację tego stanu rzeczy.
Wykorzystywanie plików Cookie
Jak wyłączyć cookies?
ROZUMIEM