1 / 65

MIKROKONTROLER 8051

MIKROKONTROLER 8051. Mikrokontroler :. Mali ra čunar On-chip RAM, ROM, I/O port ovi ... Primjer :Motorola 6811, Intel 8051 i PIC 16X. CPU. RAM. ROM. Jedan čip. Se rijski COM Port. I/O Port. Timer. Mikrokontroler. O snovn a arhitektur a 8051. Extern i prekidi.

coye
Download Presentation

MIKROKONTROLER 8051

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. MIKROKONTROLER 8051

  2. Mikrokontroler : • Mali računar • On-chip RAM, ROM, I/O portovi... • Primjer:Motorola 6811, Intel 8051 i PIC 16X CPU RAM ROM Jedan čip Serijski COM Port I/O Port Timer Mikrokontroler

  3. Osnovna arhitektura 8051 Externiprekidi On-chip ROM za programski kod Timer/Brojač Interrupt Control Timer 1 On-chip RAM Timer 0 CPU Serijski Port Bus Control 4 I/O Porta OSC P0 P1 P2 P3 TxD RxD

  4. Neki članovi familije 8051

  5. Blok diagram arhitekture 8051

  6. Pin Description za 8051

  7. Pinovi 8051 1/2 • Vcc – pin44: • Vcc obezbjeđuje napajanje za čip. • Izvor napajanja je +5V. • GND – pin22: • masa • XTAL1iXTAL2 – pinovi 21,20: • Ova 2 pina se koriste za externi oscilator • RST – pin 10: • Reset – ulazni pin koji je aktivan high, inače low. • EAi PSEN – pinovi 35 i 32: • Koriste se kada je programski kod nalazi u externj ROM memoriji

  8. Pinovi 8051 2/2 • ALE - pin 33: • address latch enable – koristi se za demultiplexiranje adrese i podataka pri pristupu externoj memoriji • I/O portovi: • Četiri porta - P0, P1, P2 i P3. • Svaki port koristi 8 pinova. • Svi I/O pinovisudvosmerni.

  9. Mapiranje memorije kod 8051 4k 8k 32k 0000H 0000H 0000H 0FFFH DS5000-32 1FFFH AT89C51 AT89LS8252 7FFFH Atmel Dallas Semiconductor

  10. On-chip memorija kod 8051 FFH Specijalni funkcijski registri (SFR) 80H 7FH RAM za opštu upotrebu i stack 30H 2FH Bit-adresibilan RAM RAM 20H 1FH Register Bank 3 18H 17H Register Bank 2 10H 0FH (Stack) Register Bank 1 08H 07H Register Bank 0 00H

  11. Specijalni funkcijski registri

  12. A B R0 DPTR DPH DPL R1 R2 PC PC R3 Neki 16-bitni registri 8051 R4 R5 R6 R7 Neki 8-bitni registri 8051 Osnovni registri kod 8051

  13. Osnovni registri – 8 bitni A - Akumulator Akumulator sekoristi kao opšti registar u koji se smješta rezultat velikog broja instrukcija. To je 8-bitni registar i on je registar koji se najčešće koristi pri izvršavanju programa pošto više od polovine od 255 instrukcija koje podržava 8051 koristi akumulator na neki način. Npr.Ako hoće da se broju 10 doda 20, rezultat 30 će da se upiše u akumulator. Kada je izračunata vrijednost u akumulatoru, može da se nastavi dalje obrađivati ili može da se upiše u neki drugi registar ili memoriju. "R" registri “R” registri su grupa od osam registara koji imaju imena R0, R1, ..., R7.Ovi registri se koriste kao pomoćni registri u velikom broju operacija. Ako se uzme prethodni primjer, gdje se broju 10 dodaje broj 20, broj 10 može biti upisan u akumulatoru, a broj 20 u npr. registru R4. U tom slučaju bi se sabiranje izvršilo na sljedeći način: ADD A,R4 Kada se izvrši instrukcija akumulator će da sadrži vrijednost 30. Ovi registri su veoma važni za privremeno smiještanje promjenjivih. "B" Registar "B" registar je sličan akumulatoru, takođe je 8-bitni registar, a koristi se samo za dvije instrukcije MUL AB (množenje) i DIV AB (dijeljenje). Ako se žele pomnožiti ili podijeliti dva 8-bitna broja, prvi broj se upiše u akumulator, drugi u B registar i pozove se odgovarajuća od ove dvije instrukcije. Pored toga što se koristi kod množenja i diljeljenja, B registar se često može iskoristiti i kao još jedan registar za privremeno smještanje promjenjivih, slično kao R registri.

  14. Osnovni registri – 16 bitni DPTR- Data Pointer Data Pointer (DPTR) je jedini 16-bitni registar u 8051 kome korisnik može da pristupi. DPTR se, kao što mu ime nagovještava, koristi kao pokazivač na podatke. Koristi se kod komandi kojima program u 8051 pristupa eksternoj memoriji. PC - Program Counter Program Counter (PC) je 16-bitna adresa koja govori 8051 gdje se u memoriji nalazi sljedeća instrukcija koja treba da se izvrši.Kada se 8051 inicijalizuje, uvijek počinje od adrese 0000h i inkrementira se svaki put kada se instrukcija izvrši. Bitno je napomenuti da se PC ne inkrementira uvijek samo za 1. Pošto neke instrukcije zauzimaju 2 ili 3 bajta u memoriji, PC će u tim slučajevima biti inkrementiran za 2 ili 3. PC se razlikuje od drugih registara pošto ne postoji mogućnost da mu se direktno promjeni vrijednost, odnosno ne može da se uradi nešto kao PC=2430h. Postoje, naravno, komande programskog skoka koje to rade na indirektan način. Takođe, ne postoji načina da se direktno pročita vrijednost iz PC, odnosno da se odredi gdje se nalazi adresa komande koja upravo treba da se izvrši.

  15. PSW registar CY AC F0 RS1 RS0 OV -- P CY PSW.7 Carry flag AC PSW.6 Auxiliary carry flag -- PSW.5 Slobodan RS1 PSW.4 Register Bank selector bit 1 RS0 PSW.3 Register Bank selector bit 0 OV PSW.2 Overflow flag -- PSW.1 Slobodan P PSW.0 Parity flag Set/Reset odd/even parity RS1 RS0 Register Bank Adresa 0 0 0 00H-07H 0 1 1 08H-0FH 1 0 2 10H-17H 1 1 3 18H-1FH 8051 ima 4 različite registar banke za registre R0 do R7 koje se nalaze u prva 32 bajta RAM-a. Kada se 8051 pokrene, registar banka 0 (adreses 00h do 07h) se koristi kao default. Ukoliko se koristi samo jedna registar banka (npr. reg. banka 0) ostatak memorijskog prostora iz prva 32 bajta može se koristiti kao RAM opšte namjene.

  16. RESET vrijednosti nekih registara kod 8051 Registar Reset Vrijednost PC 0000 ACC 0000 B 0000 PSW 0000 SP 0007 DPTR 0000 RAM je čitav na nuli. 

  17. Pinovi I/O portova • 8051 ima četiri I/O porta • Port 0 – pinovi 36 do 43: P0.0 - P0.7 • Port 1 – pinovi 2 do 9:P1.0- P1.7) • Port 2 – pinovi 24 do 31: P2.0 - P2.7 • Port 3 – pinovi 11, 13 do 19 : P3.0 - P3.7 • Svaki port ima8 pinova • Označavaju se P0.X ; X=0,1,...,7; P1.X, P2.X, P3.X • Npr. P0.0 je bit 0 – LSBod P0 • Npr:P0.7 je bit 7 – MSB od P0 • Ovih 8 bita formiraju byte. • Svaki port može da se koristi kao ulaz ili izlaz (dvosmjerno)

  18. Neke jednostavne instrukcije MOV odredište,izvor; odredište = izvor MOV A,#72H ;A=72H MOV R4,#62H ;R4=62H MOV R4,A ;R4=62H MOV DPTR,#7634H MOV DPL,#34H MOV DPH,#76H Napomena: MOV A,#72H ≠ MOV A,72H Instrukcija “MOV A,72H ” sadržaj 72 byta RAM-aupisaće se u Akumulator. ADD A, Izvor ;A=A+Izvor ADD A,#6 ;A=A+6 ADD A,R6 ;A=A+R6 ADD A,6 ;A=A+[6] odnosno A=A+R6 ADD A,0F3H ;A=A+[0F3H]

  19. Neke jednostavne instrukcije – bit promjenive SETB bit ; bit=1 CLR bit ; bit=0 SETB P0.0 ;bit 0 iz porta 0 =1 SETB P3.7 ;bit 7 iz porta 3 =1 SETB ACC.2 ;bit 2 izakumulatora =1 SETB 05 ;bit 5 iz bajta na RAM lokaciji 20h = 0 CLR instrukcija je ista kao SETB npr: CLR P0.0 ;P0.0=0 CLR ACC.1 ;bit 1 iz akumulatora =0 CLR C ;CY=0 aliako se CLR pozove za čitav akumulator, svi bitovi u akomulatoru postavljaju se na 0: CLR A ;A=0 Memorijski prostor u RAM-u od 20h do 2Fh (16 bajtova) je bit adresabilan. Kada se koriste bitske instrukcije SETB i CLR, navodi se adresa bita koji se postavlja na 1 ili se briše. Adrese idu od 0 (0 bit bajta 20h) do 127 (7 bit bajta 2Fh) Tako npr. SETB 32 postavlja 0 bit bajta 24 u RAM-u na logičku “1”. Jedan dio SFR je takođe bit adresabilan (portovi, akumulator, ...). Bitovima u tim SFR može da se pristupi tako što se uz ime registra stavi .x gdje je x broj bita kome se pristupa ili preko imena samog bita, ako ga ima. Tako npr. SETB P2.1 postavlja 1 bit u registru P2 na logičku “1”. I bitovima u SFR koji su bit adresabilni može da se pristupi preko adresa. Adrese tih bitova su od 128 (bit 0 u P0) do 255 (7 bit SFR registra na adresi F8h). Tako npr SETB 129 postavlja 1 bit u registru P0 na logičku “1”.

  20. 7FH RAM za opštu upotrebu 30H 2FH Bit-adresibilan RAM 20H 1FH Register Bank 3 18H 17H Register Bank 2 10H 0FH (Stack) Register Bank 1 08H 07H Register Bank 0 00H Stack u 8051 • Registar koji se koristi za pristup stacku zove se SP (stack pointer) registar. • Stack pointer je u 8051 osmobitni registar sto znaci da moze da ima vrijednosti od 00 do FFH. Kada se 8051 pokrene, SP registar sadrži vrijednost 07. • Pri pozivu podrutine i pri generisanju interapta, prije nego što ode na adresu podrutine ili adresu obrade interapta, 8051 upiše PC na stack. Pri završetku podrutine ili interapta, 8051 upisuje u PC vrijednost koju je sačuvao na stacku i nastavlja izvršavanje programa od adrese na kojoj je bio prekinut.

  21. 0BH 0BH 0BH 0BH 12 25 F3 12 25 25 0AH 0AH 0AH 0AH 09H 09H 09H 09H 08H 08H 08H 08H SP=0AH SP=09H SP=08H Start SP=07H Primjer: MOV R6,#25H MOV R1,#12H MOV R4,#0F3H PUSH 6 PUSH 1 PUSH 4

  22. Trajanje mašinskog ciklusa Za jedan mašinski ciklus potrebno je 12 perioda oscilatora. Većina instrukcija 8051 izvršava se za jedan mašinski ciklus. Najduže traju množenje i dijeljenje (4 mašinska ciklusa) Primjer: Odrediti trajanje mašinskog ciklusa za oscilatore (a) XTAL = 11.0592 MHz (b) XTAL = 16 MHz. Rješenje: (a) 11.0592 MHz / 12 = 921.6 kHz; machine cycle = 1 / 921.6 kHz = 1.085 s (b) 16 MHz / 12 = 1.333 MHz; machine cycle = 1 / 1.333 MHz = 0.75 s

  23. Načini adresiranja • Neposredno adresiranje • Adresiranje preko registara • Direktno adresiranje • Indirektno adresiranje • Adresiranje eksterne memorije • Adresiranje ROM memorije

  24. Neposredni način adresiranja Neposredno adresiranje se zove tako jer vrijednost koja se upisuje u memoriju neposredno dolazi iza izvršnog koda u memoriji. Na taj način, instrukcija sama diktira koja vrijednost će biti upisana u memoriju Na primjer, instrukcija: MOV A,#20h Ova instrukcija koristi neposredno adresiranje jer će u akumulatorbiti upisana vrijednost koja neposredno dolazi iza izvršnog koda - u ovom slučaju 20 (hexadecimalno). Na taj način u programskoj memoriji je upisano 7420.Neposredno adresiranje je veoma brzo jer se vrijednost koja se upisuje nalazi u samoj instrukciji. S druge strane, pošto je vrijednost koja se upisuje fiksno upisana pri kompajliranju, nema fleksibilnosti.

  25. Adresiranje preko registara Podacima u SFR i registrima Rn iz izabrane registar banke u RAM se može pristupiti preko imena registra Na primjer: MOV Rn, A ;n=0,..,7 ADD A, Rn MOV DPL, R6 S tim da se ne može koristiti DPTR registar jer je on 16-bitni Npr. MOV DPTR, A nije korektno Takođe, ne mogu se koristiti istovremeno kao izvor i odredište registri iz RAM memorije sto znači da MOV Rm, Rn nije korektno

  26. Direktno adresiranje Direktno adresiranje se zove tako jer se vrijednost koja se upisuje u memoriju dobija tako što se direktno preuzima sa neke memorijske lokacije. Na primjer: MOV A,30h Ova instrukcija će da pročita podatke iz interne RAM adrese 30 (heksadecimalno) i upisati ih u akumulator. Direktno adresiranje je brzo jer, iako vrijednost koja se upisuje nije uključena direktno u instrukciju, brzo joj se pristupa posto je upisana u interni RAM. Takođe, ovaj način adresiranja je fleksibilniji od neposrednog adresiranja pošto se upisuju podaci koji se nalaze na datoj adresi i koji mogu da se mijenjaju. Kada se koristi direktno adresiranje, sve instrukcije koje se pristupaju adresama između 00h i 7Fh odnose se na interni RAM. Sve instrukcije koje pristupaju adresama između 80h i FFh odnose se na SFR kontrolne registre koji kontrolišu rad mikrokontrolera.

  27. Indirektno adresiranje Indirektno adresiranje je veoma koristan način adresiranje koji u mnogim slučajevima pokazuje izuzetan nivo fleksibilnosti. Indirektno adresiranje se koristi na sljedeći način: MOV A,@R0 Ova instrukcija će dovesti do toga da se u akomulator upiše vrijednost iz internog rama koja se nalazi na adresi koja je upisana u R0. Na primjer, recima da se u R0 nalazi vrijednost 40hi da je na adresi 40h u internom RAM-u upisanavrijednost 67h. Kada se navedena instrukcija izvrši, mikrokontroler će da provjeri vrijednost koja je upisana u R0. Pošto je u R0 upisana vrijednost 40h, mikrokontroler će da preuzme vrijednost sa adrese 40h (na kojoj je upisano 67h) i upisati je u akomulator. Na taj način kada se instrukcija izvrši, u akumulator će biti upisana vrijednost 67h. Indirektno adresiranje se uvijek odnosi na interni RAM, nikada se ne odnosi na SFR. Ukoliko bi na osnovu prethodnog primjera željeli upisati vrijednost na port 1 kome se pristupa preko SFR registra P1 koji se nalazi na adresi 90 izgleda kao da bi to moglo da se uradi na sljedeći način: MOV R0,#90h ;Upisivanje adrese porta 1MOV @R0,#01h ;Upisivanje 01 na port 1 – GREŠKA!!!! Ovo nije korektno. Pošto se indirektno adresiranje uvijek odnosi na interni RAM, ove dvije instrukcije će, u slučaju da se koristi kontroler 8051, proizvesti nedefinisan rezultat pošto on ima samo 128 bajtova internog RAM-a (adrese 00h do 7Fh). Kontroler 8052 ima 256 bajtova internog RAM-a. Kod njega se nižim 128 bajtova, koji su isti kao kod osnovnog 8051 kontrolera, može pristupiti i direktno i indirektno. Memorijskom prostoru u internom RAM-u od 128 do 255 kod ovog kontrolera može da se pristupi samo indirektno. Na taj način, kod ovog kontrolera, kada se pristupa memorijskim lokacijama od 128 do 255 direktno, pristupa se SFR kontrolnim registrima, a kada se ovim lokacijama pristupa indirektno, pristupa se internom RAM-u.

  28. Adresiranje eksterne memorije Externoj memoriji se pristupa indirektno preko 16 bitnog registra DPTR ili registara R0 i R1. Za to se koristi komanda MOVX. Vrijednost se iz eksterne memorijske lokacije čija je adresa upisana u DPTR upisuje se u akumulator pomoću naredbe: MOVX A,@DPTRVrijednost iz akumulatora se upisuje u eksternu memoriju na adresu koja je upisana u DPTR pomoću naredbe: MOVX @DPTR,A Kao sto se vidi, ove komande koriste DPTR da bi dobile informaciju o memorijskoj lokaciji kojoj se pristupa. To znači da u DPTR mora prvo da se upiše adresa externe memorijske lokacije koja želi da se čita ili na koju želi da se upiše. Kada se pristupa externim memorijskim lokacijama od 00h do FFh može da se koristi naredba MOVX @Rx,A odnosno MOVX A,@Rx gdje je x=0,1 I u ovom slučaju, adresa externe memorijske lokacije kojoj želi da se pristupi mora prvo da se upiše u Rx (R0 ili R1). Pošto su R0 i R1 osmobitni registri u njima mogu da se upišu vrijednosti od 0 do 255 tako da na ovaj način može da se pristupi samo najnižim 256 bajtova eksterne memorije.

  29. Adresiranje ROM memorije Ovaj način adresiranja se koristi za pristup look-up tabelama sa podacima koje se nalaze u ROM memoriji 8051 MOVC A,@A+DPTR Preuzima se bajt koji se nalazi na ROM adresi koja se dobije kada se sabere sadržaj iz akumulatora sa sadržajem 16 bitnog registra DPTR i smješta u akumulator

  30. Prekidi - interrupts • Prekidi omogućavaju mikrokontroleru da ima "multi-tasking" funkcionalnost iako on u stvari radi jedan po jedan zadatak. • Prekid se pokreće kada se dogodi određeni događaj koji je povezan sa njim. Kada se taj događaj desi, mikrokontroler privremeno prestaje sa normalnim izvršavanjem programa i izvršava poseban dio koda koji se tiče obrade tog prekida. Obrada prekida obavlja zadatke koji su potrebni da bi se obradio događaj koji je doveo do prekida i nakon toga vraća izvršavanje programa na tačku u kojoj je bio prekinut. • Kod 8051 sljedeći događaji mogu da uzrokuju odgovarajući prekid: • Timer 0 Overflow. • Timer 1 Overflow. • Prijem/Slanje bajta serijskom komunikacijom. • Externi događaj 0 • Externidogađaj 1 • Znači, možemo da konfigurišemo 8051 tako da kada Timer 0 odbroji neko vrijeme ili kada se jedan bajt podataka primi/pošalje preko serijske komunikacije, pozove se odgovarajuća procedura za obradu prekida.

  31. Prekidi Kada se desi događaj koji dovodi do prekida, normalno izvršavanje programa se prekida i skače se na fiksnu adresu koja odgovara prekidu koji se desio. Pored toga mikrokontroler postavlja odgovarajući bit (flag) u odgovarajućem SFR za taj prekid na 1. Na osnovu tabele može da se zaključi da svaki put kada timer 0 odbroji neki zadati broj impulsa, setuje se bit TF0 (u registru TCON), prekida se sa normalnim izvršavanjem programa i skače na adresu 000Bh. Podrazumjeva se da se na adresi 000Bh nalazi kod koji obrađuje situaciju kada tajmer 0 odbroji zadati broj impulsa.

  32. Omogućavanje prekida Po defaultu pri pokretanju kontrolera, svi prekidi su onemogućeni. To znači da, na primjer, iako je tajmer odbrojao impulse, TF0 bit je setovan, ali 8051 neće izvršiti prekid. Program mora izričito dati do znanja 8051 da želi da omogući prekide i da specificira koje prekide želi da omogući.Program može da omogući i onemogući prekide promjenom SFR registra IE (na adresi A8h) koji je bit adresabilan : Svaki odprekida u 8051ima svoj bit u IE SFR. Da bi se određeni prekid omogućio, potrebno je odgovarajući bit postaviti na 1. Pored toga, potrebno je i da se bit za opštu dozvolu prekida EA postavi na 1.

  33. Sekvenca provjere prekida • 8051 po izvršenju svake instrukcije, automatski provjerava treba li da se desi neki prekid. Kada provjerava da uslove za prekide, to radi sljedećim redosljedom: • Externi 0 prekid • Timer 0 prekid • Externi 1 prekid • Timer 1 prekid • Serijski prekid • To znači da ako se uslovi za serijski steknu u tačno isto vrijeme kada su se stekli i uslovi za externi prekid 0, externi prekid 0 će se izvršiti prvi, a serijski prekid će se izvršiti kada se završi obrada externog prekida 0.

  34. Prioriteti prekida 8051 pruža mogućnost definisanja dva nivoa prioriteta prekida: visoki i niski. Korišćenjem prioriteta prekida može da se obradi nekih događaja dodjeli veći prioritet. Na primjer, može da bude omogućen prekid timera 1 koji se automatski poziva svaki put kada se odbroji određeni broj impulsa. Pored toga, omogućen je serijski prekid koji se poziva svaki put kada se neki karakter primi preko serijskog porta. Možda je, sa stanovišta funkcionalnosti sistema koji se realizuje pomoću mikrokontrolera, važniji prijem karaktera od tajmerskog prekida. U tom slučaju, može biti korisno definisati da kada se procedura za obradu prekida tajmera 1 izvršava, serijski prekid može da je prekine i omogući prelaz na proceduru za obradu serijskog prekida. Kada se završi procedura za obradu serijskog prekida, kontrola toka se vraća tajmeru 1 i na kraju glavnom programu. To se postiže dodjeljivanjem visokog prioriteta serijskom prekidu i niskog prekidu tajmera 1. Prioriteti prekida se kontrolišu pomoću SFR registra IP (adresa B8h) koji je bit adresibilan:

  35. Tajmeri • 8051 ima dva tajmera koji mogu da se kontrolišu, podešavaju i čitaju posebno. Tajmeri u 8051 mogu se koristiti za tri različite funkcije: • Brojanje vremena i/ili računanje razmaka između dva događaja • Brojanje događaja • Generisanje baud rate-a za serijski port • Kod 8051 tajmer uvijek broji na gore, mikrokontroler inkrementira njegovu vrijednost, bez obzira da li se koristi za brojanje vremena, događaja ili generisanje baud rate-a. • Radom tajmera se upravlja pomoću sljedećih SFR:

  36. TMOD TMOD SFR se koristi da bi se kontrolisao mod rada oba tajmeraSvaki bit ovog SFR daje mikrokontroleru specifičnu informaciju o tome kako da upravlja radom tajmera. Viša 4 bita (biti 4 do 7) odnose se na Timer 1, a niža 4 bita (biti 0 do 3) obavljaju istu funkciju, ali za Timer 0 TMOD (89h) SFR:

  37. Izbor moda rada i upravljanje timerom Izbor moda rada timera: TCON SFR– registar preko koga se upravlja radom timera i dobijaju informacije o njegovom radu. Biti SFR registra TCON (88h) koji se odnose na rad tajmera:

  38. Princip rada tajmera1 u modu 0 Ulaz za brojanje je povezan na tajmer kada je TR1 = 1 i(GATE = 0 ili INT1 = 1). (Postavljanje bita GATE = 1 omogućava da se tajmer kontroliše pomoću externog ulaza INT1 da bi se omogućilo mjerenje dužine trajanja impulsa). TR1 je kontrolni bit u SFR registru TCON. GATE senalazi u TMOD registru. U ovom modu, registar timera je konfigurisan kao 13 bitni registar. Ovaj 13-bitni retistar sastoji se od svih osam bita TH1 i donjih 5 bita TL1. Gornjih 3 bita TL1 su neodređeni i ignorišu se. Kada je dozvoljeno brojanje, vrijednost u registru se inkrementira. Kada broj u registru pređe sa svih 1 na sve 0, setuje se tajmerov interrupt flag TF1. Ukoliko je omogućen interapt tajmera 1 i postoji globalna dozvola interrupta to će dovesti do generisanja interrupta tajmera 1 i pozivanja procedure za njegovu obradu. Mod 1je isti kao mod 0, s tim da se koristi svih 8 bita registra TL1 tako da imamo 16-bitni registar tajmera.

  39. Princip rada tajmera1 u modu 2 Mod 2 konfiguriše tajmerski registar kao 8-bitni sa automatskim ponovnim upisivanjem (Reload) kao na slici. Overflow (prelazak sa svih 1 na sve 0) vrijednosti u registru TL1 ne samo što setuje flat TF1, nego i automatski upisuje u TL1 vrijednost iz TH1 koja se definiše softverski. Ovo upisivanje vrijednosti u TL1 ne utiče na vrijednost upisanu u TH1. Opisani modovi rada su isti za oba tajmera.

  40. Zadatak Napisati program koji broji vrijeme proteklo od uključivanja kontrolera i smješta ih u četiri promjenjive koje definišu broj sati, broj minuta u tekućem satu, broj sekundi u tekućem minutu i broj stotinki u tekućoj sekundi. Oscilator koji se koristi za clock mikrokontrolera ima frekvenciju 24MHz Rješenje: Koristićemo tajmer 0 u modu 2 (reload mod). 24MHz/12=2MHz, trajanje mašinskog ciklusa je 1/2MHz=0.5 s Ako stavimo reload vrijednost od 6, tajmer će da odbroji od 56 do 256, odnosno 200 mašinskih ciklusa i onda generisati prekid. Znači da će prekid biti generisan svakih 200*0.5 s = 100 s. Da bi dozvolili prekid treba da postavimo globalnu dozvolu prekida EA na 1 i dozvolu prekida tajmera 0 ET0 na 1. Da bi tajmer mogao da broji treba postaviti TR0 bit na 1, kao i GATE bit na 0 da brojanje tajmera ne bi zavisilo od ulaza INT0. Da bi tajmer vršio brojanje mašinskih ciklusa, a ne externih događaja potrebno je postaviti bit C/T0 na logičku 0.

  41. Programski kod rješenja 1/2 #include<AT89X51.h> unsigned char data brojStotinki=0; unsigned char data brojSekundi=0; unsigned char data brojMinuta=0; unsigned int data brojSati=0; unsigned char data brojPrekida=0; void InicijalizacijaKontrolera(void) { TL0=56;//VRIJEDNOST ZA PRVO BROJANJE TAJMERA TH0=56;//RELOAD VRIJEDNOST TMOD=0x02;//GATE0=0(bit 3), C/T0=0 (bit 2), mod 2(biti 0-1) TR0=1;//DOZVOLA RADA TAJMERA 0 ET0=1;//DOZVOLA PREKIDA TAJMERA 0 EA=1;//GLOBALNA DOZVOLA PREKIDA }

  42. Programski kod rješenja 2/2 //PROCEDURA ZA OBRADU PREKIDA TAJMERA 0, //PREKID SE GENERISE SVAKIH 100us //ZA IZVODJENJE OPERACIJA KORISTI SE REGISTAR BANKA 0 void Tajmer0 (void) interrupt TF0_VECTOR using 0 { if (++brojPrekida == 100) { // odbrojao 100*100us=10ms brojPrekida=0;//resetuje se brojac prekida if(++brojStotinki == 100) {//odbrojao sekundu brojStotinki=0;//postavlja se na 0 odbrojanih stotinki tekuce sekunde if(++brojSekundi == 60) {// odbrojao minut brojSekundi=0;//postavlja se na 0 odbrojanih sekundi tekuce minute if(++brojMinuta == 60){//odbrojao sat brojMinuta=0;//postavlja se na 0 odbrojanih minuta tekuceg sata brojSati++;//inkrementira se broj sati } } } } } void main(void) { InicijalizacijaKontrolera(); while(1){ } }

  43. Serijska komunikacija 1/4 8051 posjeduje integrisan UART (universal asynchronous receiver / transmitter), odnosno serijski port. To znači da se veoma lako mogu slati i primati informacije preko asinhrone serijske komunikacije. Potrebno je definisati mod rada serijskog porta i brzinu (baud rate). Nakon toga, sve što je potrebno da bi se podaci razmjenili je da se vrjednost upiše u odgovarajući SFR, ako se šalje, odnosno da se očita iz istog SFR, kada se prima. 8051 korisniku automatski javlja kada je završio sa slanjem karaktera koji je upisan i isto tako kada je primio bajt podataka koji može da se obradi. Korisnički program ne mora da vodi računa o prenosu podataka na najnižem, bitskom, nivou. Definisanje moda rada serijskog porta Serijski port se konfiguriše pomoću SFR registra SCON (98h) koji je bit adresibilan.

  44. Serijska komunikacija 2/4 Najviša 4 bita u SCON regustru služe za konfigurisanje serijske komunikacije (*) Napomena: Definisani baud rate se duplira ukoliko se najviši bit u registru PCON - PCON.7 (SMOD) nalazi na logičkoj 1. Izbor moda serijskog porta definiše mod rada (8-bit/9-bit, UART ili Shift Register) i takođe određunje kako se izračunava baud rate. U modovima 0 i 2 baud rate je fiksiran i određen je frekvencijom oscilatora. U modovima 1 i 3, baud rate je promjenjiv i baziran je na tome kako često dolazi do overflowa Timera 1. BitSM2je flag za multiprocesorsku komunikaciju. Koristi se kod nekih naprednih serijskih aplikacija. Za uobičajeno korišćenje serijske komunikacije neophodno je da ovaj flag bude na logičkoj 0. BitREN, je "Receiver Enable“, odnosno dozvola primanja.Ako se žele primati podaci preko serijskog porta, ovaj bit mora biti na logičkoj 1.

  45. Serijska komunikacija 3/4 Niža 4 bita u SCON registru ne služe za konfigurisanje komunikacije, nego se koriste pri slanju i primanju podataka. TB8 bit se koristi u modovima 2 i 3.U ovim modovima prenosi se ukupno 9 bita.Prvih 8 bita predstavljaju podatak, a deveti bit se uzima iz TB8. Ako je TB8 na logičkoj 1 i na serijski port se upiše podatak koji želi da se pošalje, 8 bita koji čine podatak će se poslati preko serijske linije, a nakon njih će da se poslati i deveti bit, u ovom slučaju logička 1. Ako je TB8 na logičkoj 0, deveti bit će biti logička 0. RB8bit se takođe koristi u modovima 2 i 3 i funkcioniše u osnovi na isti način kao i TB8, samo sa strane primanja podataka.Kada se primi bajt podataka u modovima 2 i 3, prima se ukupno 9 bita. U tom slučaju, prvih 8 bita koji se primaju su podaci koji predstavljaju primljeni bajt podataka, a vrijednost devetog bita se upisuje u RB8. TB8 i RB9 se u modovima 2 i 3 koriste za detekciju greške pri prenosu pomoću parity bita.

  46. Serijska komunikacija 4/4 TIznači "Transmit Interrupt“.Kada program upiše bajt na serijski port, potrebno je da protekne neko vrijeme dok se svi biti pošalju preko serijske linije. Ako program upiše novi bajt na serijski port, prije nego što je prethodni bajt čitav poslat, podaci koji se šalju bi bili neispravni jer bi bio poslat dio podataka iz prethodnog, a dio iz novog bajta. Zbog toga 8051 daje programu do znanja da je poslao čitav posljednji bajt tako što TI postavlja na logičku 1. Kada je TI na logičkoj 1, program može da smatra da je serijski port “slobodan” i spreman da pošalje sljedeći bajt.To što je 8051 postavio TI na logičku 1 će dovesti i do generisanja serijskog prekida, ako je dozvoljen. RIznači "Receive Interrupt“.Funkcioniše na sličan način kao i TI bit, ali s tim da pruža informaciju da je primljen bajt podataka. Svaki put kada 8051 primičitav bajt podataka preko serijskog porta, on će da postavi RI na logičku 1. Na taj način program zna da što prije mora da pročita bajt koji je dobio preko serijskog porta, da bi mogao da ga obradi prije nego što ga prepiše sljedeći bajt koji se primi. Kada 8051 postavi RI na logičku 1 generisaće se serijski prekid, ako je dozvoljen.

  47. Definisanje brzine serijske komunikacije (baud rate) 1/2 Nakon što je definisan mod rada serijskog porta, program mora da konfiguriše i baude rate serijskog porta.Ovo se odnosi samo na modove 1 i 3. U modovima 0 i 2baud rate je određen na osnovu frekvencije oscilatora.U modu 0, baud rate je uvijek frekvencija oscilatora podjeljena sa 12.To znači da, ukoliko je frekvencija oscilatora 11.059MHz, baud rate za mod 0 će uvijek biti 921,583. U modu 2, baud rate je frekvencija oscilatora podjeljena sa 64 (SMOD=0) ili 32 (SMOD=1).To znači za kristal od 11.059MHz, baud rate može biti 172,797 ili 345,594. U modovima 1 i 3, baud rate je određen na osnovu toga kako često dolazi do “overflova”timera 1. Što češće dolazi do “overflowa” timera 1, veći je baud rate.Prekid timera 1 mora da bud isključen. Opšti obrazac koji pokazuje kako se pomoću timera 1 definiše baud rate je sljedeći Najčešće se baud rate definiše tako što se timer 1 koristi kao tajmer u 8-bitnom auto-reload modu. U tom slučaju baud rate se izračunava na sljedeći način

  48. Definisanje brzine serijske komunikacije (baud rate) 2/2 Ako je timer 1 konfigurisan kao timer u auto-reload modu, vrijednost koju treba upisati u TH1 da bi se dobio odgovarajući baud rate, dobija se na sljedeći način: Primjer Imamo kristal od 11.059MHz i želimo da definišemo baud rate od 19,200 za serijski port u modu 1. Izračunati vrijednost koja se upisuje u TH1 ako je timer 1 konfigurisan kao tajmer u auto-relad modu. Ukoliko odlučimo da postavimo SMOD bit na 0 dobija se vrijednost za TH1: Vrijednost koja treba da se upiše u TH1 je 254.5. Ukoliko upišemo 254, dobijamo baud rate 14,400, a ukoliko upišemo 255 dobijamo 28,800.Zbog toga ćemo pokušati da izračunamo reload vrijednost za TH1, ako postavimo SMOD bit na 1.

  49. Upis i čitanje sa serijskog porta Kada je serijski port konfigurisan na odgovarajući način, može da se koristi za slanje i primanje podataka. Slanje i primanje podataka se vrše upisom, odnosno očitavanjem, odgovarajućeg SFR. Upis na serijski port Da bi se poslao bajt podataka preko asinhrone serijske komunikacije, program samo treba da upiše taj bajt u SFR registar koji se zove SBUF (99h). Npr., ako želite da pošaljete broj 9 preko serijskog porta, dovoljno je da u programskom kodu napišete instrukciju: MOV SBUF,#9 Kada se izvrši ova instrukcija, 8051 će da počne da šalje zadati karakter preko serijskog porta. Naravno, slanje će da traje određeno vrijeme, koje je određeno preko definisanog baud rate-a.Pošto 8051 nema izlazni bafer za serijsku komunikaciju, moramo da budemo sigurni da je prethodni bajt poslat prije nego što pošaljemo sljedeći. 8051 daje informmaciju o tome kada je završio prenos tako što postavlja TI bit iz registra SCON na logičku 1. Čitanje sa serijskog porta Da bi se pročitao bajt sa serijskog porta, samo je potrebno da se pročita vrijednost koja je upisana u SFR registar SBUF (99h), nakon što je 8051 automatski postavioRIbitizregustra SCON na logičku 1. Npr. ako se želi očitati primljeni podatak i smjestiti u akumulator, dovoljno je da se definiše sljedeći kod: MOV A,SBUF

  50. Zadatak Napisati program koji prima podatke preko serijskog porta i stavlja ih u kružni ulazni bafer u koji može da se smjesti 8 bajtova podataka i šalje podatke iz izlaznog kružnog bafera u koji se može smjestiti 8 bajtova podataka. Baud rate serijske komunikacije je 19,200 i prenosi se 8 bita podataka parity bita. • Rješenje: • Za konfigurisanje serijske komunikacije potrebno je obaviti sljedeće korake: • Konfigurisati mod rada 1 za serijski port • Konfigurisati Timer 1 kao timer u modu 2 (8-bit auto-reload). • Upisati u TH1 vrijednost 253 da bi se na osnovu vrijednosti SMOD bita dobio odgovarajući baud rate od 19,200. • Postaviti PCON.7 (SMOD) na logičku 1 da bi se dobio dupli baud rate Posto ćemo koristiti i serijski prekid potrebno ga je omogućiti, odnosno postaviti globalnu dozvolu prekida EA na 1 i dozvolu serijskog prekida ES na 1.

More Related