TECHNIKA CYFROWA - sprawko lab 4, Studia, PWR, 4 semestr, Podstawy techniki mikroprocesorowej, laboratoria


Technika cyfrowa

Laboratorium

Temat: Timery/liczniki. Obsługa w trybie przeglądania.

Paweł Wańtowski 9.V.2006, Wrocław

Grzegorz Smychowski

Zadania do wykonania

Zadanie 1.

W zadaniu 1. należało utworzyć program, którego zadaniem jest generowanie opóźnień czasowych o zadanym czasie t (np. t1 oraz t2), przy czym program ten ma wykorzystywać licznik T0 lub T1. Napisanie takiego programu wymaga znajomości działania układów czasowo-licznikowych mikroprocesora 8051. Istotne jest, iż zawartość każdego licznika jest pamiętana na dwóch bajtach (dla T0: TH0-TL0 na rejestrach SFR 8Ch-8Ah, dla T1: TH1-TL1 na rejestrach SFR 8Dh-8Bh). Ważna jest też znajomość rejestrów specjalnych TCON oraz TMOD.

Zadanie 2.

Zadanie to polegało na utworzeniu programu generującego przynajmniej 3 równoległe sekwencje o zadanych czasach THIGH i TLOW. Wizualizacja czasu trwania zadanych sekwencji może być dokonana z wykorzystaniem diod LED, zaś program może być w dużej mierze oparty na programie zrealizowanym na potrzeby zadania 1.

Zadanie 3.

Celem zadania 3. było utworzenie programu o funkcjonalności stopera. Program ma za zadanie mierzyć odstęp czasu zawarty pomiędzy naciśnięciem przycisków powiązanych z portami P3.2 oraz P3.3, a następnie wyświetlać tenże czas (w sekundach) na wyświetlaczu LCD.

Opis realizacji

ad. Zadanie 1.

Koncepcja działania programu została zobrazowana na schemacie blokowym umieszczonym na schemacie 1. Utworzony program musiał zostać wyposażony w odwołania do potrzebnych do zrealizowania zadania rejestrów specjalnych (nieodzowne jest ustawienie odpowiedniego trybu pracy odpowiednio ustawiając poszczególne bity rejestru TMOD) i obsługę THx oraz TLx, odpowiedzialnych za czasy THIGH i TLOW zadawane timerowi Tx. Cykliczne generowanie opóźnienia czasowego jest zobrazowane poprzez zapalanie i gaszenie diody powiązanej z portem P1.0. Samo zapalanie i gaszenie realizowane jest w bardzo prosty sposób - następuje to poprzez zanegowanie stanu portu P1.0 poleceniem CPL. W zadaniu wykorzystany został timer T1. Odpowiednie ustawienie wartości TH1 oraz TL1 pozwala na generację impulsu czasowego o czasie trwania 50 ms. Dzięki odpowiedniemu wykorzystaniu przechowywanej w rejestrze R2 wartości 20 w pętli DJNZ zapalenie bądź wygaszenie diody trwa przez okres czasu równy jednej sekundzie. Należy wspomnieć, iż program działa w nieskończonej pętli. Dodatkowe komentarze zostały umieszczone w kodzie programu, który z kolei został umieszczony w listingu 1.

ad. Zadanie 2.

Tworzenie niniejszego programu pozwoliło wykorzystać wiedzę nabytą przy realizacji poprzedniego zadania oraz - częściowo - rozwiązania w nim zastosowane. Wygenerowanie trzech równoległych sekwencji nasunęło ideę umożliwienia deklaracji okresu stanu zapalenia i zgaszenia każdej z trzech wykorzystywanych diod podpiętych do portu P1 (jest to umożliwione poprzez deklarowanie w kodzie programu wartości TON1, TOFF1, TON2, TOFF2, TON3, TOFF3). Odpowiednie zaprojektowanie programu powoduje, iż po wykonaniu całego cyklu dla określonej diody następuje naprzemiennie zapalenie lub zgaszenie jej. Kod programu wraz z odpowiednimi komentarzami umieszczony został w listingu 2.

ad. Zadanie 3.

Zadanie miało polegać na utworzeniu stopera, czyli programu, który miałby odmierzać czas upływający pomiędzy dwoma naciśnięciami odpowiedniego przycisku (bądź przycisków). Ze względu na chęć uproszczenia interfejsu zadania oraz nadania mu specyfiki prawdziwych stoperów, zdecydowaliśmy się na użycie przycisków powiązanych z portem P3. Należy dodać, iż dla ułatwienia obsługi wyświetlacza LCD skorzystaliśmy z utworzonej na wcześniejszych zajęciach biblioteki LCD.inc, implementujące podstawowe funkcje powiązane z obsługą wyświetlacza LCD.

Z powodu niewystarczającej ilości czasu pozostałej na wykonanie tego zadania, utworzoną wersję programu można nazwać „roboczą” - chociaż implementuje ona założoną funkcjonalność, nie jest ona dopracowana w satysfakcjonującym stopniu. Kod programu został umieszczony w listingu 3.

Uwagi końcowe

