Fórum témák

» Több friss téma
Cikkek » Nulláról a robotokig - PIC Mikrovezérlők I rész
Nulláról a robotokig - PIC Mikrovezérlők I rész
Szerző: Topi, idő: Jún 12, 2007, Olvasva: 119717, Oldal olvasási idő: kb. 3 perc
Lapozás: OK   8 / 24

Íme így néz ki egy 16F877-es belülről:

Ez most remélem elriaszt Bár ha tanultál informatikát (nem a Word kezelésre gondoltam) hanem tényleges PC felépítést, akkor most örülsz, mert nem is idegen annyira.

Fontos tudni, hogy ahogy a mai PC-k is, úgy a PIC-ek is sín rendszerrel vannak ellátva. Úgynevezett buszokkal. Ebből 3 fő busz van, cím, utasítás és adatbusz.

ALU: Aritmetikai-Logikai egység, ez a fő számoló rész, a proci lelke.
Hozzá kapcsolódó Work regiszter, amit akkumulátornak hívnak.
Státusz regiszterek tömkelege: Pl előző eredmény értéke, carry és zero flag-ek. Utasítás számláló regiszterek.

Ez az ábra prímán megérthető egy "paraszt angol tudással" rendelkező embernek is. Alul kis "dobozokban" találhatók az alap működéshez nem feltétlen szükséges modulok. Ilyen a 3 timer (időzítő) a 10-bites Analóg-Digitális átalakító, az EEPROM, CCP modulok (pl. PWM, Compare, stb), SSP vagyis a hardveres soros port SPI, USART.

Ebben a cikkben egy 16-os sorozatú PIC-el ismerkedünk meg, amelyik családra igaz, hogy egy utasítás végrehajtásához 4 órajel szükséges. Ez a négy órajel azért szükséges, mert az olyan műveletek, mint a paraméter beolvasás, utasítás-számláló léptetés, regiszter műveletek stb, mind-mind egy órajel hatására történnek. 18-as sorozatú PIC esetén minden egyes alap művelet már csak egyetlen órajelbe telik, ha PLL-t használunk, mivel azzal akár 4-szerezni is lehet az órajelet (Így lesz 40MHz. 10MHzx10).

A 877-es RISC processzor, ami a Reduced Instruction Set Computer szavakból képződött, vagyis, csökkentett utasítás készletű számítógép. Összesen 35 utasítást ismer ez a processzor, és bármilyen hihetetlen ez bőven elég. Egy közepes komolyságú, bonyolultságú programnál is jó ha a kétharmadát használjuk.

Teljesen mindegy, hogy milyen nyelven programozunk, a végeredmény akkor is egy assembly lesz, tehát még a legbonyolultabb program is képes lefordulni illetve átalakulni olyanná ami csak 35 utasításból áll. Sok compiler olvasható formátumban a projektünk mellé menti a lefordult ASM-et. Minden fordítónál lehet állítani az optimalizálási szintet. Minél kevésbé van optimalizálva a program annál több időt vesz igénybe egy-egy rutin lefutása, és annál kevesebb helyet foglal. Ez a tipikus valamit valamiért eset...

Mindegyik kimenetnél (kivéve egy kettőt) kell állítani a láb irányát. Mikroprocesszorunknál, a láb lehet digitális kimenet, digitális bemenet, és analóg bemenet (PORTA, PORTE). Az, hogy most épp ki- vagy bemenet, azt egy úgynevezett TRIState regiszterrel állítjuk. A TRIS 8 bitje ugyan arra vonatkozik mint a PORT 8 bitje. Ha a TRIS x. bitje 0 akkor kimenet, ha 1 akkor bemenet ez a láb. Persze menet közben is lehet irányt váltani, sőt, elég sűrűn van rá szükség komolyabb alkalmazásoknál.
Egy probléma van, hogy a TRIS regiszter az másik BANK-en van. Tehát ahhoz hogy írjunk bele, lapozni kell, át a BANK1-re. Hogy miért, azt látjuk az alábbi ábrán:

Itt látszik, hogy a PORTA és a TRISA két külön BANK-en van. Míg 16F84-nél összesen 2 BANK van, addig 16F877-esnél 4 darab van. 84-nél elég egy bit a kettő BANK választására, de 877-nél már kettő kell, hogy lefedje a 4-et. BANK-et váltani a STATUS regiszter RP0 és RP1 bitjével tudunk.

A PIC-nek az egyik legfontosabb regisztere a STATUS regiszter. Nem véletlen található meg mindegyik BANK-ben! Nézzük meg milyen fontos BIT-jei vannak a STATUS regiszternek:

Név 7. Bit 6. Bit 5. Bit 4. Bit 3. Bit 2. Bit 1. Bit 0. Bit
STATUS IRP (R/W) RP1 (R/W) RP0 (R/W) TO (R) PD (R) Z (R/W) DC (R/W) C (R/W)
  Indirekt BANK címzés Bank Select 1 bit Bank Select 0 bit  Time-out  Power-down Zero Digit Carry Carry

IRP: Indirekt címző bit:
1 = Bank 2, 3
0 = Bank 0, 1

RP1:RP0: Direkt címző bitek
11 = Bank 3
10 = Bank 2
01 = Bank 1
00 = Bank 0
(Mivel mi most első próbának csak 0 és 1 között fogunk váltani, ezért indításnál az RP1-et vagyis a legfelső bitet (ez a baloldali) kinullázzuk.

TO: Time-out bit
1 = Indítás után CLRWDT vagy SLEEP funkció
0 = Egyből WDT túlcsordulással indult

PD: Power-down bit
1 = Indítás után vagy CLRWDT után
0 = SLEEP utasítás kiadásának hatására

Z: Zero bit
1 = Ha az utolsó matematikai vagy logikai művelet eredménye nulla
0 = Ha az utolsó matematikai vagy logikai művelet eredménye nem nulla

DC: Digital Carry
1 = Van átvitel az eredmény 4. alsó bitjétől kezdve
0 = Nincs átvitel az eredmény 4. alsó bitjétől kezdve

C: Carry
1 = Van átvitel, az eredmény MSB-jétől (Most Significant bit) ez a tényleges túlcsordulás. Ha a 255-höz hozzáadsz mégegyet a műveleti regiszter értéke nulla lesz, de a Carry jelzőbit 1.

R = Readable (Olvasható)
W = Writable (Írható)

Pontosan ezért, most megismerkedünk a programozási nyelvekkel és elsőre szétrágjuk az assemblyt...


A cikk még nem ért véget, lapozz!
Következő: »»   8 / 24
Értékeléshez bejelentkezés szükséges!
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem