LABORATORIUM PODSTAW
SYSTEMÓW
MIKROPROCESOROWYCH
∇∇∇∇∇∇∇∇∇∇∇∇∇∇∇∇∇∇∇∇∇∇∇∇∇∇∇∇∇∇∇∇∇∇∇∇∇∇∇∇∇
SPRAWOZDANIE Z ĆWICZENIA NR 5.
TEMAT:Regulator tyrystorowy. Praca w czasie
rzeczywistym.
Sprawozdanie sporządził: ROBERT SIWIEC
Grupa dziekańska: ED 5.1
Rok akademicki: 96/97
∇∇∇∇∇∇∇∇∇∇∇∇∇∇∇∇∇∇∇∇∇∇∇∇∇∇∇∇∇∇∇∇∇∇∇∇∇∇∇∇∇
KATEDRA ELEKTRONIKI
POLITECHNIKA LUBELSKA
ZADANIE NR 1
Sterowanie tyrystorem.
Program żrówka.hex został załadowany do DSM-51, a następnie uruchomiony w trybie pracy krokowej. Wyniki obserwacji umieszczono w tabeli poniżej:
Tabela nr 1
Krok |
Program źródłowy |
A |
P1 |
Ż |
W |
Komentarz |
1 |
START: LCALL INICJALIZACJA |
05 |
FF |
OFF |
- |
;ustawienia wstępne |
2 |
LCALL WYŚWIETL |
05 |
FF |
OFF |
5 |
;wyświetl wstępną wartość opóźnienia |
3 |
LOOP: JNB SIEĆ,$ |
05 |
FF |
OFF |
5 |
;oczekiwanie na „0” sieci |
4 |
LCALL DELAY_MS |
00 |
FB |
OFF |
5 |
;opóźnienie A*1ms |
5 |
CLR BRAMKA |
00 |
FB |
ON |
5 |
;załączenie żarówki |
6 |
MOV A,#10 |
0A |
FB |
ON |
5 |
;załadowanie #10 do akumulatora |
7 |
DJNZ ACC,$ |
00 |
FB |
ON |
5 |
;opóźnienie ≈ 10 μs |
8 |
SETB BRAMKA |
00 |
FF |
OFF |
5 |
;wyłączenie żarówki |
9 |
LCALL KLAWIATURA |
05 |
FF |
OFF |
5 |
;pobranie nowej wartości opóźnienie |
10 |
SJMP LOOP |
05 |
FF |
OFF |
5 |
;zamknięcie pętli programu |
ZADANIE NR 2
Adresowanie indeksowe.
Program tebela.hex został załadowany do DSM-51, a następnie uruchomiony w trybie pracy krokowej. Wyniki obserwacji umieszczono w tabeli poniżej:
Tabela nr 2:
Program źródłowy |
D |
A |
D+A |
R7 |
R6 |
KL |
LCD |
Komentarz |
START: LCALL INICJACJA |
0180 |
01 |
|
FB |
6C |
1 |
1 |
;ustawienia wstępne |
LOOP: LCALL KLAWIATURA |
0180 |
01 |
|
FB |
01 |
1 |
1 |
;czyta klawiaturę |
MOV DPTR,#TABELA |
0180 |
01 |
|
09 |
01 |
1 |
1 |
;tabela funkcyjna |
PUSH ACC |
0180 |
01 |
|
09 |
6C |
1 |
1 |
;przechowanie nr klawisza |
RL A |
0180 |
02 |
|
FB |
6C |
1 |
1 |
;mnóż przez 2 |
PUSH ACC |
0180 |
02 |
|
FB |
6C |
1 |
1 |
;przechowanie przesunięcia |
MOVC A,@A+DPTR |
0180 |
FB |
|
FB |
6C |
1 |
1 |
;starszy bajt z tabeli |
MOV R7,A |
0180 |
FB |
|
FB |
6C |
1 |
1 |
;wynik do R7 |
POP ACC INC A MOVC A,@A+DPTR |
0180 |
02 03 6C |
|
FB |
6C |
1 |
1 |
;odtwórz przesunięcie ;wskaż młodszy bajt ;pobierz młodszy bajt |
MOV R6,A |
0180 |
6C |
|
FB |
6C |
1 |
1 |
;wynik do R6 |
POP ACC |
0180 |
01 |
|
FB |
6C |
1 |
1 |
;odtwórz numer klawisza |
SJMP LOOP |
0180 |
01 |
|
FB |
6C |
1 |
1 |
;pętla programu |
Tabela funkcyjna:
|
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
0180 |
- |
FB |
F6 |
F2 |
ED |
E9 |
E4 |
E0 |
0188 |
- |
6C |
DA |
48 |
B6 |
24 |
92 |
00 |
ZADANIE NR 3
Sterowanie fazowe, odliczanie czasu w timerze mikrokontrolera.
Poniżej przedstawiono propozycje programu, który realizuje odmierzanie opóźnień za pomocą Timera 0 . Poniżej podano wartości heksadecymalne, które należy wpisać jako wartości początkowe do rejestrów TH0 i TL0:
Tabela:
|
1ms |
2ms |
3ms |
4ms |
5ms |
6ms |
7ms |
TL0 |
65 |
CC |
32 |
99 |
FF |
66 |
CC |
TH0 |
FC |
F8 |
F5 |
F1 |
ED |
EA |
E6 |
Poniżej przedstawiony jest listing programu realizujący powyższe zadanie:
;**************************************
;R0 - adres klawiatury
;R2 - ustawione opóźnienie załączenia tyrystora (1..8)
;R3 - nowe opóźnienie odczytane z klawiatury
B0R2 EQU 2 ;adres rejestru 2 w banku 0
BOR6 EQU 6
BOR7 EQU 7
SIEC EQU P3.4 ;wejście z transpotora
;0 - jest napięcie na żarówce
;1 - "0" sieci
BRAMKA EQU P1.2 ;wyjście przez transoptor - bramka tyrystora
;0 - załączenie tyrystora
;1 - niezałączanie tyrystora
;********* USTAWIENIA TIMERÓW *********
TMOD_SET EQU 00000001B
TCON_SET EQU 00010000B
TIMER_STOP EQU 00000000B
;**************************************
LJMP START
;**************************************
ORG 0100H
;**************************************
DATA_TH0:
MOVC A,@A+PC
RET
DB FCH,F8H,F5H,F1H,EDH,EAH,E6H
;**************************************
DATA_TL0:
MOVC A,@A+PC
RET
DB 65H,CCH,32H,99H,FFH,66H,CCH
;**************************************
START:
LCALL INICJALIZACJA
NEW_OP:
MOV R2,A ;zapamiętanie nowego ustawienia
ADD A,#30H ;i wypisanie na wyświetlacz LCD
LCALL WRITE_DATA
LOOP:
JNB SIEC,$ ;oczekiwanie na "0" sieci
MOV A,R2 ;odczekanie zadanego opóźnienia (1..8ms)
LCALL CZEKAJ_CZAS
CLR BRAMKA ;impuls załączający tyrystor
MOV A,#10
DJNZ ACC,$
SETB BRAMKA
MOVX A,@R0 ;sprawdzenie, czy użyta klawiatura
CPL A
JZ LOOP
MOV R3,#0 ;sprawdzenie numeru przyciśniętego klawisza
LOOP_NR:
INC R3
RRC A
JNC LOOP_NR
MOV A,R3 ;sprawdzenie, czy nowa wartość opóźnienia
CJNE A,B0R2,NEW_OP
LJMP LOOP
;**************************************
INICJALIZACJA:
LCALL LCD_CLR
MOV R0,#CSKB0 ;adres klawiszy 0..7
MOV A,#5 ;wstępna wartość opóźnienia
RET
;**************************************
CZEKAJ_CZAS:
MOV TCON,TIMER_STOP
MOV TMOD,TMOD_SET
ACALL DATA_TH0
MOV TH0,A
MOV A,R2
ACALL DATA_TL0
MOV TL0,A
MOV A,R2
MOV TCON,TCON_SET
JNB TF0,$
RET
;******************************************
;END
ZADANIE NR 4.
Pomiar częstotliwości sieci przy użyciu timerów.
Propozycja programu realizującego pomiar częstotliwości sieci jest przedstawiona poniżej, wraz ze schematem blokowym programu:
;ustawienia początkowe
SIEC EQU P3.4
BRAMKA EQU P1.2
TMOD_SET EQU 00010101B
TH1_SET EQU 256-180
TL1_SET EQU 0
LJMP START
ORG 100H
START:
MOV TMOD,TMOD_SET ;ustawienie trybów pracy timerów
LOOP:
MOV R0,#20
MOV TL0,#0 ;zerowanie timera 0
MOV TH0,#0
JNB SIEC,$ ;czekaj na 0 sieci
SETB TR0
TIME:
MOV TH1,TH1_SET ;ustawienie wartości początkowych
MOV TL1,TL1_SET ;timera 1 odliczenie 50ms
CLR TF1 ;zerowanie flagi przepełnienia
SETB TR1 ;uruchomienie timera 1
LICZ:
JNB SIEC,TEST ;zliczanie przez timer 0 zdarzeń U=0
SETB TR0
RET
TEST:
JNB TF1,LICZ ;sprawdzanie ustawienia flagi
RET
DJNZ R0,TIME ;pętla odliczania czasu R0*50ms
CLR TR0 ;zatrzymanie timerów
CLR TR1
MOV A,TL0 ;zapisanie w ACC stanu timera 0
MOV B,#2 ;podzielenie stanu ACC przez 2
DIV AB ;wynik do akumulatora
LCALL WYSWIETL
CPL P1.7 ;zmiana stanu diody LED
SJMP LOOP ;zamknięcie pętli
WYSWIETL:
LCALL LCD_CLR ;wyczyścić wyświetlacz
MOV B,#10 ;zamiana liczby na postać dziesiętną
DIV AB ;przez wydzielenie dziesiątek
LCALL WRITE_HEX ;wypisanie wartości częstotliwości
MOV A,B
LCALL WRITE_HEX
MOV A,#' ` ;wyświetlenie napisu Hz
LCALL WRITE_DATA
MOV A,#'H`
LCALL WRITE_DATA
MOV A,#'z`
LCALL WRITE_DATA
RET