Założenia wszystkich zadań przewidzianych do realizacji podczas zajęć laboratoryjnych zostały w pełni zrealizowane. Wykonywane ćwiczenia pozwoliły zapoznać się z zasadą działania timerów T0 oraz T1 poprzez odpowiednią obsługę przypisanych im wartości THx. i TLx oraz wybieranie odpowiednich trybów pracy, co w efekcie pozwoliło stworzyć funkcjonalny program użytkowy (stoper). Warto zauważyć, iż wykorzystane zostały umiejętności nabyte na poprzednich zajęciach - wykorzystanie diod LED oraz przycisków portu P3. Przydatna okazała się również napisana wcześniej biblioteka podprogramów obsługujących wyświetlacz LCD. Schemat blokowy algorytmu z zadania 1. został umieszczony na stronie 3, zaś listingi poszczególnych programów na stronach 4-7.

Schemat 1. Schemat blokowy algorytmu z zadania 1.

0x08 graphic
0x01 graphic

Listing 1. Kod programu z zadania 1.

;Lab4_Zad1_PW_GS_TC3

$NOMOD51 ; wylaczenie predefinicji rejestrow

$INCLUDE(reg517.inc) ; wlaczenie predefinicji rej. procesora 80537

CSEG AT 0000h ; adres poczatku programu

LOOP:

MOV R2,#20 ; R2*50ms

CPL P1.0

CALL OPOZN ; wezwanie procedury generujacej opoznienia

SJMP LOOP

OPOZN:

ANL TMOD,#0Fh ; wyzerowanie 4 starszych bitów odp. za ustawienia T1

ORL TMOD,#10h ; tryb pracy M0=1, M1=0

ANL TCON,#3Fh ; TF1=0, TR1=0

MOV TH1,#03Ch ; ustawienie wartosci poczatkowych dla licznika

MOV TL1,#0B0h ; 65536-50000

SETB TR1 ; start T1 (TR1=1)

LOOP2:

JNB TF1,$ ; czekanie az licznik sie przepelni i zglosi przerwanie

CLR TF1 ; zerowanie znacznika przepelnienia

MOV TH1,#3Ch ; ponowne ustawienie wartosci poczatkowych

MOV TL1,#0A9h

DJNZ R2,LOOP2

RET

END

Listing 2. Kod programu z zadania 2.

; Lab4_Zad2_PW_GS_TC3

$NOMOD51 ; wylaczenie predefinicji rejestrow

$INCLUDE(reg517.inc) ; wlaczenie predefinicji rej. procesora 80537

CSEG AT 0000h

TON1 EQU 80 ; czas trwania zapalenia diody P1.0

TOFF1 EQU 7 ; czas trwania zgaszenia diody P1.0

TON2 EQU 45 ; czas trwania zapalenia diody P1.1

TOFF2 EQU 35 ; czas trwania zgaszenia diody P1.1

TON3 EQU 13 ; czas trwania zapalenia diody P1.2

TOFF3 EQU 28 ; czas trwania zgaszenia diody P1.2

START:

MOV TMOD,#01h ; ustawienie trybu pracy licznika T0

MOV R0,#TOFF1 ; przesuniecie do rejestrow okresow

MOV R2,#TOFF2 ; zgaszenia kolejnych diod LED

MOV R4,#TOFF3

LICZNIK:

LCALL OPOZN ; wywolanie opoznienia

MOV TH0,#4Ch ; ustawienia poczatkowe licznika T0

MOV TL0,#0h

SETB TR0 ; start licznika T0

JNB TF0,$ ; czekanie az do przepelnienia T0

LED0_DEC:

DEC R0

MOV A,R0

JZ LED0 ; jezeli wykonal sie pelen cykl dla P1.0 to zapal/zgas

LED1_DEC:

DEC R2

MOV A,R2

JZ LED1 ; jezeli wykonal sie pelen cykl dla P1.1 to zapal/zgas

LED2_DEC:

DEC R4

MOV A,R4

JZ LED2 ; jezeli wykonal sie pelen cykl dla P1.0 to zapal/zgas

JMP LICZNIK

LED0:

MOV A,P1

CPL ACC.0

MOV P1,A ; odczytanie stanu diody P1.0

JB ACC.0, LED0_OFF ; jezeli zapalona to zgas

LED0_ON:

MOV R0,#TON1 ; jezeli nie to zapal

JMP LED1_DEC

LED0_OFF:

MOV R0,#TOFF1

JMP LED1_DEC

LED1:

MOV A,P1

CPL ACC.1

MOV P1,A ; odczytanie stanu diody P1.1

LCALL OPOZN

JB ACC.1, LED1_OFF ; jezeli zapalona to zgas

LED1_ON:

MOV R2,#TON2 ; jezeli nie to zapal

JMP LED2_DEC

LED1_OFF:

MOV R2,#TOFF2

JMP LED2_DEC

LED2:

MOV A,P1

CPL ACC.2

MOV P1,A ; odczytanie stanu diody P1.2

LCALL OPOZN

JB ACC.0, LED2_OFF ; jezeli nie to zapal

LED2_ON:

MOV R4,#TON3 ; jezeli nie to zapal

