Strona główna

Zegar czasu rzeczywistego 6818


Pobieranie 55.23 Kb.
Data18.06.2016
Rozmiar55.23 Kb.


Instrukcja do ćwiczenia laboratoryjnego.

Zegar czasu rzeczywistego 6818

Przedmiotem ćwiczenia jest zapoznanie się, a następnie zaprogramowanie i odczyt układu zegara czasu rzeczywistego 6818.

Praktyczna część ćwiczenia obejmuje wykonanie zadania polegającego na:


  • Zaprogramowaniu rejestrów sterujących praca układu 6818,

  • Zaprogramowaniu aktualnego czasu (godzin, minuty, sekundy),

  • Wyświetleniu czasu na ekranie monitora lub wyświetlacza siedmiosegmentowego.


Timer 6818- opis zegara-czasomierza.
Układ scalony 6818 był produkowany przez firmę Motorola (obecnie Freescale). Jest to układ zegara czasu rzeczywistego, który jest przeznaczony do pracy w systemach mikrokomputerowych. Jego pierwsze aplikacje wbudowane były w komputery IBM PC serii XT.

Układ zawiera 16 rejestrów wewnętrznych, z czego cztery, oznaczone jako: A, B, C, D, służą do ustawiania parametrów pracy zegara.


Tabela 1. Funkcje rejestrów konfiguracyjnych układu 6818.


Rejestr/bit

7

6

5

4

3

2

1

0




A

UIP

DV2

DV1

DV0

RS3

RS2

RS1

RS0

zapis\odczyt

B


SET

PIE

AIE


UIE

SQWE

DM

24/12

DSE

zapis\odczyt

C

IRQF

PF

AF

UP

0

0

0

0

odczyt

D

VRT

0

0

0

0

0

0

0

zapis


Znaczenie bitów:

RS - wybór częstotliwości na SQW i przerwania periodycznego,

UIP - trwa przepisywanie dziesięciu bajtów zegara, kalendarza

i alarmu


DV - nastawa wstępnego podzielnika,

SET - ustawienie „1” blokuje przepisywanie , możliwe jest nastawianie zegara,

PIE - zezwolenie na przerwanie periodyczne,

AIE - zezwolenie na alarm (gdy flaga nie ustawiona AF nie wyzwala IRQ),

UIE - zezwolenie na przerwanie od przepisywania (bit UF może wyzwolić IRQ, gdy SET=1 UIE=0),

SQWE - zezwolenie na falę prostokątną na wyjściu SQW,

DM - tryb zegara, kalendarza („1” - binarnie lub „0” -

BCD),

DSE - czas letni - „1”, zimowy - „0”,

IRQF - bit przerwania (gdy bit = „1” pin IRQ = „0”),

PF - flaga przerwania periodycznego (ustawiana niezależnie

od PIE zerowana przy odczycie),



AF - flaga alarmu (zerowana przy odczycie),

UF - flaga przepisywania zegara, kalendarza (informuje o możliwości błędnego odczytu przy przewijaniu rejestrów),

VRT - ważna pamięć i zegar (zerowany po włączeniu napięcia,

ustawiany przez odczyt rejestru D, niezbędny przy podtrzymaniu napięcia zasilającego).


Opis modułu zegara czasu rzeczywistego (RTC).
RTC zajmuje dwie lokacje adresowe w przestrzeni pamięci systemu mikroprocesorowego:

-FEA0h adres rejestru adresowego (pod ten adres zapisuje się adres rejestru wewnętrznego RTC),

-FEA1h adres rejestru danych (pod ten adres zapisuje się daną dla uprzednio zaadresowanego rejestru).

Wobec powyższego dostęp do każdego z wewnętrznych rejestrów jest realizowany dwuetapowo:


  1. Wpis adresu rejestru wewnętrznego pod lokację- FEA0h

  2. Zapis (lub odczyt) wybranego rejestru wewnętrznego- FEA1h


Tabela 2. Adresy rejestrów wewnętrznych układu 6818:


Adres rejestru

Funkcja/Nazwa rejestru


00h

sekundy

01h

alarm- sekundy

02h

minuty

03h

alarm- minuty

04h

godziny

05h

alarm- godziny

06h

dzień tygodnia

07h

dzień miesiąca

08h

miesiąc

09h

rok

0Ah

rejestr A

0Bh

rejestr B

0Ch

rejestr C

0Dh

rejestr D



0Eh-3Fh rejestry ogólnego przeznaczenia


Zaprogramowanie zegara wymaga:

  • Wpisania do rejestru B wartości 8Bh- bit SET=1 – odblokowanie ustawiania.

  • Wpisania do rejestru A wartości 20h- ustawienie odpowiedniego podzielnika zegara.

  • Ustawienie żądanych wartości w rejestrach 00h09h.

  • Wpisania do rejestru B wartości 0Bh- zezwolenie na SQW, tryb BCD, zliczanie w trybie 24h, czas letni/zimowy.


Wyświetlenie wartości czasu:

Istnieją dwie możliwości wyświetlenia zaprogramowanego czasu: na wyświetlaczach umieszczonych na płycie czołowej modułu zegara oraz na ekranie monitora znakowego.


Wyświetlacz siedmiosegmentowy:

Adresy wyświetlaczy siedmiosegmentowych (w kolejności od góry):



Tabela 3 Kody siedmiosegmentowe cyfr.


0

C0h

1

F9h

2

A4h

3

B0h

4

99h

5

92h

6

82h

7

F8h

8

80h

9

90h


