Choď na obsah Choď na menu
 

PIC3

Škola programování PIC 3

Registry a jejich popis.

Rozdělení registrů je patrné na následujícím obrázku:

 

adresa

banka 0

banka 1

00h

INDF

01h

TMR0

OPTION_REG

02h

PCL

03h

STATUS

04h

FSR

05h

PORTA

TRISA

06h

PORTB

TRISB

07h

-

08h

EEDATA

EECON1

09h

EEADR

EECON2

0Ah

PCLATH

0Bh

INTCON

0Ch až 4Fh

uživatelské reg.

 

Jak bylo uvedeno v úvodu, registrem se nazývají 8 bitové části ať už paměti nebo samostatné celky, které jak je patrno z tabulky mají svou adresu. Takže pokud například chceme něco zapsat na výstupy portu B procesoru, provedeme to uložením informace na adresu 06h, nebo slovem do registru PORTB. Všechny tyto registry je tedy možné adresovat buď přímo číslem, nebo je možné je "volat" jejich názvem, který mají přiřazený (PORTB).
Registry jsou dvojího druhu. První tzv. systémové jsou všechny do adresy 0Bh (nebo 8Bh). Ty uchovávají různá nastavení a informace o běhu procesoru a budou podrobně popsány v zápětí.
Druhý typ registrů jsou tzv. uživatelské (adresy 0Ch až 4Fh). Ty jsou plně k dispozici programátorovi, který je využívá na průběžné odkládání různých mezivýsledků a informací. Jejich adresování je samozřejmě také možné přímo pomocí adres, ale pro usnadnění a zpřehlednění programu se vždy na začátku každého programu všem registrům (samozřejmě jen těm které se používají) přiřazují nějaké názvy a později se pracuje jen s nimi. Tyto názvy většinou vystihují použití toho kterého registru a přeci jen je jednodušší pamatovat si, že jsem si nějakou hodnotu uložil do registru s názvem například CISLO, než jeho konkrétní adresu. To samé platí i o systémových registrech, ale ty své názvy již mají a tak je není potřeba znovu určovat.

Nyní se podíváme na nejpoužívanější systémové registry:

TMR0
Jedná se o obyčejný 8 bitový čítač. V registru OPTION_REG je kromě jiných funkcí možné nastavit i zdroj signálu pro tento čítač. Je možné vybírat mezi vývodem RA4 a impulsy z vnitřních instrukčních cyklů (oscilátor / 4). K tomuto čítači je v případě potřeby možné ještě přiřadit předděličku s nastavitelným dělícím poměrem viz. následující registr.

OPTION_REG
Slouží především k různým nastavením:

D7

D6

D5

D4

D3

D2

D1

D0

RBPU

INTEDG

T0CS

T0SE

PSA

PS2

PS1

PS0

RBPU - zdvyhací rezistory na portu B. Velké odpory zapojené mezi všechny vývody portu B a + napájení.
0 - připojeny
1 - odpojeny

INTEG - řídící bit hrany přerušení
0 - přerušení nastane při sestupné (1-0) hraně na vývodu RB0
1 - při vzestupné (0-1)

T0CS - zdroj signálu pro čítač TMR0
0 - vnitřní instrukční cyklus
1 - hrana na vývodu RA4

T0SE - volba hrany pro čítání TMR0
0 - přičte při vzestupné hraně
1 - při sestupné

PSA - přiřazení předděliče
0 - předdělič u TMR0
1 - předdělič u WDT

PS2, PS1, PS0 - dělící poměr předděliče dle následující tabulky:

PS

TMR0

WDT

000

1:2

1:1

001

1:4

1:2

010

1:8

1:4

011

1:16

1:8

100

1:32

1:16

101

1:64

1:32

110

1:128

1:64

111

1:256

1:128

PCL
V tomto registru je dostupných posledních osm bitý čítače programu. Je možné jen nejen číst, ale i zapisovat a tím procesor přesunout na jiné místo programu.
Toho se využívá například při tvorbě tabulek. Vezme se nějaké číslo a to se přičte k hodnotě v tomto registru. Tím se dosáhne přesunu programového čítače o počet kroků rovný přičtenému číslu.

STATUS
Tento registr obsahuje především informace o běhu procesoru (procesor je tedy nastavuje sám) a také je zde bit k přepínání mezi bankou 0 a 1 s registry (proto je také k dispozici v obou).

D7

D6

D5

D4

D3

D2

D1

D0

IRP

RP1

RP0

TO

PD

Z

DC

C

