WYDZIAŁ ELEKTRYCZNY POLITECHNIKI LUBELSKIEJ
LABORATORIUM PODSTAW SYSTEMÓW MIKROPROCESOROWYCH
Imię i Nazwisko: Mariusz Burzec |
Grupa: ED 5.3 |
||||
Data wyk. ćwicz. 15.11.96 |
Numer ćwiczenia 4 |
Temat ćwiczenia: Timery mikrokontrolera 8051. System przerwań. |
Ocena: |
Zespół (ćw. odróbkowe):
1.Mariusz Burzec
2.Adam Jadczuk
3.Piotr Janiec
1. Cel ćwiczenia.
Celem ćwiczenia było zapoznanie się z systemem timerów i przerwań mikrokontrolera, a także zapoznanie z zawartością rejestrów sterujących timerami , oraz wpływem zawartości bitów tych rejestrów na tryb pracy timerów.
2. Wykonanie ćwiczenia.
Zadanie 1.a
Ustawienia timerów:
Rejestr |
Gate |
C/~T |
M1 |
M0 |
Gate |
C/~T |
M1 |
M0 |
TMOD |
- |
0 |
0 |
0 |
- |
0 |
0 |
0 |
Stany |
TIMER1 |
TIMER0 |
||
początko- |
TH1 |
TL1 |
TH0 |
TL0 |
we |
0010 |
0000 |
Rejestr |
TF1 |
TR1 |
TF0 |
TR0 |
IE1 |
IT1 |
IE0 |
IT0 |
TCON |
- |
1 |
- |
0 |
- |
- |
- |
- |
Przy danych ustawieniach timer zlicza impulsy wewnętrznego zegara. Zmiany wartości poszczególnych rejestrów obrazuje poniższa tabela:
Zmiana TH1 na wartość: |
Stan TL1 przed zmianą: |
Stan TL1 po zmianie: |
Stan 4-rech bitów rejestru TCON |
01 |
1F |
20 |
0100 |
02 |
3F |
40 |
0100 |
03 |
5F |
60 |
0100 |
04 |
7F |
80 |
0100 |
05 |
9F |
A0 |
0100 |
06 |
BF |
C0 |
0100 |
07 |
DF |
E0 |
0100 |
08 |
FF |
00 |
0100 |
09 |
1F |
20 |
0100 |
0A |
3F |
40 |
0100 |
0B |
5F |
60 |
0100 |
0C |
7F |
80 |
0100 |
0D |
9F |
A0 |
0100 |
0E |
BF |
C0 |
0100 |
0F |
DF |
E0 |
0100 |
10 |
FF |
00 |
0100 |
Wyzerowanie bitu TR1 powoduje zatrzymanie timera 1
Zadanie 1.b
Ustawienia timerów:
Rejestr |
Gate |
C/~T |
M1 |
M0 |
Gate |
C/~T |
M1 |
M0 |
TMOD |
- |
0 |
0 |
0 |
- |
0 |
0 |
0 |
Stany |
TIMER1 |
TIMER0 |
||
początko- |
TH1 |
TL1 |
TH0 |
TL0 |
we |
FEFF |
0000 |
Rejestr |
TF1 |
TR1 |
TF0 |
TR0 |
IE1 |
IT1 |
IE0 |
IT0 |
TCON |
- |
1 |
- |
0 |
- |
- |
- |
- |
Zmiany TH1:
Zmiana TH1 na wartość: |
Stany TL1 przed zmianą: |
Stany TL1 po zmianie: |
Stan 4-rech bitów rejestru TCON |
00 |
1F |
20 |
0100 |
01 |
3F |
40 |
1100 |
02 |
5F |
60,61 |
1100 |
03 |
7F |
80,81 |
1100 |
04 |
9F |
A0,A1 |
1100 |
W trybie 0 TIMER1 pracuje jako rejestr 13-bitowy. TL1 jest traktowany jako rejestr 5-bitowy i cały jest zwiększany, ale przeniesienie z rejestru TL1 do rejestru TH1 następuje po przepełnieniu młodszych pięciu bitów młodszych rejestru TL1.
Zadanie nr2: Zliczanie impulsów zewnętrznych w timerze mikrokontrolera.
Celem zadania drugiego było uzupełnienie miejsc zaznaczonych znakami zapytania w programie licznik.asm. Zadanie to wykonaliśmy następująco:
;************************************************
;ĆWICZENIE 4 - TIMERY MIKROKONTROLERA
;ZADANIE 2 - ODLICZANIE CZASU
;************************************************
LED EQU P1.7
;********* Ustawienie TIMERÓW *********
TMOD_SET EQU 01100000B
TH1_SET EQU 0FFH-5
TL1_SET EQU 0FFH-5
;****************************************
LJMP START
ORG 100H
START:
ACALL INICJALIZACJA
MOV TMOD,#TMOD_SET ;ustaw tryb pracy timerów
MOV TH1,#TH1_SET ;ustaw stan początkowy
MOV TL1,#TL1_SET ;wybranego timera
SETB TR1 ;start wybranego timera
CLR TR0
CLR LED ;włącz LED
LOOP:
LCALL WYSWIETL_STANY_LICZNIKOW
JNB TF1,LOOP
; MOV A,#TCON
; CJNE A,#010000B,LOOP ;pętla dopóki nie przepełniony
CLR TF1 ;zeruj flagę
CPL LED ;przełącz LED
SJMP LOOP
INICJALIZACJA:
LCALL LCD_CLR
RET
WYSWIETL_STANY_LICZNIKOW:
LCALL LCD_CLR
MOV DPTR,#TEKST1
LCALL WRITE_TEXT
MOV A,TH0
LCALL WRITE_HEX
MOV A,TL0
LCALL WRITE_HEX
MOV DPTR,#TEKST2
LCALL WRITE_TEXT
MOV A,TH1
LCALL WRITE_HEX
MOV A,TL1
LCALL WRITE_HEX
MOV A,#20H
LCALL DELAY_MS
RET
TEKST1:
DB 'Timer 0: ',0
TEKST2:
DB 'Timer 1: ',0
Zadanie nr 3 :Odliczanie czasu w timerze mikrokontrolera
Celem tego zadania było takie uzupełnienie programu czas.asm tak, aby włączał i wyłączał diodę LED co pewien określony odcinek czasu.
1 ;************************************************
2 ;ĆWICZENIE 4 - TIMERY MIKROKONTROLERA
3 ;ZADANIE 3 - ODLICZANIE CZASU
4 ;************************************************
5
6 0097 LED EQU P1.7
7
8 ;********* Ustawienie TIMERÓW *********
9 0010 TMOD_SET EQU 00010000B
10
11 004C TH1_SET EQU 256-180 ; stany początkowe
12 0000 TL1_SET EQU 0
13 000A KROTNOŚĆ EQU 0AH
14 ;**************************************
15
16 0000: 02 01 00 LJMP START
17 0100: ORG 100H
18 0100: START:
19 0100: 75 89 10 MOV TMOD,#TMOD_SET ;tryb pracy timerów
20
21 0103: 75 8D 4C MOV TH1,#TH1_SET ;stan początkowy
22 0106: 75 8B 00 MOV TL1,#TL1_SET ;wybranego timera
23
24 0109: D2 8E SETB TR1 ;start wybranego timera
25 010B: LOOP: ;pętla mrugania diody TEST
26 010B: B2 97 CPL LED
27 010D: 74 0A MOV A,#KROTNOSC ;odczekaj czas KROTNOSC*ms=???s
28 010F: TIME:
29 010F: 30 8F FD JNB TF1,$ ;czekaj, aľ wybrany timer
30 ;odliczy 50ms
31 0112: 75 8D 4C MOV TH1,#TH1_SET ;wybrany timer na 50ms
32 0115: 75 8B 00 MOV TL1,#TL1_SET
33 0118: C2 8F CLR TF1 ;zerowanie flagi
34 ;wybranego timera
35 011A: D5 E0 F2 DJNZ ACC,TIME ;odczekanie N*50ms
36 011D: 80 EC SJMP LOOP
Do odliczania czasu użyto tu TIMER 1 pracujący w trybie 1. Maksymalny zakres liczenia to 65536 jednostek, czyli 65536 * 12/11,0592 to jest około 71ms. Przyjęto, że TIMER będzie odliczał odcinki czasu po 50 ms, czyli TIMER musi liczyć do 50000[μs]*12/11.0592=46080, natomiast 180*256=46080 Aby TIMER obliczył 46080 należało mu wpisać wartości początkowe równe TH1=256-180 i TL1=0.
Stan rejestru TCON = 0000 po wciśnięciu klawisza zmienia się na 0100.Na wyświetlaczu obserwujemy kolejno : FFF3 ; FFF7 ; FFFB ; FFFF ; 0020 ; 0024 ; 0028.. ITD.
W tym punkcie obserwujemy przepełnienie licznika w momencie zmiany stanu z FFFF na 0020 zapala się dioda i stan Rej. TCON zmienia się na 1100.