Monitor znakowy:
Wyświetlenia aktualnego czasu na ekranie monitora znakowego systemu mikroprocesorowego dokonuje się przez wpisanie do pamięci Video RAM kodów ASCII cyfr lub liter, które należy wyświetlić. Każda komórka pamięci Video RAM odpowiada jednemu znakowi na ekranie monitora. Obszar VRAM ulokowany jest w przestrzeni adresowej systemu począwszy do lokacji F800h do FBFFh. Monitor wyświetla w jednej linii 40 znaków. Linii jest 40.
Wyświetlenie napisu zegara na środku ekranu to wpisanie następujących wartości pod określone lokacje (tabela 4).

Tabela 4. Wypisanie słowa „ZEGAR”





Lokacja adresowa

Kod ASCII

F812h

5Ah

F813h

45h

F814h

47h

F815h


41h

F816h

52h

Zadanie

Należy napisać program w asemblerze Z80 realizujący następujące funkcje:



  • zaprogramowanie rejestru A i B,

  • zaprogramowanie aktualnego czasu tj. sekund, minut, godzin,

  • wyświetlenie czasu na ekranie monitora znakowego lub wyświetlacza siedmiosegmentowego.


Programowanie i odczyt zegara.

Program należy wprowadzić za pomocą edytora systemu Z80 (wejście do edytora uzyskujemy przez klawisz E).


Szkic programu zegara.

  1. Umieść dyrektywę od jakiego adresu w pamięci zostanie umieszczony program po asemblacji.


ORG #0000





  1. Programowanie rejestrów sterujących A i B:


LD IX,#FEA0 ;do IX załaduj adres rejestru adresowego układu 6818

LD (IX),#....... ;wyślij pod ten adres, adres rejestru B (patrz tabela 2, liczba bez znaku h, ponieważ liczbę w kodzie heksadecymalnym oznacza w asemblerze Z80 znak „#”)

LD (IX+1),#8B ;wyślij daną do rejestru B- (danych zablokowane przepisywanie, można ustawiać czas)

LD (IX),#0A ;adres rejestru A

LD (IX+1),#…… ;dana dla rejestru A (patrz poniżej tabeli 2)


  1. Ustawienie wartości początkowych czasu dla rejestru godzin, minut, sekund (np. 12.00.51)


LD (IX),#00 ;adres rejestru sekund

LD (IX+1),#51 ;wartość sekund w BCD

LD (IX),#02 ;adres rejestru minut

LD (IX+1),#00 ;wartość minut w BCD

LD (IX),#04 ;adres rejestru godzin

LD (IX+1),#12 ;wartość godzin w BCD


  1. Odblokowanie zliczania.


LD (IX),#0B

LD (IX+1),#0B





  1. Cykliczne odczytywanie czasu i wyświetlenie.


CALL #E358 ;procedur czyszczenia ekranu (wbudowana)

LD IY,#F830 ;adres komórki VRAM do wyświetlania (1 pozycja)

PETLA LD (IX),#04 ;adres rejestru godzin

LD A,(IX+1) ;odczyt godzin


  1. konwersja liczby z kodu BCD na cyfry w kodzie ASCII


LD B,A ;zapamiętanie odczytanej wartości

AND #F0 ;wydzielenie starszej cyfry

SRL A ;przesunięcie zawartości akumulatora o cztery bity w prawo z wpisaniem na najstarsze pozycje 0- realizują to cztery kolejne rozkazy przesunięcia logicznego o jeden bit w prawo- SRL A

SRL A

SRL A

SRL A


ADD A,#30 ;konwersja na kod ASCII

(kolejne cyfry 09 w kodzie ASCII to liczby 30h39h)

LD (IY),A ;wyświetlenie starszej cyfry godzin

LD A,B ;odtworzenie liczby godzin

AND A,#0F ;wydzielenie młodszej cyfry

ADD A,#30 ;konwersja na kod ASCII

LD (IY+1),A ;wyświetlenie młodszej cyfry godzin w komórce Video RAM o adresie o 1 większym, czyli w prawo o jedną pozycję na ekranie.

........................

........................ ;to samo dla minut i sekund

........................



JP PETLA ;skok do etykiety PETLA (etykiety to dowolne kombinacje znaków alfanumerycznych nie będących mnemonikami ani nazwami rejestrów do 7 znaków).
Można oczywiście tak zmodyfikować powyższy szkic programu, aby powtarzający się fragment programu- rozpakowywania i konwersji na kod ASCII- zastąpić procedurą. Powyższa modyfikacja mogłaby wyglądać tak:
PETLA LD (IX),#04 ;godziny

LD A,(IX+1) ;odczyt godzin

CALL PACK ;procedura rozpakowania I zamiany na ASCII

LD (IY),C ;wyświetlenie starszej części liczby godzin

LD (IY+1),B ;wyświetlenie młodszej części liczby godzin

........................

........................

JP PETLA


PACK LD B,A ;zapamiętanie odczytanej wartości

AND #F0 ;wydzielenie starszej cyfry

SRL A ;przesunięcie zawartości akumulatora o cztery bity w prawo

SRL A


SRL A

SRL A


ADD A,#30 ;konwersja na kod ASCII

LD C,A ;zapamiętanie starszej cyfry godzin

LD A,B ;odtworzenie liczby godzin

AND A,#0F ;wydzielenie młodszej cyfry

ADD A,#30 ;konwersja na kod ASCII

LD B,A ;zapamiętanie młodszej cyfry



RET ;powrót z procedury
Jako dodatkowe zadanie można wyświetlić aktualny czas na wyświetlaczach siedmiosegmentowych modułu 6818.





©snauka.pl 2016
wyślij wiadomość