A PIC mikrokontroller család 2/2
A PIC16C5x mikrokontroller csoport
A PIC 16C5x elemsorozat a PIC mikrovezérlő család első csoportja. Ezek az áramkörök még egyszerűbb felépítésűek, kisebb képességűek - és természetesen olcsóbbak is - mint a későbbi 16Cxx chip-ek. Jelentőségüket azonban nem veszítették el, mert sok egyszerűbb feladatra éppen ezek a mikrovezérlők ideálisak.
Belső felépítés
A mikrokontrollerekre jellemző módon a 16C5x áramkörökben is megtaláljuk a programmemóriát (minden esetben EPROM), az adattárat (SRAM), az I/O elemeket, a CPU-t és egy időzítő/számláló egységet (RTCC). A belső adatbusz nyolc bites, az adatmemória és a CPU is, a programmemória rekeszei 12 b
itesek.A kitüntetett adatregiszter (akkumlátor) neve a PIC-ben W, ide kerül a műveletek egyik operandusa, s a konstansos (literal) utasításokban levő számérték. A veremtár (stack) is belső egység, két cím befogadására alkalmas, így kétszeres szubrutin egymásbaágyazás engedhető meg. Az f1-f7 jelölések a speciális funkciójú fájl regiszterekre utalnak, ezek és az általános célú regiszter fájl elemek alkotják a belső adattárat (SRAM), aminek első 32 rekesze közvetlenül címezhető. Ha a chip nagyobb SRAM-ot tart
almaz, a további területek Bank szervezéssel érhetők el. Az SRAM szervezését az ábra mutatja be.

A regisztermező elemei:
1. Fájl regiszter terület
- valós idejű óra/számláló (RTCC, Real Time Clock/Counter)
- programszámláló (PC, Program Counter)
- állapotregiszter (SR, Status Register)
- I/O regiszterek (I/O Registers, PORTs)
- fájl regiszter választó regiszter (FSR, File Select Register)
- általános célú regiszterek (General Purpose Registers)
2. További speciális regiszterek
- az I/O Port-ok konfigurálására és az előosztó kezelésére szolgáló regiszterek
A 16C5x mikrovezérlők 512 szavas programtárat képesek közvetlenül címezni, amit EPROM ként alakítottak ki. Egyes típusokban nagyobb kapacitású a programmemória, ilyenkor 512 szavas lapok formájában éri el a CPU.
A kvarcablakos PIC16C5x mikrokontroller típusok
|
Típus |
EPROM |
RAM |
I/O |
Tápfesz. |
Lábszám |
|
PIC16C54 PIC16C55 PIC16C56 PIC16C57 |
512x12 512x12 1Kx12 2Kx12 |
32x8 32x8 32x8 80x8 |
13 21 13 21 |
4,0 - 5,5V |
18 28 18 28 |
|
PIC16C54A PIC16C57A PIC16C58A |
512x12 2Kx12 2Kx12 |
32x8 80x8 80x8 |
13 21 13 |
2,5 - 6,25V |
18 28 18 |
A belső működések regiszterei
f0 Indirekt adatcímzés (Indirect data Adressing)
Ez a regiszter a valóságban, fizikailag nincs kialakítva a chip-ben. Ha egy utasításban regiszterként az f0-t adjuk meg, az FSR tartalma jelöli ki, címzi az operandus regisztert. Az f0 így csak jelzés az indirekt regiszteres címzésre. Ha indirekt címzés segítségével az f0-t olvassuk, az eredmény 0H lesz, ha írjuk, egy NOP-ot hajt végre a CPU.
f1 Óra/számláló regiszter, RTCC
Általános, írható/olvasható rekeszként is üzemel, de sajátosan inkrementálható a taratlma, több forrásból is. Léptethető az IC RTCC lábára érkező impulzusokkal is, vagy belső, utasításciklus-órajellel (CLKOUT, ami fosc/4 frekvenciájú). Felépítését az ábra mutatja be.

