poglavlje ii arhitektura mikrokontrolera familije...
TRANSCRIPT
Poglavlje II
Mikrokontroleri
Arhitektura mikrokontrolera familije MCS -51
TH18-bit
TL18-bit
TH08-bit
TL18-bit
Tajmeri/Broja čiTajmer 1 Tajmer 0
Timer Control (TCON)
Timer Mode (TMOD)
GATE C/T M1 M0 GATE C/T M1 M0
Tajmer 1 Tajmer 0
M1 M0
0 0 Mode 0 13 bitni brojač naviše
0 1 Mode 1 16 bitni brojač naviše
1 0 Mode 2 8 bitni brojač sa autoreload funkcijom
1 1 Mode 3 Kombinacija oba daje tri 8 bitna
TMOD
Tajmeri 0 (1)
Oscilator :12
TH0-8bitTL0-8bit TF0T0 pin
MOD1
C/T
TR0
GATE
Brojači navišeSa FFFFh prelaze na 0000h
GATE C/T M1 M0 GATE C/T M1 M0
TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0
TMOD
TCON
Kontrola prekidnog sistema
INT0 pinTHn-8bitTLn-5bit
MOD0
TF0
Primer:Generisati simetričan talasni oblik frekvencije 1 kHz na liniji P1.7. Taktna frekvencija mikrokontrolera iznosi 11.0592 MHz
• Izbor načina rada brojača: kao negejtovani tajmer u režimu “mode 0”TMOD = xxxx0001b
GATE C/T M1 M0 GATE C/T M1 M0
• Određivanje taktne frekvencija brojaca/tajmeraFclk = 11.0592/12 MHzFclk = 921.6 kHzTclk = 1081.5487 ns
• Određivanje početne vrednosti brojača
GATE C/T M1 M0 GATE C/T M1 M0
Početak brojanja
FFFF
Kašnjenje
Određivanje po četne vrednsti broja ča
TF0=1
0000
TL0TH0
Početak brojanja = 65536 – KašnjenjeKašnjenje = 500/1.0815487 = 462
Početak brojanja = 65074Početak brojanja = FE32h
0000
TF0=1
KASNI: MOV TH0,#0xFE ; postavljanje pocetne ..MOV TL0,#0x32 ; .. vrednosti brojacaSETB TR0 ; ukljuci brojac
FLAG: JNB TF0,FLAG ; cekaj dok se TF0 ne postavi
CLR TR0 ; iskljuci brojac
• Izrada procedure vremenskog kašnjenja
CLR TR0 ; iskljuci brojacCLR TF0 ; resetuj TF0 na nuluRET ; izlaz iz podprograma
;-------------------------------kasnjenje equ 462
MOV TH0,#high(-kasnjenje)MOV TL0,#low(-kasnjenje)
;-------------------------------
;Program na asembleru
ORG 0 ; reset adresaSJMP START ; rezervisana oblast
ORG 40H ; start adresa na 0040HSTART: MOV TMOD,#01H ; put Timer 0 into mode 1PETLJA: SETB P1.7 ; logic 1 (5 volts)
ACALL KASNI ; 0.5ms kasnjenjeCLR P1.7 ; logic 0 (0 volts)CLR P1.7 ; logic 0 (0 volts)ACALL KASNI ; 0.5ms kasnjenjeSJMP PETLJA ; repeat
;--------------------------------------PETLJA: CPL P1.7
ACALL KASNI ; 0.5ms kasnjenjeSJMP PETLJA ; repeat
;--------------------------------------
Greške u generisanju vremenskog intervala
;Program na C jeziku#include <reg51.h>#define on 1#define off 0sbit Izlaz = P1^7;void kasni(); // deklaracija funkcije koja ne vraca parametre
main() { // pocetak programaTMOD=0x01; // nacin rada tajmerawhile(1) { // beskonacna petlja
Izlaz = on; // P1.7 = 1kasni(); // kasnjenjeIzlaz = off; // P1.7 = 0Izlaz = off; // P1.7 = 0kasni(); // kasnjenje
}}
void kasni() {TH0 = -(462/256);TL0 = -(462%256);TR0 = on;while(!TF0);TR0 = off; // stop the timer0TF0 = off; // clear flag TF0
}
!!!
Oscilator :12
TH0-8bit
TL0-8bit TF0T0 pin
MOD2
C/T
TR0
reload
Tajmeri 0 (1)
INT0 pin
GATE
Automatsko reloadovanje broja čaMaksimalni moduo deljenja = 256 (za TH0=0)Tajmer 1 kao “baud rate” generator
Oscilator :12
TL0-8bit TF0T0 pin
MOD3
C/T
TR0
Fosc/12
Tajmer 0 u “mode 3”
TH0-8bit
INT0 pin
GATE
TF1
TR1
Fosc/12
Korisno kada je Tajmer 1 baud rate generatorUnapređene varijante sa velikim brojem tajmera!
TF2 EXF2 RCLK TCLK EXEN2 TR2 C/T2 CP/RL2
Tajmer 2 (8052)Kontrolni registar T2CON
UART baud rate
Capture/Reload flagCP/RL2 = 1
External flag
Overflow flag
Tajmer/Broja č
Start/Stop
Enable external
TF2 EXF2 RCLK TCLK EXEN2 TR2 CAT2 CP/RL2
Tajmer 2 (8052)Kontrolni registar T2CON
Capture/Reload flagCP/RL2 = 0
UART baud rate
External flag
Overflow flag
Tajmer/Broja č
Start/Stop
Enable external
;Program na asembleru
ORG 0 ; reset adresaSJMP START ; rezervisana oblast
ORG 40H ; start adresa na 0040HSTART: MOV RCAP2L,#0x32
MOV RCAP2H,#0xFEMOV T2CON,#0 5H ; reload mod + STARTMOV T2CON,#0 5H ; reload mod + START
PETLJA: JNB TF2, $CPL P1.7CLR TF2SJMP PETLJA ; repeat
UARTUniversal Asynchronous Receiver Transmitter
SM0 SM1 SM2 REN TB8 RB8 TI RI
Kontrolni registar SCON
9. bit zapredaju
Multiprocesorskirežim rada
Specifikacijanačina radaMODE
Prekidni markeriEnablereceiver
Primljeni9. bit
TI postavlja hardver kada se završislanje karaktera koji je upisan u SBUF
RI postavlja hardver kada u prijemniSBUF stigne novi karakter
b7 b6 b5 b4 b3 b2 b1 b0 SBUFPrijemnik/PredajnikIsta adresaMOV SBUF, #’A’
MOV A, SBUF
SM0 SM1
0 0 Mode 0 Sinhroni prenos, šift registri
0 1 Mode 1 UART promenljiva brzina, 8b podatak
1 0 Mode 2 UART fiksna brzina, 9b podatak
1 1 Mode 3 UART promenljiva brzina, 9b podatak
UART - Mode 0
SBUF
TX Šift reg.
Oscilator :12
RX Šift reg.
b0 b1 b2 b3 b4 b5 b7 b7
P3.0/RXD
P3.1/TXD
Upis u SBUF
MOV SBUF, #76h
SBUF
RX Šift reg.
Čitanje iz SBUF
• Predaja podatka počinje upisom u SBUF. Kada se svih8 bitova pošalju, postavi se marker TI
• Prijem podatka započinje postavljanjem markera RE.Kada se učitaju svh 8 bitova postavi se marker RI
0 1 1 0 1 1 1 0
MOV SBUF, #76h
SE
R1
4
SC
LK1
1
SC
LR1
0
RC
LK1
2
E1
3
O0
15
O1
1
O2
2
O3
3
O4
4
O5
5
O6
6
O7
7
Q7
'9
IC174HC595
SE
R1
4
SC
LK1
1
SC
LR1
0
RC
LK1
2
E1
3
O0
15
O1
1
O2
2
O3
3
O4
4
O5
5
O6
6
O7
7
Q7
'9
IC274HC595
SE
R1
4
SC
LK1
1
SC
LR1
0
RC
LK1
2
E1
3
O0
15
O1
1
O2
2
O3
3
O4
4
O5
5
O6
6
O7
7
Q7
'9
IC874HC595
Out 1 Out 64
+ + +
RXD
TXD
P1.0
DATA
CLOCK
LOAD
Primer: proširenje na 64 izlazne linije
;Upis 8 bajtova podataka koji se nalaze u;Upis 8 bajtova podataka koji se nalaze u;IRAM memoriji na adresi 40h na 64 izlazne linije 8 sift registara;(Serial In Paralel Out).
load sbit p1.0
out64: mov sbuf,#00h ; izbor rezima rada UART-aclr load ; inicijalno stanje linije “load” mov r0,#40h ; pocetna adresa bafera podatakamov r2,#8 ; broj bajtova
petlja: mov a,@r0 ; citanje podatka iz baferamov sbuf,a ; upis u UART, pocetak slanjajnb ti,$ ; cekanje na zavrsetak predajeclr ti ; brisanje TIdjnz r2,petlja ; petllja za upis potrebnog broja podatakasetb load ; generisanje impulsa za upis podatka u izlazni lecclr loadret
SBUF
TX Šift reg.
Timer 1
Upis u SBUF
UART - Mode 1
:16
SM0 SM1 SM2 REN TB8 RB8 TI RI
SCON
b0 b1 b2 b3 b4 b5 b6 b7
Bit TI
0 1
0 1 0 1
SBUF
RX Šift reg.
Čitanje iz SBUF
Odmeravanje na 7., 8..i 9. taktu
)1256(1612 TH
FBaudrate osc
−××=
Baudrate
FTH osc
×−=
1922561
TH1 Baud
FD(-3) 9600
FA(-6) 4800
F4(-12) 2400
E8(-24) 1200
Za Fosc = 11.0592 MHz
b0 b1 b2 b3 b4 b5 b6 b7
Bit RI
0 1
SBUF
TX Šift reg.
Upis u SBUF
UART - Mode 2
:16Oscilator :4
SM0 SM1 SM2 REN TB8 RB8 TI RI
SCON
b0 b1 b2 b3 b4 b5 b6 b7
START bit STOP bit
Bit TI
b80 1TXD
1 0 0 1
SBUF
RX Šift reg.
Čitanje iz SBUF
Odmeravanje na 7., 8..i 9. taktu
64oscF
Baudrate =
b0 b1 b2 b3 b4 b5 b6 b7
Bit RI
b80 1RXD
SBUF
TX Šift reg.
Timer 1
Upis u SBUF
UART - Mode 3
:16
b0 b1 b2 b3 b4 b5 b6 b7
START bit STOP bit
Bit TI
b80 1TXD
SM0 SM1 SM2 REN TB8 RB8 TI RI
SCON
1 1 0 1
SBUF
RX Šift reg.
Čitanje iz SBUF
Odmeravanje na 7., 8..i 9. taktu
)1256(1612 TH
FBaudrate osc
−××=
Baudrate
FTH osc
×−=
1922561
TH1 Baud
FD(-3) 9600
FA(-6) 4800
F4(-12) 2400
E8(-24) 1200
Za Fosc = 11.0592 MHz
b0 b1 b2 b3 b4 b5 b6 b7
Bit RI
b80 1RXD
Osnovne procedure
;inicijalizacija serijskog kanalaIni9600:
mov tmod,#20h ;tajmer 1 u autoreload mode mov th1,#0fdh ;baudrate=9600mov scon,#50h ;SCON u mode 1, REN=1setb tr1 ;start tajmerret
;slanje karaktera iz akumulatora ;slanje karaktera iz akumulatora SendChar:
mov sbuf,a ;iniciranje transferajnb ti,$ ;cekaj dok se ne zavrsi predajaclr tiret
Osnovne procedure
B1200 equ -24B2400 equ -12B4800 equ -6B9600 equ -3
Baud set B9600
IniSerial:mov tmod,#20h ;tajmer 1 u autoreload mode mov tmod,#20h ;tajmer 1 u autoreload mode mov th1,#Baud ;baudrate=9600mov scon,#50h ;SCON u mode 1, REN=1setb tr1 ;start tajmerret
Primer: Slanje stringa “ELFAK” na RS232;program
org 0jmp start
org 40hStart: acall Ini9600Petlja: mov a,#’E’
acall SendCharmov a,#’L’acall SendCharmov a,#’F’acall SendCharmov a,#’A’acall SendCharmov a,#’K’acall SendCharmov a,#0ah ; “line feed”acall SendCharmov a,#0dh ; “carriage return”acall SendCharjmp Petlja
;inicijalizacija serijskog kanalaIni9600: mov tmod,#20h ;tajmer 1 u autoreload mode
mov th1,#0fdh ;baudrate=9600mov scon,#50h ;SCON u mode 1, REN=1setb tr1 ;start tajmerret
;slanje karaktera iz akumulatora SendChar: mov sbuf,a ;iniciranje transfera
jnb ti,$ ;cekaj dok se ne zavrsi predajaclr tiret
Primer: Prijem karaktera sa RS232
;prijem jednog karaktera ReadChar: jnb ri,$ ;cekaj dok karakter ne bude u SBUF
mov a,sbuf ;primljeni karakter u akumulatorclr riret
;programorg 0jmp startjmp start
org 40hStart: acall Ini9600Petlja: acall ReadChar
anl a,#0DFh ;mala slova -> velika slovaacall SendCharjmp Petlja
ASCII tabela
Najraniji početak novog karaktera
stop
star
t
1 1 1 0 1 0 00
VTXD
vreme
+5V
star
t
stop1 1 1 0 1 0 00
VRxD
vreme
-12V
+12V
mov sbuf,#char1
mov sbuf,#char2
RXD
TXD
1
2
3
4
5
6
7
8
9
J1
DB9
14
11
12
9
13
10
15
8
C1+2
C2+5
GND16
C1-4 VCC17
C2-6
V-7
V+ 3
1 SHDN 18
MAX3222EEWN
100n
100n100n
100n
TxD
RxD
Vcc
Vcc
PC
Ženski ( Female ) Muški ( Male)
Multiprocesorska komunikacija
Uslov za upis karaktera iz prijemnog šift registra u SBUF:
(RI = 0) AND [(SM2 = 0) OR (primljeni 9.bit = 1)]
• Ako prethodni karakter nije o čitan (i obrisan RI) novi karakter se bespovratno gubi.
• Ako je SM2 = 1 i primljeni 9.bit = 0, marker RI ne će biti • Ako je SM2 = 1 i primljeni 9.bit = 0, marker RI ne će biti postavljen i prijem karaktera se ne signalizira (ne izaziva prekid)
8051slave N
RXD TXD
8051slave 2
RXD TXD
8051slave 1
RXD TXD
8051master
RXD TXD
Multiprocesorska komunikacijaMaster može da šalje podatke svima i da prima podat ke od svihSvaki slejv može da primi podatke samo od masteraSvaki slejv ima adresu kao jedinstveni 8-bitni poda tak
Protokol razmene podatka:SLAVE• Inicijalno su konfigurisani za prijem 9-bitnih poda taka i multiprocesorski rad,
SM2=1.
MASTER• Šalje adresu slejva kome su namenjeni podaci kao 9- bitni podatak sa TB8=1.
Šalje potreban broj bajtova podataka kao 9 -bitne sa TB8=0 • Šalje potreban broj bajtova podataka kao 9 -bitne sa TB8=0
SLAVE• Inicijalno su konfigurisani za prijem 9-bitnih poda taka i multiprocesorski rad,
SM2=1.• Svi slejvovi prime adresni bajt i upore đuju adresu sa sopstvenom.• Adresirani slejv vrši rekonfiguraciju tako da prima i bajtove sa 9. bitom
jednakim nuli, SM2=0, i nastavlja sa prijemom ostal ih bajtova podataka• Ostali slejvovi ne vrše rekofiguraciju i ne primaju podatke koji nisu
namenjeni njima.
Kako obezbediti da svako može sa svakim da komunicir a?
Prekidni sistemPrekid, interrupt , predstavlja pojavu nekog stanja (ili doga đaja -event ) koje uzrokuje privremenu suspenziju izvršenja tek ućeg programa i servisiranje novonastalog stanja.
Omogu ćava sistemu da odgovori na asinhrone doga đaje do kojih dolazi u toku izvršavanja drugih programa.
Interrupt driven system daje iluziju simultanog izvršavanja ve ćeg broja programa.broja programa.
Prekidna rutina, Interrupt Service Routine – ISR, interrupt handler ,je program koji se izvršava nakon pojave prekida. I SR se izvršava do instrukcije “povratak iz prekida”, ( RETurn from Interrupt ), nakon čega sa izvršenjem nastavlja suspendovani program.
Usvojena terminologija:Glavni program se izvršava na osnovnom nivou ( foreground ), a ISRna prekdnom nivou ( background )
Prekidni sistemGlavni program
Glavni
ISR
Glavni
ISR
Glavni
ISR
Glavni
vremeIzvršavanje bez prekida
background
foreground
RETI RETI RETIevent event event
Glavni Glavni Glavni Glavni
Izvršavanje sa prekidima
foreground
n n+1Instrukcija:
Event
Kompletiranje teku će instrukcije
SP++
low(adresa instr.(n+1) -> (SP),
SP++
high(adresa instr.(n+1) ->(SP)
PC <- adresa ISR (predefinisane vrednosti)
RETI
High(PC) <- (SP)
SP--
low(PC) <- (SP)
SP--
Početak izvršavanja sa (PC)
AT
OM
IČO
ST
Late
ncija
3-7
us
Prekidni sistemEA - ET2
8052 ES ET1 EX1 ET0 EX0Registar dozvole prekida IE
Automatsko brisanje markera pri izlazu iz prekidne rutene:IE0, IE1, TF0, TF1
Markeri koji se moraju brisati softverski:RI, TI, TF2, EXF2
0
1
0
IE0
TF0
EX0
ET0
"JMP to ..."
0x0003
0x000B
registar IE
IT0
INT0
TCON.0
TCON.1
TCON.5
Events
1IE1
TF1
TI
RI
EA
EX1
ET1
ES
0x0013
0x001B
0x0023
TF2
EXF2 ET2
0x002Bsamo u 8052
INT1
IT1TCON.2
TCON.3
TCON.7
Prekidni sistem
P(Ev2) > P(Ev1)
- - PT2 PS PT1 PX1 PT0 PX0
P(Ev2) <= P(Ev1)
IP
Prioritet prekida0 – niži prioritet1 – viši prioritet
Glavni
ISR1
Glavni
ISR2
Background 0
Foreground
ISR1
Background 1
Ev1
Ev2
Glavni
ISR1
Glavni
ISR2
Ev1 Ev2
Jedna instrukcija
Prekidni sistemMale prekidne rutine – Small interrupt service routines
ORG 0000HLJMP MAIN
ORG 000BHT0ISR: - - - - -
- - - - -- - - - -- - - - -RETI
Velike prekidne rutine – Large interrupt service routinesORG 0000HORG 0000HLJMP MAIN
ORG 000BHLJMP T0ISR
ORG 0040HMAIN: - - - - -
- - - - -- - - - -
T0ISR: - - - - -- - - - -- - - - -RETI
Primer – tajmerski prekidiNa linijama P1.6 i P1.7 generisati dva simetri čna talasna oblika frekvencija 7 kHz i 500 Hz respek tivno.Mikrokontroler koristi kvarcni oscilator frekvencije 12 MHz.
ORG 0000HLJMP MAIN
ORG 000BH ; vektorska adresa prekida T0CPL P1.6RETI
ORG 001BH ; vektorska adresa prekida T1JMP T1ISR
ORG 0040HORG 0040HMAIN: MOV TMOD,#12H ; T0 autoreload, T1 16 bit
MOV TH1,#-71 ; poluperioda signala 7kHz = 71usSETB TR0SETB TR1MOV IE,#8AH ; Dozvoli oba tajmerska prekidaSJMP $
T1ISR: CLR TR1MOV TH1,#HIGH(-1000)MOV TL1,#LOW(-1000)SETB TR1CPL P1.7RETI
Uticaj prioriteta prekida!
Primer – serijski prekidiPoruku odredjenog sadrzaja ispisivati na serijski ka nal svakih 50 ms. Ispisivanje vrsiti brzinom od 9600 bauda.
ORG 0000HLJMP MAIN
ORG 0023H ; vektorska adresa prekida serijskog kanalaJMP SKISR
ORG 0040HMAIN: MOV TMOD,#21H ; T0 autoreload, T1 16 bit
MOV TH1,#0FDH ; Baud=9600MOV SCON,#50H ; MODE 1, REN=1MOV IE,#90H ; Dozvoli serijski prekidSETB TR1 ; Start Baudrate generator - T1
PETLJA: CLR TR0MOV TH0,# HIGH( - 50000) ; poluperioda signala 7kHz = 71usMOV TH0,# HIGH( - 50000) ; poluperioda signala 7kHz = 71usMOV TL1,#LOW(-50000)SETB TR0JNB TF0,$MOV DPTR,#PORUKA ; Pointer na porukuSETB TI ; Aktiviranje slanjaJMP PETLJA
T1ISR: MOVC A,@A+DPTRINC DPTRCLR TIJZ $+3MOV SBUF,ARETI
PORUKA: DB “MIKROKONTROLERI IMAJU BUDUCNOST”,10,13,0
PUSH ACCPUSH PSWMOVC A,@A+DPTRINC DPTRCLR TIJZ $+3MOV SBUF,APOP PSWPOP ACCRETI
Spoljašnji prekidi• Do spoljašnjeg prekida dolazi pojavom logi čke nule ili negativne ivice na linijama porta
P3.2 (INT0) i P3.3 (INT1).
• Izbor osetljivosti na logi čki nivo ili ivicu signala – markeri IT0 i IT1 registra TCON.
TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0TCON
Kontrola prekidnog sistema
00
1
0
1
IE0
IE1INT1
IT0
IT1
INT0
TCON.0
TCON.1
TCON.2
TCON.3
Jedan ciklus Jedan ciklus
• Odmeravanje logi čkog nivoa ulazne linije u određenom trenutku mašinskog ciklusa - Najmanje vreme trajanja prekidnog signala 12xFosc.
S1 S2 S3 S4 S5 S6
Odmeravanje prekida
S1 S2 S3 S4 S5 S6
Odmeravanje prekida
Prekidni signal – propuštanje prekidaTLOW < 1us (FOSC = 12MHz)
Spoljašnji prekidi - primerAlarmni sistem koji na aktiviranje prekida ča generiše zvu čni ton frekvencije 400 Hz trajanja jedne sekunde. Zvu čnik je preko izlaznog drajvera vezan za liniju P1.7 . Senzor-mikroprekida č koji detektuje negativnu ivicu je vezan za liniju /INT0.
ZVUCNIKPOJACAVAC
SENZOR
8051INT0 P1.7
1 sekunda
2.5 ms
otvaranjevrata
Generisanje velikih vremenskih intervala!
ORG 0000HLJMP MAINORG 0003HLJMP EX0ISRORG 000BHLJMP T0ISRORG 001BHLJMP T1ISR
ORG 0040HMAIN: MOV TMOD,#11H ; T0, T1 16 bit
MOV IE,#8AH ; Dozvoli prekid sa /INT0SJMP $
EX0ISR: MOV R7,#20 ; perioda T1 kao 20x50ms = 1 sekSETB TF0 ; aktiviraj prekid tajmer 0 – softversko aktiviranjeSETB TF1 ; aktiviraj prekid tajmer 1SETB ET0 ; dozvoli prekide – za 1 sek.SETB ET1 ; za generisanje 400 Hz
Primer – generisanje alarma
SETB ET1 ; za generisanje 400 HzRETI
T0ISR: CLR TR0 ; zaustavi tajmer 0 DJNZ R7,SKIP ; da li je istekla jedna sekundaCLR ET0 ; istekla jedna sekunda, zabrani tonski signalCLR ET1 ; zabrani sopstveni prekidSJMP EXIT
SKIP: MOV TH0,#HIGH(-50000)MOV TL0,#LOW(-50000)SETB TR0
EXIT: RETI
T1ISR: CLR TR1 ;MOV TH1,#HIGH(-1250)MOV TL1,#LOW(-1250)SETB TR1CPL P1.7RETI