IRP, RP1 - tyto dva bity se zde nepoužívají a při čtení se jeví jako 0

RP0 - výběr banky registrů
0 - banka 0
1 - banka 1

TO - dává informaci o prošlém časovém limitu, nastaví se po přetečení WATCH DOG časovače
0 - byl
1 - nebyl

PD - indikuje použití SLEEP (úsporného režimu)
0 - byl
1 - nebyl

Z - výsledek operace byl roven nule. Při probírání dostupných příkazů bude u všech označeno co ovlivňuje.
0 - nebyl
1 - byl

DC - jako C s tím rozdílem, že indikuje přenos přes 16
0 - nebyl
1 - byl

C - byl přenos do vyššího řádu, tedy přes číslo 256 (registr přetekl)
0 - nebyl
1 - byl

PORTA, PORTB
Jak už název napovídá, jedná se o registry přímo napojené na výstupní porty (které jsou výstupní a které vstupní se nastavuje následujícími registry). Takže, pokud chceme zapsat nějakou hodnotu na výstupy, zapíšeme ji do jednoho z těchto registrů a ona tam zůstane do doby, než ji dalším zápisem změníme.
Popis vývodů u procesoru plně odpovídá bitům v těchto registrech. Tak například vývod RA0 je "nultý" bit v registru PORTA, viz následující obrázek:

PORTA

D7

D6

D5

D4

D3

D2

D1

D0

-

-

-

RA4

RA3

RA2

RA1

RA0

PORTB

D7

D6

D5

D4

D3

D2

D1

D0

RB7

RB6

RB5

RB4

RB3

RB2

RB1

RB0

TRISA, TRISB
Jak bylo naznačeno v předchozím odstavci, tyto registry slouží k nastavení vlastnosti toho kterého vývodu. Tedy, nastavuje se zde, který vývod chceme mít jako vstup a který naopak výstup a to i kdykoliv při běhu programu.
Rozložení bitů plně odpovídá předchozímu obrázku a teď to nejdůležitější. Bit, který má hodnotu 0 je výstupní a naopak, bit s log. 1 je nastaven jako vstupní. Uložíme-li například do registru TRISB tuto binární hodnotu: 00001111, nastavíme tím vývody RB0-RB3 jako vstupní a RB4-RB7 jako výstupní. A ještě taková pomůcka, můžete si to pamatovat podle začátečních písmen anglických názvů (1-In, 0-Out).
Pokud některý z vývodů nastavíme jako výstupní, má z počátku hodnotu Log. 1 a ta se dá změnit zápisem do registrů PORTA a PORTB. Pokud ale některý z vývodů nastavíme jako vstupní, má vysokou impedanci. To znamená, že má velký odpor a jakoby se odpojil. Této vlastnosti se hojně využívá.

EEDATA, EEADR, EECON1, EECON2
Všechny tyto registry slouží ke práci s pamětí EEPROM, která bude podrobně popsána později.
Teď jen tolik, že první registr slouží pro data a druhý pro adresu do které se bude číst, nebo zapisovat. Zbývající dva registry představují něco jako zámek. Protože se tato paměť často používá na důležité údaje (hesla a podobně), tak aby se, například při poruše procesoru, zabránilo nechtěnému přepsání této paměti, musí se před každým zápisem provést přesně stanované kroky, které do těchto registrů uloží dva klíče. Ale o tom všem až později.

PCLATH
Zde je zbylých 5 bitů programového čítače, pokračování z registru PCL.

INTCON
Poslední systémový registr je opět nastavovací. Slouží k nastavení přerušení (viz. první díl) případně indikuje typ vzniklého přerušení.

D7

D6

D5

D4

D3

D2

D1

D0

GIE

EEIE

TOIE

INTE

RBIE

TOIF

INTF

RBIF

GIE - povolení jakéhokoli přerušení
0 - zakázat
1 - povolit

EEIE - přerušení po dokončení zápisu do EEPROM
0 - zakázat
1 - povolit

TOIE - přerušení po přetečení časovače TMR0
0 - zakázat
1 - povolit

INTE - přerušení od vývodu INT - RB0
0 - zakázat
1 - povolit

RBIE - přerušení od změny na portu B
0 - zakázat
1 - povolit

TOIF - příznak přetečení TMR0 (ručně nulovat)
0 - nebyl
1 - byl

INTF - příznak vnějšího přerušení (ručně nulovat)
0 - nebyl
1 - byl

RBIF - příznak přerušení od portu B (ručně nulovat)
0 - nebyl
1 - byl