JMP LICZNIK

LED2_OFF:

MOV R4,#TOFF3

JMP LICZNIK

OPOZN:

PUSH ACC

MOV A,#1h

ORL TMOD,#10h ; ustawienie trybu pracy licznika T1

MOV TL1,#0

MOV TH1,#76 ; ustawienia poczatkowe licznika T1

CLR TF1 ; wyzerowanie znacznika przepelnienia licznika T1

SETB TR1 ; start licznika T1

OPOZN_LOOP:

JNB TF1,$ ; czekanie na przepelnienie licznika T1

MOV TH1,#4Ch

CLR TF1 ; wyzerowanie znacznika przepelnienia licznika T1

DJNZ ACC,OPOZN_LOOP ; powtorz jesli A!=0

CLR TR1 ; wyzerowanie bitu sterujacego zliczaniem licznika T1

POP ACC ; odnowienie akumlatora

RET

END

Listing 3. Kod programu z zadania 3.

;Lab4_Zad3_PW_GS_TC3

$nomod51

$include(reg517.inc)

$include (lcd.inc)

ORG 0

LJMP PROG ; skok do procedury PROG

ORG 0Bh

LJMP PRZER ; skok do procedury PRZER

ORG 30h

PRZER:

INC B

RETI

PROG:

CALL initLCD ; wezwanie procedury inicjującej LCD

CALL LCDclear ; wezwanie procedury czyszczącej LCD

ORL TMOD,#09 ; ustawienie trybu pracy timera T0

POM:

MOV R0,#20h

CLR A ; czyszczenie zawartości akumulatora

MOV TL0,A

MOV TH0,A

MOV B,A

JB P3.3,$ ; obsluga przycisku uruchamiajacego stoper

SETB TR0 ; start pracy timera

JB P3.2,$ ; obsluga przycisku wylaczajacego stoper

CLR TR0 ; koniec pracy timera

MOV @R0,TL0

INC R0

MOV @R0,TH0

INC R0

MOV @R0,B ; przeksztalcenia wyniku w celu

MOV A,B ; poprawnego wyswietlenia go

MOV B,#15 ; na LCD

DIV AB

CALL putInt ; wezwanie procedury wyprowadzajacej czas na LCD

LJMP POM ; skok do procedury POM

END

1

Oczekiwanie na przepełnienie licznika i, gdy to nastąpi, zerowanie znacznika przepełnienia

Dokonaj ustawienia trybu pracy timera T1

Czy R2 = 0 ?

Ustaw wartości początkowe TH1, TL1 dla timera T1

Start timera T1

Zaneguj stan portu P1.0 (zapalenie/zgaszenie diody)

TAK

Przechowaj w rejestrze R2 wartość `20'

Ponowne ustawienie wartości początkowych

START

NIE

R2--



Wyszukiwarka

Podobne podstrony:
TECHNIKA CYFROWA - sprawko lab 1, Studia, PWR, 4 semestr, Podstawy techniki mikroprocesorowej, labor
TECHNIKA CYFROWA - sprawko lab 5, Studia, PWR, 4 semestr, Podstawy techniki mikroprocesorowej, labor
sprawko 11, Studia, PWR, 3 semestr, Logika układów cyfrowych, laboratoria
sprawko 3a, Studia, PWR, 3 semestr, Logika układów cyfrowych, laboratoria
sprawko 11a, Studia, PWR, 3 semestr, Logika układów cyfrowych, laboratoria
sprawko 10, Studia, PWR, 3 semestr, Logika układów cyfrowych, laboratoria
sprawko 10a, Studia, PWR, 3 semestr, Logika układów cyfrowych, laboratoria
Przykładowe zadania na 2 kolokwium z programowania w języku C, Studia, PWR, 1 semestr, Podstawy prog
Przykładowe zadania na 1 kolokwium z programowania w języku C, Studia, PWR, 1 semestr, Podstawy prog
sprawozdanie automatyka 1, Studia, PWR, 2 semestr, Podstawy automatyki i robotyki
Sprawozdanie z laboratorium automatyki i robotyki, Studia, PWR, 2 semestr, Podstawy automatyki i rob
W INZ 6, Studia, PWR, 1 semestr, Podstawy programowania, wykłady
Bufory sprawko, Biotechnologia PWR, Semestr 2, Podstawy chemii nieorganicznej Laboratorium, Instrukc
W INZ 4, Studia, PWR, 1 semestr, Podstawy programowania, wykłady
W INZ 3, Studia, PWR, 1 semestr, Podstawy programowania, wykłady
Synteza octanu n-butylu, Biotechnologia PWR, Semestr 3, Podstawy chemii organicznej - Laboratorium (
LABORATORIUMCHEMANAL, Biotechnologia PWR, Semestr 4, Podstawy chemii analitycznej - Laboratorium, śc
Zn, Biotechnologia PWR, Semestr 4, Podstawy chemii analitycznej - Laboratorium, ściągi
reakcje, Biotechnologia PWR, Semestr 4, Podstawy chemii analitycznej - Laboratorium, ściągi

więcej podobnych podstron