RTCC-t az OPTION regiszter bitjei vezérlik (RTE, RTS). Az RTCC működésébe beiktatható egy előosztó is (PSA, PS0...PS2). Ha az előosztót a számlálóhoz rendeltük, ezután minden olyan utasítás, amelyik f1-et írja, az előosztót törölni fogja.
f2 Programszámláló, PC
A programszámlálóban alakul ki a következő bolvasásra kerülő program szó címe. A PIC16C5x változatokban a PC (és a veremtár rekeszek) mérete változó:
|
Típus |
PC, veremtár rekesz hossza (bit) |
|
PIC16C54/55 |
9 |
|
PIC16C56 |
10 |
|
PIC16C57/58 |
11 |
A RESET folyamat hatására a PC tiszta 1 tartalmat vesz fel. Az utasítások végrehajtása közben automatikusan inkrementálódik, a vezérlésátadó, ugró utasítások közvetlenül módosítják a tartalmát.
f3 Státusz regiszter, SWR (Status Word Register)
Ez a regiszter informál az ALU-ban (Aritmetikai Logikai Egység) végbement folyamatokról s tartalmaz néhány speciális információs bitet is. A nagyobb méretű programtárolók kezeléséhez itt találhatóak a lap előválasztó bitek is:
SWR.0 - Carry (C) flag, túlcsordulást jelez
SWR.1 - Digit Carry (DC) flag, az első négy biten keletkező túlcsordulást jelzi
SWR.2 - Zero (Z) flag, 0-ra áll be, ha az aritmetikai vagy logikai művelet eredménye 0
SWR.3 - Power Down (PD) bit, 1-re áll be tápfesz. bekapcsoláskor vagy CLRWDT utasítás hatására, 0-ra a SLEEP utasítás állítja
SWR.4 - Time-Out (TO) bit, 1-re áll be tápfesz. bekapcsoláskor vagy CLRWDT ill. SLEEP utasítás hatására, 0-ra a Watchdog időzítő túlfutása állítja
SWR.5, SWR.6 - PA0, PA1 bitek.
PIC16C54/55-ben: két általános célú bit
PIC16C56-ban: PA0 - lapválasztó (Page Select) 0,1 - Lap0, Lap1
PIC16C57/58-ban: két lapválasztó bit (bináris kombinációjuk-Lap0...Lap3)
SWR.7 - Általános célú bit
A TO és a PD bitek lehetővé teszik, hogy egy RESET folyamat után a CPU megál
lapíthassa a RESET-et kiváltó esemény jellegét:|
TO |
PD |
RESET oka |
|
0 |
0 |
WDT időtúlfutás Sleep üzemmódban |
|
0 |
1 |
WDT időtúlfutás, nem Sleep üzemmódban |
|
1 |
0 |
|
|
1 |
1 |
Power-Up, bekapcsolás |
|
X |
X |
Lefutó él az |
f4 Fájl regisztert választó regiszter, FSR
A PIC16C54/55/56-ban a 0...4 bitek 32 lehetséges értéke a rendelkezésre álló 32 fájl regiszter egyikét jelöli ki, indirekt címzési mód esetére. Az 5...7 bitek csak olvashatóak, kiolvasva 1-et adnak.
A PIC16C57/58-ban az 5...6 bitek a kurrens adatBank számát tartalmazzák. Az összes Bank alsó 16 bájtja fizikailag egyazon 16 bájt, s mindig kiválasztódik, ha címben a bit4 (pl.indirekt címzéskor az FSR.4) 0 értékű. Ha a címértéken belül a bit4=1, azaz a felső 16 bájtra utal, akkor jut szerephez az FSR.5-6 bitpáros, kijelölve az adatmemóriában a 0...3 adatBank egyikét.AzFSR.7 bit csak olvasható, kiolvasva 1-et ad.
Az I/O működések
Az I/O regisztereket ugyan úgy lehet programból kezelni, mint bármely egyéb fájlregisztert. Az olvosás művelet minden esetben a Port csatlakozó lábai állapotát olvassa be, függetlenül attól, hogy a pont bemenetként vagy kimenetként van konfigurálva. A RESET hatására minden Port pont bemenet (nagy impedanciás) állapotú lesz, azaz az I/O vezérlő regiszterekben (TRISA, TRISB, TRISC) minden bit 1-be áll. A vezérlő bájtot a
W regiszterben kell előkészíteni, s onnan egy TRIS f utasítással lehet betölteni a TRISx regiszterbe.Minden Port bit, egymástól függetlenül bemenetként vagy kimenetként is használható - ez a vezérlő regiszterrel (TRISx) állítható be. Bemenetként nincs tárolás, a kimenő adatot tárolja a mikrokontroller. Egy kimenetre író utaítás eredménye a Port ponton a következő ciklus elején jelenik meg. A Port bemenetként való olvasásakor a mintavételezés a ciklus elején történik. Ezért célszerű az esetleg egymás után
alkalmazott két művelet közé egy NOP utasítás beiktatása.
f5 Az A Port I/O regisztere (RA0...RA3)
4 bites I/O regiszter, csak a kisebb helyiértékű bitek működnek (a felső bitek olvasáskor 0-át adnak).
f6 A B Port I/O regisztere (RB0...RB3)
8 bites I/O regiszter.
f7 A C Port I/O regisztere (RC0...RC3)
PIC16C55/57: 8 bites I/O regiszter.
PIC16C54/56/58: 8 bites általános célú regiszter.
Általános célú regiszterek
A PIC16C54/55/56 esetében 24 ilyen regiszter van, a fájl regiszter 08-1FH címein.
A PIC16C57/58 mikrovezérlőkben az adattár regiszter Bank területekre tagolódik, a teljes regiszter tartomány a következő:
08...0FH - általános célú regiszterek, 8db Bank független regiszter
10...1FH - a Bank 0 16 általános célú regisztere
20...2FH - fizikailag azonos a 00...0FH regiszterekkel
30...3FH - a Bank 1 általános célú regiszterei
40...4FH - fizikailag azonos a 00...0FH regiszterekkel
50...5FH -a Bank 2 általános célú regiszterei
60...6FH - fizikailag azonos a 00...0FH regiszterekkel
70...7FH -a Bank 3 általános célú regiszterei
Vissza
Összesen tehát 80 db fizikailag létező bájt áll rendelkezésre.
Speciális regiszterek
Munkaregiszter, W (Working Register)
8 bites ideiglenes regiszter, a két operandusos utasítások egyik operandusának előkészítő helye, gyakran az eredmény megjelenési helye
.f5 A Port vezérlő regiszter, TRISA(I/O Controll register for PortA)
Az A Port adatirány kijelölő regisztere. Csak a 0...3 bitek működnek, mivel az A Port csak 4 bites. (0=kimenet, 1=bemenet)
f6 B Port vezérlő regiszter, TRISB(I/O Controll register for PortB)
A B Port adatirány kijelölő regisztere. (0=kimenet, 1=bemenet)
f7 C Port vezérlő regiszter, TRISC(I/O Controll register for PortC)
A C Port adatirány kijelölő regisztere. (0=kimenet, 1=bemenet)
Opció regiszter, OPTION (Prescaler/RTCC Option Register)
Ez a regiszter az előosztó és a valós idejű óra/számláló vezérlését oldja meg 6 bit segítségével. Az OPTION regiszter tartalmát a W regiszterben kell előkészíteni, s onnan egy OPTION utasítás tölti a helyére. RESET hatására a regiszter minden bitje 1 lesz
.OPTION.0-2 - PS0...PS2 bitek, az előosztás értékét állítják be.
|
PS2 PS1 PS0 |
RTCC osztás |
WDT osztás |
|
0 0 0 |
1:2 |
1:1 |
|
0 0 1 |
1:4 |
1:2 |
|
0 1 0 |
1:8 |
1:4 |
|
0 1 1 |
1:16 |
1:8 |
|
1 0 0 |
1:32 |
1:16 |
|
1 0 1 |
1:64 |
1:32 |
|
1 1 0 |
1:128 |
1:64 |
|
1 1 1 |
1:256 |
1:128 |
OPTION.3 - Előosztás hozzárendelő bit (PSA) - 0: RTCC, 1:WDT
Ha az RTCC-hez rendeljük az előosztót, minden olyan utasítás, amelyik az RTCC-t írja, az az előosztót is törli. Ha a WDT-hez rendeljük hozzá, egy CLRWDT utasítás használható fel a törlésére, a WDT törlésével egyidejűleg. Az előostó az RTCC-ről a WDT-re és vissza folyamatos programfutás közben is átkapcsolható, megfelelő programlépések hatására.
OPTION.4 - RTCC léptető él (RTE) - 0: az RTCC lábon fellépő felfutó él, 1: az RTCC lábon fellépő lefutó él léptet.
OPTION.5 - RTCC impulzus forrás (RTS)
0: CLKOUT, azaz a belső utasítás ciklus óra
1: RTCC lábon fellépő impulzusok.
A Watchdog-Timer (WDT)
VisszaA Watchdog-Timer szabadon futó RC oszcillátor a chip-ben, amely nem igényel külső komponenseket. Ez azt is jelenti, hogy a WDT akkor is fut, ha az órajel az OSC1/OSC2 pontokon szünetel, pl. egy SLEEP utasítást követően. A WDT időtúlfutása egy RESET feltételt generál. Ha a WDT szolgáltatását igénybe vesszük, az idő túlfutás elérése előtt rendszeresen törölnünk kell azt. A normál program végrehajtás közben ezek a törlő parancsok meggátolják a RESET kialakulását. Ha valamilyen hatásra a program normális futása megakad, a WDT nem kap törlő jelet, kiváltja a RESET-et - aminek hatására a mikrovezérlő a teljes programrendszerét ismét felépíti, s ismét működőképes lesz.
A WDT névleges futási ideje 18ms, ha az előosztót nem rendeljük hozzá. A tényleges időtartam függ a tápfeszültségtől, a környezeti hőmérséklettől, de még a mikrokontroller egyes példányaitól is. Az előosztóval a futási idő megnövelhető, a legnagyobb osztásarány (128) alkalmazásakor az időtartam már 2,5s.
Az oszcillátor start-up időzítő (OST)
A mikrokontrollerek belső oszcillátora, melyet a külső frekvencia meghatározó elemekkel (RC tag, rezgőkvarc vagy kerámia rezonátor) hangolunk, a tápfeszültség bekapcsolásakor nem képes azonnal szabályos alakú és időtartamú jeleket előállítani. Ezért inegráltak a chip-re egy oszcillátor start-up i
dőzítő egységet (Oscillator Start-up Timer, OST). Ez megoldja, hogy abban az időszakban, amikor még nem tud precízen működni az oszcillátor, a mikrovezérlő még ne is kísérelje meg a működést.Az OST kb. 18ms-ig gátolja a működést. Amikor az oszcillátor már beállt, a szabályos impulzusokat szolgáltatja, akkor indulhatnak meg a belső folyamatok.A csökkentett tápteljesítményű állapotba (Sleep, Alvás) a SLEEP utasítás hatására lép be a mikrovezérlő. Ha engedélyezzük, a WDT törlődik és tovább számlál törlődik f3 státusz regiszterben a PD bit a TO 1-re vált és az oszcillátor meghajtó áramkör kikapcsolódik. Az I/O Portok megőrzik a Sleep előtti állapotukat.
A Sleep módból az ébredés két úton érhető el:
a WDT időtúlfutása miatt,
az
lábra érkező lefutó él hatására.
Bármelyik eset áll elő, a jelek megszünésekor indul az oszcillátor Start-Up időzítő és ennek számlálási idejéig a mikrovezérlő még RESET helyzetben marad, majd megindul a normál működés.
A PIC mikrovezérlők néhány alapvető jellemzőjét konfigurációs biztosítékokkal lehet befolyásolni. Ezek is EPROM bitek, de a programtárolásra használt területtől függetlenek. A PIC fejlesztő rendszerek speciális parancsok hatására kezelik ez
eket.Két biztosíték szolgál az oszcillátor típus beállítására, egy a Watchdog időzítő engedélyezésére, egy a progrmkódot védő biztosíték. Ezt a kód titkosító bitosítékot 0-ra programozva az EPROM tartalom (ill.csak a 040H címtől kezdődően) nem olvasható ki, a tárolt bitminták helyett egy torz adatsor lép ki. De összehasonlításra, ellenőrzésre még így is van mód.