Professional Documents
Culture Documents
Bevezets
A PIC mikrovezrlk csaldjban nagy npszersgnek rvend a 16F84-es tpus, ksznheten sokoldalsgnak. Az iskolnkban mkd mikrokontroller programoz szakkr is a legtbbet ezzel az IC-vel dolgozik Ez a lers mindazoknak szeretne segteni, akik most kezdik az ismerkedst ezzel a processzoral, illetve magyar nyelven knnyebben boldogulnak a dokumentci olvassval.
A 16F84-rl
Nagyteljestmny RISC CPUjellemzk:
35 db egyszer utasts Minden utasts egy ciklus (az elgaztatkat kivve) rajel: 0-10MHz Program Adat Adat Memria RAM EEPROM (sz) (bjt) (bjt) 1k 68 64 14 bites utastsok 8 bites adatok 8 szint hardver verem Kzvetlen, kzvetett s relatv cmzsi mdok 4 megszaktsi forrs: -Kls RB0/INT lb -TMR0 idzt tlcsorduls -PORTB(7-4) vltozsa miatt -Adat EEPROM rsa ksz 1000 rsi/trlsi ciklus (program memria) 10000 rsi/trlsi ciklus (bels EEPROM) Az EEPROM tbb mint 40 vig megrzi az adatot (Kivltja a reset folyamatot, ha nem norml mkds van) Program vdelem Minimlis fogyaszts (SLEEP) zemmd Sokoldal bels oszcilltor
Lbkioszts
A perifrik jellemzi:
13 I/O kivezets (mindegyik lehet bemenet vagy kimenet) Nagyram kimenet TMR0: 8 bites idzt/szmll 8 bites elosztval
PIC16F84
Architektra
Architektra
A 16F84 Harvard architektrj RISC mikroprocesszor. Az ilyen architektrnl kln vlik a program s az adat memria (a Neumanni architektrban ugyanaz a memria szolgl mindkt clra). A program s az adat memria sztvlasztsa lehetv teszi, hogy az utasts hossza eltrjen a 8 bites adathossztl. A 16F84-ben az utasts hossza 14 bit, gy egyszavas utastsok is elegendek. A ktllapot pipline (csvezetk, sor) segtsgvel az utasts lehvs s vgrehajts egymsba lapoldik, kvetkezskppen minden utasts egy ciklust ignyel (kivtelt kpeznek az elgaztat utastsok). A 16F84 1ksz (1sz=14bit) bels memrit kezel. A 16F84 egy 8bites ALU-t s egy munkargisztert-W:work-(ez tulajdonkppen az akkumultor) tartalmaz. Ez az ALU ltalnos cl aritmetikai s logikai egysg, amely az adatok valamint a W regiszter, illetve brmelyik fjlregiszter kztt vgzi a mveleteket. Az ALU tud sszeadni, kivonni, lptetni, s logikai mveleteket vgezni. Az aritmetikai mveleteket kettes komplemensben vgzi. Az egyik operandus a Wben van, a msik valamelyik fjlregiszter vagy konstans(literl). Az eredmny kerlhet a W-be vagy a fjlregiszterbe. A mveletek eredmnytl fggen az ALU a kvetkez jelzbiteket lltja: C-Carry (tvitel), Z-Zero (zr), D-Digit Carry (als ngy biten tlcsorduls). Ezek a jelzbitek a STATUS regiszterben tallhatk. Kivonskor a C s DC thozat neglt-knt viselkedik (/borrow, /digit borrow). Mint az egyszerstett blokkvzlatbl (1.bra) lthat az architektrt gy alaktottk ki, hogy az utasts vgrehajtsra legyen optimalizlva.
1.bra
PIC16F84
Lbkioszts
Kivezetsek lersa
I/O/P tpus I O Buffer tpus
ST/CMOS
Sorszm 16 15
Lers
Oszcilltor kristly bemenet/ks rajel bemenet
MCLR
RA0 RA1 RA2 RA3 RA4/T0CKI
4 17 18 1 2 3
Oszcilltor kristly kimenet. Ide csatlakozik a kvarc v. a rezontor kristly oszcilltor mdban. RC mdban az fosc/4 jel vehet itt le. ltalnos trls (reset)-aktv nulls. PORTA: ktirny I/O port
RB0/INT RB1 RB2 RB3 RB4 RB5 RB6 RB7 Vss Vdd
6 7 8 9 10 11 12 13 5 14
Port vagy TMR0 idzt/szmll rajel bemenet (nyitott kollektoros!!!) PORTB: ktirny I/O port, programbl bekapcsolhat bemeneti felhzellenllsokkal Port vagy kls megszakts bemenet
Megszaktst okoz vltozs esetn Megszaktst okoz vltozs esetn Megszaktst okoz vltozs esetn3 Megszaktst okoz vltozs esetn4 Fldpont Pozitv tpfeszltg
Jellsek: I=bemenet O=kimenet P=tpfesltsg ST=Schmitt-trigger Megjegyzsek: 1: ha kls megszakts bemenetnek programozzuk, akkor Schmitt-trigger-es lesz 2: soros programozs (gets) esetn Schmitt-triggeres 3: programozskor (gets) ez az rajelbemenet 4: programozskor (gets) ez az adatbemenet
PIC16F84
Utasts vgrehajts
2.bra Az utastsok vgrehajtsnak gyorstsa rdekben a mikrovezrl felhasznlja a pipeline (csvezetk, sor) elvet (3.bra): az ppen aktulis utasts vgrehajtsval prhuzamosan beolvassa a soron kvetkez utastst. Ilyen mdon egy utasts vgrehajtsa egy gpi ciklust ignyel. Kivtelt kpeznek ez all az elgaztat utastsok (pl. CALL). Ezekben az esetekben a sor tartalmt el kell dobni (kirts), s az j utastst kell lehvni.
3.bra
PIC16F84
Memria szervezs
Memria szervezs
A 16F84 kt memria blokkot tartalmaz: program memria s adat memria. Mindkt blokk sajt busszal rendelkezik, gy brmelyik elrhet ugyanazon rajelperidusban. Az adatmemria tovbbi kt rszre bomlik. Az egyik rszt az ltalnos cl regiszterek alkotjk (general purpose RAM), a msikat pedig a specilis funkcij regiszterek (SFR- Special Function Register). Ezek a specilis regiszterek lltjk be gyakorlatilag a CPU mag s a perifrik mkdsi mdjt. Az adat memria terletn tallhat a bels EEPROM is. Az EEPROM memria csak indirekt mdon az EEADR (cm) s EEDATA (adat) regiszterek segtsgvel rhet el. Az EEPROM memria 64 bjtot tartalmaz, amely rhat s olvashat is.
Program memria
A 16F84 programszmllja 13 bites, teht a megcmezhet memria terlet 1ksz (1sz=14 bit). A cmtartomny 0000 h-tl 03FF h-ig terjed. A fizikailag ltez cmtartomny feletti cmek esetn az elrhetsg a kvetkezkppen alakul: pl. a 20h, 420h, 820h helyeken ugyanaz az utasts ltszik. A reset vektor a 0000h, a megszaktsi vektor pedig a 0004h cmen helyezkedik el (4.bra).
Adat memria
Az adat memria kt partcira oszlik, gymint specilis funkcij regiszterek (SFR), s ltalnos cl regiszterek (GPR). A kt partci kt bankra tagoldik. Mindkt bankban van specilis s ltalnos cl regiszter is. A kt bank kztt a STATUS regiszter RP1 s RP0 bitjvel tudunk vltani. Mindegyik regiszter elrhet direkt s indirekt mdon is. Az indirekt elrs az FSR (File Select Register) segtsgvel valsul meg. Mindkt bank 128 bjtot tartalmaz, ebbl az els tizenkett az SFR terlet szmra van lefoglalva, ezutn kvetkezik a 68 darab ltalnos cl regiszter (GPR), a fennmarad terlet nem hasznlatos, olvasskor 0-t ad. A bank 1-ben a bank 0-ban tallhat ltalnos cl regiszterek rnyka (tkrkpe) jelenik meg, 5
PIC16F84
Memria szervezs
gy ugyanazon regiszter mindkt bankbl elrhet. Az SFR-ek kztt is van olyan, amely mindkt bankbl elrhet (pl. a STATUS regiszter, hiszen e nlkl nem tudnnk bankot vltani.). Az SFR regiszterek a CPU s a perifria funkcik belltsra szolglnak.
PIC16F84
SFR
Bank 0 Az FSR ltal kijellt fjlregiszter adatt tartalmazza (fizikailag nem ltezik) 00h INDF ---- ---xxxx xxxx 01h TMR0 8 bites vals idej szmll/idzt 0000 0000 02h PCL A programszmll (PC) als 8 bitje (2) 03h STATUS 0001 1xxx IRP RP1 RP0 TO DC C PD Z xxxx xxxx 04h FSR Indirekt cmz regiszter (adatmemria) 05h PORTA ---x xxxx - RA4/T0CKI RA3 RA2 RA1 RA0 06h PORTB RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0/INT xxxx xxxx 07h Nem ltez, olvasskor 0-t ad ---- ---xxxx xxxx 08h EEDATA EEPROM adat regiszter xxxx xxxx 09h EEADR EEPROM cm regiszter (1) 0Ah PCLATH ---0 0000 - A PC fels 5 bitjnek rhat puffere RBIE T0IF INTF 0000 000x 0Bh INTCON GIE EEIE T0IE INTE RBIF Bank 1 Az FSR ltal kijellt fjlregiszter adatt tartalmazza (fizikailag nem ltezik) 80h INDF ---- ---1111 1111 81h OPTION_REG RBPU INTEDG T0CS T0SE PSA PS2 PS1 PS0 0000 0000 82h PCL A programszmll (PC) als 8 bitje (2) 83h STATUS 0001 1xxx IRP RP1 RP0 Z DC C TO PD xxxx xxxx 84h FSR Indirekt cmz regiszter (adatmemria) 85h TRISA ---1 1111 - PORTA irnyt kijell regiszter 1111 1111 86h TRISB PORTB irnyt kijell regiszter 87h Nem ltez, olvasskor 0-t ad ---- ---WRERR WREN 88h EECON1 EEIF WR RD ---0 x000 89h EECON2 EEPROM vezrl regiszter (fizikailag nem ltezik) ---- ---(1) 8Ah PCLATH ---0 0000 - A PC fels 5 bitjnek rhat puffere RBIE T0IF INTF RBIF 0000 000x 8Bh INTCON GIE EEIE T0IE INTE
---u uuuu
uuuu uuuu
---0 0000
0000 000u
---1 1111
1111 1111
Jellsek: x=ismeretlen, u=nem vltozik, -=nem ltez olvasva 0, q=rtke felttelektl fgg Megjegyzsek: 1: A programszmll fels 5 bitje kzvetlenl nem hozzfrhet (csak az als 8 bitet (PCL) lehet kzvetlenl rni. A PCLATH regiszter szolgl a PC fels bitjeinek ( PC<12:8>) kezelsre. Vezrlstad utasts esetn a PCH-ba innen tltdik be a fels t bitet ! 2: A STATUS regiszter TO s PD bitjeire a kls MCLR reset nincs hatssal. 3: Az egyb nem bekapcsolsi reset felttelek a kvetkezk: - kls reset az MCLR lbon keresztl - Watchdog Timer reset
PIC16F84
STATUS
TO
IRP: regiszter lapvlaszt bit indirekt cmzshez (a 16F84-ben nem hasznlatos, ksbbi fejlesztsre fenntartva) RP1, RP0: regiszter lapvlaszt bitek direkt cmzshez (a 16F84-ben csak az RP0 mkdik 00 = Bank 0 (00h-7Fh) 01 = Bank 1 (80h-FFh) Mindkt bank 128 bjtbl ll. Az RP1-et nullban kell tartani!
TO : Time Out bit 1-be billen a tpfeszltsg bekapcsolsakor, a CLRWDT s a SLEEP utasts hatsra 0-ba billen a watchdog timer tulcsordulsra
PD : Power Down bit 1-be billen a tpfeszltsg bekapcsolsakor s a CLRWDT hatsra 0-ba billen a SLEEP utasts hatsra Z: Zero Bit 1-be billen, ha valamely aritmetikai vagy logikai mvelet eredmnye nulla DC: Digit Carry/ Borrow bit (ADDLW s ADDWF utastsoknl) 1-be billen, ha tvitel trtnt a negyedik bitnl 0-ba billen, ha nem volt tvitel a negyedik bitnl C: Carry/ Borrow bit (ADDLW s ADDWF utastsoknl) 1-be billen, ha tvitel trtnt a legmagasabb slyozs bitnl 0-ba billen, ha nem volt tvitel a legmagasabb slyozs bitnl Megjegyzs: Kivonsnl a Borrow ellenttesen mkdik. A kivonst 2-es komplemensben vgzi. A forgatsok (RRF,RLF) a carry biten keresztl trtnnek.
PIC16F84
OPTION_REG
PIC16F84
INTCON
GIE: ltalnos megszaktst engedlyez bit 1 = Megszaktsok engedlyezve 0 = Megszaktsok tiltva EEIE: Eeprom rs ksz megszakts engedlyezs bit 1 = Eeprom rs ksz megszakts engedlyezve 0 = Eeprom rs ksz megszakts tiltva T0IE: TMR0 tulcsorduls megszakts engedlyez bit 1 = TMR0 megszakts engedlyezve 0 = TMR0 megszakts tiltva INTE: RB0/INT kls megszakts engedlyez bit 1 = RB0/INT kls megszakts engedlyezve 0 = RB0/INT kls megszakts tiltva RBIE: A PORTB fels 4 bitjn ltrejv vltozs miatti megszakts engedlyez bit 1 = PORTB vltozs megszakts engedlyezve 0 = PORTB vltozs megszakts tiltva T0IF: TMRO tlcsorduls megszaktst jelz bit 1 = TMR0 tlcsordult (szoftverbl kell trlni!) 0 = Nincs tlcsorduls INTF: RB0/INT kls megszaktst jelz bit 1 = RB0/INT kls megszakts rkezett (szoftverbl kell trlni!) 0 = Nem trtnt megszakts RBIF: A PORTB fels 4 bitjn ltrejv vltozs miatti megszaktst jelz bit 1 = Vltozs trtnt az RB7-RB4 lbak valamelyikn (szoftverbl kell trlni!) 0 = Nem trtnt vltozs RB7-RB4 lbakon
10
PIC16F84
PC,FSR,INDF
PCL s PCLATH
A programszmll (PC) mutat a kvetkez lehvand utastsra. A PC 13 bit szles. Az als bjtjt PCL regiszternek nevezik., amely rhat s olvashat. A fels bjtjt PCH regiszternek hvjk. Ez a regiszter tartalmazza a PC<12:8> bitjeit, viszont ez kzvetlenl nem rhat-olvashat. Minden PCH regiszterre irnyul mvelet a PCLATH regiszteren keresztl valsul meg.
Veremtr
A veremtr 8 szubrutinhvs vagy megszaktsi esemny visszatrsi cmnek trolsra alkalmas, azaz a verem 8 szint s 13 bit szles. A verem hardver verem, vagyis nem rsze a program, illetve az adatterletnek. Ilyen mdon a veremmutat nem rhat s nem olvashat. A PC tartalma eltroldik a veremben (PUSH) minden szubrutinhv (CALL) utasts, vagy megszaktsi esemny hatsra. A visszatrsi utastsok (RETURN, RETLW, RETFIE) hatsra a PC tartalma visszardik a verembl (POP). A veremmveleteknl (PUSH s POP) a PCLATH regiszter tartalma nem vltozik (termszetesen a PCH az trdik). Abban az esetben, ha a verem betelt (8 PUSH utn) a verembe elszr berakott visszatrsi cm fellrdik!
Next
Continue
A tnyleges 9 bites cmzs a 8 bites FSR regiszteren s az IRP (STATUS<7>) biten keresztl valsul meg, mint ahogy 6.brn lthat.
11
PIC16F84 Direkt cmzs RP1 RP0 (2) bank vlaszt 6 (az utasts cmrsze ) 0 IRP (2) 7 Indirekt cmzs (FSR) 0
PC,FSR,INDF
01 80h
A Bank0 tkrkpe 4Fh 50h (3) 7Fh Bank0 Bank1 6. bra Megjegyzsek 1: A rszletes memriatrkp az 5. brn lthat 2: Nullban kell tartani (ksbbi felhasznlsra fenntartva) 3: Nincs beptve (3) FFh
12
PIC16F84
I/O portok
I/O portok
Nhny kivezets ezen I/O portok kzl multiplexlt, azaz tbb alternatv funkci elltsra alkalmas a klnbz kszlk perifrik szmra. ltalnos esetben, ha a perifria funkci engedlyezve van, akkor a lbat nem hasznlhatjuk ltalnos cl I/O portknt. Tovbbi informci a felhasznli kziknyvben (DS33023) tallhat.
13
PIC16F84
I/O portok
Megjegyzs: az I/O kivezetsek vddidval rendelkeznek a plusz s a mnusz tp fel (az RA4 csak a mnusz fel).
PORTA funkcik
Nv
RA0 RA1 RA2 RA3 RA4/T0CKI
Bit 0 1 2 3
4
Funkci
Bemenet/kimenet Bemenet/kimenet Bemenet/kimenet Bemenet/kimenet Bemenet/kimenet vagy kls rajelforrs a TMR0-hoz Nyitott kollektoros
Cm
Nv
Bit3
RA3 TRISA3
Bit2
RA2 TRISA2
Bit1
RA1 TRISA1
Bit0
RA0 TRISA0
Jellsek: x=ismeretlen, u=nem vltozik, -=nem ltez olvasva 0, q=rtke felttelektl fgg
Mindegyik PORTB kivezets rendelkezik bels felhzellenllssal. A felhzellenllsok bekapcsolsa az RBPU (OPTION_REG<7>) bit 0-ba lltsval trtnik, amely minden bithez hozzrendeli a felhzellenllst! A felhzellenlls automatikusan kikapcsoldik, ha a lbat kimenetknt definiljuk. Bekapcsolsi reset utn a felhzellenllsok tiltva vannak. Ngy PORTB lb (RB7:RB4) rendelkezik megszaktsi lehetsggel, ha vltozs lp fel ezeken a lbakon. Ez a lehetsg csak akkor mkdik, ha bemeneteknek programozzuk ezeket a lbakat. Ebben az esetben gy mkdik a megszakts, hogy a hardver sszehasonltja a rgi eltrolt PORTB 14
PIC16F84 I/O portok bitkombincit a jelenleg mintavtelezettel, s ha vltozst tall brmelyik RB7:RB4 bitben, egy megszaktst generl, vagyis az RBIF (INTCON<0>) jelzbit rtke logikai 1 lesz. Ezen megszakts hatsra a CPU felbred a SLEEP mdbl. A megszaktst a felhasznlnak kell nyugtznia a kiszolgl rutinbl a kvetkez mdok valamelyikvel: Minden rsi vagy olvassi mvelet amely a PORTB-re irnyul trli a hibafelttelt Az RBIF jelzbit trlse A PORTB jl felhasznlhat pldul egy 3x4-es mtrix tasztatra lekezelsre, felhasznlva a beptett felhzellenllsok, valamint a fels ngy bit vltozsa miatt bekvetkez megszakts adta lehetsget. Ezzel a mdszerrel megsprolhatjuk a billentyzet folyamatos lekrdezst (polling).
15
PIC16F84
I/O portok
PORTB funkcik
Nv
RB0/INT RB1 RB2 RB3 RB4 RB5 RB6 RB7
Bit
0 1 2 3 4 5 6 7
Buffer tpus
TTL/ST(1) TTL TTL TTL ST TTL TTL/ST(2) TTL/ST(2)
Funkci Bemenet/kimenet vagy kls megszakts bemenet szoftverbl bekapcsolhat bels felhzellenllssal Bemenet/kimenet szoftverbl bekapcsolhat bels felhzellenllssal Bemenet/kimenet szoftverbl bekapcsolhat bels felhzellenllssal Bemenet/kimenet szoftverbl bekapcsolhat bels felhzellenllssal Bemenet/kimenet (vltozs hatsra megszakts) szoftverbl bekapcsolhat bels felhzellenllssal Bemenet/kimenet (vltozs hatsra megszakts) szoftverbl bekapcsolhat bels felhzellenllssal Bemenet/kimenet (vltozs hatsra megszakts) szoftverbl bekapcsolhat bels felhzellenllssal Programozsnl rajelbemenet Bemenet/kimenet (vltozs hatsra megszakts) szoftverbl bekapcsolhat bels felhzellenllssal Programozsnl adatvonal
Cm 85h
Nv TRISA
Bit7
RB7 TRISB7
Bit6
RB6 TRISB6
Bit5
RB5 TRISB5
Bit4
RB4 TRISB4
Bit3
RB3 TRISB3
Bit2
RB2 TRISB2
Bit1
RB1 TRISB1
Bit0
RB0 TRISB0
05h PORTA
Jellsek: x=ismeretlen, u=nem vltozik, -=nem ltez olvasva 0, q=rtke felttelektl fgg
I/O portok
17
PIC16F84
TMR0
TMR0 modul
A TMR0 idzt/szmll fbb jellemzi: 8 bites idzt/szmll rhat s olvashat Bels vagy kls rajel forrs Kls rajelnl lv kivlasztsi lehetsg (lefut vagy felfut) 8 bites szoftverbl programozhat eloszt Megszakts tlcsorduls esetn (ha FFh-bl 00h-ba vlt a TMR0 regiszter A TMR0 modul egyszerstett blokkvzlata a 11. brn lthat. Tovbbi informci a felhasznli kziknyvben (DS33023) tallhat.
11. bra
A Timer0 mkdse
A Timer0 mkdhet szmllknt vagy idztknt. Idztknt akkor mkdik, ha T0CS bitet (OPTION_REG<5>) 0-ba lltjuk, szmllknt pedig akkor, ha 1-be billentjk. Idzt mdban minden utastsciklus eggyel nveli a TMR0 regiszter rtkt (feltve, hogy nincs eloszts). A felhasznl fell tudja rni a TMR0 regisztert (adott rtkkel feltltheti), ilyenkor az elbb emltett nvels letiltdik a kvetkez kt utastsciklus erejig. Szmll mdban a TMR0 regiszter rtke nvekszik minden felfut vagy lefut l hatsra, amely az RA4/T0CKI lbon trtnik. A felfut vagy lefut l kivlasztsa a T0SE bittel (OPTION_REG<4>) trtnik. Nullba lltva ezt a bitet felfut lre trtnik, 1-be lltva pedig lefut lre trtnik a nvels. Kls rajel forrs hasznlata estn a kvetkez megszortsokkal kell lnnk: biztostani kel, hogy a kls rajel szinkronizlva legyen a bels rajel fzishoz, ami miatt ksedelmet szenved a TMR0 aktulis nvelse. Tovbbi informci a kls rajelrl a felhasznli kziknyvben (DS33023) tallhat.
Eloszt
A 8 bites szmll regiszter lehet a Timer0 modul elosztja, vagy a Watchdog Timer utosztja, mint ahogy a 12. brn lthat. Mivel csak egy regiszternk van, amely megosztott a Timer0 modul s a Watchdog Timer kztt, ezrt, ha az elosztt a Timer0 modulhoz rendeljk, akkor a Watchdog Timernek nincs osztja, s ez ugyangy fordtva is igaz. Az eloszt nem rhat s nem is olvashat. A PSA bit (OPTION_REG<3>) hatrozza meg, hogy az eloszt hov kapcsoldik. Ha a PSA bit rtke 0, akkor az oszt a Timer0 modulhoz, ha 1, akkor a Watchdog Timer-hez kapcsoldik. Az oszts mrtkt a PS2:PS0 18
PIC16F84 TMR0 bitek hatrozzk meg. Ha az oszt a Timer0 modulhoz kapcsoldik, akkor az rtkek 1:2, 1:4.1:256 kztt alakulnak, ha a Watchdog Timer-hez kapcsoldik, akkor pedig 1:1, 1:2.1:128 kztti rtkeket vehet fel. Ha a Timer0 modulhoz van rendelve az oszt, akkor minden utasts, amely rja a TMR0 regisztert trli az elosztt. Abban az esetben, ha Watchdog Timer-hez van rendelve, akkor pedig a CLRWDT utasts trli az elosztt. Az eloszt nem rhat s nem is olvashat.
12.bra
Timer0 megszakts
A Timer0 megszakts akkor keletkezik, amikor a TMR0 regiszter tlcsordul, azaz FFh-bl 00h-ba vlt. Ez a tlcsorduls belltja a T0IF bitet (INTCON<2>). Ez a megszakts maszkolva van a T0IE bittel, azaz csak akkor l, ha ez bit logikai 1 (a GIE bit minden megszaktst letilt, teht ennek is 1-nek kell lennie). A T0IF bitet szoftverbl kell a kiszolgl rutinban trlni (ez nagyon fontos kritrium), mieltt jra engedlyeznnk a megszaktst (RETFIE). A TMR0 megszakts nem breszti fel alv llapotbl a processzort, SLEEP llapotban a TMR0 nem mkdik!
ORG 4 BTFSC INTCON,T0IF GOTO T0INT RETFIE START BSF STATUS,RP0 MOVLW B10000001 MOVWF OPTION_REG
19
PIC16F84
BCF BSF BSF STATUS,RP0 INTCON,GIE INTCON,T0IE ;Bank0 ;ltalnos megszakts engedlyezs ;Timer0 megszakts engedlyezs ;A fprogram (egy vgtelen hurok) ;Kiszolgl rutin ;Flag trlse ;A feladat ;vgrehajtsa ;Vge, megszakts engedlyezse
TMR0
Nv TMR0
Bit7
Bit6
Bit5 Bit4
Bit3
Bit2
Bit1
Bit0
Timer0 regiszter
GIE EEIE T0IE INTE T0SE
TRISA4
Bekapcs. reset utni rtk xxxx xxxx 0000 000x 1111 1111 ---1 1111
Egyb reset utni rtk uuuu uuuu 0000 0000 1111 1111 ---1 1111
0Bh INTCON
TRISA
RBIE PSA
TRISA3
T0IF PS2
TRISA2
INTF PS1
TRISA1
RBIF PS0
TRISA0
Jelmagyarzat: x=ismeretlen, u=nem vltozik, -=nincs beptve (olvasva 0-t ad). Az rnykolt cellk nem kapcsoldnak a Timer0-hoz.
20
PIC16F84
EEPROM
EEPROM adatmemria
Az EEPROM adatmemria zemszeren rhat s olvashat memria. Ez a memria elklnl a fjlregiszter terlettl. Az EEPROM adatmemria rsa s olvassa 4 specilis funkcij regiszter (SFR) segtsgvel valsul meg, amelyek az albbiak: EECON1 EECON2 EEDATA EEADR Az EEDATA regiszter tartalmazza a kiolvasott, vagy a berand adatot, az EEADR pedig a cmz regiszter. A PIC16F84 EEPROM memrijnak mrete 64 bjt (0h-3Fh). Az EEPROM memria rsi s olvassi ideje jelentsen eltr egymstl. Az rsi idt egy bels idzt szablyozza. Az rsi id fgg a tpfeszltsgtl, a hmrsklettl, illetve az egyes pldnyoktl.
Az EEADR regiszter
Az EEADR segtsgvel sszesen 256 bjt cmezhet meg, azonban az EEPROM mrete csak 64 bjt. Mivel a teljes cmtartomny dekdolt, ezrt a fels kt bitnek mindig nullnak kell lennie.
7:5 bit Nincs beptve 4. bit EEIF: EEPROM rsi mvelet megszaktsi jelzbitje 1 = Az rsi mvelet ksz 0 = Az rsi mvelet mg nem fejezdtt be 3. bit WRERR: EEPROM hiba jelzbitje 1 = Az rsi mvelet flbeszakadt ( MCLR vagy WDT reset norml mkds esetn) 0 = Az rsi mvelet ksz 2. bit WREN: EEPROM rs engedlyez bit 1 = rs engedlyezve 0 = rs tiltva 1. bit WR: rst vezrl bit 1 = rsi ciklus indtsa. (Ezt a bitet a hardver trli, amikor az rs befejezdtt, azaz a WR bitet csak 1-be lltani lehet szoftverbl.) 0 = Az rsi ciklus befejezdtt 0. bit RD: Olvasst vezrl bit 1 = Olvassi ciklus indtsa. (Az olvass egy ciklust ignyel. Ezt a bitet a hardver trli, amikor az rs befejezdtt, azaz a RD bitet csak 1-be lltani lehet szoftverbl.) 0 = Nincs olvass
21
PIC16F84
EEPROM
A kt vezrlbit (RD s WR) indtja az rst s az olvasst. Ezeket a biteket nem lehet trlni szoftverbl, csak egybe lehet lltani ket. Ezek a bitek hardverbl trldnek, amikor az rs vagy az olvass befejezdik. A WR bit trlhetetlensge megakadlyozza, hogy az rsi mveletet vletlenl megszaktsuk. Az rsi mvelet vgrehajtshoz a WREN bitiet 1-be kell lltani. A tpfeszltsg bekeapcsolsakor a WREN bit trldik. A WRERR bit akkor ll be logikai 1-be, ha az rsi mveletet egy MCLR vagy egy WDT reset szaktotta meg norml mkds kzben. Ebben az esetben a kvetkez reset-kor a felhasznlnak kell ellenriznie a WRERR bitet, s hiba esetn elvgezni az jrarst. Az EEDATA s EEADR regiszter tartalma nem vltozik meg az MCLR s a WDT reset hatsra! Az rs befejezst az EEIF jelzbit adja tudomsunkra, amit hasznlhatunk megszaktsknt, vagy csak egyszeren a bit lekrdezsvel llapthatjuk meg az rs befejezst. Az EEIF bitet szoftverbl kell trlni. Az EECON2 regiszter fizikailag nem ltezik, olvasva nullt ad vissza. Ez a regiszter kizrlag az EEPROM rsi folyamathoz szksges.
Az EEPROM olvassa
Az olvassi folyamat a kvetkezkppen trtnik: a kiolvasand rekesz cmt az EEADR regiszterbe tltj, majd az RD bitet 1-be lltjuk. A kvetkez rajelciklusban a kiolvasott adat az EEDATA regiszterbe kerl. Az EEDATA regiszterben mindaddig megmarad az adat, amg fell nem rjuk, illetve egy jabb olvasst el nem indtunk.
Az EEPROM rsa
Az rs megkezdse eltt a felhasznlnak a berand adatot be kell tltenie az EEDATA regiszterbe, a cmet pedig az EEADR regiszterbe. Ezek utn a kvetkez lpseket kell vgrehajtani az rs rdekben:
IRAS BSF BCF BSF MOVLW MOVWF MOVLW MOVWF BSF BTFSS GOTO BCF BSF BCF STATUS,RP0 INTCON,GIE EECON1,WREN 55h EECON2 0AAh EECON2 EECON1,WR EECON1,EEIF NEM EECON1,EEIF INTCON,GIE STATUS,RP0 ;Bank1 ;Megszaktsok letiltsa ;rs engedlyezs ;Ktelezen.. ;..kell ;Ktelezen.. ;..kell ;rs indtsa ;Sikeres az rs? ;Nem ;Jelzbit trlse ;Megszaktsok engedlyezse ;Bank0
NEM
22
PIC16F84
CPU JELLEMZK
Konfigurcis bitek
A konfigurcis bitekkel klnbz kszlk konfigurcikat lehet belltani. Ezek a bitek a program memria 2007h cmn kezddnek. A 2000h cm a felhasznli memria terleten tl tallhat specilis tesztel/konfigurl memria terlet (2000h-3FFFh). Ez a terlet csak a felprogramozs sorn vlik hozzfrhetv.
R/R-u R/R-u R/R-u R/R-u R/R-u R/R-u R/R-u R/R-u R/R-u R/R-u R/R-u
PWRTE
R/R-u
WDTE
R/R-u
FOSC1
R/R-u
FOSC0
CP
CP
CP
CP
CP
CP
CP
CP
CP
CP
13.-4. bit
3.bit
PWRTE : Power-up Timer engedlyez bit 1 = Power-up Timer tiltva 0 = Power-up Timer engedlyezve
WDTE: Watchdog Timer engedlyez bit 1 = WDT engedlyezve 0 = WDT tiltva FOSC1-FOSC0: Oszcilltor kivlaszt bitek 11 = RC oszcilltor 10 = HS oszcilltor 01 = XT oszcilltor 00 = LP oszcilltor
2. bit
1.-0. bit
23
PIC16F84
CPU JELLEMZK
Oszcilltor konfigurcik
Oszcilltor tpusok
A PIC16F84 ngy klnbz oszcilltor mdban dolgozhat. A felhasznl kt konfigurcis bit segtsgvel (FOSC1-FOSC0) tudja kivlasztani a megfelel mdot:
LP - alacsony fogyaszts kvarc illetve kermia rezontoros oszcilltor XT - kvarc illetve kermia rezontoros oszcilltor HS - nagysebessg kvarc illetve kermia rezontoros oszcilltor RC
13. bra Megjegyzsek: 1. C1 s C2 rtkt lsd a kvetkez tblzatokban 2. AT metszs kristlynl az RS ellenllst be kell pteni (100 ..1 k)
Kapacitsok kermia rezontorhoz Md f C1,C2 455 kHz 47-100 pF XT 2 MHz 15-33 pF 4 MHz 15-33 pF 8 MHz 15-33 pF HS 10 MHz 15-33 pF
Kapacitsok kristlyoszcilltorhoz Md f C1,C2 32 kHz 68-100 pF LP 200 kHz 15-33 pF 100 kHz 100-150 pF XT 2 MHz 15-33 pF 4 MHz 15-33 pF 4 MHz 15-33 pF HP 10 MHz 15-33 pF
XT,LP vagy HS mdban lehetsg van kls rajel forrs hasznlatra is. A kls rajelet az OSC1/CLKIN kivezetsre kell ktni (14. bra).
14. bra 24
PIC16F84
CPU JELLEMZK
15. bra
16. bra
RC oszcilltor
Az idztsekre rzketlen kapcsolsokban kltsgkmls cljbl alkalmazhat az RC oszcilltor md. Az RC oszcilltor frekvencija fgg a tpfeszltsgtl, az REXT s CEXT rtktl, a hmrsklettl. A kls R s C elemek megvlasztsnl a kvetkez szempontokat figyelembe kell venni: ha az R rtke 4k-nl kisebb, az oszcilltor instabil lesz, illetve le is llhat nagy ellenlls rtkeknl (Rmax=1M) az oszcilltor zajrzkeny lesz az REXT rtke ezek miatt 4k s 100k kztt legyen annak ellenre, hogy az oszcilltor mkdik a CEXT nlkl is, rtke legalbb 20pF legyen nagy rtk kondenztort ne alkalmazzunk Az oszcilltor frekvencijt nagymrtkben befolysolja, hogy hogyan terveztk meg a nyomtatott ramkrt. Az OSC2/CLKOUT lbon az oszcilltor frekvencijnak nggyel leosztott rtke vehet le, amelyet felhasznlhatunk egyb ramkrk szmra. Figyelem: RC oszcilltor mdban, ha az OSC1/CLKIN kivezetsre kls rajalet kapcsolunk, akkor az tnkreteszi a mikrokontrollert. 25
PIC16F84
CPU JELLEMZK
Reset logika
A PIC16F84-nl a kvetkez reset llapotokat klnbztetjk meg:
Power-on Reset (POR) MCLR reset norml mkds esetn MCLR reset SLEEP (alv) llapotban WDT reset (norml mkds esetn) WDT Wake-up (SLEEP llapotban)
17. bra Az MCLR lb Schmitt-triggeres, hogy kiszrje a hamis reset impulzusokat. A reset impulzus minimlis szlessge 2s (katalgusadat). Nhny regiszterre nincs hatsa a reset feltteleknek, llapotuk ismeretlen a tpfeszltsg bekapcsolsa utn (POR), illetve az egyb reset felttelek nem vltoztatjk meg az llapott. A legtbb regiszter a reset hatsra (POR, MCLR vagy WDT reset norml mkds alatt, valamint MCLR reset SLEEP llapotban) bell alapllapotba. Ezekre a regiszterekre nincs hatssal a WDT reset, ha az alv llapotban kvetkezik be. A TO s PD bitek llapotnak lekrdezsvel megllapthat a ltrejtt reset fajtja (lsd ksbb).
26
CPU JELLEMZK
Reset tpusa
Power-on reset
MCLR reset norml mkds esetn MCLR reset alv llapotban WDT reset norml mkds esetn WDT reset alv llapotban breds alv mdbl megszakts hatsra
Sttusz regiszter 0001 1xxx 000u uuuu 0001 0uuu 0000 1uuu uuu0 0uuu uuu1 0uuu
Jelmagyarzat: u = nem vltozik, x = ismeretlen. Megjegyzs 1: Ha a GIE bit 1-be van lltva, akkor bredskor a PC-be a megszaktsi vektor (0004h) tltdik be. A klnbz reset tpusok hatsa bels regiszterekre (sszes): MCLR reset: -norml mkds Regiszter Cm Power-on Reset -SLEEP esetn WDT reset norml mkds esetn W xxxx xxxx uuuu uuuu INDF 00h ---- ------- ---TMR0 01h xxxx xxxx uuuu uuuu PCL 02h 0000h 0000h STATUS 03h 0001 1xxx 000q quuu(3) FSR 04h xxxx xxxx uuuu uuuu PORTA 05h ---x xxxx ---u uuuu PORTB 06h xxxx xxxx uuuu uuuu EEDATA 08h xxxx xxxx uuuu uuuu EEADR 09h xxxx xxxx uuuu uuuu PCLATH 0Ah ---0 0000 ---0 0000 INTCON 0Bh 0000 000x 0000 000u INDF 80h ---- ------- ---OPTION_REG 81h 1111 1111 1111 1111 PCL 82h 0000h 0000h STATUS 83h 0001 1xxx 000q quuu(3) FSR 84h xxxx xxxx uuuu uuuu TRISA 85h ---1 1111 ---1 1111 TRISB 86h 1111 1111 1111 1111 EECON1 88h ---0 x000 ---0 q000 EECON2 89h ---- ------- ---PCLATH 8Ah ---0 0000 ---0 0000 INTCON 8Bh 0000 000x 000 000u
breds SLEEP-bl: -megszakts hatsra -WDT tlcsorduls miatt uuuu uuuu ---- ---uuuu uuuu PC+1(2) uuuq quuu uuuu uuuu ---u uuuu uuuu uuuu uuuu uuuu uuuu uuuu ---u uuuu uuuu uuuu(1) ---- ---uuuu uuuu PC+1 uuuq quuu(3) uuuu uuuu ---u uuuu uuuu uuuu ---0 uuu ---- ------u uuuu uuuu uuuu(1)
Jelmagyarzat: u = nem vltozik, x = ismeretlen, - = nem ltez bit (olvasva 0-t ad), q = rtke felttelektl fgg. Megjegyzsek 1: Az a bit, amely az bredst okozta 1-be billen 2: Ha a GIE bit 1-be van lltva, akkor bredskor a PC-be a megszaktsi vektor (0004h) tltdik be. 3: Ezen regiszterek felttelektl fgg rtkei az elz tblzatban tallhatak. 27
PIC16F84
CPU JELLEMZK
18. bra Az R rtknek 40k-nl kisebbnek kell lennie, ugyanis az MCLR lb szivrgsi rama 5A. A D dida a kondenztor kislst biztostja, ha lekapcsoltuk a tpfeszltsget. Az R1 az MCLR lb maximlis ramt korltozza. A POR ramkr nem generl reset impulzust akkor, amikor a tpfeszltsg lecskken a kritikus rtk al.
19. bra
28
PIC16F84
CPU JELLEMZK
20. bra Az Oscillator Start-up Timer egy 1024 oszcilltor ciklusbl ll ksleltetst hoz ltre a PWRT ksleltets lejrta utn (19. bra, 20. bra). Ez a ksleltets biztostja a kristly oszcilltor vagy rezontor frekvencijnak stabilizldst. Az OST-nek csak XT, LP s HS mdban van szerepe a tpfeszltsg bekapcsolsakor, illetve SLEEP-bl val bredskor. Elfordulhat olyan eset, hogy a tpfeszltsg nagyon lassan nvekszik, s gy a TOST id lejrta utn sem ll be a tpfeszltsg (21. bra). Ilyen esetben mindig alkalmazzunk kls reset ramkrt (18. bra).
21. bra
A TO s a PD sttusz bitek
A tpfeszltsg bekapcsolsa utn lejtszd folyamatokat a 19-21-edik brkon kvethetjk nyomon. A bekapcsols sorn, miutn a tpfeszltsg elrte a megfelel a bels POR jel logikai 1-be vlt, s elindul a PWRT modul, melynek lejrta utn indul el az OST modul. A teljes time-out id az oszcilltor tpustol s a PWRTE konfigurcis bit belltstl fgg. A time-out id alakulst az albbi tblzatbl olvashatjuk ki: Oszcilltor konfigurci XT, HS, LP RC Bekapcsols utn PWRT PWRT engedlyezve tiltva 72 ms+1024TOSC 1024TOSC 72 ms breds alv mdbl 1024TOSC 29
PIC16F84
CPU JELLEMZK
A time-out letelte utn a bels reset jel inaktv lesz. Abban az esetben, ha a az MCLR lbon ennl hosszabb ideg van logikai 0, akkor a bels reset megsznse az MCLR lb logikai 1-be vltsval egyidben trtnik meg. Ezt ltalban akkor hasznljk, amikor tbb, prhuzamosan mkd kontrollert kell egymshoz szinkronizlni. A kvetkez tblzatban a TO s PD jelzbitek bellst lthatjuk a klnbz reset felttelek hatsra (ezen bitek llsbl tudhatjuk meg, hogy milyen tpus reset kvetkezett be):
TO 1 0 0 1
1
PD 1 1 0 1 0
Reset tpusa Power-on reset WDT reset norml mkds esetn WDT reset alv llapotban MCLR reset norml mkds esetn MCLR reset alv llapotban, illetve breds alv mdbl megszakts hatsra Brown-Out reset
Elfordulhat olyan eset a mkds sorn, hogy a tpfeszltsg lecskken a minimlis rtk al, de nem lesz 0, majd visszall a normlis rtkre. Ez az esemny hibs mkdshez vezethet. Clszer egy reset impulzussal kikszblni az ilyen brown-out esemny kros hatst (22. s 23. bra).
22. bra
23. bra
A 23. brn lthat ramkr esetben a reset akkor kvetkezik be, amikor a tpfeszltsg az UZ+0,6V al R1 cskken, a 24. brn pedig akkor, amikor az U t feszltg 0,6V al cskken. R1 + R 2 Megszaktsok
A PIC16F84-nek 4 megszaktsi forrsa ltezik: Kls megszakts azRB0/INT lbon TMR0 tlcsorduls Vltozs a PORTB fels 4 bitjn A bels EEPROM rsa befejezdtt
30
PIC16F84 CPU JELLEMZK A megszaktst vezrl regiszter (INTCON) tartalmazza az egyes megszaktsok jelzbitjeit. Ebben a regiszterben tallhatk mg az egyes megszaktsok engedlyez (maszk) bitjei is, valamint a globlis engedlyez bit. A bels EEPROM rsnak befejeztt jelz EEIF bit az EECON1 regiszterben tallhat! A globlis megszaktst engedlyez bit a GIE (INTCON<7>) engedlyezi (GIE=1) az sszes nem maszkolt megszaktst, illetve ha a GIE=0, akkor pedig mindentl fggetlenl az sszes megszaktst letiltja. Amikor egy megszaktsi krelem elfogadsra kerl, akkor a GIE bit 0 lesz, letiltva ezltal az sszes tbbi megszaktst. A PC tartalma (visszatrsi cm) elmentdik a verembe, majd feltltdik a 0004h megszaktsi vektorral. Mivel az sszes megszakts esetn a 0004h cmre fut a program, a felhasznlnak a jelzbitek tesztelsvel kell a megszakts forrst megllaptania:
ORG BTFSC GOTO BTFSC GOTO . . 4 INTCON,T0IF T0_INT_RUT INTCON,RBIF RB_CHANGE_INT_RUT
A kiszolgl rutinban a felhasznlnak trlnie kell a megfelel jelzbitet, mert ellenkez esetben llandan erre a rutinra futna a program. A megszaktsi rutinbl a RETFIE (nem RETURN) utastssal kell visszatrni, mert ez az az utasts, ami jra engedlyezi a megsztsokat (GIE=1). Kls megszaktsi esemny esetn a hats csak 3-4 utastsciklus utn jelentkezik, attl fggen, hogy az esemny mikor kvetkezett be. A megszaktsi logika:
Kls megszakts az INT/RB0 lbon Az RB0/INT lbon rkez megszakts lvezrelt: a megszakts a jel felfut lre trtnik, ha az INTEDG bit (OPTION_REG<6>) 1-be van lltva, illetve lefut lre kvetkezik be, ha 0-ba van lltva. Amikor a belltsnak megfelel vltozs trtnik az RB0/INT lbon, akkor az INTF bit 1-be billen (INTCON<1>). A megszaktst engedlyezni az INTE bit (INTCON<4>) 1-be billentsvel lehet, tiltst pedig a bit 0-ba lltsval lehet elrni. Az INTF jelzbitet szoftverbl, a megszaktst kiszolgl rutinban kell trlni, mieltt jra engedlyezdik a megszakts (RETFIE). Az RB0/INT lbon rkez megszakts felbresztheti a processzort alv mdbl (SLEEP), ha eltte az INTE bit 1-be volt lltva. TMR0 megszakts A TMR0 megszaktst a TMR0 regiszter tlcsordulsa (FFh00h). Tlcsordulskor a T0IF (INTCON<2>) 1-be vlt. A megszaktst engedlyezni/tiltani a T0IE (INTCON<5>) bit 1-be lltsval ill. trlsvel lehet.
31
CPU JELLEMZK
Amikor a PORTB<7:4> bitek valamelyikn vltozs trtnik az RBIF bit (INTCON<0>) 1-be vlt. A megszaktst engedlyezni/tiltani a RBIE (INTCON<3>) bit 1-be lltsval ill. trlsvel lehet. EEPROM megszakts Amikor a bels EEPROM adatmemria rsi ciklusa befejezdik az EEIF bit (EECON1<4>) 1-be vlt. A megszaktst engedlyezni/tiltani a EEIE (INTCON<6>) bit 1-be lltsval ill. trlsvel lehet.
Regiszterek mentse megszakts alatt
A megszakts folyamn csak a PC rtke mentdik el a verembe. Tipikus eset, amikor a felhasznl a kulcsfontossg regisztereket (pl. a W s a STATUS regiszter) el akarja menteni a megszakts alatt, ugyanis ezek tartalma a megszakts sorn fellrdhat. Ezt szoftverbl kell megoldani. A kvetkez mintaplda elmenti s visszalltja a STATUS s a W regiszterek tartalmt. A felhasznlnak definilni kell a W_TEMP s a STATUS_TEMP regisztereket, ahol tmenetileg troldnak az adatok. A plda a kvetkez lpseket tartalmazza: a) W regiszter mentse b) A STATUS regiszter mentse a STATUS_TEMP regiszterbe c) A megszaktsi rutin vgrehajtsa d) A STATUS (a bankvlaszt bitek is) regiszter visszalltsa e) A W regiszter visszalltsa
PUSH ISR_RUTIN MOVWF SWAPF MOVWF : : : : SWAPF MOVWF SWAPF SWAPF RETFIE W_TEMP STATUS,W STATUS_TEMP ;W mentse ; ;STATUS mentse
POP
A Watchdog Timer feladata a hibs szoftver mkds kvetkezmnyeinek kiszrse.A Watchdog Timer egy szabadonfut, a chip-re integrlt, kls elemek nlkl mkd RC oszcilltor. Ez az oszcilltor fggetlen az OSC1/CLKIN lbon lv RC oszcilltortl. Ez azt jelenti, hogy a WDT akkor is fut, ha a processzor alaposzcilltora lell, pl. alv zemmd (SLEEP). Norml mkds esetn a WDT tlcsordulsa (id-tlfutsa) RESET folyamatot vlt ki. A normlisan mkd szoftver trli a WDT-t mieltt tlcsordulna (CLRWDT utasts). Alv zemmd esetn a WDT tlcsordulsa felbreszti a processzort, s folytatdik a norml mkds. A Watchdog Timer mkdst a WDTE bittel (WDT_OFF az MPLAB-ban) lehet tiltani (lsd a konfigurcis biteknl). WDT tlfutsi id A WDT tlcsordulsi peridusnak nvleges ideje 18ms (eloszt nlkl). A tlfutsi idt befolysolja a hmrsklet, s a tpfeszltsg. Abban az esetben, ha ez az id tl rvid be lehet kapcsolni az utosztt, melynek maximlis osztsrtke 1:128 (OPTION_REG). Ebben az estben a TMR0-nak nem lesz 32
PIC16F84 CPU JELLEMZK elosztja, ugyanis a kett ugyanaz! Az oszt bekapcsolsval a tlfutsi id 2,3s-ig nvelhet. A CLRWDT s a SLEEP utasts trli a WDT-t s az utoszt regisztert. WDT RESET esetn a STATUS regiszter TO bitje 0-ba vlt, ebbl tudja megllaptani a felhasznl, hogy mi okozta a CPU Reset folyamatt. A WDT programozsnak szempontjai A tlfutsi id kiszmtsnl a legrosszabb esetet vegyk figyelembe (VDD=min., Hm.=max., max. WDT oszt).
Tpfeszltsg takarkos vagy alv (SLEEP) zemmd
A CPU energiatakarkos zemmdba, (alv mdba) kapcsolhat, majd ksbb felbreszthet. Alv md (SLEEP) Az energiatakarkos zemmd a SLEEP utastssal aktivlhat. Ez az utasts trli a Watchdog Timer-t, a PD bit (STATUS<3>) 0-ba billen, a TO bit (STATUS<4>) pedig 1-be vlt, a CPU oszcilltora lell, az I/O portok az utols llapotukat rzik. Akkor a minimlis az ramfelvtel alv mdban, ha az I/O portokmindegyikn vagy VDD, vagy VSS van, semmilyen kls elemet nem mkdtet a mikrovezrl. A nagyimpedancis kls csatlakozsokat ellenllsokkal H vagy L szintre kell hzni. A T0CKI bemenetet is VDD vagy VSS rtkre kell ktni, a PORTB felhzellenllsait be kell kapcsolni. A SLEEP llapot csak akkor tud kialakulni, ha az MCLR lb H szinten van. Itt jegyezzk meg, hogy a WDT Reset nem hzza 0-ba az MCLR lbat. breds alv llapotbl Az bredst a kvetkez esemnyek vlthatjk ki: 1. Kls reset az MCLR lbon 2. WDT tlcsorduls (ha a Watchdog Timer engedlyezve van) 3. Megszakts az RB0/INT lbon, vltozs a PORTB fels 4 lbn, EEPROM rsa befejezdtt A perifrik nem tudnak megszaktst generlni alv mdban, ugyanis ilyenkor nincs rajel. Az els esemny ( MCLR reset) jraindtja a processzort. A msodik esetben a program mkdse folytatdik. A TO s a PD tesztelsvel lehet megllaptani, hogy mi volt a reset oka. A PD bit 1-be billen a tpfeszltsg bekapcsolsakor, s 0 lesz ha a CPU alv mdba kerl. A TO bit 0-ba billen, ha a WDT tlcsordul, illetve, ha alv mdbl breszt a WDT. Amikor a SLEEP utasts vgrehajtdik a processzor a kvetkez utastst mg lehvja (PC+1). Ezt ellehvsnak (pre-fetch) nevezik. Ahhoz, hogy a processzort a megszakts felbreszthesse a megfelel egyedi engedlyez bitnek 1-nek kell lennie. A GIE bit nem befolysolja a magszaktsos breszts lehetsgt, csak annak kvetkezmnyeit. Ha GIE=0, akkor a SLEEP utasts vgrehajtsakor elre lehvott utastssal folytatdik a program. Abban az esetben, ha a GIE=1, akkor elbb vgrehajtja az elre lehvott megszaktst, majd a megszaktsi vektorcmre (0004h) ugrik. Ilyenkor clszer a SLEEP utasts utn egy NOP utastst elhelyezni a SLEEP llapotot kivlt programban. breds megszakts hatsra Amikor az ltalnos megszaktst engedlyezs tiltva van (GIE=0), s brmelyik megszaktsi forrs engedlyez bitje 1-es, s a megszakts krst jelz bit 1-be billent a kvetkez esemnyek valamelyike trtnik: 33
PIC16F84 CPU JELLEMZK Ha a megszakts a SLEEP utasts vgrehajtsa eltt trtnik, akkor a SLEEP utasts helyett egy NOP hajtdik vgre. Emiatt a WDT s a WDT utosztja nem trldik, a TO bit nem vlt 1-be, a PD bit pedig nem trldik. Ha a megszakts a SLEEP utasts vgrehajtsa utn trtnik, akkor a CPU azonnal felbred az alv llapotbl. A SLEEP utasts teljes egszben vgrehajtdik. Emiatt a WDT s a WDT utosztja trldik TO bit 1-be vlt, a PD bit pedig trldik. Mg ha a megszakts jelzbitjt mieltt kiadjuk a SLEEP utastst megtrtnhet, hogy a jelzbit 1-be billen a SLEEP utasts vgrehajtsa alatt. Hogy maghatrozzuk vajon a SLEEP utasts hajtdik-e vgre teszteljk a PD bitet. Ha a PD bit 1, akkor a SLEEP helyett NOP hajtdik vgre. Gondoskodjunk a WDT trlsrl a CLRWDT utastssal, mieltt a SLEEP utastst kiadnnk.
34
UTASTSKSZLET
14 bites kd lltott Megjegyzs MSB LSB jelzbitek Bjt orientlt fjlregiszter mveletek ADDWF f,d W s f sszeadsa 1 00 0111 dfff ffff C,DC,Z 1,2 ANDWF f,d W s f S kapcsolata 1 00 0101 dfff ffff Z 1,2 CLRF f f trlse 1 00 0001 1fff ffff Z 2 CLRW W trlse 1 00 0001 0xxx xxxx Z COMF f,d f komplementlsa 1 00 1001 dfff ffff Z 1,2 DECF f,d f cskkentse 1 00 0011 dfff ffff Z 1,2 DECFSZ f,d f cskkentse s ugrs, ha 0 1(2) 00 1011 dfff ffff 1,2,3 INCF f,d f nvelse 1 00 1010 dfff ffff Z 1,2 INCFSZ f,d f nvelse s ugrs, ha 0 1(2) 00 1111 dfff ffff 1,2,3 f s W VAGY kapcsolata IORWF 1 00 0100 dfff ffff Z 1,2 MOVF f,d f mozgatsa 1 00 1000 dfff ffff Z 1,2 MOVWF f W mozgatsa f-be 1 00 0000 1fff ffff NOP nincs mvelet 1 00 0000 0xx0 0000 RLF f,d forgats balra az tvitelbiten keresztl 1 00 1101 dfff ffff C 1,2 RRF f,d forgats jobbra az tvitelbiten keresztl 1 00 1100 dfff ffff C 1,2 SUBWF f,d W kivonsa az f-bl 1 00 0010 dfff ffff C,DC,Z 1,2 SWAPF f,d az f als s fels 4 bitjnek cserje 1 00 1110 dfff ffff 1,2 XORWF f,d W s f kizr-vagy kapcsolata 1 00 0110 dfff ffff Z 1,2 Bit orientlt fjlregiszter mveletek BCF f,b az f adott bitjnek trlse 1 01 00bb bfff ffff 1,2 BSF f,b az f adott bitjnek 1-be billentse 1 01 01bb bfff ffff 1,2 BTFSC f,b a bit tesztelse s ugrs, ha 0 1(2) 01 10bb bfff ffff 3 BTFSS f,b a bit tesztelse s ugrs, ha 1 1(2) 01 11bb bfff ffff 3 Konstans s vezrlstad mveletek ADDLW k konstans hozzadsa a W-hez 1 11 11x kkkk kkkk C,DC,Z ANDLW k W s egy konstans S kapcsolata 1 11 1001 kkkk kkkk Z CALL k szubrutin hvs 2 10 0kkk kkkk kkkk CLRWDT Watchdog Timer trlse 1 00 0000 0110 0100 TO, PD GOTO k ugrs cmkre 2 10 1kkk kkkk kkkk IORLW k W s egy konstans VAGY kapcsolata 1 11 1000 kkkk kkkk Z MOVLW k konstans mozgatsa a W-be 1 11 00xx kkkk kkkk RETFIE visszatrs a megszaktsbl 2 00 0000 0000 1001 RETLW k visszatrs szubrutinbl egy konstanssal 2 11 01xx kkkk kkkk RETURN visszatrs szubrutinbl 2 00 0000 0000 1000 SLEEP vlts alv mdba 1 00 0000 0110 0011 TO, PD SUBLW k W kivonsa egy konstansbl 1 11 110x kkkk kkkk C,DC,Z
XORLW k W s egy konstans kizr-vagy kapcsolata
Megjegyzsek: 1. Amikor a d helyn 1 (vagy f) ll, akkor az eredmny sajt magba rdik vissza (fjlregiszter), ha pedig a d helyn 0 (w) ll, akkor a w regiszterbe rdik be. 2. Abban az esetben, ha a mvelet a TMR0 regiszterre vonatkozik (d=1, vagy d=f), s az eloszt a TMR0-hoz van rendelve, akkor az eloszt trldik. 3. Amikor a programszmll (PC) vltozik az utasts kt ciklus hossz lesz. A msodik ciklusban a NOP utasts kerl vgrehajtsra.
35