Architektūra
PIC16F84A priklauso 8 bitų mikrovaldiklių klasei. Harvard architektūra yra naujesnė nei Von-Neumann. Ši technologija buvo kuriama norint pagreitinti mikrovaldiklio darbo greitį. Harvard architektūroje, duomenų ir adresų magistralės yra atskirtos. Dėl to pasidarė didesnis duomenų pralaidumas centriniame procesoriuje, ir dėl to pagreitėjo programos veikimas. Išskyrus programos ir duomenų atmintis, atsirado galimybė komandas rašyti ne aštuonių bitų žodžiais. PIC16F84A mikrovaldiklis naudoja keturiolikos bitų žodžius komandoms rašyti, tai leido vienai komandai užtekti vieno žodžio atminties. Taip pat tipiška Harvard architektūrai yra tai, kad visas komandas galima atlikti per vieną ciklą.
1 pav. Harvard ir Von-Neumann mikrovaldiklių architektūros
Mikrovaldikliai su Harvard architektūra dar vadinami „RISC mikrovaldikliai“. RISC tai „Reduced Instruction Set Computer“ (sumažinto komandų rinkinio kompiuteris). Mikrovaldikliai su Von-Neumann architektūra yra vadinami „CISC mikrovaldikliai“ (kompleksinio komandų rinkinio kompiuteris).
Nuo tada, kai PIC16F84A yra RISC mikrovaldiklis, tai reiškia, kad yra sumažinto komandų rinkinio kompiuteris, tiksliau 35 komandos. (pvz.: „Intel „ir „Motorola“ mikrovaldikliai turi šimtus komandų). Visos šios komandos yra įvykdomos viename cikle, išskyrus „jump“ ir „branch“ komandas. Dėl to galime sakyti, kad PIC16F84A dažniausiai pasiekia 2:1 kodo suspaudimą, 4:1 greičio rodiklius negu kiti 8 bitų mikrovaldikliai.
Veikimo principas
FLASH – atmintis, kurioje saugomas parašytos programos kodas. Atmintis yra pagaminta naudojant FLASH technologiją , todėl ji gali būti užprogramuota ir ištrinta daugiau nei vieną kartą, o tai padaro mikrovaldiklį tinkamą įrenginio plėtojimui ar programos atnaujinimams.
EEPROM – naudojama programos ar duomenų išsaugojimui. Dažniausiai naudojama išsaugojimui duomenims kurių negalima prarasti jei dingtų maitinimas (jungiama išoriškai).
RAM – informacijos atmintis, naudojama laikinam tarpinių duomenų saugojimui per programos vykdymą. RAM atmintyje saugomi visi tarpiniai ar laikini duomenys programos vykdymo metu.
2 pav. Mikrovaldiklio struktūrinė schema
PORTA ir PORTB yra fizinė sąsaja tarp mikrovaldiklio ir išorinio pasaulio. PORTA turi penkis įėjimus/išėjimus, PORTB turi aštuonis įėjimus/išėjimus.
FREE-RUN TIMER yra 8 bitų registras mikrovaldiklio viduje, kuris dirba nepriklausomai nuo programos. Kas keturis generatoriaus impulsus skaitliukas didina vienetu savo reikšmę tol, kol pasiekia maksimalią (255) reikšmę ir vėl pradeda skaičiuoti reikšmę nuo nulio. Taimeris gali būti naudojamas skaičiuoti laiką ir tai yra labai naudinga kai kuriuose prietaisuose.
CPU - centrinis procesorius, atliekantis pagrindinį vaidmenį mikrovaldiklyje. Jis apjungia visus sisteminius blokus, koordinuoja jų darbą bei vykdo vartotojo programą.
Išvadų aprašymas
PIC16F84A iš viso turi 18 kojų. Dažniausiai naudojamos DIP18 korpuso mikroschemos, bet galime rasti ir SMD (angl. Dual In Package) tipo, tai patogu kai montažinėje plokštėje negalime gręžti skylučių, ar tiesiog norime, kad montažinė plokštė užimtų mažiau vietos.
PIC16F84A kojų aprašymas:
Koja | Žymėjimas | I Funkcija | II Funkcija |
---|---|---|---|
1 | RA2 | Antras prievado A bitas | |
2 | RA3 | Trečias prievado A bitas | |
3 | RA4 | Ketvirtas prievado A bitas | TOCK1 Taimeris |
4 | MCLR | Atskirti programavimą; nuo paleidimo | |
5 | Vss | Maitinimo šaltinio žemė | |
6 | RB0 | Nulinis prievado B bitas. | Įėjimas priskiriamas kaip trūkis |
7 | RB1 | Pirmas prievado B bitas | |
8 | RB2 | Antras prievado B bitas | |
9 | RB3 | Trečias prievado B bitas | |
10 | RB4 | Ketvirtas prievado B bitas | |
11 | RB5 | Penktas prievado B bitas | |
12 | RB6 | Šeštas prievado B bitas | „Clock“ linija programavimo metu |
13 | RB7 | Septintas prievado B bitas | „Data“ linija programavimo metu |
14 | Vdd | +5 V maitinimo šaltinis | |
15 | OSC2 | Jungiamas kvarcinis (a) generatoriaus | |
16 | OSC1 | Jungiamas kvarcinis (b) generatoriaus | |
17 | RA2 | Antras prievado A bitas | |
18 | RA1 | Pirmas prievado A bitas |
Centrinis procesorius
Centrinis procesorius (CPU) yra mikrovaldiklio smegenys. Ši dalis yra atsakinga už teisingą instrukcijų (komandų) vykdymą.
Centrinis procesorius sujungia visas valdiklio dalis į bendrą visumą. Be abejo naudingiausia funkcija - programos kodo vykdymas. Kada programatorius įrašinėja programą, komandos yra paprasčiausios formos, kaip MOVLW 0x20. Kad mikrovaldiklis suprastų tą paprasčiausią komandą, tuos simbolius reikia paversti mašininiu kodu (vienetukai, nuliukai). Šį konvertavimą nuo raidžių iki mašininio kodo atlieka „vertėjai“ (translators), tokie kaip „assembler translator“ (žinomas kaip asembleris). Komandos tokiu būdu išvedamos iš programos atminties RAM ir centrinis procesorius turi jas atkoduoti. Tada mes galime pasirinkti iš visų lentelėje esančių komandų sudaryti programą kuri įvykdys norimą užduotį. Kadangi komandos gali savyje sudaryti priskyrimus, kurie reikalauja skirtingų duomenų perkėlimų iš vienos atminties ląstelės į kitą, iš atminties į prievadus, arba kitiems skaičiavimams, centrinis procesorius turi būti sujungtas su visomis mikrovaldiklio dalimis. Ši galimybė yra išspręsta sujungus dalis per duomenų ir adresų magistrales.
Aritmetinis loginis įrenginys yra atsakingas už operacijų atlikimą: sudėjimas, atėmimas, eiti į (kairę ar dešinę per registrą) ir loginės operacijos. Duomenų nešiojimas registro viduje yra vadinamas „shifting“. PIC16F84A sudaro 8 bitų aritmetinis loginis įtaisas ir 8 bitų darbinis registras.
Komandose su dviem operandais, vienas operandas yra saugomas į darbinį registrą (W registras), o kitas yra saugomas spec. registruose arba kaip konstanta. GPR (angl. General Purposes Registers) bendros paskirties registrai, ir SFR (angl. Special Function Registers) specialių funkcijų registrai. Komandose su vienu operandu, pastarasis yra saugomas darbiniame registre.
Prievadai
Terminas „prievadas“ (angl. port) reiškia grupę mikrovaldiklio kojų, kurios gali būti prieinamos vienu metu, arba į kurias mes galime užduoti norimą vienetų, nulių kombinaciją, arba nuskaityti jų turimą kombinaciją. Fiziškai, prievadas – tai registras mikrovaldiklio viduje, kuris yra prijungtas laidais prie mikroschemos kojų. Prievadai atstovauja fizinę sąsają tarp centrinio procesoriaus ir išorinio pasaulio. Mikrovaldiklis naudoja juos stebėti ar valdyti kitus komponentus ar įtaisus. Funkcionalumo prasme, kai kurios mikrovaldiklio kojos vaidina du vaidmenis (funkcijas): PortA4/TOCKI koja (3), ji tuo pačiu metu ir porto A ketvirtas bitas ir išorinis įėjimas nepriklausomam skaitliukui. Šių funkcijų pasirinkimą lemia registro sukonfigūravimas.
Visi prievado bitai gali būti nustatyti kaip įėjimai arba išėjimai, priklausomai nuo to ką ir kaip jungsime prie mikrovaldiklio. Kad nustatyti bitą kaip įėjimą ar išėjimą reikia įrašyti vienetų ir nulių kombinaciją į TRIS registrą. Jeigu TRIS registras yra loginis „1“, tai prievado bitas bus naudojamas kaip įėjimas, jei atvirkščiai tai bitas bus naudojamas kaip išėjimas. Kiekvienas prievadas turi savo TRIS registrą. Tai prievadas A turės TRISA registrą, prievadas B turės TRISB registrą. Bito kryptis taip pat gali būti pakeista komanda programoje.
PORTB ir TRISB
PORTB susietas su aštuoniomis kojomis. Atitinkamai, bito krypties registras bus TRISB. Įjungiant bitą TRISB registre atitinkamai PORTB prievade tas bitas bus įėjimas, ir išjungus bitą TIRSB registre atitinkamas bitas PORTB prievade bus išėjimas.
Kiekviena PORTB koja turi silpną vidinę palaikymo varžą (varža kuri nustato loginį vienetą), kuri gali būti aktyvuota atstatant septintą bitą RBPU OPTION registre. Šios palaikymo varžos automatiškai išjungiamos, kai prievado koja yra sukonfigūruota kaip išėjimas. Kai mikrovaldiklis startuoja, šios varžos yra išjungtos.
Keturios PORTB kojos, RB7:RB4 gali sukelti pertraukimą, kuris atsiranda kai pasikeičia jų statusas iš loginio „1“ į loginį „0“ ir atvirkščiai. Tiktai šios mikrovaldiklio kojos sukonfigūruotos kaip įėjimai gali įtakoti pertraukimą (jei bet kuri iš RB7:RB4 kojų yra sukonfigūruota kaip išėjimai, pertraukimo galima išvengti keičiantis loginėms reikšmėms.)
PORTA ir TRISA
PORTA turi penkias susietas kojas. Atsakingas už duomenų krypti registras yra TRISA registras. Kaip ir PORT B įjungiant bitą TRISA registre atitinkamai bus nukreipti duomenys prievado B registre. Loginis „1“ atitiks įėjimą, o loginis „0“ atitiks išėjimą.
Labai svarbu, kad PORTA koja RA4 yra tiktai įėjimas. Taip pat kita šios kojos funkcija yra ta, kad ji turi išorinį taimerio TMR0 įėjimą. Ar RA4 bus standartinis įėjimas ar įėjimas skaitliukui priklauso nuo T0CS bito registruose (TMR0 Clock Source Select bit). Ši koja leidžia taimeriui TMR0, kuris gali būti prijungtas nuo vidinio laikrodžio ar per impulsus gautus iš RA4/T0CKI kojos didinti reikšmę vienetu.
RA4 koja gali būti suprojektuota kaip išėjimas, bet dėl to reikia prijungti lygiagrečiai varžą prie +5 V, kad susidarytų loginis vienetas.
Atmintis
Atminties tvarkymas
PIC16F84A mikrovaldiklis turi dvi atskirtus atminties blokus: vienas skirtas duomenų saugojimui, o kitas skirtas programai. EEPROM atmintis su GPR ir SFR registrais RAM atmintyje laiko duomenų bloką, kol FLASH dirba su programos bloku.
Programos atmintis
Programos atmintis buvo sukurta pagal FLASH technologiją kuri leidžia perprogramuoti mikrovaldiklį daug kartų. Programos atminties dydis yra 1024 pozicijos su 14 bitų pločio eilutėmis.
Duomenų atmintis
Duomenų atmintis susideda iš EEPROM ir RAM atminčių. EEPROM atmintis sudeda iš 64 pozicijų po aštuonis bitus. Išjungus maitinimo šaltinį iš EEPROM atminties duomenys neišsitrina, juos galime ištrinti tik elektriškai. EEPROM nėra tiesiogiai adresuojama atmintis, bet prisijungiama netiesiogiai per EEADR ir EEDATA registrus. Kadangi EEPROM atmintis dažniausiai naudojama išsaugoti reikalingiems parametrams (pvz., temperatūros parodymus termoreguliatoriuje), yra griežtos procedūros, norint įrašyti į EEPROM atmintį ir išvengti atsitiktinių įrašymų. RAM atmintis užima duomenims vietą atminties žemėlapyje 68 atminties pozicijas. RAM atminties pozicijos dar vadinamos GPR registrais „General Purpose Registers“ pagrindinės paskirties registrai.
Pajungimas
LED diodai
Šviesos diodus galime prijungti dviem būdais: vienas, kad užsidegtų nuo loginio „0“, kitas, kad užsidegtų nuo loginio „1“.
Mygtukai
Mygtukus, kaip ir šviesos diodus, galime jungti dviem būdais. Tai priklauso nuo to, kokio signalo įėjime mums reikia. Žemiau pateiktoje schemoje mygtukai paduoda loginį „0“. Galime ir tiesiogiai per mygtukus paduoti +5 V TTL signalą, viskas priklausys nuo programos.
Relės
Relę taip pat galime valdyti su mikrovaldikliu. Jeigu relei reikalingas didesnis nei +5 V maitinimas, ją galime pajungti per stiprinimo pakopą. Jeigu valdoma schema yra galinga, patartina reles jungti per optines poras.
Septynių segmentų LED ekranas
LCD ekranas
LCD ekranai labai dažnai naudojami duomenims iš mikrovaldiklio išvesti. Integruotas simbolių procesorius leidžia lengvai 8 arba 4 bitų sąsaja greitai sugeneruoti simbolius.
Serial RS323 komunikacija
Panaudojus žemiau pateiktą schemą, yra galimybė gauti abipusį ryšį tarp kompiuterio ir mikrovaldiklio, siųsti bei gauti duomenis.
Asemblerio instrukcijos
Mnemonika, Operandai | Apibūdinimas | |
---|---|---|
BYTE-ORIENTED FILE REGISTER OPERATIONS | ||
ADDWF | f, d | Add W and f |
ANDWF | f, d | AND W with f |
CLRF | f | Clear f |
CLRW | - | Clear W |
COMF | f, d | Complement f |
DECF | f, d | Decrement f |
DECFSZ | f, d | Decrement f, Skip if 0 |
INCF | f, d | Increment f |
INCFSZ | f, d | Increment f, Skip if 0 |
IORWF | f, d | Inclusive OR W with f |
MOVF | f, d | Move f |
MOVWF | f | Move W to f |
NOP | - | No Operation |
RLF | f, d | Rotate Left f through Carry |
RRF | f, d | Rotate Right f through Carry |
SUBWF | f, d | Subtract W from f |
SWAPF | f, d | Swap nibbles in f |
XORWF | f, d | Exclusive OR W with f |
BIT-ORIENTED FILE REGISTER OPERATIONS | ||
---|---|---|
BCF | f, b | Bit Clear f |
BSF | f, b | Bit Set f |
BTFSC | f, b | Bit Test f,Skip if Clear |
BTFSS | f, b | Bit Test f, Skip if Set |
LITERAL AND CONTROL OPERATIONS | ||
ADDLW | k | Add literal and W |
ANDLW | k | AND literal with W |
CALL | k | Call subroutine |
CLRWDT | - | Clear Watchdog Timer |
GOTO | k | Go to address |
IORLW | k | Inclusive OR literal with W |
MOVLW | k | Move literal to W |
RETFIE | - | Return from interrupt |
RETLW | k | Return with literal in W |
RETURN | - | Return from Subroutine |
SLEEP | - | Go into standby mode |
SUBLW | k | Subtract W from literal |
XORLW | k | Exclusive OR literal with W |
Operandai | ||
f | Register file address (0x00 to 0x7F) | |
W | Working register (accumulator) | |
b | Bit address within an 8-bit file register | |
k | Literal field, constant data or label | |
d | Destination select; d = 0: store result in W,d = 1: store result in file register f. Default is d = 1 | |
PC | Program Counter | |
TO | Time-out bit | |
PD | Power-down bit |