Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ;------------------------------------------------------------------------------
- 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
- ALARM_SEC EQU 34h ; alarm - sekundy
- ALARM_MIN EQU 35h ; alarm - minuty
- ALARM_HOUR EQU 36h ; alarm - godziny
- SEC_CHANGE EQU 0 ; flaga zmiany sekund (BIT)
- ;------------------------------------------------------------------------------
- LEDS EQU P1 ; diody LED na P1 (0=ON)
- ALARM EQU P1.7 ; sygnalizacja alarmu
- ;------------------------------------------------------------------------------
- CSEG AT 0
- sjmp start
- CSEG AT 0Bh
- ;---------------------------------------------------------------------
- ; Obsluga przerwania Timera 0
- ;---------------------------------------------------------------------
- T0_int:
- mov TL0, #LOW(LOAD) ; przeladowanie timera 0
- mov TH0, #HIGH(LOAD)
- push PSW ; odlozenie na stos uzywanych rejestrow
- push ACC
- djnz CNT_50, koniec1
- mov CNT_50, #20
- inc SEC ;sprawdzanie czy SEC jest mniejsze niz 60
- jc sec_ch
- 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
- sec_ch:
- setb SEC_CHANGE
- koniec1:
- pop ACC
- pop PSW
- reti
- ;---------------------------------------------------------------------
- ; Start programu
- ;---------------------------------------------------------------------
- start:
- lcall lcd_init
- lcall clock_init
- lcall timer_init
- lcd_init:
- mov LEDS, #0FFh
- ret
- ;---------------------------------------------------------------------
- ; Petla glowna programu
- ;---------------------------------------------------------------------
- main_loop:
- jnb SEC_CHANGE, other_tasks ; sprawdzenie zmiany sekundy
- clr SEC_CHANGE ; czyszczenie flagi
- lcall clock_display
- lcall clock_alarm
- other_tasks:
- sjmp main_loop
- ;---------------------------------------------------------------------
- ; Inicjowanie Timera 0 w trybie 16-bitowym z przerwaniami
- ;---------------------------------------------------------------------
- timer_init:
- clr TR0 ; zatrzymanie timera
- anl TMOD, #11110000B ; pierwsze 4 bity to ustawienia timera, wiec zerujemy 4 ostatnie
- orl TMOD, #00000001B ; ustawienie ostatniego bitu na 1 - wyzerowanie timera
- mov TL0, #LOW(LOAD) ; wpisanie odpowiednich wartosci do rejestrow
- mov TH0, #HIGH(LOAD)
- clr TF0 ; wyzerowanie flagi
- setb ET0 ; zezwolenie na przerwanie z timera 0
- setb EA ; ogolne zezwolenie na przerwania
- setb TR0 ; wznowienie pracy zegara
- ret
- ;---------------------------------------------------------------------
- ; Inicjowanie zmiennych zwiazanych z czasem
- ;---------------------------------------------------------------------
- clock_init:
- mov CNT_50, #20
- mov SEC, #53 ; przykladowe wartosci dla czasu
- mov MIN, #59
- mov HOUR, #23
- mov ALARM_SEC, #0 ; alarm przy czasie 00:00:00
- mov ALARM_MIN, #0
- mov ALARM_HOUR, #0
- setb ALARM ; wlaczenie alarmu
- ret
- ;---------------------------------------------------------------------
- ; Wyswietlanie czasu
- ;---------------------------------------------------------------------
- clock_display:
- mov A, SEC
- cpl A
- orl LEDS, #11111111B ; wyzerowanie diod
- anl LEDS, A ; aktualizacja czasu na wyswietlaczu
- ret
- ;---------------------------------------------------------------------
- ; Obsluga alarmu
- ;---------------------------------------------------------------------
- clock_alarm:
- mov A, SEC
- cjne A, ALARM_SEC, alarm_return
- mov A, MIN
- cjne A, ALARM_MIN, alarm_return
- mov A, HOUR
- cjne A, ALARM_HOUR, alarm_return
- clr ALARM
- ret
- alarm_return:
- ret
- END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement