online kép - Fájl  tubefájl feltöltés file feltöltés - adja hozzá a fájlokat onlinefedezze fel a legújabb online dokumentumokKapcsolat
  
 

Letöltheto dokumentumok, programok, törvények, tervezetek, javaslatok, egyéb hasznos információk, receptek - Fájl kiterjesztések - fajltube.com

Online dokumentumok - kep
  

A 16F84-röl

gépészet



felso sarok

egyéb tételek

jobb felso sarok
 
Csapagyszerelő prés
Kereskedési technikak és módszerek
Carboplate Epoxi bazisú gyantaval elő-impregnalt, pultrudalt, kétoldalasan tapadó, karbon-szal lemez
A GÁZ CSATLAKOZÓ VEZETÉKEK ÉS FOGYASZTÓI BERENDEZÉSEK LÉTESÍTÉSI ÉS ÜZEMELTETÉSI MŰSZAKI-BIZTONSÁGI SZABÁLYZATA
A CNC gépek fő részei
A TŰZVÉDELEM ÉS VESZÉLYELHÁRÍTÁS VÉDŐESZKÖZEI
Valtakozó aramú szabalyozott hajtasok
Adaptív innovaciós modell
Különbözô aszinkron motoros hajtasok összehasonlítasa
A 16F84-röl
 
bal also sarok   jobb also sarok

A PIC mikrovezérlök családjában nagy népszerüségnek örvend a 16F84-es típus, köszönhetöen sokoldalúságának. Az iskolánkban müködö mikrokontroller programozó szakkör is a legtöbbet ezzel az IC-vel dolgozik Ez a leírás mindazoknak szeretne segíteni, akik most kezdik az ismerkedést ezen processzorokkal, illetve magyar nyelven könnyebben boldogulnak a dokumentáció olvasásával.


A 16F84-röl

Nagyteljesítményü RISC CPUjellemzök:

35 db egyszerü utasítás

Minden utasítás-az elágaztatókat

kivéve (2 ciklus)-egy ciklus

Órajel: 0-10MHz


Program

Memória

(szó)

Adat

RAM

(bájt)

Adat

EEPROM

(bájt)

1k



14 bites utasítások

8 bites adatok

8 szintü hardver verem

Közvetlen , közvetett és relatív

címzési módok

4 megszakítási forrás:

-Külsö RB0/INT láb

-TMR0 idözítö túlcsordulás

-PORTB(7-4) változása miatt

-Adat EEPROM írása kész


1000 írási/törlési ciklus (program memória)

10000 írási/törlési ciklus (belsö EEPROM)

Az EEPROM több mint 40 évig megörzi az adatot


A perifériák jellemzöi:

13 I/O kivezetés (mindegyik lehet

bemenet vagy kimenet)

Nagyáramú kimenet

TMR0: 8 bites idözítö/számláló

8 bites elöosztóval


Speciális mikrokontroller jellemzök:

Két lábon keresztül történö

soros programozás (ICSP)

Bekapcsolási reset' (POR)

Power-up Timer' (PWRT),

(akkor kapcsolja az órajelet a CPU-ra,

ha az már stabil)

Watchdog Timer (WDT)

(Kiváltja a reset folyamatot, ha nem

normál müködés van)

Program védelem

Minimális fogyasztású (SLEEP) üzemmód

Sokoldalú belsö oszcillátor



CMOS Flash/EEPROM technológia:


Alacsony fogyasztás és nagy sebesség

Széles tápfeszültség tartomány (2-6V)

Alacsony fogyasztás

<2mA (5V, 4MHz)

mA (2V)

< 1mA alvó mód (2V)



Lábkiosztás


Architektúra


A 16F84 Harvard architektúrájú RISC mikroprocesszor. Az ilyen architektúránál külön válik a program és az adat memória (a Neumanni architektúrában ugyanaz a memória szolgál mindkét célra).

A program és az adat memória szétválasztása lehetövé teszi, hogy az utasítás hossza eltérjen a 8 bites adathossztól. A 16F84-ben az utasítás hossza 14 bit, így egyszavas" utasítások is elegendöek. A kétállapotú pipline (csövezeték, sor) segítségével az utasítás lehívás és végrehajtás egymásba lapolódik, következésképpen minden utasítás egy ciklust igényel (kivételt képeznek az elágaztató utasítások).

A 16F84 1kszó (1szó=14bit belsö memóriát kezel.

A 16F84 egy 8bites ALU-t és egy munkargisztert-W:work-(ez tulajdonképpen az akkumulátor) tartalmaz.

Ez az ALU általános célú aritmetikai és logikai egység, amely az adatok valamint a W regiszter, illetve bármelyik fájlregiszter között végzi a müveleteket. Az ALU tud összeadni, kivonni, léptetni, és logikai müveleteket végezni. Az aritmetikai müveleteket kettes komplemensben végzi. Az egyik operandus a W-ben van, a másik valamelyik fájlregiszter vagy konstans(literál). Az eredmény kerülhet a W-be vagy a fájlregiszterbe. A müveletek eredményétöl függöen az ALU a következö jelzöbiteket állítja: C-Carry (átvitel), Z-Zero (zéró), D-Digit Carry (alsó négy biten túlcsordulás). Ezek a jelzöbitek a STATUS regiszterben találhatók. Kivonáskor a C és DC áthozat negált"-ként viselkedik (/borrow, /digit borrow).


Mint az egyszerüsített blokkvázlatból (1.ábra) látható az architektúrát úgy alakították ki, hogy az utasítás végrehajtására legyen optimalizálva.



1.ábra


Kivezetések leírása



Kivezetés

Sorszám

I/O/P

típus

Buffer

típus

Leírás

OSC1/CLKIN


I

ST/CMOS

Oszcillátor kristály bemenet/küsö órajel bemenet

OSC2/CLKOUT


O


Oszcillátor kristály kimenet. Ide csatlakozik a kvarc v. a rezonátor kristály oszcillátor módban. RC módban az fosc/4 jel vehetö itt le.


I/P

ST

Általános törlés (reset)-aktív nullás.


RA0

RA1

RA2

RA3

RA4/T0CKI









I/O

I/O

I/O

I/O

I/O


TTL

TTL

TTL

TTL

ST

PORTA: kétirányú I/O port





Port vagy TMR0 idözítö/számláló órajel bemenet (nyitott kollektoros




RB0/INT

RB1

RB2

RB3

RB4

RB5

RB6

RB7















I/O

I/O

I/O

I/O

I/O

I/O

I/O

I/O




TTL/ST1

TTL

TTL

TTL

TTL

TTL

TTL/ST2

TTL/ST2


PORTB: kétirányú I/O port, programból bekapcsolható bemeneti felhúzóellenállásokkal

Port vagy külsö megszakítás bemenet




Megszakítást okoz változás esetén

Megszakítást okoz változás esetén

Megszakítást okoz változás esetén3

Megszakítást okoz változás esetén4

Vss


P


Pozitív tápfeszültég

Vdd


P


Földpont


Jelölések: I=bemenet O=kimenet P=tápfesültség ST=Schmitt-trigger

Megjegyzések:

1: ha külsö megszakítás bemenetnek programozzuk, akkor Schmitt-trigger-es lesz

2: soros programozás (égetés) esetén Schmitt-triggeres

3: programozáskor (égetés) ez az órajelbemenet

4: programozáskor (égetés) ez az adatbemenet

Az utasítás feldolgozás, idözítések


Az oszcillátorban kialakuló négyszögjelet a processzor idözítö egysége néggyel leosztva, négy-egymást át nem lapoló-(Q1,Q2,Q3,Q4) belö órajellé alakítja át. Ez a négy leosztott óraimpulzus alkot egy gépi ciklust. Az utasítás végrehajtása a következöképpen történik (2.ábra):

Q1: a PC értéke eggyel növekszik

Q2-Q4: utasítás lehívás- a CPU kiolvassa a memóriából az utasítást, és az utasításregiszterbe helyezi  

Q1-Q4: ezen fázisok alatt történik meg az utasítás dekódolása és végrehajtása, valamint a következö utasítás lehívása


2.ábra



Az utasítások végrehajtásának gyorsítása érdekében a mikrovezérlö felhasználja a pipeline (csövezeték, sor) elvet (3.ábra): az éppen aktuális utasítás végrehajtásával párhuzamosan beolvassa a soron következö utasítást. Ilyen módon egy utasítás végrehajtása egy gépi ciklust igényel. Kivételt képeznek ez alól az elágaztató utasítások (pl. CALL). Ezekben az esetekben a sor tartalmát el kell dobni (kiürítés), s az új utasítást kell lehívni.

3.ábra


Memória szervezés


A 16F84 két memória blokkot tartalmaz: program memória és adat memória. Mindkét blokk saját busszal rendelkezik, így bármelyik elérhetö ugyanazon órajelperiódusban. Az adatmemória további két részre bomlik. Az egyik részt az általános célú regiszterek alkotják (general purpose RAM), a másikat pedig a speciális funkciójú regiszterek (SFR- Special Function Register). Ezek a speciális regiszterek állítják be gyakorlatilag a CPU mag és a perifériák müködési módját. Az adat memória területén található a belsö EEPROM is. Az EEPROM memória csak indirekt módon az EEADR (cím) és EEDATA (adat) regiszterek segítségével érhetö el. Az EEPROM memória 64 bájtot tartalmaz, amely írható és olvasható is.


Program memória

A 16F84 programszámlálója 13 bites, tehát a megcímezhetö memória terület 1kszó (1szó=14 bit).

A címtartomány 0000 h-tól 03FF h-ig terjed. A fizikailag létezö címtartomány feletti címek esetén az elérhetöség a következöképpen alakul: pl. a 20h, 420h, 820h helyeken ugyanaz az utasítás látszik.

A reset vektor a 0000h, a megszakítási vektor pedig a 0004h címen helyezkedik el (4.ábra).

Adat memória

Az adat memória két partícióra oszlik, úgymint speciális funkciójú regiszterek (SFR), és általános célú regiszterek (GPR). A két partíció két bankra tagolódik. Mindkét bankban van speciális és általános célú regiszter is. A két bank között a STATUS regiszter RP1 és RP0 bitjével tudunk váltani. Mindegyik regiszter elérhetö direkt és indirekt módon is. Az indirekt elérés az FSR (File Select Register) segítségével valósul meg. Mindkét bank 128 bájtot tartalmaz, ebböl az elsö tizenkettö az SFR terület számára van lefoglalva, ezután következik a 68 darab általános célú regiszter (GPR), a fennmaradó terület nem használatos, olvasáskor 0-át ad. A bank 1-ben a bank 0-ban található általános célú regiszterek árnyéka (tükörképe) jelenik meg,


így ugyanazon regiszter mindkét bankból elérhetö. Az SFR-ek között is van olyan, amely mindkét bankból elérhetö (pl. a STATUS regiszter, hiszen e nélkül nem tudnánk bankot váltani.).

Az SFR regiszterek a CPU és a periféria funkciók beállítására szolgálnak.



Speciális funkciójú regiszterek


Cím

Név

7. bit

6.bit

5. bit

4. bit

3. bit

2. bit

1. bit

0. bit

Érték bekap-csolási reset után

Érték

egyéb

reset

esetén(3)

Bank 0

00h

INDF

Az FSR által kijelölt fájlregiszter adatát tartalmazza (fizikailag nem létezik)



01h

TMR0

8 bites valós idejü számláló/idözítö

xxxx xxxx

uuuu uuuu

02h

PCL

A programszámláló (PC) alsó 8 bitje



03h

STATUS(2)

IRP

RP1

RP0

Z

DC

C

0001 1xxx

000q quuu

04h

FSR

Indirekt címzö regiszter (adatmemória)

xxxx xxxx

uuuu uuuu

05h

PORTA




RA4/T0CKI

RA3

RA2

RA1

RA0

x xxxx

u uuuu

06h

PORTB

RB7

RB6

RB5

RB4

RB3

RB2

RB1

RB0/INT

xxxx xxxx

uuuu uuuu

07h

Nem létezö, olvasáskor 0-t ad



08h

EEDATA

EEPROM adat regiszter

xxxx xxxx

uuuu uuuu

09h

EEADR

EEPROM cím regiszter

xxxx xxxx

uuuu uuuu

0Ah

PCLATH




A PC felsö 5 bitjének írható puffere(1)



0Bh

INTCON

GIE

EEIE

T0IE

INTE

RBIE

T0IF

INTF

RBIF

0000 000x

0000 000u

Bank 1

80h

INDF

Az FSR által kijelölt fájlregiszter adatát tartalmazza (fizikailag nem létezik)



81h

OPTION_REG

INTEDG

T0CS

T0SE

PSA

PS2

PS1

PS0



82h

PCL

A programszámláló (PC) alsó 8 bitje



83h

STATUS(2)

IRP

RP1

RP0

Z

DC

C

0001 1xxx

000q quuu

84h

FSR

Indirekt címzö regiszter (adatmemória)

xxxx xxxx

uuuu uuuu

85h

TRISA




PORTA irányát kijelölö regiszter



86h

TRISB

PORTB irányát kijelölö regiszter



87h

Nem létezö, olvasáskor 0-t ad



88h

EECON1




EEIF

WRERR

WREN

WR

RD

0 x000

0 q000

89h

EECON2

EEPROM vezérlö regiszter (fizikailag nem létezik)



8Ah

PCLATH




A PC felsö 5 bitjének írható puffere(1)



8Bh

INTCON

GIE

EEIE

T0IE

INTE

RBIE

T0IF

INTF

RBIF

0000 000x

0000 000u


Jelölések: x=ismeretlen, u=nem változik, -=nem létezö olvszva 0, q=értéke feltételektöl függ

Megjegyzések:

1: A programszámláló felsö 5 bitje közvetlenül nem hozzáférhetö (csak az alsó 8 bitet (PCL) lehet közvetlenül írni. A PCLATH regiszter szolgál a PC felsö bitjeinek ( PC<12:8>) kezelésére. Vezérlésátadó utasítás esetén a PCH-ba innen töltödik be a felsö öt bitet

A STATUS regiszter és bitjeire a külsö reset nincs hatással.

3: Az egyéb nem bekapcsolási reset feltételek a következök:

- külsö reset az lábon keresztül

- Watchdog Timer reset


STATUS regiszter (03h, 83h)


A STATUS regiszter az ALU jelzöbitjeit, a bankválasztó biteket, valamint a CPU állapotáról tájékoztató biteket tartalmazza. A és bitek csak olvashatóak, a többi írható is. Abban az esetben, ha valamely utasításban célként szerepel a STATUS regiszter, akkor a Z, DC, C bitek nem írthatók, ezeket a rendszerlogika állítja. A BCF, BSF MOVWF utasításokkal az írható bitek tetszés szerinti értékre állíthatók. Például a CLRF STATUS utasítás törli a felsö három bitet, egybe állítja a Z bitet, a többit pedig változatlanul hagyja. A STATUS regiszter felépítése a következö:


R/W-0

R/W-0

R/W-0

R-1

R-1

R/W-x

R/W-x

R/W-x

IRP

RP1

RP0

Z

DC

C


IRP: regiszter lapválasztó bit indirekt címzéshez (a 16F84-ben nem használatos, késöbbi fejlesztésre fenntartva)

RP1, RP0: regiszter lapválasztó bitek direkt címzéshez (a 16F84-ben csak az RP0 müködik

00 Bank 0 (00h-7Fh)

01 = Bank 1 (80h-FFh)

Mindkét bank 128 bájtból áll. Az RP1-et nullában kell tartani!

: Time Out bit

1-be billen a tápfeszültség bekapcsolásakor, a CLRWDT és a SLEEP utasítás hatására

0-ba billen a watchdog timer tulcsordulására

: Power Down bit

1-be billen a tápfeszültség bekapcsolásakor és a CLRWDT hatására

0-ba billen a SLEEP utasítás hatására

Z: Zero Bit

1-be billen, ha valamely aritmetikai vagy logikai müvelet eredménye nulla

DC: Digit Carry/ bit (ADDLW és ADDWF utasításoknál)

1-be billen, ha átvitel történt a negyedik bitnél

0-ba billen, ha nem volt átvitel a negyedik bitnél

C: Carry/ bit (ADDLW és ADDWF utasításoknál)

1-be billen, ha átvitel történt a legmagasabb súlyozású bitnél

0-ba billen, ha nem volt átvitel a legmagasabb súlyozású bitnél

Megjegyzés: Kivonásnál a ellentétesen müködik. A kivonást 2-es komplemensben végzi.

A forgatások (RRF,RLF) a carry biten keresztül történnek.



OPTION_REG regiszter (81h)


Az OPTION_REG regiszter egy írható olvasható regiszter, amely különbözö vezérlö és konfigurációs biteket tartalmaz: TMR0/WDT elöosztó, külsö INT megszakítás, TMR0, illetve a PORTB felhúzóellenállásainak beállítása.


R/W-1

R/W-1

R/W-1

R/W-1

R/W-1

R/W-1

R/W-1

R/W-1

INTEDG

T0CS

T0SE

PSA

PS2

PS1

PS0


: PORTB felhúzóellenállásait engedélyezö bit

1 Felhúzóellenállások tiltva

0 Felhúzóellenállások engedélyezve


INTEDG: Külsö megszakítás élválasztó bit

1 A megszakítás az RB0/INT láb felfutó élére aktív

0 A megszakítás az RB0/INT láb lefutó élére aktív


T0CS : TMR0 órajel forrását kiválasztó bit

1 Az RA4/T0CKI láb az órajel forrása

0 A belsö utasításciklus lépteti a TMR0-t


T0SE: TMR0 forrás élválasztó bit

1 A TMR0 az RA4/T0CKI lábon történt lefutó élre növekszik

0 A TMR0 az RA4/T0CKI lábon történt felfutó élre növekszik


PSA: Elöosztó hozzárendelö bit

1 Az elöosztó a WDT-hez csatlakozik

0 Az elöosztó a TMR0-hoz csatlakozik

PS2:PS0: Az osztási arányt kiválasztó bitek


Bitek

TMR0

WDT


























Megjegyzés: Ha az elöosztó a WATCHDOG TIMER-hez csatlakozik, akkor a TMR0 osztása 1:1.




INTCON regiszter (0Bh,8Bh)


Az INTCON regiszter egy írható olvasható regiszter, amely a különbözö megszakításokat engedélyezö biteket, valamint a megszakítás bekövetkezését jelzö biteket tartalmazza.


R/W-0

R/W-0

R/W-0

R/W-0

R/W-0

R/W-0

R/W-0

R/W-x

GIE

EEIE

EEIE

INTE

RBIE

T0IF

INTF

RBIF



GIE: Általános megszakítást engedélyezö bit

1 = Megszakítások engedélyezve

0 Megszakítások tiltva


EEIE: Eeprom írás kész megszakítás engedélyezés bit

1 Eeprom írás kész megszakítás engedélyezve

0 = Eeprom írás kész megszakítás tiltva


T0IE:   TMR0 tulcsordulás megszakítás engedélyezö bit

1 = TMR0 megszakítás engedélyezve

0 = TMR0 megszakítás tiltva


INTE: RB0/INT külsö megszakítás engedélyezö bit

RB0/INT külsö megszakítás engedélyezve

RB0/INT külsö megszakítás tiltva


RBIE: A PORTB felsö 4 bitjén létrejövö változás miatti megszakítás engedélyezö bit

1 = PORTB változás megszakítás engedélyezve

0 = PORTB változás megszakítás tiltva


T0IF: TMRO túlcsordulás megszakítást jelzö bit

1 TMR0 túlcsordult (szoftverböl kell törölni

0 = Nincs túlcsordulás


INTF: RB0/INT külsö megszakítást jelzö bit

1 RB0/INT külsö megszakítás érkezett (szoftverböl kell törölni

0 = Nem történt megszakítás


RBIF: A PORTB felsö 4 bitjén létrejövö változás miatti megszakítást jelzö bit

1 = V ltozás  történt az RB7-RB4 lábak valamelyikén (szoftverböl kell törölni

0 = Nem történt változás RB7-RB4 lábakon





PCL és PCLATH



A programszámláló (PC) mutat a következö lehívandó utasításra. A PC 13 bit széles. Az alsó bájtját PCL regiszternek nevezik., amely írható és olvasható. A felsö bájtját PCH regiszternek hívják. Ez a regiszter tartalmazza a PC<12:8> bitjeit, viszont ez közvetlenül nem írható-olvasható. Minden PCH regiszterre irányuló müvelet a PCLATH regiszteren keresztül valósul meg.


Veremtár


A veremtár 8 szubrutinhívás vagy megszakítási esemény visszatérési címének tárolására alkalmas, azaz a verem 8 szintü és 13 bit széles. A verem hardver verem, vagyis nem része a program, illetve az adatterületnek. Ilyen módon a veremmutató nem írható és nem olvasható. A PC tartalma eltárolódik a veremben (PUSH) minden szubrutinhívó (CALL) utasítás, vagy megszakítási esemény hatására. A visszatérési utasítások (RETURN, RETLW, RETFIE) hatására a PC tartalma visszaíródik a veremböl (POP). A veremmüveleteknél (PUSH és POP) a PCLATH regiszter tartalma nem változik (természetesen a PCH az átíródik). Abban az esetben, ha a verem betelt (8 PUSH után) a verembe elöször berakott visszatérési cím felülíródik


Indirekt címzés: INDF és FSR regiszterek


Az INDF  fizikailag nem létezö regiszter. Az INDF tulajdonképpen annak a regiszternek a tartalmát adja vissza, amelyet az FSR regiszterrel kiválasztottunk. Ez az úgynevezett indirekt címzés.


Példa az indirekt címzésre:

A 05h címen lévö regiszterfájl tartalma 10h

A 06h címen lévö regiszterfájl tartalma 0Ah

Az FSR regiszterbe betöltünk 05h-t

Olvasáskor az INDF regiszter tartalma 10h-t mutat

Eggyel megnöveljük az FSR tartalmát (06h)

Az INDF regiszter tartalma most 0Ah lesz, ha kiolvassuk


Ha az INDF regisztert, saját magát indirekt módon olvassuk (FSR 0), akkor eredményül nullát kapunk. Ha az INDF regisztert indirekt módon írjuk, akkor nem történik semmi (a jelzöbitek azonban a STATUS regiszterben beállnak).


A következö egyszerü program arra mutat példát hogyan lehet törölni a RAM területet indirekt címzéssel 20h-tól 2Fh-ig:


movlw 0x20 a mutató beállítása..

movwf FSR ;.. a RAM terület kezdetére

Next            clrf INDF INDF regiszter törlése

incf FSR a mutató növelése

btfss FSR,4 kész az összes

goto Next ; nem, a következö törlése

Continue        .

. igen, folytatás


A tényleges 9 bites címzés a 8 bites FSR regiszteren és az IRP (STATUS<7>) biten keresztül valósul meg, mint ahogy 6.ábrán látható.



Direkt címzés Indirekt címzés


RP1 RP0 6 (az utasítás címrésze ) 0 IRP 7 (FSR) 0





















bank bankon belüli hely bank bankon belüli hely

választó választó










00h


0Bh



80h

0Ch






4Fh


A Bank0

tükörképe


50h


7Fh



FFh


Bank0

Bank1



6. ábra



Megjegyzések

1: A részletes memóriatérkép az 5. ábrán látható

2: Nullában kell tartani (késöbbi felhasználásra fenntartva)

3: Nincs beépítve



I/O portok


Néhány kivezetés ezen I/O portok közül multiplexált, azaz több alternatív funkció ellátására alkalmas a különbözö készülék perifériák számára. Általános esetben, ha a periféria funkció engedélyezve van, akkor a lábat nem használhatjuk általános célú I/O portként. További információ a felhasználói kézikönyvben (DS33023) található.



PORTA és TRISA regiszterek


A PORTA 5 bit széles kétirányú port. Az adatirányt a TRISA regiszter bitjei határozzák meg. Amikor a TRISA bitjét 1-be állítjuk, akkor a PORTA megfelelö bitje bemenet lesz, a kimeneti drájver nagyimpedanciás (Hi-Z) lesz. Abban az esetben, ha a TRISA megfelelö bitjét 0-ba billentjük, akkor a PORTA bitje kimenet lesz.

Megjegyzés: bekapcsolási reset után a PORTA bemenetként lesz definiálva, olvasáskor pedig 0-t fog visszaadni.

Amikor olvassuk a PORTA regisztert, akkor tulajdonképpen a bemeneti D tárolóból olvassuk az adatot, amelybe a PORTA értéke íródik be.

Minden írási müvelet egy olvasás-módosítás-visszaírás müveletböl tevödik össze.

Az RA4 láb multiplexált: müködhet általános I/O portként, vagy lehet a Timer0 modul órajelforrása (T0CKI-Timer0 Clock Input). Az RA4/T0CKI láb (8. Ábra) bemenetként Schmitt-triggeres, kimenetként nyitott kollektoros (felhúzóellenállást igényel)

Mindegyik RA kivezetés TTL jelszintekkel dolgozik bemenetként, kimenetként CMOS végfokozattal rendelkezik.


Példa a PORTA beállítására:


BCF       STATUS,RP0 Bank0

CLRF PORTA PORTA adattárolóinak törlése

BSF STATUS,RP0 Bank1

MOVLW B ; Adatirányok beállítása


MOVWF TRISA ; RA<3:0> bemenet, RA4 kimenet



Megjegyzés: az I/O kivezetések védödiódával rendelkeznek a plusz és a mínusz táp felé (az RA4 csak a mínusz felé).


PORTA funkciók


Név

Bit

Buffer típus

Funkció

RA0


TTL

Bemenet/kimenet

RA1


TTL

Bemenet/kimenet

RA2


TTL

Bemenet/kimenet

RA3


TTL

Bemenet/kimenet

RA4/T0CKI


ST

Bemenet/kimenet vagy külsö órajelforrás a TMR0-hoz

Nyitott kollektoros



A PORTA-hoz kapcsolódó regiszterek




Cím

Név

Bit7

Bit6

Bit5

Bit4

Bit3

Bit2

Bit1

Bit0

Bekapcs. reset

utáni érték

Egyéb reset

utáni érték

05h

PORTA




RA4/

T0CKI

RA3

RA2

RA1

RA0

---x xxxx

---u uuuu

85h

TRISA




TRISA4

TRISA3

TRISA2

TRISA1

TRISA0




Jelölések: x=ismeretlen, u=nem változik, -=nem létezö olvasva 0, q=értéke feltételektöl függ



PORTB és TRISB regiszterek


A PORTB 8 bit széles kétirányú port. Az adatirányt a TRISB regiszter határozza meg. Amikor a TRISB bitjét 1-be állítjuk, akkor a PORTB megfelelö bitje bemenet lesz, a kimeneti drájver nagyimpedanciás (Hi-Z) lesz. Abban az esetben, ha a TRISB megfelelö bitjét 0-ba billentjük, akkor a PORTB bitje kimenet lesz.

Példa a PORTB beállítására:


BCF       STATUS,RP0 Bank0

CLRF PORTB PORTA adattárolóinak törlése

BSF STATUS,RP0 Bank1

MOVLW B ; Adatirányok beállítása

MOVWF TRISB ; RB<3:0> bemenet,

; RB<5:4> kimenet

; RB<7:6> bemenet


Mindegyik PORTB kivezetés rendelkezik belsö felhúzóellenállással. A felhúzóellenállások bekapcsolása az (OPTION_REG<7>) bit 0-ba állításával történik, amely minden bithez hozzárendeli a felhúzóellenállást! A felhúzóellenállás automatikusan kikapcsolódik, ha a lábat kimenetként definiáljuk. Bekapcsolási reset után a felhúzóellenállások tiltva vannak.

Négy PORTB láb (RB7:RB4) rendelkezik megszakítási lehetöséggel, ha változás lép fel ezeken a lábakon. Ez a lehetöség csak akkor müködik, ha bemeneteknek programozzuk ezeket a lábakat. Ebben az esetben úgy müködik a megszakítás, hogy a hardver összehasonlítja a régi eltárolt PORTB bitkombinációt a jelenleg mintavételezettel, s ha változást talál bármelyik RB7:RB4 bitben, egy megszakítást generál, vagyis az RBIF (INTCON<0>) jelzöbit értéke logikai 1 lesz. Ezen megszakítás hatására a CPU felébred a SLEEP módból. A megszakítást a felhasználónak kell nyugtáznia a kiszolgáló rutinból a következö módok valamelyikével:

Minden írási vagy olvasási müvelet amely a PORTB-re irányul törli a hibafeltételt

Az RBIF jelzöbit törlése


A PORTB jól felhasználható például egy 3x4-es mátrix tasztatúra lekezelésére, felhasználva a beépített felhúzóellenállások, valamint a felsö négy bit változása miatt bekövetkezö megszakítás adta lehetöséget. Ezzel a módszerrel megspórolhatjuk a billentyüzet folyamatos lekérdezését (polling).

















PORTB funkciók


Név

Bit

Buffer típus

Funkció

RB0/INT


TTL/ST(1)

Bemenet/kimenet vagy külsö megszakítás bemenet

szoftverböl bekapcsolható belsö felhúzóellenállással

RB1


TTL

Bemenet/kimenet

szoftverböl bekapcsolható belsö felhúzóellenállással

RB2


TTL

Bemenet/kimenet

szoftverböl bekapcsolható belsö felhúzóellenállással

RB3


TTL

Bemenet/kimenet

szoftverböl bekapcsolható belsö felhúzóellenállással

RB4


ST

Bemenet/kimenet (változás hatására megszakítás)

szoftverböl bekapcsolható belsö felhúzóellenállással

RB5


TTL

Bemenet/kimenet (változás hatására megszakítás)

szoftverböl bekapcsolható belsö felhúzóellenállással

RB6


TTL/ST(2)

Bemenet/kimenet (változás hatására megszakítás)

szoftverböl bekapcsolható belsö felhúzóellenállással

Programozásnál órajelbemenet

RB7


TTL/ST(2)

Bemenet/kimenet (változás hatására megszakítás)

szoftverböl bekapcsolható belsö felhúzóellenállással

Programozásnál adatvonal



A PORTB-hez kapcsolódó regiszterek




Cím

Név

Bit7

Bit6

Bit5

Bit4

Bit3

Bit2

Bit1

Bit0

Bekapcs. reset

utáni érték

Egyéb reset

utáni érték

05h

PORTA

RB7

RB6

RB5

RB4

RB3

RB2

RB1

RB0

xxxx xxxx

uuuu uuuu

85h

TRISA

TRISB7

TRISB6

TRISB5

TRISB4

TRISB3

TRISB2

TRISB1

TRISB0




Jelölések: x=ismeretlen, u=nem változik, -=nem létezö olvasva 0, q=értéke feltételektöl függ


I/O programozási szempontok


Kétirányú I/O portok


Minden írási müvelet egy olvasás-módosítás-visszaírás müveletböl tevödik össze. Például a BSF és BCF utasításnál a CPU beolvassa a regisztert, végrehajtja a bit müveletet, majd viszzaírja az eredményt a regiszterbe. Óvatosan kell eljárnunk azonban akkor, ha egyazon port bitjeit bemenetnek és kimenetnek is definiáljuk. Például a BSF PORTB,5 utasítás beolvassa a PORTB mind a nyolc bitjét, 1-be állítja az 5-ös bitet, majd visszaírja az eredményt. Tételezzük fel, hogy egy bitet kétirányú I/O portként használunk, s jelenleg bemenetként definiáltuk. Ilyenkor olvasás esetén a CPU beolvassa a bitet és a bithez tartozó adat latch-et felülírja. Amíg bemenetként használjuk ezt a lábat nincs is semmilyen baj, azonban, ha késöbb kimenetként definiáljuk az adatregiszter tartalma ismeretlen lesz.

Olvasáskor a port tényleges állapotát olvassuk be, íráskor azonban nem közvetlenül a portot, hanem az adattárolókat írjuk.

A portokat kimenetként használva azokat más készülék kimeneteivel összekötve a chip tönkremenetelét idézzük elö.


Példa az olvasás-módosítás-visszaírás típusú utasításra a PORTB-n


; Kezdeti port be llítások: PORTB<7:4> bemenet

; PORTB<3:0> kimenet

; PORTB<7:6> belsö felhúzóellenállása bekapcsolva

Nincs más áramkörhöz csatlakoztatva

PORT latch PORT l b

; ----------- ---------

BCF PORTB,7 ; 01pp pppp 11pp pppp

BCF PORTB ; 10pp pppp     11pp pppp

BSF STATUS,RP0

BCF TRISB,7 ; 10pp pppp 11pp pppp

BCF TRISB,6 ; 10pp pppp 10pp pppp

; amikor TRISB,6-ot 0-ba állítjuk a PORTB,6-os láb logikai

1 lesz, mivel a latch-be elözöleg 1 íródott (lásd elsö sor)



Egymást követö I/O müveletek ugyanazon porton


Tételezzük fel a következöt: ugyanazon portra kiírunk egy adatot, majd közvetlenül utána beolvassuk a port állapotát. Elvileg nem követtünk el hibát, azonban, ha nem várjuk ki azt az idöt, amíg a port lábán a feszültség stabilizálódik, akkor elöfordulhat, hogy a kivezetés elözö állapotát olvassuk be. Ez a hiba kiküszöbölhetö úgy, hogy az írás és olvasás közé beszúrunk egy NOP utasítást, vagy egy olyan müveletet, amely nem erre a portra irányul.



TMR0 modul


A TMR0 idözítö/számláló föbb jellemzöi:

8 bites idözítö/számláló

Írható és olvasható

Belsö vagy külsö órajel forrás

Külsö órajelnél élv kiválasztási lehetöség (lefutó vagy felfutó)

8 bites szoftverböl programozható elöosztó

Megszakítás túlcsordulás esetén (ha FFh-ból 00h-ba vált a TMR0 regiszter


A TMR0 modul egyszerüsített blokkvázlata a 11. ábrán látható. További információ a felhasználói kézikönyvben (DS33023) található.



11. ábra

A Timer0 müködése


A Timer0 müködhet számlálóként vagy idözítöként.

Idözítöként akkor müködik, ha T0CS bitet (OPTION REG<5>) 0-ba állítjuk, számlálóként pedig akkor, ha 1-be billentjük. Idözítö módban minden utasításciklus eggyel növeli a TMR0 regiszter értékét (feltéve, hogy nincs elöosztás). A felhasználó felül tudja írni a TMR0 regisztert (adott értékkel feltöltheti) , ilyenkor az elöbb említett növelés letiltódik a következö két utasításciklus erejéig.

Számláló módban a TMR0 regiszter értéke növekszik minden felfutó vagy lefutó él hatására, amely az RA4/T0CKI lábon történik. A felfutó vagy lefutó él kiválasztása a T0SE bittel (OPTION REG<4>) történik. Nullába állítva ezt a bitet felfutó élre történik, 1-be állítva pedig lefutó élre történik a növelés. Külsö órajel forrás használata estén a következö megszorításokkal kell élnünk: biztosítani kel, hogy a külsö órajel szinkronizálva legyen a belsö órajel fázisához, ami miatt késedelmet szenved a TMR0 aktuális növelése. További információ a külsö órajelröl a felhasználói kézikönyvben (DS33023) található.


Elöosztó


A 8 bites számláló regiszter lehet a Timer0 modul elöosztója, vagy a Watchdog Timer utóosztója, mint ahogy a 12. Ábrán látható. Mivel csak egy regiszterünk van, amely megosztott a Timer0 modul és a Watchdog Timer között, ezért, ha az elöosztót a Timer0 modulhoz rendeljük, akkor a Watchdog Timer-nek nincs osztója, s ez ugyanígy fordítva is igaz. Az elöosztó nem írható és nem is olvasható. A PSA bit (OPTION_REG<3>) hat rozza meg, hogy az elöosztó hová kapcsolódik. Ha a PSA bit értéke 0, akkor az osztó a Timer0 modulhoz, ha 1, akkor a Watchdog Timer-hez kapcsolódik. Az osztás mértékét a PS2:PS0 bitek határozzák meg. Ha az osztó a Timer0 modulhoz kapcsolódik, akkor az értékek 1:2, 1:4..1:256 között alakulnak, ha a Watchdog Timer-hez kapcsolódik, akkor pedig 1:1, 1:2..1:128 közötti értékeket vehet fel. Ha a Timer0 modulhoz van rendelve az osztó, akkor minden utasítás írja a TMR0 regisztert, ha  Watchdog Timer-hez van rendelve, akkor a CLRWDT utasítás törli a regisztert.


Timer0 megszakítás


A Timer0 megszakítás akkor keletkezik, amikor a TMR0 regiszter túlcsordul, azaz FFh-ból 00h-ba vált. Ez a túlcsordulás beállítja a T0IF bitet (INTCON<2>). Ez a megszakítás maszkolva van a T0IE bittel, azaz csak akkor él, ha ez bit logikai 1 (a GIE bit minden megszakítást letilt, tehát ennek is 1-nek kell lennie). A T0IF bitet szoftverböl kell a kiszolgáló rutinban törölni (ez nagyon fontos kritérium). A TMR0 megszakítás nem ébreszti fel alvó állapotból a processzort, SLEEP állapotban a TMR0 nem müködik!







EEPROM adatmemória


Az EEPROM adatmemória


Mnemonik

Operandus

Leírás

Ciklus

14 bites kód

Állított

jelzöbitek

Megjegyzés

MSB                   LSB

Bájt orientált fájlregiszter müveletek

ADDWF f,d

W és f összeadása


00 0111 dfff ffff

C,DC,Z


ANDWF f,d

W és f ÉS kapcsolata


00 0101 dfff ffff

Z


CLRF f

f törlése


00 0001 1fff ffff

Z


CLRW

W törlése


00 0001 0xxx xxxx

Z


COMF f,d

f  komplementálása


00 1001 dfff ffff

Z


DECF f,d

f csökkentése


00 0011 dfff ffff

Z


DECFSZ f,d

f csökkentése és ugrás, ha 0


00 1011 dfff ffff



INCF f,d

f növelése


00 1010 dfff ffff

Z


INCFSZ f,d

f növelése és ugrás, ha 0


00 1111 dfff ffff



IORWF

f és W VAGY kapcsolata


00 0100 dfff ffff

Z


MOVF f,d

f mozgatása


00 1000 dfff ffff

Z


MOVWF f

W mozgatása f-be


00 0000 1fff ffff



NOP

nincs müvelet


00 0000 0xx0 0000



RLF f,d

forgatás balra az átvitelbiten keresztül


00 1101 dfff ffff

C


RRF f,d

forgatás jobbra az átvitelbiten keresztül


00 1100 dfff ffff

C


SUBWF f,d

W kivonása az f-böl


00 0010 dfff ffff

C,DC,Z


SWAPF f,d

az f alsó és felsö 4 bitjének cseréje


00 1110 dfff ffff



XORWF f,d

W és f  kizáró-vagy kapcsolata


00 0110 dfff ffff

Z


Bit orientált fájlregiszter müveletek

BCF f,b

az f adott bitjének törlése


01 00bb bfff ffff



BSF f,b

az f adott bitjének 1-be billentése


01 01bb bfff ffff



BTFSC f,b

a bit tesztelése és ugrás, ha 0


01 10bb bfff ffff



BTFSS f,b

a bit tesztelése és ugrás, ha 1


01 11bb bfff ffff



Konstans és vezérlésátadó müveletek

ADDLW k

konstans hozzáadása a W-hez


11 11x kkkk kkkk

C,DC,Z


ANDLW k

W és egy konstans ÉS kapcsolata


11 1001 kkkk kkkk

Z


CALL k

szubrutin hívás


10 0kkk kkkk kkkk



CLRWDT

Watchdog Timer törlése




GOTO k

ugrás címkére


10 1kkk kkkk kkkk



IORLW k

W és egy konstans VAGY kapcsolata


11 1000 kkkk kkkk

Z


MOVLW k

konstans mozgatása a W-be


11 00xx kkkk kkkk



RETFIE

visszatérés a megszakításból





RETLW k

visszatérés szubrutinból egy konstanssal


11 01xx kkkk kkkk



RETURN

visszatérés szubrutinból





SLEEP

váltás alvó módba




SUBLW k

W kivonása egy konstansból


11 110x kkkk kkkk

C,DC,Z


XORLW k

W és egy konstans kizáró-vagy kapcsolata






Megjegyzések:

Amikor a d helyén 1 (vagy f) áll, akkor az eredmény saját magába íródik vissza (fájlregiszter), ha pedig a d helyén 0 (w) áll, akkor a w regiszterbe íródik be.

Abban az esetben, ha a müvelet a TMR0 regiszterre vonatkozik (d 1, vagy d=f), és az elöosztó a TMR0-hoz van rendelve, akkor az elöosztó törlödik.

Amikor a programszámláló (PC) változik az utasítás két ciklus hosszú lesz. A második ciklusban a NOP utasítás kerül végrehajtásra.


Találat: 2580


Felhasználási feltételek