™ ® ©
Politechnika Lubelska |
Laboratorium podstaw systemów mikroprocesorowych |
|||
w Lublinie |
Ćwiczenie nr 7 |
|||
Nazwisko: Garbacz Kuźma |
Imię: Tomasz Jacek |
Semestr V |
Grupa ED 5.3 |
Rok akademicki 1997/98 |
Temat ćwiczenia: System przerwań. |
Data wykonania 12.12.97 |
Ocena: |
Cel ćwiczenia :
Zapoznanie się z systemem przerwań systemu DSM '51.
Zadanie 1.
Wynik |
I1 |
T0 |
T1 |
Zadanie 2.
Lp. |
Stan pocz. T0 |
Stan pocz. T1 |
Kolejność |
1 |
0000 |
0000 |
T0,T1 |
2 |
0000 |
0001 |
T1,T0 |
3 |
0001 |
0000 |
T0,T1 |
Zadanie 3.
Lp. |
Stan pocz. T0 |
Stan pocz. T1 |
Kolejność |
1 |
FFFF |
FFFF |
T0,T1,Y0 |
2 |
FF80 |
FF80 |
T0,T1,Y0 |
3 |
FF40 |
FF40 |
T0,Y0,T1 |
4 |
FF10 |
FF10 |
Y0,T0,T1 |
5 |
zablokowany |
FF40 |
T1,Y0 |
Zadanie 4.
Lp. |
Timer 0 |
Timer 1 |
Kolejność |
||
|
Stan pocz. |
Pr. |
Stan pocz. |
Pr. |
|
1 |
0000 |
0 |
0000 |
0 |
T0,T1 |
2 |
0000 |
0 |
0000 |
1 |
T1,T0 |
3 |
0000 |
0 |
0001 |
0 |
T1,T0 |
4 |
0000 |
1 |
0001 |
0 |
T0,T1 |
5 |
0000 |
1 |
0001 |
1 |
T1,T0 |
Zadanie 5.
;************************************************
;ĆWICZENIE 7 - SYSTEM PRZERWAŃ 8051
;ZADANIE 5 -
;************************************************
LED EQU P1.7
;********* 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
MOV TH0,#TH0_SET
DJNZ ACC,NO_1SEK
CPL LED
MOV A,#20
NO_1SEK:
RETI
;**************************************
ORG 100H
START:
MOV TMOD,#TMOD_SET
MOV TH0,#TH0_SET
MOV TL0,#TL0_SET
SETB TR0
MOV A,#20
SETB EA
SETB ET0
SJMP $
Program wykorzystuje przerwanie do zmniejszania licznika zawartego w akumulatorze. Przerwanie generowane jest co 50ms, w akumulatorze natomiast znajduje się wartość równa 20. W kolejnych przerwaniach zmniejszana jest zawartość akumulatora o 1, po wyzerowaniu akumulatora zapalana lub gaszona jest dioda LED.
Zadanie 6.
Program nieprawidłowo wyprowadza znaki na wyświetlacz LCD. Jedynym rozwiązaniem pozwalającym na bezkonfliktową pracę programu jest zastosowanie stosu podczas obsługi programu.
Zadanie 7.
Ustawienie priorytetów przerwań i zezwoleń na przerwania w celu uzyskania odpowiedniej kolejności realizacji przerwań (T1,INT1,T0)
SETB ET1 ;zezwolenie na przerwanie z timera 1SETB PT1
SETB EX1 ;zezwolenie na przerwanie od linii INT1
SETB PX1
SETB ET0 ;zezwolenie na przerwanie z timera 0
CLR PT0
SETB EA ;ogólne zezwolenie na przerwanie
Zadanie 8.
;************************************************
;ĆWICZENIE 7 - SYSTEM PRZERWAŃ 8051
;ZADANIE 6 -
;************************************************
LED EQU P1.7
TIM 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 0EAH
TL0_SET EQU 066H
KROTNOSC EQU 0FFH
;**************************************
LJMP START
;********* Przerwanie Timer 0 *********
ORG 0BH
PUSH ACC
PUSH PSW
MOV TH0,#TH0_SET
MOV TL0,#TL0_SET
DJNZ TIM,JESZCZE_NIE
CPL LED
MOV TIM,#KROTNOSC
JESZCZE_NIE:
POP PSW
POP ACC
RETI
;**************************************
ORG 100H
START:
MOV TIM,#30
MOV TMOD,#TMOD_SET
MOV TH0,#TH0_SET
MOV TL0,#TL0_SET
SETB TR0
SETB EA
SETB ET0
;******************************************************************
;
; Robocza część programu głównego
;
;******************************************************************
LOOP_0:
LCALL LCD_CLR
MOV R1,#16
LOOP:
LCALL WAIT_KEY
MOV B,A
MOV A,#2
LCALL DELAY_MS
MOV A,B
ADD A,#30H
MOV R0,#LCDWD
MOVX @R0,A
DJNZ R1,LOOP
SJMP LOOP_0
Modyfikacja programu polegała na dodaniu instrukcji wykorzystującej w obsłudze przerwania stosu, jak również licznik został przeniesiony do komórki pamięci RAM. Tak zmieniony program działa poprawnie.