Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ;------------------------------------------------------------------------------
- LEDS EQU P1 ; diody LED na P1 (0=ON)
- ;------------------------------------------------------------------------------
- TIME_MS EQU 50 ; czas w [ms]
- CYCLES EQU (1000 * TIME_MS) ; czas w cyklach (f = 12 MHz)
- LOAD EQU (65536 - CYCLES) ; wartosc ladowana do TH0|TL0
- ;------------------------------------------------------------------------------
- CNT_50 EQU 30h ; licznik w ramach sekundy
- SEC EQU 31h ; sekundy
- MIN EQU 32h ; minuty
- HOUR EQU 33h ; godziny
- ;------------------------------------------------------------------------------
- RIGHT EQU 0 ; kierunek przesuwania LED
- ;------------------------------------------------------------------------------
- ORG 0
- ;lcall init_time ; inicjowanie czasu
- time_loop:
- lcall delay_50ms ; opoznienie 50 ms
- lcall update_time ; aktualizacja czasu
- jnc time_loop ; nie bylo zmiany sekund
- ; tutaj zmiana sekund
- sjmp time_loop
- leds_loop:
- mov R7, #10 ; opoznienie 500 ms
- lcall delay_nx50ms
- lcall leds_change_1 ; zmiana stanu diod
- sjmp leds_loop
- ;---------------------------------------------------------------------
- ; Opoznienie 50 ms (zegar 12 MHz)
- ;---------------------------------------------------------------------
- delay_50ms: ; 2 lcall
- mov R5, #515 ; 1 515 * 97 = 49955
- delay_0_097ms: ;
- mov R6, #47 ; 1
- djnz R6, $ ; 2 2 * 47 = 94
- djnz R5, delay_0_097ms ; 2 1 + 94 + 2 = 97
- fill:
- mov R4, #19 ; 1
- djnz R4, $ ; 2 2 * 19 = 38
- nop ; 1
- ret ; 2 2 + 1 + 49955 + 1 + 38 + 1 + 2 = 50000
- ;---------------------------------------------------------------------
- ; Opoznienie n * 50 ms (zegar 12 MHz)
- ; R7 - czas x 50 ms
- ;---------------------------------------------------------------------
- delay_nx50ms: ; 2 - lcall
- mov A, R7 ; 1
- jz finish ; 2
- cjne A, #1, lcall_delay_50ms ; 2
- raz:
- lcall delay_50ms
- ret
- lcall_delay_50ms:
- lcall delay_50ms
- djnz R7, lcall_delay_50ms
- finish:
- ret
- ;---------------------------------------------------------------------
- ; Opoznienie 50 ms z uzyciem Timera 0 (zegar 12 MHz)
- ;---------------------------------------------------------------------
- delay_timer_50ms: ;
- clr TR0 ;
- anl TMOD, #11110000b ;
- orl TMOD, #00000001b ; 2 ustawienie konfiguracji timera 0
- mov TL0, #LOW(LOAD) ; 2 wpisz odpowiednie wartosci do rejestrow licznika
- mov TH0, #HIGH(LOAD) ; 2
- clr TF0 ; 1 wyzeruj flage przepelnienia
- setb TR0 ; 1 wlacz timer
- mov R6, #16 ; 2 + 1 + 2 + 2 + 2 + 2 + 1 + 1 = 13
- dodaj:
- inc TL0 ; zwiekszenie wartosci licznika tak, zeby uwzglednial
- djnz R6, dodaj ; rozkazy wykonane przed wlaczeniem timera
- jnb TF0, $ ; 2 oczekiwanie na ustawienie flagi przepelnienia
- ret
- ;---------------------------------------------------------------------
- ; Inicjowanie czasu w zmiennych: HOUR, MIN, SEC, SEC_100
- ;---------------------------------------------------------------------
- init_time:
- mov CNT_50, #49
- mov SEC, #59
- mov MIN, #59
- mov HOUR, #23
- ret
- ;---------------------------------------------------------------------
- ; Aktualizacja czasu w postaci (HOUR : MIN : SEC) | CNT_50
- ; Przy wywolywaniu procedury co 50 ms
- ; wykonywana jest aktualizacja czasu rzeczywistego
- ;
- ; Wyjscie: CY - sygnalizacja zmiany sekund (0 - nie, 1 - tak)
- ;---------------------------------------------------------------------
- update_time:
- clr F0 ;wyzerowanie flagi F0
- inc CNT_50 ;sprawdzanie czy CNT_50 jest mniejsze niz 50
- mov A, CNT_50
- cjne A, #50, koniec1
- mov CNT_50, #0
- setb F0
- inc SEC ;sprawdzanie czy SEC jest mniejsze niz 60
- mov A, SEC
- cjne A, #60, koniec1
- mov SEC, #0
- inc MIN ;sprawdzanie czy MIN jest mniejsze niz 60
- mov A, MIN
- cjne A, #60, koniec1
- mov MIN, #0
- inc HOUR ;sprawdzanie czy HOUR jest mniejsze niz 24
- mov A, HOUR
- cjne A, #24, koniec1
- mov HOUR, #0
- koniec1:
- mov C, F0
- ret
- ;---------------------------------------------------------------------
- ; Zmiana stanu LEDS - dioda wedrujaca w obu kierunkach
- ;---------------------------------------------------------------------
- leds_change_1:
- ret
- ;---------------------------------------------------------------------
- ; Zmiana stanu LEDS - narastajacy pasek od lewej
- ;---------------------------------------------------------------------
- leds_change_2:
- ret
- END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement