Zapis i odczyt bitu Opóźnienie programowe

Transkrypt

Zapis i odczyt bitu Opóźnienie programowe
Zapis i odczyt bitu
Opóźnienie programowe
dr inŜ. Stefan Brock 2008/2009
dr inŜ. Stefan Brock 2008/2009
Opóźnienie programowe
Opóźnienie programowe
• Zalety
– moŜna uzyskać bardzo krótkie opóźnienia
– nie wymagają sprzętowych liczników
– działa w kaŜdym systemie
• Wady
– trudno uzyskać precyzyjne odmierzanie czasu zaleŜy od kompilatora
– moŜe wymagać ‘dostrojenia’ po zmianie
parametrów
dr inŜ. Stefan Brock 2008/2009
dr inŜ. Stefan Brock 2008/2009
Zapis i odczyt bitów
Operacje na bitach
• Operatory w języku C:
– logiczne: OR: || AND: && NOT: !
– bitowe: OR: | AND: &
NOT: ~ XOR:^
•
•
•
•
dr inŜ. Stefan Brock 2008/2009
Ustawianie (zawsze 1)
Kasowanie (zawsze 0)
Negacja (na wartość przeciwną)
Testowanie (bez zmiany wartości bitu)
dr inŜ. Stefan Brock 2008/2009
1
Ustawianie bitu - bitowe OR
Kasowanie bitu - bitowe AND
TR0=1;
• Adresowanie bajtowe: TCON=TCON|0x10;
xxxx xxxx
| 0001 0000
============= TCON|=(1<<4);
xxx1 xxxx
• Adresowanie bitowe:
Jak skasować jedną instrukcją dwa bity?
TCON|=((1<<4)|(1<<0))
dr inŜ. Stefan Brock 2008/2009
dr inŜ. Stefan Brock 2008/2009
Bezpośrednia negacja bitu - XOR
TR0=~TR0;
• Adresowanie bajtowe: TCON=TCON^0x20;
xxxx xxxx
^ 0010 0000
============= TCON^=(1<<5);
xxyx xxxx
a
b
a^b
0
0
0
y=~x
• Adresowanie bitowe:
1
0
0
1
1
1
dr inŜ. Stefan Brock 2008/2009
1
1
0
bit 7
TF1
GATE
bit 3
IE1
GATE
bit 6
TR1
C/T'
bit 2
IT1
C/T'
bit 5
TF0
M1
bit 1
IE0
M1
Testowanie bitów
• Adresowanie if (TR0) a=10;
bitowe:
if (TR0 & TR1) b=17;
if !(TR1) c=7; else c=8;
• Adresowanie if (TMOD & 0x10) a=10;
if (TCON & 0x50) b=17;
bajtowe:
xyxz xxxx
& 0101 0000
===========
0y0z 0000={0x00,0x40,0x10,0x50}
F
T
T
T
dr inŜ. Stefan Brock 2008/2009
Rejestry sterujące pracą układów
licznikowych
Rejestr:
TCON
TMOD
Rejestr:
TCON
TMOD
TR0=0;
• Adresowanie bajtowe: TCON=TCON&0xEF;
xxxx xxxx
& 1110 1111
============= TCON&=~(1<<4);
xxx0 xxxx
• Adresowanie bitowe:
Schematyczna budowa układu czasowego
bit 4
TR0
M0
bit 0
IT0
M0
TCON - adresowanie bitowe
TMOD - adresowanie bajtowe
dr inŜ. Stefan Brock 2008/2009
dr inŜ. Stefan Brock 2008/2009
2
Rejestry sterujące pracą układów
licznikowych
Rejestr:
TCON
TMOD
Rejestr:
TCON
TMOD
bit 7
TF1
GATE
bit 3
IE1
GATE
bit 6
TR1
C/T'
bit 2
IT1
C/T'
bit 5
TF0
M1
bit 1
IE0
M1
bit 4
TR0
M0
bit 0
IT0
M0
TCON - adresowanie bitowe
TMOD - adresowanie bajtowe
dr inŜ. Stefan Brock 2008/2009
Bity rejestru TCON
• TF1 (7), TF0 (5) - Flaga licznika. Bit
ustawiany sprzętowo wskutek przepełnienia,
zerowany sprzętowo w chwili rozpoczęcia
wykonywania procedury obsługi przerwania.
• TR1 (6), TR0 (4) - bit włączający układ
licznikowy
• IE1 (3), IT1(2), IE(1), IT(0) - bity związane z
obsługą przerwań zewnętrznych
dr inŜ. Stefan Brock 2008/2009
Bity rejestru TMOD
• GATE - bramkowanie licznika.
– GATE=1 - liczy gdy: INTx=1 i TRx=1
– GATE=0 - liczy gdy: TRx=1
• C/T' - źródło zliczanych impulsów
– „0” - zliczanie cykli maszynowych (impulsów
o częstotliwości fosc/12)
– "1" - zliczanie impulsów zewnętrznych (z Tx)
dr inŜ. Stefan Brock 2008/2009
Wybór trybu pracy licznika
M1
0
0
1
M0
0
1
0
1
1
• M1, M0 - bity wyboru trybu pracy dla
dr inŜ. Stefan Brock 2008/2009
danego układu licznikowego
Tryb 0 liczników T0/T1
Tryb pracy:
Tryb 0
Tryb 1
Tryb 2
układ T0 - tryb 3,
układ T1 zatrzymany
dr inŜ. Stefan Brock 2008/2009
dr inŜ. Stefan Brock 2008/2009
3
Tryb 1 liczników T0/T1
Tryby 0 i 1 liczników
• Tryb 0: Stan licznika jest określony
zawartością odpowiedniego rejestru THx
oraz pięciu młodszych bitów rejestru TLx.
Przepełnienie tego 13-bitowego licznika
spowoduje ustawienie odpowiedniego bitu
przerwania TFx
• Tryb 1: Tak samo, lecz licznik 16-bitowy
dr inŜ. Stefan Brock 2008/2009
Tryb 2 liczników T0/T1
dr inŜ. Stefan Brock 2008/2009
Tryb 2 liczników T0/T1
• 8-bitowe liczniki z automatycznym
przeładowywaniem. Przepełnienie
licznika TLx ustawia odpowiedni
znacznik TFx oraz powoduje
przepisanie zawartości THx do
odpowiedniego rejestru TLx.
• Wartość THx pozostaje bez zmiany.
dr inŜ. Stefan Brock 2008/2009
dr inŜ. Stefan Brock 2008/2009
Tryb 3 licznika T0
Tryb 3 licznika T0
dr inŜ. Stefan Brock 2008/2009
• Dwa niezaleŜne liczniki 8-bitowe, utworzone
z rejestrów TL0 i TH0.
• Rejestr TL0 pracuje w układzie identycznym jak
w trybach 1
• Rejestr TH0 pracuje równieŜ jako timer 8-bitowy zlicza wyłącznie impulsy zegarowe. Sterowanie przez TR1 i TF1.
• T1 zastosowania nie wymagające bitów TR1 i
TF1.
• Wykorzystywany do generacji sygnału taktującego
dr inŜ. Stefan Brock 2008/2009
dla układu transmisji szeregowej.
4
Struktura programu dla mikrokontrolera
Część inicjująca
Wykonuje się jeden raz
Część wykonawcza
W pętli nieskończonej
dr inŜ. Stefan Brock 2008/2009
void main(void)
{ unsigned char a,b;
a=b=0;
TMOD=0x01;
TH0=0x3C; TL0=0xB0;
TR0=1;
while(1) {
if (TF0) { TF0=0;
TL0=0xB0; TH0=0x3C;
a++;
if (a>19) {a=0;
b++;
} // if (a>19)
} // if (TF0)
} // while(1)
} // main()
dr inŜ. Stefan Brock 2008/2009
a=b=0; inicjalizacja zmiennych
TMOD=0x01; 0000 0001
T1 - tryb 0, timer, bez bramkowania
T0 - tryb 1, timer, bez bramkowania
TH0=0x3C; TL0=0xB0;
Wartość początkowa: 0x3CB0 = 15536
Wartość przeładowania 0xFFFF+1=65536
RóŜnica (do zliczenia) - 65536-15536=50000
Dla fosc=12 MHz fclk=1 MHz Tclk=1 µs T=50 ms
TR0=1; - start T0
dr inŜ. Stefan Brock 2008/2009
while(1) {
pętla nieskończona
if (TF0) { oczekiwanie na przepełnienie T0
TF0=0;
kasowanie flagi TF0
TL0=0xB0; programowe przeładowanie T0 do
TH0=0x3C;wartości startowej-najpierw młodszy
a++;
programowy licznik - co 50 ms
if (a>19){
co 20 przejście - co 1 s
a=0;
programowy licznik -sekundnik
b++;
miejsce na wyświetlenie nowej wartości
}}}
dr inŜ. Stefan Brock 2008/2009
Struktura programu dla mikrokontrolera
Źródła przerwań w 8051
Część inicjująca
Wykonuje się jeden raz
Część wykonawcza
W pętli nieskończonej
zdarzenie 1
Przerwanie
1
zdarzenie 2
Przerwanie
2
dr inŜ. Stefan Brock 2008/2009
dr inŜ. Stefan Brock 2008/2009
5
Struktura programu dla mikrokontrolera
Źródła przerwań w 8051
• Przerwania zewnętrzne INT0, INT1 – aktywne
poziomem lub zboczem
• Przerwania od Timerów T0, T1 – w momencie
przepełnienia
• Przerwanie od portu szeregowego – pusty
bufor nadajnika lub pełny bufor odbiornika
zdarzenie 2
Część inicjująca
Wykonuje się jeden raz
Część wykonawcza
W pętli nieskończonej
Przerwanie
2
zdarzenie 1
dr inŜ. Stefan Brock 2008/2009
dr inŜ. Stefan Brock 2008/2009
Przerwanie
1
Struktura programu dla mikrokontrolera
Część inicjująca
Wykonuje się jeden raz
zdarzenie 1
zdarzenie 2
Przerwa
nie 1
Przerwa
nie 2
Część wykonawcza
W pętli nieskończonej
•
•
•
•
•
Priorytety przerwań
• KaŜde z przerwań moŜe być przypisane do
jednego z 2 poziomów priorytetów –
wysokiego lub niskiego
• Przerwanie wysokiego priorytetu moŜe
przerwać obsługę przerwania niskiego
priorytetu
• W ramach jednego priorytetu przerwania są
sprawdzane według ustalonej kolejności:
dr inŜ. Stefan Brock 2008/2009
dr inŜ. Stefan Brock 2008/2009
Kolejność sprawdzania przerwań w
ramach tego samego poziomu
Jak przerwanie jest obsługiwane
IE0
(jako pierwszy)
TF0
IE1
TF1
RI + TI (jako ostatni)
UWAGA – Dotyczy jednoczesnych
zgłoszeń przerwań
dr inŜ. Stefan Brock 2008/2009
• Po ustaleniu waŜnego przerwania (p priorytecie
większym niŜ aktualny) procesor wykonuje
sprzętowo generowany rozkaz skoku LCALL do
ustalonego adresu pamięci.
• Dotychczasowa zawartość PC jest składowana na
stosie.
• Kasowana jest flaga przerwania (nie dla RI+TI)
• Zgłoszenia nie obsłuŜonych przerwań oczekują na
swoją kolej.
dr inŜ. Stefan Brock 2008/2009
6
Układ przerwań
Jak przerwanie jest obsługiwane
•
Adresy skoków (wektory przerwań):
•
IE0 0003 H
000B
0013
• TF1
001B
• RI + TI 0023
•
TF0
•
IE1
H
H – po 8 bajtów odstępu
H
H
• Obsługa przerwania kończy się po
wykonaniu instrukcji RETI – zdjęcie ze stosu
wartości PC i powrót do poprzedniej akcji.
dr inŜ. Stefan Brock 2008/2009
Rejestr IE – adresowany bitowo
dr inŜ. Stefan Brock 2008/2009
Rejestr IP – adresowany bitowo
dr inŜ. Stefan Brock 2008/2009
Tryb przerwań zewnętrznych - TCON
•TCON.3 IE1 (TCON.1 IE0) Przerwanie
zewnętrzne 1(0)
Flaga zewnętrznego przerwania
•Set – sprzętowy po wykryciu przerwania
na wejściu
•Reset – po wejściu do procedury obsługi
•TCON.2 IT1 (TCON.0 IT0) Typ sygnału
generującego przerwanie
dr inŜ. Stefan Brock 2008/2009
•Set/Reset – programowy
•0 – przerwanie wywoływane niskim
dr inŜ. Stefan Brock 2008/2009
#include <ADUC831.H>
; FUNCTION T0_handler (BEGIN)
void T0_handler(void) interrupt 1
{
P0 ^=0x01;
}
void main(void)
{
TMOD=1;
TR0=1;
ET0=1;
EA=1;
while(1);
}
XRL
P0,#01H
RETI
; FUNCTION T0_handler (END)
; FUNCTION main (BEGIN)
MOV TMOD,#01H
SETB TR0
SETB ET0
SETB EA
?C0002:
SJMP ?C0002
FUNCTION main (END)
dr inŜ. Stefan Brock 2008/2009
7
#include <ADUC812.H>
unsigned char x,y;
void handler_T0(void) interrupt 1
{ x++; }
void handler_E0(void) interrupt 0
{ y++;
while (P3&0x01); // Pętla -zdarzenie zew.
}
void main (void)
{ TMOD=1; //T0 - 16 bitowy
TR0=1; //Start T0
ET0=1; // Zgoda na przerwania od T0
IT0=1; // EX0 - aktywne zboczem
EX0=1; // Zgoda na EX0
PT0=1; // Wysoki priorytet T0
EA=1; // Zgoda globalna
while(1);
dr inŜ. Stefan Brock 2008/2009
}
unsigned char x,y,z,w;
void handler_T0(void) interrupt 1 using 1
{
x=(y+x)+(y-w)+(3+y-z)-(w+z)*(2*y-x);
}
void handler_E0(void) interrupt 0 using 2
{
unsigned char x,y,z,w;
void handler_T0(void) interrupt 1
{
x=(y+x)+(y-w)+(3+y-z)(w+z)*(2*y-x);
}
Decyduje o
kolejności
przerwań
void handler_E0(void) interrupt 0
{
x=(y+x)+(y-w)+(3+y-z)(w+z)*(2*y-x);
}
dr inŜ. Stefan Brock 2008/2009
PUSH ACC
PUSH B
PUSH PSW
MOV PSW,#08H
MOV A,y
...................................
MOV x,A
POP PSW
POP B
POP ACC
RETI
PUSH
PUSH
PUSH
PUSH
PUSH
PUSH
ACC
B
PSW
AR5
AR6
AR7
MOV A,y
...................................
MOV x,A
POP
POP
POP
POP
POP
POP
RETI
AR7
AR6
AR5
PSW
B
ACC
Wybór banku rejestrów - PSW
x=(y+x)+(y-w)+(3+y-z)-(w+z)*(2*y-x);
}
dr inŜ. Stefan Brock 2008/2009
....................................
MOV
PSW,#08H - RS1=0, RS0=1 - wybór banku 1
MOV
MOV
PSW,#010H - RS1=1, RS0=0 - wybór banku 2
PSW,#010H
....................................
dr inŜ. Stefan Brock 2008/2009
Rozmieszczenie banków rejestrów
Źródła przerwań w uC 831
• Przerwania zewnętrzne INT0, INT1 – aktywne poziomem lub
zboczem
• Przerwania od Timerów T0, T1 – w momencie przepełnienia
• Przerwanie od portu szeregowego – pusty bufor nadajnika lub
pełny bufor odbiornika
dr inŜ. Stefan Brock 2008/2009
•
•
•
•
•
•
WDS - Watchdog Timer
PSMI - Power Supply Monitor
ADCI - Analog Digital Converter
SPI-I2C - magistrale szeregowe
TF2 - Timer 2 Flag
TII - Time interval
counter
dr inŜ. Stefan
Brock 2008/2009
8
Kolejność sprawdzania przerwań w ramach
tego samego poziomu - uC 831
Wektory przerwań w uC 831
Source Vector Address
IE0
0003H
TF0 `
000BH
IE1
0013H
TF1
001BH
RI + TI
0023H
TF2+EXF2 002BH
ADCI
0033H
I2CI+ISPI
003BH
PSMI
0043H
TII
0053H
WDS
005BH
dr inŜ. Stefan Brock 2008/2009
dr inŜ. Stefan Brock 2008/2009
Rejestry sterowania przerwaniami
Rejestr IE
• IE Interrupt Enable Register
- adresowany bitowo
• IP Interrupt Priority Register
- adresowany bitowo
• IEIP2 Secondary Interrupt Enable Register
- adresowany bajtowo
Bit
Name
Description
7
EA
Enable All Interrupt
6
EADC
Enable ADC Interrupt
5
ET2
Enable Timer 2 Interrupt
4
ES
Enable UART Serial Port Interrupt
3
ET1
Enable Timer 1 Interrupt
2
EX1
Enable External Interrupt 1
1
ET0
Enable Timer 0 Interrupt
0
EX0
Enable External Interrupt 0
dr inŜ. Stefan Brock 2008/2009
dr inŜ. Stefan Brock 2008/2009
Rejestr IP
Bit Name
Description
(Interrupt Priority 1=High 0=Low)
7 ---- Reserved for Future Use
6
PADC
ADC
5
PT2
Timer 2
4
PS
UART Serial Port
3
PT1
Timer 1
2
PX1
External Interrupt
1
PT0
Timer 0
0
PX0
External Interrupt 0
dr inŜ. Stefan Brock 2008/2009
Nr w języku C
0
1
2
3
4
liczone jako
5
wielokrotność
6
przesunięcia
7
o 8 bajtów
8
10
11
Rejestr IEIP2
Bit
Name Description
7 ---- Reserved for Future Use
6
PTI
5
PPSM Priority - Power Supply Monitor Interrupt
Priority - Time Interval Interrupt
4
PSI
Priority for SPI/I2C Interrupt
3 ---- This Bit Must Contain Zero
2
ETI
Enable Time Interval Counter Interrupt
1
EPSMI
Enable Power Supply Monitor Interrupt
0
ESI
Enable SPI/I2C Serial Port Interrupt
dr inŜ. Stefan Brock 2008/2009
9

Podobne dokumenty