Architektura Komputerów Ćwiczenia czwarte



Pobieranie 21.26 Kb.
Data30.04.2016
Rozmiar21.26 Kb.

Gr. laboratoryjna L4


Laboratorium



Architektura Komputerów

Ćwiczenia czwarte

Data:





Temat:

System przerwań procesora 8051.

Ocena:


I. Treść zadania do wykonania na trzecich zajęciach:
Ćwiczenie nr 4 :

Ćwiczenie 4.

Temat ćwiczenia: System przerwań procesora 8051.
Należy zapoznać się z działaniem systemu przerwań procesora 8051 (lekcja 12 podręcznika). Należy przeanalizować działanie programów z przykładu 1 i przykładu 2 do lekcji 12.
Zadania do wykonania:

1.Skompilować i uruchomić program Przykład 2. Sprawdzić, czy układ przerwań funkcjonuje prawidłowo.

2. Poprzez odpowiednią modyfikację programu zbudować miernik refleksu dokonujący pomiaru z dokładnością do 0,01s działający według następującego algorytmu:



  • Po uruchomieniu program odczekuje 5 sekund

  • Zapala diodę „test” i zaczyna liczyć czas (używając timera T0) czekając jednocześnie na wciśnięcie dowolnego klawisza (można użyć podprogramu WAIT_KEY)

  • Po wciśnięciu dowolnego klawisza program wyprowadza na wyświetlacz ilość setnych sekundy jakie upłynęły od chwili zapalenia diody do chwili wciśnięcia klawisza. (albo w formie liczby hex albo dziesietnej)

Wskazówka: Najwygodniej jest zliczać w procedurze obsługującej przerwanie ilość przerwań od timera ustawionego na zliczanie okresu 10ms ( a nie 50 jak to jest w przykładach). Procedura oczekiwania na wciśnięcie klawisza powinna być wywołana w programie głównym. Zawartość rejestru, w którym zliczane będą okresy 10ms nie może być niszczona przez procedurę WAIT_KEY a zatem powinien to być inny rejestr niż używane przez tą procedurę (w spisie procedur na str 289 wymienione są zmieniane rejestry). Jednocześnie procedura obsługi przerwania nie może zakłócać funkcjonowania programu głównego a zatem co najmniej PSW powinno być chowane na stosie w momencie wejścia do procedury i odtwarzane w momencie wyjścia (podobnie jak w Przykładzie2, rozkazy PUSH PSW i POP PSW). Podobnie należy postąpić z każdym rejestrem, którego zawartość procedura obsługi przerwania zmienia a który jest używany w programie głównym, jednak w tym konkretnym przypadku konieczności tej można uniknąć używając innych rejestrów w programie głównym i innych w procedurze obsługi przerwania lub używając do zliczania czasu któregoś z bajtów pamięci wewnętrznej. W programie Przykład2 jest do tego celu użyty bajt o adresie 30H.

Uwaga! Zamieszczone poniżej kody nie są sensownymi programami



II. Kody programów:
Zadanie1:

************************************************

;LEKCJA 12 - SYSTEM PRZERWAŃ 8051

;PRZYKŁAD 2 - TIMERY

;************************************************
LED EQU P1.7
;******* Pamięć wewnętrzna RAM ********

TIME EQU 30H


;********* Ustawienie TIMERów *********

;TIMER 0


T0_G EQU 0 ;GATE

T0_C EQU 0 ;COUNTER/-TIMER

T0_M EQU 1 ;MODE (0..3)

TIM0 EQU T0_M+T0_C*4+T0_G*8

;TIMER 1

T1_G EQU 0 ;GATE

T1_C EQU 0 ;COUNTER/-TIMER

T1_M EQU 0 ;MODE (0..3)

TIM1 EQU T1_M+T1_C*4+T1_G*8
TMOD_SET EQU TIM0+TIM1*16
TH0_SET EQU 256-180

TL0_SET EQU 0

;**************************************
LJMP START
;********* Przerwanie Timer 0 *********

ORG 0BH


PUSH PSW ;przechowanie rejestrów

PUSH ACC ;na stosie

MOV TH0,#TH0_SET ;TH0 na 50ms

DJNZ TIME,NO_1SEK ;czy minęła 1 sek

;**************************************

ORG 100H


START:
MOV TMOD,#TMOD_SET ;Timer 0 liczy czas

MOV TH0,#TH0_SET ;Timer 0 na 50ms

MOV TL0,#TL0_SET

;na przerwania

SETB ET0 ;włącz zezwolenie na

;przerwanie od Timera 0


LCALL LCD_CLR

LOOP: ;wpisywanie na LCD

LCALL WRITE_DATA
SJMP LOOP
Zadanie 2:

;************************************************

;LEKCJA 12 - SYSTEM PRZERWAŃ 8051

;PRZYKŁAD 2 - TIMERY

;************************************************
LED EQU P1.7
;******* Pamięć wewnętrzna RAM ********

TIME EQU 30H

ILE EQU 40H
;********* Ustawienie TIMERów *********

;TIMER 0


TIM0 EQU T0_M+T0_C*4+T0_G*8
TMOD_SET EQU TIM0*16
; = 9216 cykli = 36 * 256

TH0_SET EQU 256-36

TL0_SET EQU 0

;**************************************


LJMP START ;SKOK DO STARTU PROGRAMU GLOWNEGO
;********* Przerwanie Timer 0 *********

ORG 0BH


PUSH PSW ;przechowanie rejestrów

PUSH ACC ;na stosie


DJNZ TIME,JEDNA_SE ;czy minęło 10 msek
MOV TIME,#100 ;odczekaj kolejny czas

JEDNA_SE:

MOV A,ILE

POP PSW
;**************************************

ORG 100H

START:


CLR A

MOV TIME,#0


MOV A,#50 ;czekaj czas 50*100ms=5s zapala diodę po 5 s

MOV ILE,#0


KLR LED

;===============================


MOV TMOD,#TMOD_SET ;Timer 0 liczy czas

MOV TL0,#TL0_SET


SETB TR0 ;start Timera 0
LCALL WAIT_KEY

LCALL LCD_CLR


MOW A,ILE

LCALL WRITE_HEX


LCALL WRITE_HEX
SJMP $

;**************************************

;Podprogram odczekania czasu A*100ms

TIME_N100:

PUSH ACC ;przechowaj na stosie

;licznik zewnętrzny

MOV A,#200 ;zacznij odliczać 100ms

TIME_100: ;odliczanie 200 * 0.5ms

POW ACC ;2 cykle

DJNZ ACC,TIME_100 ;2 cykle

;razem 460 cykli=0.5ms
POP ACC ;odtwórz licznik

DJNZ ACC,TIME_N100 ;odlicz N*100ms




III. Podsumowanie:

Tematem zajęć czwartych był system przerwań 8051. Przerwanie to wykonanie skoku do podprogramu, czyli LCALL. Skok ten jest wykonywany pomiędzy dwoma dowolnymi rozkazami programu w momencie zgłaszania przerwania i jest wykonywany pod ściśle określony adres. O tym czy będzie zgłoszone przerwanie w momencie przepełnienia timera, a więc ustawienie flagi TFx, decyduje program (czyli programista).



W zadaniach do ćwiczenia 4 znajdują się programy do obsługi przerwań, które są zakończone rozkazem powrotu z przerwania – RETI (zaznaczone na zielono).

Niestety nie udało nam się do końca poprawnie wykonać ćwiczenia, ponieważ źle liczyliśmy czas świecenia diody do wciśnięcia dowolnego klawisza


©absta.pl 2016
wyślij wiadomość

    Strona główna