Osmibitové mikrořadiče Microchip

Transkript

Osmibitové mikrořadiče Microchip
Osmibitové mikrořadiče Microchip
PIC16F1937
SPŠElit Dobruška, 2014
Ing Josef Hloušek
Tento text může být využíván pro podporu výuky předmětu Mikroprocesorové systémy ve 3. a
4. ročníku oboru Aplikace osobních počítačů a správa sítí. Text vychází z firemních dokumentů
Microchip [1] a [2], je výrazně zkrácen a je přizpůsoben úrovni výuky předmětu MPS.
Text neobsahuje popis řadiče LCD pro jeho složitost. Dále neobsahuje popis sériových
komunikačních kanálů (SPI, I2C, USART) a pomocných obvodů (zdroje referenčních napětí).
Zájemci mají možnost využít originální dokumentace [1].
Text předpokládá znalost číslicové techniky, logických obvodů, binární a hexadecimální číselné
soustavy a základní znalosti architektury mikrořadičů. Výhodou při studiu je znalost technické
angličtiny.
1
Obsah:
1. Osmibitové mikrořadiče Microchip . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.1. Základní sortiment mikrořadičů PIC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.2. Mikrořadič PIC16F1937, funkční schéma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2. Paměť pro program . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.1. Organizace paměti Flash . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.2. Čítač programu (PC, Program Counter) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.3. Zásobník (Stack) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3. Paměť RAM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.1. Paměť RAM, organizace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.2. Registry jádra (Core Registers) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.3. Registry SFR (Special Function Register) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.4. Registry PCL a PCLATH . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.5. STATUS registr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4. I / O porty . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.1. Digitální vstupy / výstupy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.2. Analogové vstupy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.3. Port A . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.4. Port B . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.5. Port C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.6. Port D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.7. Port E . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5. Konfigurační bity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6. Oscilátor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.1. Oscilátor vnější . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.2. Oscilátor na čipu s vnějšími součástkami . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.2.1. Oscilátor řízený krystalem nebo keramickým rezonátorem . . . . . . . . . .
6.2.2. Oscilátor řízený RC článkem, mód RC . . . . . . . . . . . . . . . . . . . . . . . . . .
6.3. Oscilátory vnitřní . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.4. Volba zdroje taktovacího kmitočtu, registr OSCCON . . . . . . . . . . . . . . . . . . . . . .
6.5. Taktování mikrořadiče při výpadku vnějšího oscilátoru, registr _CONFIG1 . . . . . .
7. AD převodník . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.1. Princip SAR AD převodníku . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.2. Blokové schéma AD převodníku . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.3. Konfigurace AD převodníku . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.3.1. Konfigurace vstupních Portů . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.3.2. Výběr vstupního kanálu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.3.3. Volba referenčního napětí . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.3.4. Nastavení vzorkovacího kmitočtu AD převodníku . . . . . . . . . . . . . . . . . .
7.3.5. Formátování výsledku AD převodu . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.4. Povolení AD převodníku . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.5. Spuštění AD převodu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.6. Ukončení AD převodu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8. Čítače a časovače . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8.1. Čítač / časovač TIMER0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8.2. Čítač / časovač TIMER1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8.3. Čítač / časovač TIMER2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9. Modul CCP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9.1. Režim vzorkování . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9.2. Režim porovnání . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9.3. Režim PWM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2
4
4
5
7
7
8
8
9
9
10
10
16
16
16
19
20
21
23
25
26
27
29
32
32
32
32
32
33
33
35
36
36
36
37
37
38
38
38
39
39
39
40
41
41
43
45
47
47
47
48
10. Přerušovací systém PIC16F917 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10.1. Zdroje přerušení . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10.2. Obsluha přerušení . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10.3. Vnější přerušení . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10.4. Přerušení od čítače Timer 0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10.5. Přerušení od změny logické úrovně na pinech Portu B . . . . . . . . . . . . . . . . . . .
10.6. Přerušení od periférií . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11. Časovač WDT (Watchdog Timer) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12. Reset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12.1. Power On Reset (POR), Reset po připojení napájecího napětí . . . . . . . . . . . . .
12.2. Brown Out Reset (BOR), Reset po poklesu napájecího napětí pod danou mez
12.3. Reset aktivací pinu /MCLR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12.4. Reset přeplněním časovače WDT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12.5. Reset programem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12.6. Reset přetečením / podtečením zásobníku Stack . . . . . . . . . . . . . . . . . . . . . . . .
12.7. Reset po ukončení zápisu do paměti Flash . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12.8. Časovač Power-Up . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
13. Instrukční soubor mikrořadičů PIC16F . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
13.1. Struktura instrukce . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
13.2. Přehled instrukcí . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
13.3. Formát instrukcí . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
13.4. Popis instrukcí . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
14. Assembler MPASM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
14.1. Syntaktická pravidla assembleru MPASM . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
14.1.1. Příkazový řádek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
14.1.2. Label (návěští) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
14.1.3. Mnemonics (instrukce, direktivy) . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
14.1.4. Operandy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
14.1.5. Komentář . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
14.2. Konstanty . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
14.3. Oprerátory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
14.4. Direktivy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
15. Elektrické parametry mikrořadičů PIC16(L)F . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
16. Vyráběné typy mikrořadičů PIC16F1937 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
17. Literatura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3
50
50
50
51
51
52
53
55
56
56
56
57
57
57
58
58
58
59
59
60
62
63
73
73
73
73
73
74
74
74
74
75
78
79
79
1. Osmibitové mikrořadiče Microchip
1.1. Základní sortiment mikrořadičů PIC
PIC 16F a PIC 18F jsou mikrořadiče s architekturou Harvard, vyráběné firmou Microchip od
roku 1975 na základě mikrořadičů General Instruments. Původně originální, ale nepříliš
ambiciózní PIC (Programmable Interface Controller), byly velmi rychle vylepšovány a cca od
roku 2001 je firma Microchip vedoucí světovou firmou na trhu osmibitových mikrořadičů. Do
roku 2008 firma Microchip vyrobila 6 000 000 000 mikrořadičů. Mikrořadiče PIC byly první, které
v roce 1993 obsahovaly na čipu paměť EEPROM. Zvláštností mikrořadičů PIC je délka
programovacího slova, které je 12, 14 nebo 16 bitů, každé slovo obsahuje vždy kompletní
instrukci. Výpočetní výkon je až 10 MIPS. Jasnou výhodou je velmi široká nabídka nejrůznější
variant pro velký okruh zákazníků, široký sortiment periférií včetně sběrnic USB a CAN a řadičů
displejů LCD.
V České republice jsou nejrozšířenější čtyři řady mikrořadičů PIC :
Základní řada (Base-Line) s pamětí Flash až 2KB, instrukční soubor má 33 instrukcí, jako
periferie je na čipu osmibitový čítač, osmibitový A/D převodník a komparátor. Výpočetní výkon
je 5 MIPS.
Střední řada (Mid-Range) s pamětí Flash až 8KB, instrukční soubor má 35 instrukcí, jako
periferie jsou na čipu osmibitové a šestnáctibitové čítače, desetibitový A/D převodník,
komparátor, sériové komunikační kanály UART, SPI, I2C. Všechny typy mají rozhraní ICSP pro
sériové programování osazených mikrořadičů na desce tištěného spoje a rozhraní ICD pro
ladění programů v paměti Flash. Výpočetní výkon je 5 MIPS.
Vylepšená střední řada (Enhanced Mid-Range) s pamětí Flash až 16KB, instrukční soubor má
49 instrukcí, jako periferie jsou na čipu osmibitové a šestnáctibitové čítače, desetibitový A/D
převodník, komparátor, sériové komunikační kanály UART, SPI, I2C. Všechny typy mají
rozhraní ICSP pro sériové programování osazených mikrořadičů na desce tištěného spoje a
rozhraní ICD pro ladění programů v paměti Flash. Výpočetní výkon je 8 MIPS.
Elitní řada (High-End) s pamětí Flash až 64KB, instrukční soubor má 83 instrukcí, jako periferie
jsou na čipu osmibitové a šestnáctibitové čítače, dvanáctibitový A/D převodník, komparátor,
sériové komunikační kanály UART, SPI, I2C, USB. Všechny typy mají rozhraní ICSP pro
sériové programování osazených mikrořadičů na desce tištěného spoje a rozhraní ICD pro
ladění programů v paměti Flash. Výpočetní výkon je až 16 MIPS.
Porovnání hlavních parametrů osmibitových mikrořadičů Microchip :
řada
Flash
základní 2 KB
střední
8 KB
vylepšená 16 KB
elitní
64 KB
RAM
144 B
368 B
1.5 KB
4 KB
instrukce
33 (12bit)
35 (14bit)
49 (14bit)
83 (16bit)
výkon čítače ADC UART
5 MIPS
1
8 bit
-5 MIPS
3
10 bit
1
8 MIPS
5
10 bit
1
16 MIPS
5
12 bit
2
I/O
4 - 36
4 - 54
6 - 55
16 - 70
f
20 MHz
20 MHz
32 MHz
40 MHz
Každá řada obsahuje desítky typů a variant, všechny uvedené hodnoty jsou nejvyšší, které
každá řada nabízí.
Rozsah nabídky mikrořadičů ilustruje ukázka pouzder.
4
1.2. Mikrořadič PIC16F1937, funkční schéma [1]
CPU (Central Processor Unit), osmibitové jádro mikrořadiče, 49 instrukcí, jedno přerušení,
maximální taktovací kmitočet 32 MHz, výpočetní výkon 8MIPS,
Program Flash Memory paměť pro uložení programu, 8K slov o délce 14 bitů. Na každé
z paměťových míst je možno uložit úplnou instrukci sestávající z kódu instrukce a až dvou
operandů
RAM sada osmibitových registrů rozdělená do 32 bank po 128 registrech. Některé registry jsou
využívány procesorem a perifériemi (SFR – Special Function Registers), ostatní registry nemají
přesné určení a mohou být využity programem (GPR – General Purpose Registers).
EEPROM 256 bytů paměti pro konstanty a data
PORTs čtyři osmibitové a jeden čtyřbitový programovatelné vstupně / výstupní porty
Timers čtyři osmibitové a jeden šestnáctibitový čítače / časovače
ADC 10ti bitový A/D převodník
SR Latch R-S klopný obvod
Comparators dva analogové komparátory
LCD řadič 24 segmentů displeje LCD
EUSART synchronní / asynchronní kanál UART
CCPs dva moduly Capture / Compare / PWM. Po připojení k čítačům umožňují časování
vnějších událostí a generování signálu PWM
ECCPs tři moduly Enhanced Capture / Compare / PWM
MSSP modul sériové komunikace. Může být konfigurován jako SPI nebo I2C
Timing generation oscilátory
5
ALU Arithmetic Logic Unit
W Reg (Working Register), střadač, je součástí sady registrů RAM
Program Counter, 15bitový čítač programu, může vytvořit až 215 = 32768 adres
16-Level Stack, zásobník, 16 hardwarových 15bitových registrů. Do zásobníku je ukládán
obsah čítače programu při větvení programu nebo při přerušení. Registry nejsou součástí ani
paměti RAM ani Flash.
Flash Program Memory paměť pro program
Configuration Flash registry pro trvalé nastavení některých konfiguračních parametrů
Instruction Reg registr pro uložení právě vykonávané instrukce
Instruction Decode and Control dekodér instrukce
STATUS Reg registr stavu ALU, je součástí RAM
FSR Reg (File Select Registers) dva 16bitové registry pro přístup do paměti, jsou součástí RAM
Reset, časovače a detektory pro generování stavu RESET při zapnutí napájecího napětí
(Power On Reset), při poklesu napájecího napětí (Brown Out Reset), při nestandardním chodu
programu (Watch Dog Timer) a při startu nebo výpadku oscilátoru.
6
2. Paměť pro program
2.1. Organizace paměti Flash
Paměť pro uložení programu je organizována jako sada 14 bitových registrů.
Mikrořadiče PIC16F1xxx mají 15bitový čítač
programu (PC, Program Counter), který může
adresovat až 32KB slov.
Na
čipu
mikrořadiče
PIC16F1937
je
implementováno 8KB paměti Flash. Všechny
instrukce mají délku jednoho slova a v paměti tedy
může být uloženo až 8K instrukcí.
Paměť je dělena do čtyř stránek po 2K. Při skocích
mezi stránkami paměti musí být nastaveno pět
nejvyšších bitů registru PC zápisem do registru
PCLATH (Program Counter Latch High). Při
postupném vykonávání instrukcí obsah registru PC
přejde přes hranice stránek samovolně. Paměť
menší než 2K nevyžaduje stránkování.
Registr PC je složen z registrů PCL (Program Counter Least Significant Byte) a PCH. Detaily o
registru PC viz článek 2.2.
Některé typy mikrořadičů mají menší paměť než 8K. Je-li v takovém mikrořadiči adresována
paměť, která není na čipu implementována, je adresována paměť se „shodnou“ adresou na
nižší stránce, např. místo adresy 17FFh je adresována paměť 07FFh.
První instrukce uživatelského programu by měla být uložena na adrese 0005h nebo vyšší.
Signál RESET vždy nastaví obsah PC na hodnotu 0000h, kde je uložen Reset Vector.
Potvrzené přerušení nastavuje obsah PC na adresu 0004h, na této adrese je uložen Interrupt
Vector. O požadavcích na přerušení a jejich obsloužení viz článek 10.Přerušovací systém.
Stack (zásobník) je tvořen šestnácti 15bitovými hardwarovými registry. Zásobník je používán při
instrukcích CALL a RETURN pro uložení a vyzvednutí návratových adres. Funkce zásobníku je
popsána v článku 2.3. Zásobník.
7
2.2. Čítač programu (PC, Program Counter)
Čítač programu má délku 15 bitů a je složen z 8bitového registru PCL (Program Counter Least
Significant Byte) a 7bitového hardwarového registru PCH.
Registr PCL je součástí sady registrů (viz paměť RAM), má adresu 02h a je určen pro zápis i
čtení. Jakýkoliv zápis do registru PCL zapíše také obsah registru PCLATH do registru PCH.
Registr PCH není uživateli přístupný, jeho obsah se mění zápisem do registru PCLATH
Registr PCLATH (Program Counter Latch High) je součástí sady registrů RAM, adresa je 0Ah.
Obsah registru PC je nulován signálem RESET.
Obsah registru PC je ukládán na vrchol zásobníku (Stack Level 1) při instrukcích call a callw, tj.
při volání podprogramu.
Obsah registru PC je naplněn z vrcholu zásobníku při instrukcích return , retfie a retlw, tj. při
návratu z podprogramu nebo z obslužné rutiny přerušení.
Registr PCL je naplněn obsahem registru WREG při instrukci callw.
Nižších 11 bitů registru PC je naplněno 11bitovou adresou, kterou obsahují instrukce call pro
volání podprogramu a goto pro nepodmíněný skok. Tak jsou umožněny skoky programu uvnitř
jedné stránky o velikosti 2K. Pro skoky na jinou stránku je nutno nastavit i nejvyšší čtyři bity
registru PC zápisem bitů < 6 : 3 > do registru PCLATH.
2.3. Zásobník (Stack)
Zásobník je tvořen šestnácti 15bitovými hardwarovými registry, které nejsou součástí žádné
paměti. Zásobník umožňuje až šestnáct větvení programu instrukcemi call nebo obsluhou
přerušení.
Do zásobníku je ukládán obsah čítače programu PC jako návratová adresa při instrukci call a
callw, obsahem zásobníku je naplněn čítač programu při instrukcích return , retfie a retlw. Do
zásobníku je možno zapsat nejvýše šestnáct adres, další zápis přepíše adresu, která byla
zapsána jako první.
Mikrořadiče PIC16F1xxx nemají žádné instrukce typu PUSH nebo POP pro uložení do
zásobníku nebo pro vyzvednutí ze zásobníku.
Programátor má informaci o naplnění zásobníku v registru STKPTR (Stack Pointer), který je
inkrementován instrukcemi call, callw při přerušení a dekrementován instrukcemi return, retlw a
retfie. Programátor musí zajistit, aby do zásobníku bylo zapisováno nejvýše osmkrát, poté musí
následovat čtení zásobníku. Nedodržení tohoto pravidla má za následek chybnou funkci
programu.
8
3. Paměť RAM
3.1. Paměť RAM, organizace
Paměť pro uložení dat je implementována jako statická RAM, rozdělená do 32 bank. Každá
banka obsahuje 128 osmibitových registrů.
V paměti jsou čtyři typy registrů:
Core registry (registry jádra)
Prvních 12 adres v každé bace (x00h až x0Bh a x80h až x8Bh, x=0….F) je obsazeno registry
jádra. Všech 12 registrů je ve všech bankách shodných.
SFR registry (Special Function Register) jsou využívány procesorem a periferiemi, nejvýše 20
jich je implementováno na adresách 0Ch až 1Fh (8Ch až 9Fh) v každé bance.
GPR registry (General Purpose Register) jsou k dispozici uživateli pro manipulaci s daty.
V bance může být nejvýše 80 GPR registrů, jsou implementovány na adresách 20h až 6Fh
(A0h až EFh) v každé bance. Signál RESET nemění obsah registrů GPR, po zapnutí
napájecího napětí je tedy stav registrů GPR náhodný.
Common registry jsou na šestnácti nejvyšších adresách v každé bance. Z adresy těchto
registrů je respektováno pouze 7 nejnižších bitů, takže jsou vždy adresovány registry
s adresami 070h až 07Fh v Bance 0, které jsou tak přístupné ze všech Bank.
Umístění registrů v prvních čtyřech bankách paměti RAM :
Mikrořadič PIC16F1937 má implementováno 512 registrů RAM.
Aktivní banka je vybrána zápisem čísla banky (0 až 31) do registru BSR (Bank Select Register).
Každý z registrů je přístupný buď přímo instrukcí a jejím operandem nebo nepřímo
prostřednictvím dvou 16bitových registrů FSR0H:FSR0L a FSR1H:FSR1L (File Select Register).
9
3.2. Registry jádra (Core Registers)
Dvanáct registrů jádra je shodných v každé z 32 bank.
adresa
00h
01h
02h
03h
04h
05h
06h
07h
08h
09h
0Ah
0Bh
symbol
INDF0
INDF1
PCL
STATUS
FSR0L
FSR0H
FSR1L
FSR1H
BSR
WREG
PCLATH
INTCON
název
Indirect Addressing via FSR0H:FSR0L
Indirect Addressing via FSR1H:FSR1L
Program Counter Least Significant Byte
Status Register
File Select Register, Addres 0 Low Pointer
File Select Register, Addres 0 High Pointer
File Select Register, Addres 1 Low Pointer
File Select Register, Addres 1 High Pointer
Bank Select Register
Working Register
Program Counter Latch High
Interrupt Control Register
stav po POR
xxxx xxxx
xxxx xxxx
0000 0000
- - -1 1000
0000 0000
0000 0000
0000 0000
0000 0000
- - -0 0000
0000 0000
- 000 0000
0000 0000
3.3. Registry SFR (Special Function Register)
Bank 0
adresa
0Ch
0Dh
0Eh
0Fh
10h
11h
12h
13h
14h
15h
16h
17h
18h
19h
1Ah
1Bh
1Ch
1Dh
1Eh
1Fh
název
Port A Register
Port B Register
Port C Register
Port D Registers
Port E Register
Peripheral Interrupt Request Register 1
Peripheral Interrupt Request Register 2
Peripheral Interrupt Request Register 2
reserved
TMR0
Timer 0 Module Register
TMR1L
Timer 1 Module Low byte
TMR1H
Timer 1 Module High byte
T1CON
Timer 1 Control Register
T1GCON Timer 1 Gate Control Register
TMR2
Timer 2 Module register
PR2
Timer 2 Period Register
T2CON
Timer 2 Control Register
reserved
CPSCON0 Capacitive Sensing Control Register 0
CPSCON1 Capacitive Sensing Control Register 1
symbol
PORTA
PORTB
PORTC
PORTD
PORTE
PIR1
PIR2
PIR3
0 = hodnota bitu po POR (Power On Reset) je 0
1 = hodnota bitu po POR je 1
x = hodnota bitu po POR není definována, může být 0 nebo 1
- = bit není využíván
10
stav po POR
xxxx xxxx
xxxx xxxx
xxxx xxxx
xxxx xxxx
- - - - xxxx
0000 0000
0000 00- 0
- 000 0-0 xxxx
xxxx
xxxx
0000
0000
0000
1111
-000
xxxx
xxxx
xxxx
00- 0
0000
0x00
1111
0000
0- - - 0000
- - - - 0000
Bank 1
adresa symbol
TRISA
8Ch
TRISB
8Dh
TRISC
8Eh
TRISD
8Fh
TRISE
90h
PIE1
91h
PIE2
92h
PIE3
93h
94h
OPTION_REG
95h
PCON
96h
WDTCON
97h
OSCTUNE
98h
OSCCON
99h
OSCSTAT
9Ah
ADRESL
9Bh
ADRESH
9Ch
ADCON0
9Dh
ADCON1
9Eh
9Fh
název
Port A Tri-State Register
Port B Tri-State Register
Port C Tri-State Register
Port D Tri-State Registers
Port E Tri-State Register
Peripheral Interrupt Enable Register 1
Peripheral Interrupt Enable Register 2
Peripheral Interrupt Enable Register 3
reserved
Option Register
Power Control Register
Watch Dog Control Register
Oscillator Tuning Register
Oscillator Control Register
Oscillator Status Register
A/D Result Register Low byte
A/D Result Register High byte
A/D Control Register 0
A/D Control Register 1
reserved
Bank 2
adresa symbol
název
10Ch LATA
PortA Data Latch
10Dh LATB
PortB Data Latch
10Eh LATC
PortC Data Latch
LATD
10Fh
PortD Data Latch
LATE
110h
PortE Data Latch
CM1CON0
111h
Comparator 1 Control Register 0
CM1CON1
112h
Comparator 1 Control Register 1
CM2CON0
113h
Comparator 2 Control Register 0
CM2CON1
114h
Comparator 2 Control Register 1
CMOUT
115h
Comparator Output Register
BORCON
116h
Brown-Out Reset Control Register
FVRCON
117h
Fixed Voltage Reference Control Register
DACCON0
118h
Voltage Reference Control Register 0
DACCON1
119h
Voltage Reference Control Register 1
11Ah SRCON0
S-R Latch Control Register 0
11Bh SRCON1
S-R Latch Control Register 1
11Ch
reserved
11Dh APFCON
Alternate Pin Function Control Register
11Eh
reserved
11Fh
reserved
0 = hodnota bitu po POR (Power On Reset) je 0
1 = hodnota bitu po POR je 1
x = hodnota bitu po POR není definována, může být 0 nebo 1
q = hodnota bitu po Reset je závislá na podmínkách
- = bit není využíván
11
stav po POR
1111 1111
1111 1111
1111 1111
1111 1111
- - - - 1111
0000 0000
0000 00-0
- 000 0- 01111
00- - - 01
- - 00
0011
10q0
xxxx
xxxx
- 000
0000
1111
11qq
0110
0000
1- 00
0q00
xxxx
xxxx
0000
- 000
stav po POR
xxxx xxxx
xxxx xxxx
xxxx xxxx
xxxx xxxx
- - - - -xxx
0000 -100
0000 -- 00
0000 -100
0000 -- 00
- - - - -- 00
1- - - - - -q
0q00 0000
000- 00- 0
- - -0 0000
0000 0000
0000 0000
- 000 0000
Bank 3
adresa
18Ch
18Dh
18Eh
18Fh
190h
191h
192h
193h
194h
195h
196h
197h
198h
199h
19Ah
19Bh
19Ch
19Dh
19Eh
19Fh
symbol
ANSELA
ANSELB
ANSELD
ANSELE
EEADRL
EEADRH
EEDATL
EEDATH
EECON1
EECON2
RCREG
TXREG
SPBRGL
SPBRGH
RCSTA
TXSTA
BAUDCON
název
PortA Analog Select Register
PortB Analog Select Register
reserved
PortD Analog Select Register
PortE Analog Select Register
EEPROM/Flash Addres Register Low Byte
EEPROM/Flash Addres Register High Byte
EEPROM/Flash Read Data Register Low Byte
EEPROM/Flash Read Data Register High Byte
EEPROM Control Register 1
EEPROM Control Register 2
reserved
reserved
USART Receive Data Register
USART Transmit Data Register
Select Period Baud Rate Generator Low
Select Period Baud Rate Generator High
Receive Status and Control Register
Transmit Status and Control Register
Baud Rate Control Register
stav po POR
- -11 1111
- -11 1111
1111
- - - 0000
- 000
xxxx
- -xx
0000
0000
1111
-111
0000
0000
xxxx
xxxx
x000
0000
0000
0000
0000
0000
0000
0000
01- 0
0000
0000
0000
0000
000x
0010
0- 00
Bank 4
adresa
20Ch
20Dh
20Eh
20Fh
210h
211h
212h
213h
214h
215h
216h
217h
218h
219h
21Ah
21Bh
21Ch
21Dh
21Eh
21Fh
symbol
WPUB
WPUE
SSPBUF
SSPADD
SSPMSK
SSPSTAT
SSPCON1
SSPCON2
SSPCON3
název
reserved
Weak Pull-Up PortB Register
reserved
reserved
Weak Pull-Up PortE Register
Sychronous Serial Port Data Buffer
Sychronous Serial Port Address
Sychronous Serial Port Mask Register
Sychronous Serial Port Status
Sychronous Serial Port Control Register 1
Sychronous Serial Port Control Register 2
Sychronous Serial Port Control Register 3
reserved
reserved
reserved
reserved
reserved
reserved
reserved
reserved
0 = hodnota bitu po POR (Power On Reset) je 0
1 = hodnota bitu po POR je 1
x = hodnota bitu po POR není definována, může být 0 nebo 1
- = bit není využíván
12
stav po POR
1111 1111
- - - xxxx
0000
1111
0000
0000
0000
0000
1- - xxxx
0000
1111
0000
0000
0000
0000
Bank 5
adresa
28Ch
28Dh
28Eh
28Fh
290h
291h
292h
293h
294h
295h
296h
297h
298h
299h
29Ah
29Bh
29Ch
29Dh
29Eh
29Fh
symbol
CCPR1L
CCPR1H
CCP1CON
PWM1CON
CCP1AS
PSTR1CON
CCPR2L
CCPR2H
CCP2CON
PWM2CON
CCP2AS
PSTR2CON
CCPTMRS0
CCPTMRS1
název
reserved
reserved
reserved
reserved
reserved
Capture/Compare/PWM Register 1 Low
Capture/Compare/PWM Register 1 High
Capture/Compare/PWM Control Register 1
Enhanced PWM Control Register 1
CCP 1 Auto-Shutdown Control Register
PWM Steering Control Register 1
reserved
Capture/Compare/PWM Register 2 Low
Capture/Compare/PWM Register 2 High
Capture/Compare/PWM Control Register 2
Enhanced PWM Control Register 2
CCP 2 Auto-Shutdown Control Register
PWM Steering Control Register 2
PWM Timer Selection Control Register 0
PWM Timer Selection Control Register 1
stav po POR
xxxx
xxxx
0000
0000
0000
- - - 0
xxxx
xxxx
0000
0000
0000
0001
xxxx
xxxx
0000
0000
0000
- - - 0
0000
- - - -
xxxx
xxxx
0000
0000
0000
0001
0000
- - 00
Bank 6
adresa
30Ch
30Dh
30Eh
30Fh
310h
311h
312h
313h
314h
315h
316h
317h
318h
319h
31Ah
31Bh
31Ch
31Dh
31Eh
31Fh
symbol
CCPR3L
CCPR3H
CCP3CON
PWM3CON
CCP3AS
PSTR3CON
CCPR4L
CCPR4H
CCP4CON
CCPR5L
CCPR5H
CCP5CON
název
reserved
reserved
reserved
reserved
reserved
Capture/Compare/PWM Register 3 Low
Capture/Compare/PWM Register 3 High
Capture/Compare/PWM Control Register 3
Enhanced PWM Control Register 3
CCP31 Auto-Shutdown Control Register
PWM Steering Control Register31
reserved
Capture/Compare/PWM Register 4 Low
Capture/Compare/PWM Register 4 High
Capture/Compare/PWM Control Register 4
reserved
Capture/Compare/PWM Register 5 Low
Capture/Compare/PWM Register 5 High
Capture/Compare/PWM Control Register 5
reserved
0 = hodnota bitu po POR (Power On Reset) Reset je 0
1 = hodnota bitu po POR je 1
x = hodnota bitu po POR není definována, může být 0 nebo 1
- = bit není využíván
13
stav po POR
xxxx
xxxx
0000
0000
0000
- - - 0
xxxx
xxxx
0000
0000
0000
0001
xxxx xxxx
xxxx xxxx
- - 00 0000
xxxx xxxx
xxxx xxxx
- - 00 0000
Bank 7
adresa
38Ch
38Dh
38Eh
38Fh
390h
391h
392h
393h
394h
395h
396h
397h
398h
399h
39Ah
39Bh
39Ch
39Dh
39Eh
39Fh
symbol
IOCBP
IOCBN
IOCBF
Bank 8
adresa symbol
40Ch
40Dh
40Eh
40Fh
410h
411h
412h
413h
414h
TMR4
415h
PR4
416h
T4CON
417h
418h
419h
41Ah
41Bh
41Ch TMR6
41Dh PR6
41Eh T6CON
41Fh
název
reserved
reserved
reserved
reserved
reserved
reserved
reserved
reserved
Interrupt On-Change Positive Edge Register
Interrupt On-Change Negative Edge Register
Interrupt On-Change Flag Register
reserved
reserved
reserved
reserved
reserved
reserved
reserved
reserved
reserved
název
reserved
reserved
reserved
reserved
reserved
reserved
reserved
reserved
reserved
Timer 4 Module Register
Timer 4 Period Register
Timer 4 Control Register
reserved
reserved
reserved
reserved
Timer 6 Module Register
Timer 6 Period Register
Timer 6 Control Register
reserved
0 = hodnota bitu po POR (Power On Reset) Reset je 0
1 = hodnota bitu po POR je 1
x = hodnota bitu po POR není definována, může být 0 nebo 1
- = bit není využíván
14
stav po POR
0000 0000
0000 0000
0000 0000
stav po POR
0000 0000
1111 1111
- 000 0000
0000 0000
1111 1111
- 000 0000
Bank 15
adresa symbol
78Ch
78Dh
78Eh
78Fh
790h
LCDCON
791h
LCDPS
792h
LCDREF
793h
LCDCST
794h
LCDRL
795h
796h
797h
LCDSE0
798h
LCDSE1
799h
79Ah LCDSE2
79Bh
79Ch
79Dh
79Eh
79Fh
7A0h LCDDATA0
7A1h LCDDATA1
7A2h LCDDATA2
LCDDATA3
7A3
LCDDATA4
7A4
LCDDATA5
7A5
LCDDATA6
7A6
LCDDATA7
7A7
LCDDATA8
7A8
LCDDATA9
7A9
LCDDATA10
7AA
LCDDATA11
7AB
7AC
7AD
7AE
7AF
název
reserved
reserved
reserved
reserved
reserved
LCD Control Register
LCD Phase Register
LCD Reference Voltage Control Register
LCD Contrast Control Register
LCD Reference Ladder Register
reserved
reserved
LCD Segment Enable Register 0
LCD Segment Enable Register 1
LCD Segment Enable Register 2
reserved
reserved
reserved
reserved
reserved
LCD Data Register 0
LCD Data Register 1
LCD Data Register 2
LCD Data Register 3
LCD Data Register 4
LCD Data Register 5
LCD Data Register 6
LCD Data Register 7
LCD Data Register 8
LCD Data Register 9
LCD Data Register 10
LCD Data Register 11
reserved
reserved
reserved
reserved
0 = hodnota bitu po POR (Power On Reset) Reset je 0
1 = hodnota bitu po POR je 1
x = hodnota bitu po POR není definována, může být 0 nebo 1
- = bit není využíván
15
stav po POR
0000000
000- - - 0000
0011
0000
000- 000
- 000
0000 0000
0000 0000
0000 0000
xxxx
xxxx
xxxx
xxxx
xxxx
xxxx
xxxx
xxxx
xxxx
xxxx
xxxx
xxxx
xxxx
xxxx
xxxx
xxxx
xxxx
xxxx
xxxx
xxxx
xxxx
xxxx
xxxx
xxxx
3.4. Registry PCL a PCLATH
PCL
R/W
bit 7
0
----
R/W
bit 6
0
R/W
bit 6
0
Program Counter Least Significant Byte
R/W
R/W
R/W
R/W
R/W
bit 5
bit 4
bit 3
bit 2
bit 1
0
0
0
0
0
PCLATH
R/W
bit 5
0
Program Counter Latch High
R/W
R/W
R/W
bit 4
bit 3
bit 2
0
0
0
adresa
R/W
bit 0
0
02 h
adresa
R/W
bit 1
0
R/W
bit 0
0
0A h
Čítač programu je 15bitový. Registr PCL slouží jako nejnižších 8 bitů čítače programu. Horní
byte čítače programu není přímo přístupný, pro zápis horních 7 bitů čítače programu slouží
registr PCLATH.
Funkce obou registrů je popsána v článku 2.2.
3.5. STATUS registr
-
-
STATUS Status Register
R
R
R/W
NOT_TO NOT_PD
Z
1
1
0
adresa
R/W
DC
0
R/W
C
0
03 h
NOT_TO Time-Out Status Bit
0 = naplněn interval časovače WDT (Watch Dog Timer)
1 = po zapnutí napájení nebo po instrukcích clrwdt nebo sleep
NOT_PD Power Down Status Bit
0 = po instrukci sleep
1 = po zapnutí napájení nebo po instrukci clrwdt
Z Zero Flag Bit
0 = výsledek logické nebo aritmetické operace není 0
1 = výsledek logické nebo aritmetické operace je 0
DC Decimal Carry Flag Bit
0 = výsledek operace bez přenosu ze 4 bitu
1 = výsledek operace s přenosem ze 4 bitu
Pro instrukce addwf , addlw , subwf , sublw. Při výpůjčce (Borrow) je bit DC reverzní.
C Carry Flag Bit
0 = výsledek operace bez přenosu z nejvyššího bitu
1 = výsledek operace s přenosem z nejvyššího bitu
Pro instrukce addwf , addlw , subwf , sublw. Při výpůjčce (Borrow) je bit C reverzní.
STATUS registr může být použit jako cílový registr v mnoha instrukcích. Výsledek zápisu může
být však neočekávaný. Např. instrukce clrf STATUS nastaví příznak Z na hodnotu 1. Stav
registru po instrukci je potom 0 0 0 u u 1 u u (u= hodnota bitu se nemění). Proto se doporučuje
používat pro nastavení registru STATUS jen instrukce bcf , bsf , movwf a swapf , které
neovlivňují žádné příznaky.
16
4. I / O porty
Mikrořadič PIC16F1937 má čtyři osmibitové (RA, RB, RC, RD) a jeden čtyřbitový (RE) vstupně /
výstupní porty. Většina I/O pinů je multiplexována pro použití vnitřními periferiemi (čítače, A/D
převodník, komparátory, sériové komunikační kanály, LCD řadič). Pokud jsou periferie
povoleny, jim přiřazené piny nemohou být použity pro jiný účel.
V pouzdru DIP 40 je uspořádání pinů podle obrázku
Sedm specifických vstupů a výstupů může být obsahem registru APFCON přepínáno mezi
dvěma piny.
Po stavu Reset (bit registru APFCON = 0) jsou specifikované signály vyvedeny na piny podle
tabulky. Nastavením příslušného bitu na hodnotu 1 je signál vyveden na alternativní pin
(poslední řádek tabulky).
------
APFCON Alternative Pin Function Control Register
R/W
R/W
R/W
R/W
R/W
R/W
CCP3SEL T1GSEL P2BSEL SRNQSEL C2OUTSEL SSSEL
0
0
0
0
0
0
RE0
RB5
RC0
RA5
RA5
RA5
RB5
RC4
RD2
RA0
RA0
RA0
Funkce zmíněných signálů a pinů je popsána v příslušných kapitolách.
17
adresa
R/W
CCP2SEL
0
RC1
RB3
11D h
Bank 2
po Reset
bit=1
Ke každému portu jsou přiřazeny tři standardní registry (x = A, B, C, D, E):
TRISx registry nastavují směr signálu (vstup / výstup)
PORTx registry obsahují úroveň signálů na pinech
LATx registry jsou používány při operacích „read-modify-write“ se signály na pinech
Některé porty mají jeden až tři další registry:
ANSELx registry pro nastavení pinů jako analogové vstupy
WPUx registry pro připojení Pull-Up rezistrorů na digitální vstupy
INLVLx registry pro sledování úrovně vstupních signálů
18
4.1. Digitální vstupy / výstupy
Všechny piny mohou být konfigurovány jako digitální. Každému portu je přiřazen registr PORTx,
směr přenosu dat nastavuje registr TRISx (x=A,B,C,D,E).
Nastavením bitu v registru TRISx na hodnotu 1 je odpovídající pin PORTx nastaven jako vstup.
Čtení registru PORTx vrací aktuální hodnoty každého pinu.
Nastavením bitu v registru TRISx na hodnotu 0 je odpovídající pin PORTx nastaven jako
výstup. Zápis do registru PORTx připojí hodnotu každého bitu na odpovídající pin.
Příklad konfigurace portu D jako digitální I/O
banksel
ANSELD
clrf
ANSELD
; port D digitální I/O
banksel
TRISD
movlw
0Ch
; 0000 1100=>Wreg
movwf
TRISD
; nastaví piny 3 : 2 jako vstupy a ostatní piny jako výstupy
Po signálu Reset jsou všechny piny všech portů nastaveny jako vstupy.
Ke každému registru PORTx je přiřazen registr LATx (Data Latch register).
Zápis do registru LATx má stejný výsledek jako zápis do registru PORTx.
Čtení registru LATx vrací hodnotu uloženou v registru LATx.
Zjednodušené schéma I/O Portu:
19
4.2. Analogové vstupy
Po signálu Reset jsou piny portů RA, RB, RD a RE, které jsou multiplexovány na analogové
periferie (AD převodník, komparátory), nastaveny jako analogové vstupy.
Pro nastavení digitálních vstupů musí být nakonfigurovány registry ANSELx
ANSELA PortA Analog Select Register
adresa
--R/W
R/W
R/W
R/W
R/W
R/W
18C h
--ANSA5 ANSA4
ANSA3
ANSA2
ANSA1 ANSA0
Bank 3
--1
1
1
1
1
1
--AN4
AN3/Vref+ AN2/VrefAN1
AN0
ADC
--CPS7
CPS6
CapSens
--C1IN+
C2IN+
C12IN1- C12IN0- Comparator
ANSA5 : ANSA0 Analog Select Bit
0 = pin konfigurován jako digitální vstup / výstup
1 = pin konfigurován jako analogový vstup, bit registru TRISA musí být nastaven na 1
----4.3. Port A
---
-------
ANSELB
R/W
ANSB5
1
AN13
CPS5
-
PortB Analog Select Register
R/W
R/W
R/W
R/W
ANSB4
ANSB3
ANSB2
ANSB1
1
1
1
1
AN11
AN9
AN8
AN10
CPS4
CPS3
CPS2
CPS1
C12IN2- C12IN3-
adresa
R/W
ANSB0
1
AN12
CPS0
-
18D h
Bank 3
ADC
CapSens
Comparator
ANSB5 : ANSB0 Analog Select Bit
0 = pin konfigurován jako digitální vstup / výstup
1 = pin konfigurován jako analogový vstup, bit registru TRISB musí být nastaven na 1
R/W
ANSD7
1
CPS15
R/W
ANSD6
1
CPS14
ANSELD
R/W
ANSD5
1
CPS13
PortD Analog Select Register
R/W
R/W
R/W
ANSD4
ANSD3
ANSD2
1
1
1
CPS12
CPS11
CPS10
adresa
R/W
ANSD1
1
CPS9
R/W
ANSD0
1
CPS18
18F h
Bank 3
CapSens
ANSD7 : ANSD0 Analog Select Bit
0 = pin konfigurován jako digitální vstup / výstup
1 = pin konfigurován jako analogový vstup, bit registru TRISD musí být nastaven na 1
-----
-----
ANSELE
-----
PortE Analog Select Register
--R/W
--ANSE2
--1
--AN7
adresa
R/W
ANSE1
1
AN6
R/W
ANSEB0
1
AN5
ANSE2 : ANSE0 Analog Select Bit
0 = pin konfigurován jako digitální vstup / výstup
1 = pin konfigurován jako analogový vstup, bit registru TRISE musí být nastaven na 1
20
190 h
Bank 3
ADC
4.3. Port A
Port A je osmibitový obousměrný port. Směr přenosu dat nastavuje registr TRISA.
Nastavením bitu v registru TRISA na hodnotu 1 je odpovídající pin portu A nastaven jako vstup
a hodnota pinu je uložena do odpovídajícího bitu registru PORTA.
Nastavením bitu v registru TRISA na hodnotu 0 je odpovídající pin portu A nastaven jako výstup
a hodnota odpovídajícího bitu registru LATA je vyvedena na pin.
R/W
RA7
x
R/W
RA6
x
PORTA Port A Register
R/W
R/W
R/W
R/W
RA5
RA4
RA3
RA2
x
x
x
x
R/W
TRISA7
1
R/W
TRISA6
1
TRISA Tri-State A Register
R/W
R/W
R/W
R/W
TRISA5 TRISA4 TRISA3 TRISA2
1
1
1
1
adresa
R/W
RA1
x
R/W
RA0
x
R/W
TRISA1
1
R/W
TRISA0
1
R/W
LATA1
x
R/W
LATA0
x
0C h
Bank 0
adresa
8C h
Bank 1
TRISA < 7 : 0 > Port A Tri-State Control Bit
0 = pin konfigurován jako výstup
1 = pin konfigurován jako vstup
R/W
LATA7
x
R/W
LATA6
x
LATA Data Latch A Register
R/W
R/W
R/W
R/W
LATA 5 LATA4
LATA3
LATA2
x
x
x
x
adresa
10C h
Bank 2
Po signálu Reset jsou všechny piny portu A nastaveny jako analogové vstupy, aktivní jsou
analogové periferie, které jsou povoleny. Sortiment analogových signálů je v tabulce.
Pro nastavení digitálních vstupů / výstupů musí být nakonfigurován registr ANSELA
ANSELA PortA Analog Select Register
adresa
--R/W
R/W
R/W
R/W
R/W
R/W
18C h
--ANSA5 ANSA4
ANSA3
ANSA2
ANSA1 ANSA0
Bank 3
--1
1
1
1
1
1
--AN4
AN3/Vref+ AN2/VrefAN1
AN0
ADC
--CPS7
CPS6
CapSens
--C1IN+
C2IN+
C12IN1- C12IN0- Comparator
ANSA5 : ANSA0 Analog Select Bit
0 = pin konfigurován jako digitální vstup / výstup
1 = pin konfigurován jako analogový vstup, bit registru TRISA musí být nastaven na 1
Jestliže na některém pinu jsou výstupy
více povolených periférií, aktuální řízení
pinu
převezme
periferie
s nejvyšší
prioritou podle tabulky.
Nejvyšší priorita vpravo, nejnižší vlevo.
21
Registry, jejichž obsah má vliv na funkci Portu A. Bity v šedých polích Port A nevyužívá.
22
4.4. Port B
Port B je osmibitový obousměrný port. Směr přenosu dat nastavuje registr TRISB.
Nastavením bitu v registru TRISB na hodnotu 1 je odpovídající pin portu B nastaven jako vstup
a hodnota pinu je uložena do odpovídajícího bitu registru PORTB.
Nastavením bitu v registru TRISB na hodnotu 0 je odpovídající pin portu B nastaven jako výstup
a hodnota odpovídajícího bitu registru LATB je vyvedena na pin.
PORTB Port B Register
adresa
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
0D h
RB7
RB6
RB5
RB4
RB3
RB2
RB1
RB0
Bank 0
x
x
x
x
x
x
x
x
TRISB Tri-State B Register
adresa
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
8D h
TRISB7 TRISB6 TRISB5 TRISB4 TRISB3 TRISB2 TRISB1 TRISB0
Bank 1
1
1
1
1
1
1
1
1
TRISB < 7 : 0 > Port B Tri-State Control Bit
0 = pin konfigurován jako výstup
1 = pin konfigurován jako vstup
LATB Data Latch B Register
R/W
R/W
R/W
R/W
R/W
R/W
LATB7
LATB6
LATB 5
LATB4
LATB3
LATB2
x
x
x
x
x
x
adresa
R/W
LATB1
x
R/W
LATB0
x
10D h
Bank 2
Po signálu Reset jsou všechny piny portu B nastaveny jako analogové vstupy, aktivní jsou
analogové periferie, které jsou povoleny. Sortiment analogových signálů je v tabulce.
Pro nastavení digitálních vstupů / výstupů musí být nakonfigurován registr ANSELB
ANSELB PortB Analog Select Register
adresa
--R/W
R/W
R/W
R/W
R/W
R/W
18D h
--ANSB5
ANSB4
ANSB3
ANSB2
ANSB1
ANSB0
Bank 3
--1
1
1
1
1
1
--AN13
AN11
AN9
AN8
AN10
AN12
ADC
--CPS5
CPS4
CPS3
CPS2
CPS1
CPS0
CapSens
--C12IN2- C12IN3Comparator
ANSB5 : ANSB0 Analog Select Bit
0 = pin konfigurován jako digitální vstup / výstup
1 = pin konfigurován jako analogový vstup, bit registru TRISB musí být nastaven na 1
Na všechny piny portu B jsou připojeny Pull-Up rezistory, které definují hodnotu 1 na
nepřipojeném vstupu. Pull-Up rezistory jsou konfigurovány v registru WPUB.
R/W
WPUB7
1
R/W
WPUB6
1
WPUB Weak Pull-Up Port B Register
R/W
R/W
R/W
R/W
WPUB5 WPUB4 WPUB3 WPUB2
1
1
1
1
adresa
R/W
WPUB1
1
R/W
WPUB0
1
20D h
Bank 4
WPUB7 : WPUB0 Weak Pull-Up Port B Bit
0 = Pull-Up rezistor odpojen
1 = Pull-Up rezistor připojen
Pull-Up rezistory jsou odpojeny při konfiguraci pinů jako výstup.
Bit NOT_WPUEN v registru OPTION_REG musí být nulován pro povolení Pull-Up rezistorů.
23
Pin RB0 může být konfigurován jako vstup INT pro vstup vnějšího signálu přerušení nastavením
bitu INTE v registru INTCON.
Všechny piny Portu B mohou být v registrech IOCBN a IOCBP nakonfigurovány jako zdroj
vnějšího přerušení na sestupnou nebo nástupnou hranu signálu na příslušném pinu.
Piny RB7 a RB6 Portu B jsou využívány pro signály rozhraní ICSP (In Circuit Serial Programing)
při ladění programu.
Jestliže na některém pinu jsou výstupy více povolených
periférií, aktuální řízení pinu převezme periferie s nejvyšší
prioritou podle tabulky.
Nejvyšší priorita vpravo, nejnižší vlevo.
Registry, jejichž obsah má vliv na funkci portu B. Bity v šedých polích port B nevyužívá.
24
4.5. Port C
Port C je osmibitový obousměrný port. Směr přenosu dat nastavuje registr TRISC.
Nastavením bitu v registru TRISC na hodnotu 1 je odpovídající pin portu C nastaven jako vstup
a hodnota pinu je uložena do odpovídajícího bitu registru PORTC.
Nastavením bitu v registru TRISC na hodnotu 0 je odpovídající pin portu C nastaven jako výstup
a hodnota odpovídajícího bitu registru LATC je vyvedena na pin.
PORTC Port C Register
adresa
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
0E h
RC7
RC6
RC5
RC4
RC3
RC2
RC1
RC0
Bank 0
x
x
x
x
x
x
x
x
R/W
TRISC7
1
R/W
TRISC6
1
TRISC Tri-State C Register
R/W
R/W
R/W
R/W
TRISC5 TRISC4 TRISC3 TRISC2
1
1
1
1
adresa
R/W
TRISC1
1
R/W
TRISC0
1
R/W
LATC1
x
R/W
LATC0
x
8E h
Bank 1
TRISC < 7 : 0 > Port C Tri-State Control Bit
0 = pin konfigurován jako výstup
1 = pin konfigurován jako vstup
R/W
LATC7
x
R/W
LATC6
x
LATC Data Latch C Register
R/W
R/W
R/W
R/W
LATC 5
LATC4
LATC3
LATC2
x
x
x
x
adresa
10E h
Bank 2
Jestliže na některém pinu jsou výstupy více
povolených periférií, aktuální řízení pinu
převezme periferie s nejvyšší prioritou podle
tabulky.
Nejvyšší priorita vpravo, nejnižší vlevo.
Registry, jejichž obsah má vliv na funkci portu C. Bity v šedých polích port C nevyužívá.
.
25
4.6. Port D
Port D je osmibitový obousměrný port. Směr přenosu dat nastavuje registr TRISD.
Nastavením bitu v registru TRISD na hodnotu 1 je odpovídající pin portu D nastaven jako vstup
a hodnota pinu je uložena do odpovídajícího bitu registru PORTD.
Nastavením bitu v registru TRISD na hodnotu 0 je odpovídající pin portu D nastaven jako výstup
a hodnota odpovídajícího bitu registru LATD je vyvedena na pin.
PORTD Port D Register
adresa
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
0F h
RD7
RD6
RD5
RD4
RD3
RD2
RD1
RD0
Bank 0
x
x
x
x
x
x
x
x
R/W
TRISD7
1
R/W
TRISD6
1
TRISD Tri-State D Register
R/W
R/W
R/W
R/W
TRISD5 TRISD4 TRISD3 TRISD2
1
1
1
1
adresa
R/W
TRISD1
1
R/W
TRISD0
1
8F h
Bank 1
TRISD < 7 : 0 > Port D Tri-State Control Bit
0 = pin konfigurován jako výstup
1 = pin konfigurován jako vstup
R/W
LATD7
x
R/W
LATD6
x
LATD Data Latch D Register
R/W
R/W
R/W
R/W
LATD 5 LATD4
LATD3
LATD2
x
x
x
x
adresa
R/W
LATD1
x
R/W
LATD0
x
10F h
Bank 2
Po signálu Reset jsou všechny piny portu D nastaveny jako analogové vstupy, aktivní jsou
analogové periferie, které jsou povoleny. Sortiment analogových signálů je v tabulce.
Pro nastavení digitálních vstupů / výstupů musí být nakonfigurován registr ANSELD
ANSELD PortD Analog Select Register
adresa
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
18F h
ANSD7
ANSD6
ANSD5
ANSD4
ANSD3
ANSD2
ANSD1
ANSD0
Bank 3
1
1
1
1
1
1
1
1
CPS15
CPS14
CPS13
CPS12
CPS11
CPS10
CPS9
CPS18 CapSens
ANSD7 : ANSD0 Analog Select Bit
0 = pin konfigurován jako digitální vstup / výstup
1 = pin konfigurován jako analogový vstup, bit registru TRISD musí být nastaven na 1
Jestliže na některém pinu jsou výstupy více povolených periférií,
aktuální řízení pinu převezme periferie s nejvyšší prioritou podle
tabulky.
Nejvyšší priorita vpravo, nejnižší vlevo.
26
Registry, jejichž obsah má vliv na funkci portu D. Bity v šedých polích port D nevyužívá.
4.7. Port E
Port E je čtyřbitový obousměrný port. Směr přenosu dat nastavuje registr TRISE.
Nastavením bitu v registru TRISE na hodnotu 1 je odpovídající pin portu E nastaven jako vstup
a hodnota pinu je uložena do odpovídajícího bitu registru PORTE.
Nastavením bitu v registru TRISE na hodnotu 0 je odpovídající pin portu E nastaven jako výstup
a hodnota odpovídajícího bitu registru LATE je vyvedena na pin.
PORTE Port E Register
adresa
----R
R/W
R/W
R/W
10 h
RE3
RE2
RE1
RE0
----Bank 0
----x
x
x
x
TRISE Tri-State E Register
adresa
-----R/W
R/W
R/W
90 h
TRISE2 TRISE1 TRISE0
-----Bank 1
-----1
1
1
TRISE < 2 : 0 > Port E Tri-State Control Bit
0 = pin konfigurován jako výstup
1 = pin konfigurován jako vstup
Pin RE 3 je vždy konfigurován jako vstup, jeho funkci určuje konfigurační bit MCLR
_CONFIG1 (článek 5).
LATE Data Latch E Register
-----R/W
R/W
R/W
LATE2
LATE1
LATE0
----------x
x
x
v registru
adresa
110 h
Bank 2
Po signálu Reset jsou všechny piny portu E nastaveny jako analogové vstupy, aktivní jsou
analogové periferie, které jsou povoleny. Sortiment analogových signálů je v tabulce.
Pro nastavení digitálních vstupů / výstupů musí být nakonfigurován registr ANSELE
-----
-----
ANSELE
-----
PortE Analog Select Register
--R/W
--ANSE2
--1
--AN7
adresa
R/W
ANSE1
1
AN6
R/W
ANSEB0
1
AN5
ANSE2 : ANSE0 Analog Select Bit
0 = pin konfigurován jako digitální vstup / výstup
1 = pin konfigurován jako analogový vstup, bit registru TRISE musí být nastaven na 1
27
190 h
Bank 3
ADC
Jestliže na některém pinu jsou výstupy více povolených
periférií, aktuální řízení pinu převezme periferie s nejvyšší
prioritou podle tabulky.
Nejvyšší priorita vpravo, nejnižší vlevo.
Registry, jejichž obsah má vliv na funkci portu E. Bity v šedých polích port E nevyužívá.
28
5. Konfigurační bity
Mikrořadiče PIC16F1937 mají implementovány dva šestnáctibitové registry, jejichž obsah
nastavuje některé parametry mikrořadiče. Registry jsou umístěny v paměti Flash na adresách
8007h a 8008h, nejsou běžně dostupné programátorovi. Jejich obsah je možné změnit jen při
programování paměti Flash.
Obsah konfiguračních registrů může být nastavován v programu direktivou __config nebo může
být nastaven v prostředí MPLAB IDE.
15
-1
14
-1
7
/CP
1
6
MCLRE
1
_CONFIG1 Config 1 Register High Byte
13
12
11
10
9
FCMEN
IESO /CLKOUTEN BOREN1 BOREN0
1
1
1
1
1
_CONFIG1 Config 1 Register Low Byte
5
4
3
2
/PWRTE WDTE1
WDTE0
FOSC2
1
1
1
1
adresa
8
/CPD
1
8007 h
Flash
adresa
1
FOSC1
1
0
FOSC0
1
8007 h
Flash
FCMEN
Fail-Safe Clock Monitor Enable bit – povolení záložního oscilátoru
1 = záložní oscilátor povolen, realizován symbolem _FCMEN_ON
0 = záložní oscilátor zakázán, realizován symbolem _FCMEN_OFF
IESO Internal / External Switchover bit – přepínání vnitřní / vnější oscilátor
1 = přepínání oscilátorů povoleno, realizován symbolem _IESO_ON
0 = přepínání oscilátorů zakázáno, realizován symbolem _IESO_OFF
/CLKOUTEN Clock Out Enable bit – výstup oscilátoru
1 = výstup oscilátoru zakázán, pin RA6 má funkci I/O, realizován symbolem _CLKOUTEN_OFF
0 = výstup oscilátoru povolen na pinu RA6/CLKOUT, realizován symbolem _CLKOUTEN_ON
BOREN1 : BOREN0
Brown-out Reset bit – Reset při poklesu napájecího napětí
11 = Brown-out Reset povolen, symbol _BOREN_ON
10 = Brown-out Reset povolen, zakázán v režimu Sleep, symbol _BOREN_NSLEEP
01 = Brown-out Reset nastaven bitem SBOREN v registru BORCON, symbol _BOREN_SBODEN
00 = Brown-out Reset zakázán, symbol _BOREN_OFF
/CPD Code Protection Data bit – ochrana paměti pro data proti zápisu
1 = paměť dat není chráněna proti přepsání, symbol _CPD_OFF
0 = paměť dat je chráněna proti přepsání, symbol _CPD_ON
/CP Code Protection bit – ochrana paměti pro program proti zápisu
1 = paměť programu není chráněna proti přepsání, symbol _CP_OFF
0 = paměť programu je chráněna proti přepsání, symbol _CP_ON
MCLRE
MCLR pin function bit – funkce pinu RE3 / MCLR
Když bit LVP=0 tak:
1 = pin RE3 je konfigurován jako vstup /MCLR (Manual Clear), symbol _MCLRE_ON
0 = pin RE3 je digitální vstup pro všeobecné použití, symbol _MCLRE_OFF
Když bit LVP=1 tak je bit MCLRE ignorován
29
/PWRTE
Power-Up Timer Enable bit – zpoždění programu při zapnutí napájení
1 = zpoždění zakázáno, symbol _PWRTE_OFF
0 = zpoždění povoleno, symbol _PWRTE_ON
WDTE1 : WDTE0 Watchdog Timer Enable bit – povolení časovače WDT
11 = časovač WDT povolen, symbol _WDTE_ON
10 = časovač WDT povolen a zakázán ve Sleep, symbol _WDTE_NSLEEP
01 = časovač WDT nastaven bitem SWDTEN v registru WDTCON, symbol _WDTE_SWDTEN
00 = časovač WDT zakázán, symbol _WDTE_OFF
V ladícím režimu na MPLAB IDE musí být WDT zakázán
FOSC2 : FOSC0 Oscillator Selection bits – výběr oscilátoru
111 = ECH External Clock High, vstup na pinu RA7, symbol _FOSC_ECH
110 = ECM External Clock Medium, vstup na pinu RA7, symbol _FOSC_ECM
101 = ECL External Clock Low, vstup na pinu RA7, symbol _FOSC_ECL
100 = INTOSC oscilátor, pin RA7 jako vstup / výstup, symbol _FOSC_INTOSC
011 = vnější oscilátor, vstup na pinu RA7, pin RA6 jako vstup / výstup, symbol _FOSC_EXTRC
010 = HS krystalový oscilátor, krystal na pinech RA7 a RA6 , symbol _FOSC_HS
001 = XT oscilátor, krystal nebo keramický rezonátor na pinech RA7 a RA6, symbol _FOSC_XT
000 = LP oscilátor 32 kHz, krystal na pinech RA7 a RA6, symbol _FOSC_LP
Pokud není registr _CONFIG1 naprogramován, je hodnota všech jeho bitů rovna 1. V ladicím
režimu požaduje integrované prostředí MPLAB nulování bitů WDTE a tento požadavek musí být
potvrzen.
30
15
-1
7
-1
14
-1
_CONFIG2 Config 1 Register High Byte
13
12
11
10
9
LVP
/DEBUG
-BORV STVREN
1
1
1
1
1
6
-1
_CONFIG2 Config 1 Register Low Byte
5
4
3
2
VCAPEN VCAPEN
--1
1
1
1
adresa
8
PLLEN
1
8008 h
Flash
adresa
1
WRT1
1
0
WRT0
1
8008 h
Flash
LVP Low Voltrage Programming Enable bit – programování malým napětím
1 = programování LVP povoleno, symbol _LVP_ON
0 = programování napětím Vpp na pinu RE3/Vpp, symbol _LVP_OFF
/DEBUG
In-Circut Debugger Mode bit – povolení ladicího režimu
1 = ladicí režim zakázán, piny RB6 a RB7 mohou být použity jako I/O piny
0 = ladicí režim povolen, piny RB6/ICSPCLK a RB7/ICSPDAT používá debugger
Připojení debuggeru nebo programátoru automaticky nastavuje ladicí režim.
BORV
Brown-Out Reset Voltage Selection bit – napětí pro aktivaci BOR
1 = napětí pro aktivaci Bor je 1.9V, symbol _BORV_19 nebo _BORV_LO
0 = napětí pro aktivaci Bor je 2.5V, symbol _BORV_25 nebo _BORV_HI
STVREN
Stack Overflow/Underflow Reset Enable bit – reset při přeplnění zásobníku
1 = přeplnění nebo vyprázdnění zásobníku způsobí RESET, symbol _STVREN_ON
0 = přeplnění nebo vyprázdnění zásobníku nezpůsobí RESET, symbol _STVREN_OFF
PLLEN
PLL Enable bit – fázový závěs pro násobení kmitočtu oscilátoru
1 = fázový závěs povolen, symbol _PLLEN_ON
0 = fázový závěs zakázán, symbol _PLLEN_OFF
VCAPEN1 : VCAPEN0 Voltage Regulator Capacitor – vnější kondenzátor regulátoru napětí
11 = žádný vnější kondenzátor, symbol _VCAPEN_OFF
10 = vnější kondenzátor na pinu RA6, symbol _VCAPEN_RA6
01 = vnější kondenzátor na pinu RA5, symbol _VCAPEN_RA5
00 = vnější kondenzátor na pinu RA0, symbol _VCAPEN_RA0
WRT1 : WRT0 Flash Memory Self-Write Protection – zákaz přepisu paměti Flash programem
11 = přepis paměti povolen, symbol _WRT_OFF
10 = 000h až 1FFh chráněno, symbol _WRT_BOOT
01 = 000h až FFFh chráněno, symbol _WRT_HALF
00 = 000h až 1FFFh chráněno, symbol _WRT_ALL
Pokud není registr _CONFIG2 naprogramován, je hodnota všech jeho bitů rovna 1. V ladicím
režimu integrované prostředí MPLAB a připojený debugger nebo programátor nulují bit
/DEBUG.
31
6. Oscilátor
Mikrořadiče PIC16F 1937 mohou jako zdroj taktovacího kmitočtu používat:
6.1. Oscilátor vnější
Zdrojem taktovacího kmitočtu je vnější oscilátor. Obdélníkový signál je přiveden na pin CLKIN.
Oscilátor může být konfigurován ve třech módech podle tabulky
mód
ECL
ECM
ECH
kmitočet
0 – 0.5MHz
0.5 MHz – 4MHz
4 MHz – 32 MHz
6.2. Oscilátor na čipu s vnějšími součástkami
Zdrojem taktovacího kmitočtu je oscilátor, jehož podstatná část je implementována na čipu
mikrořadiče. Kmitočet oscilátoru je určen vnějšími součástkami.
6.2.1. Oscilátor řízený krystalem nebo keramickým rezonátorem
Oscilátor na čipu může být konfigurován ve třech módech podle tabulky
mód
kmitočet
krystal
keram.rezonátor
32.768 kHz
-100 kHz – 4MHz
1 MHz – 20 MHz
LP
XT
HS
Krystal nebo keramický rezonátor mají být specifikovány pro sériovou rezonanci, sériový odpor
krystalu má být co nejmenší. Hodnota kondenzátorů je stanovena v technických podmínkách
použitého krystalu. Zvětšování kapacity zlepšuje stabilitu oscilátoru a zabraňuje kmitání na
vyšších harmonických základního kmitočtu. Snižování kapacity zlepšuje náběh oscilací při
zapnutí napájecího napětí.
6.2.2. Oscilátor řízený RC článkem, mód RC
Vnější odpor má mít hodnotu mezi 3 k a 100 k, doporučená hodnota kondenzátoru je 20 pF.
Pin OSC2 může být nakonfigurován jako výstup taktovacího kmitočtu pro synchronizaci dalších
obvodů.
32
6.3. Oscilátory vnitřní.
Čip mikrořadiče PIC16F1937 obsahuje dva úplné RC oscilátory a obvod fázového závěsu.
Oscilátor HFINTOSC má základní kmitočet 16 MHz, který může být dále dělen až na 125 kHz.
Oscilátor je kalibrován až na přesnost ± 2% a může být dále doladěn v registru OSCTUNE
Oscilátor MFINTOSC má základní kmitočet 500 kHz, který může být dále dělen až na 32 kHz.
Oscilátor je kalibrován až na přesnost ± 2% a může být dále doladěn v registru OSCTUNE
Oscilátor LFINTOSC má základní kmitočet 31 kHz, není kalibrován a jeho kmitočet se může
vlivem výrobních tolerancí, teploty a napájecího napětí pohybovat od 15 kHz do 45 kHz.
Piny OSC1 a OSC2 jsou uvolněny pro využití jako I/O piny RA6 a RA7 Portu A.
6.4. Volba zdroje taktovacího kmitočtu, registr OSCCON
Zdroj taktovacího kmitočtu určují bity SCS1 : SCS0 (Systém Clock Select) v registru OSCCON a
bity FOSC <2 : 0 > v registru _CONFIG1
R/W
SPLLEN
0
R/W
IRCF3
0
OSCCON
R/W
IRCF2
1
Systém Clock Select Register
R/W
R/W
U
IRCF1
IRCF0
-1
1
0
adresa
R/W
SCS1
0
R/W
SCS0
0
SPLLEN
Software PLL Enable bit
Když bit PLLEN=0 v registru _CONFIG1 tak:
1 = fázový závěs pro násobení 4x je povolen
0 = fázový závěs pro násobení 4x je zakázán
Když bit PLLEN =1 v registru _CONFIG1 tak je fázový závěs vždy povolen
IRCF3 : IRCF2 : IRCF1 : IRCF0 Internal Oscillator Frequency Select Bits
1111 =16 MHz HF
1110 = 8 MHz HF nebo 32 MHz HF s připojeným PLL (fázový závěs)
1101 = 4 MHz HF
1100 = 2 MHz HF
1011 = 1 MHz HF
1010 = 500 kHz HF
1001 = 250 kHz HF
1000 = 125 kHz HF
0111 = 500 kHz MF (po Reset)
0110 = 250 kHz MF
0101 = 125 kHz MF
0100 = 62.5 kHz MF
0011 = 31.25 kHz HF
0010 = 31.25 kHz MF
000x = 31 kHz LF
SCS1 : SCS0 Systém Clock Select Bit
1x = vnitřní oscilátor
01 = 32.768 kHz oscilátor čítače TMR1
00 = oscilátor podle hodnoty konfiguračních bitů FOSC < 2 : 0 > registru _CONFIG1
33
99 h
Bank 1
FOSC < 2 : 0 > Oscillator Selection bits – výběr oscilátoru, registr _CONFIG1 (paměť Flash)
111 = ECH External Clock High, vstup na pinu RA7, symbol _FOSC_ECH
110 = ECM External Clock Medium, vstup na pinu RA7, symbol _FOSC_ECM
101 = ECL External Clock Low, vstup na pinu RA7, symbol _FOSC_ECL
100 = INTOSC oscilátor, pin RA7 jako vstup / výstup, symbol _FOSC_INTOSC
011 = vnější oscilátor, vstup na pinu RA7, pin RA6 jako vstup / výstup, symbol _FOSC_EXTRC
010 = HS krystalový oscilátor, krystal na pinech RA7 a RA6 , symbol _FOSC_HS
001 = XT oscilátor, krystal nebo keramický rezonátor na pinech RA7 a RA6, symbol _FOSC_XT
000 = LP oscilátor 32 kHz, krystal na pinech RA7 a RA6, symbol _FOSC_LP
U
T1OSCR
1
R/W
PLRR
0
OSCSTAT Oscillator Status Register
R/W
R/W
R
R
OSTS
HFIOFR HFIOFL MFIOFR
q
0
0
q
adresa
R
LFIOFR
0
R/W
HFIOFS
0
9A h
Bank 1
T1OSCR
Timer1 Oscillator Ready Bit
Když bit T1OSCEN=1 v registru T1CON tak:
0 = oscilátor čítače TMR1 32.768 kHz je zakázán
1 = oscilátor čítače TMR1 32.768 kHz je povolen
Když bit T1OSCEN=0 v registru T1CON tak oscilátor čítače TMR1 32.768 kHz je zakázán
PLLR 4xPLL Ready bit
0 = 4xPLL není funkční
1 = 4xPLL je funkční
OSTS Oscillator Status Bit
0 = vnitřní oscilátor (HFINTOSC nebo LFINTOSC) je zdrojem takt. kmitočtu
1 = oscilátor podle hodnoty konfiguračních bitů FOSC < 2 : 0 > registru _CONFIG1
HFIOFR
High FRequency Internal Oscillator Ready Bit
0 = HFINTOSC není funkční
1 = HFINTOSC je funkční
HFIOFL
High Frequency Internal Oscillator Locked Bit
0 = HFINTOSC má horší přesnost než 2%
1 = HFINTOSC má přesnost nejméně 2%
MFIOFR
Medium Frequency Internal Oscillator Ready Bit
0 = MFINTOSC není funkční
1 = HFINTOSC je funkční
LFIOFR
Low Frequency Internal Oscillator Ready Bit
0 = LFINTOSC není funkční
1 = LFINTOSC je funkční
HFIOFS
High Frequency Internal Oscillator Stable Bit
0 = HFINTOSC má horší přesnost než 0.5%
1 = HFINTOSC má přesnost nejméně 0.5%
34
6.5. Taktování mikrořadiče při výpadku vnějšího oscilátoru, registr _CONFIG1
Mikrořadiče PIC16F1937 obsahují detekční obvod, který trvale sleduje vstup taktovacích
impulzů z vnějšího oscilátoru. Přepnutí vnějšího oscilátoru na vnitřní RC oscilátor povoluje bit
FCMEN v registru _CONFIG1
Jestliže dojde k výpadku taktovacích impulzů na dobu cca 2ms, je jako zdroj taktovacího
kmitočtu připojen vnitřní RC oscilátor. Kmitočet vnitřního RC oscilátoru je standardně 4MHz.
FCMEN
Fail Clock Monitor Enabled Bit, registr _CONFIG1 (paměť Flash)
0 = záložní RC oscilátor zakázán
1 = záložní RC oscilátor povolen
Pokud není registr _CONFIG1 naprogramován, je hodnota všech jeho bitů rovna 1, přepnutí na
vnitřní RC oscilátor je povoleno.
Registry, jejichž obsah má vliv na funkci oscilátorů. Bity v šedých polích oscilátor nevyužívá.
35
7. AD převodník
Mikrořadiče PIC16F1937 obsahují 10 bitový, 14 kanálový, komparační (SAR = Successive
Approximation Register) analogově / číslicový převodník
7.1. Princip SAR AD převodníku
Vstupní analogové napětí Uin je porovnáváno na analogovém komparátoru s analogovým
napětím Uda, které je výsledkem DA převodu digitálního slova, uloženého v registru SAR. Je-li
vstupní napětí menší, je obsah registru SAR zmenšen. Je-li vstupní napětí větší, je obsah
registru SAR zvětšen. AD převod je ukončen, když obě napětí na vstupu komparátoru jsou
shodná. Výsledek převodu je uložen v registru SAR.
Uin – vstupní analogové napětí
Uref – referenční napětí
Uda – výstupní analogové napětí AD převodníku
CLK – taktovací kmitočet
S&H – vzorkovací obvod (Sample and Hold)
7.2. Blokové schéma AD převodníku
36
7.3. Konfigurace AD převodníku
Před použitím musí být AD převodník zkonfigurován:
- konfigurací vstupního Portu
- výběrem vstupního kanálu
- volbou referenčního napětí
- nastavením vzorkovacího kmitočtu
- nastavením přerušení
- formátováním výsledku
7.3.1. Konfigurace vstupních Portů
Pro vstup analogových napětí jsou určeny porty RA, RB a RE, analogové vstupy musí být
konfigurovány v registrech TRISx a ANSELx.
Na Portu A může být využito až 5 pinů jako vstupy AD převodníku.
TRISA Tri-State A Register
adresa
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
8C h
TRISA7 TRISA6 TRISA5 TRISA4 TRISA3 TRISA2 TRISA1 TRISA0
Bank 1
1
1
1
1
1
1
1
1
ANSELA PortA Analog Select Register
adresa
--R/W
R/W
R/W
R/W
R/W
R/W
18C h
--ANSA5 ANSA4 ANSA3
ANSA2
ANSA1 ANSA0
Bank 3
--1
1
1
1
1
1
--- v registru
AN4
AN3/Vref+
AN2/Vref-pin portu
AN1 A nastaven
AN0 jako ADC
Nastavením
bitu
TRISA na -hodnotu
1 je odpovídající
vstup.
Na Portu B může být využito až 6 pinů jako vstupy AD převodníku.
TRISB Tri-State B Register
R/W
R/W
R/W
R/W
R/W
R/W
R/W
TRISB7 TRISB6 TRISB5 TRISB4 TRISB3 TRISB2 TRISB1
1
1
1
1
1
1
1
ANSELB PortB Analog Select Register
--R/W
R/W
R/W
R/W
R/W
--ANSB5
ANSB4
ANSB3
ANSB2
ANSB1
--1
1
1
1
1
--AN13
AN11
AN9
AN8
AN10
Na Portu E mohou být využity až 3 piny jako vstupy AD převodníku.
TRISE Tri-State E Register
-----R/W
R/W
TRISE2 TRISE1
----------1
1
ANSELE PortE Analog Select Register
-----R/W
R/W
-----ANSE2
ANSE1
-----1
1
-----AN7
AN6
adresa
R/W
TRISB0
1
adresa
R/W
ANSB0
1
AN12
18D h
Bank 3
ADC
adresa
R/W
TRISE0
1
90 h
Bank 1
adresa
R/W
ANSEB0
1
AN5
Po signálu Reset jsou všechny označené piny nastaveny jako analogové vstupy.
37
8D h
Bank 1
190 h
Bank 3
ADC
7.3.2. Výběr vstupního kanálu
Kanál, ze kterého je analogové napětí přivedeno na vstup AD převodníku, je volen bity CHS4 :
CHS0 v registru ADCON0.
--0
R/W
CHS4
0
ADCON0 A/D Control Register 0
R/W
R/W
R/W
R/W
CHS3
CHS2
CHS1
CHS0
- 24 0
0
0
0
adresa
R/W
GO_DONE
0
R/W
ADON
0
9D h
Bank 1
CHS < 4 : 0 > Analog Channel Select – kanál A/D převodníku
0xxxx = binary numbered analog channel – binární číslo kanálu (00000=AN0, 01101=AN13)
7.3.3. Volba referenčního napětí
Při AD převodu musí být připojen zdroj referenčního napětí. Tím může být buď napájecí napětí
mikrořadiče (Vdd a Vss), vnitřní reference (modul FVR= Fixed Voltage Reference) nebo vnější
referenční napětí, přivedené na piny AN2 a AN3. Volba se provádí nastavením bitů ADNREF a
ADPREF v registru ADCON1.
R/W
ADFM
0
R/W
ADCS2
0
ADCON1 A/D Control Register 1
R/W
R/W
-R/W
R/W
R/W
ADCS1
ADCS0
-ADNREF ADPREF1 ADPREF0
0
0
0
0
0
0
adresa
9E h
Bank 1
ADNREF
A/D Negative Voltage Reference
0 = Vref- je připojen na Vss
1 = Vref- je připojen na vnější pin (AN2)
ADPREF1 : ADPREF2
A/D Positive Voltage Reference
00 = Vref+ je připojen na Vdd
01 = reserved
10 = Vref+ je připojen na vnější pin (AN3)
11 = Vref+ je připojen na vnitřní referenci (modul FVR 2.048V nebo 4.096V)
7.3.4. Nastavení vzorkovacího kmitočtu AD převodníku
Vzorkovací kmitočet převodníku může být max 1 MHz. Oscilátor mikrořadiče, musí být dělen
nastavením bitů ADCS2 : ADCS0 v registru ADCON1.
R/W
ADFM
0
R/W
ADCS2
0
ADCON1 A/D Control Register 1
R/W
R/W
-R/W
R/W
R/W
ADCS1
ADCS0
-ADNREF ADPREF1 ADPREF0
0
0
0
0
0
0
ADCS2 : ADCS0 A/D Conversion Clock – vzorkovací kmitočet A/D převodu
000 = Fosc / 2
001 = Fosc / 8
010 = Fosc / 32
x11 = FRC (internal RC oscillator, max 500kHz)
100 = Fosc / 4
101 = Fosc / 16
110 = Fosc / 64
38
adresa
9E h
Bank 1
7.3.5. Formátování výsledku AD převodu
Výsledek AD převodu je ukládán do registrů ADRESH (vyšší bity) a ADRESL (nižší bity). Formát
výsledku (zarovnání vlevo / vpravo) se nastavuje bitem ADFM v registru ADCON1
R/W
ADFM
0
R/W
ADCS2
0
ADCON1 A/D Control Register 1
R/W
R/W
-R/W
R/W
R/W
ADCS1
ADCS0
-ADNREF ADPREF1 ADPREF0
0
0
0
0
0
0
adresa
9E h
Bank 1
ADFM A/D Conversion Result Format – formát výsledku A/D převodu
0 = Left Justified – výsledek zarovnán vlevo
1 = Right Justified - výsledek zarovnán vpravo (bit LSB v bitu 0 registru ADRESL)
R/W
MSB
x
R/W
x
R/W
ADRESH
R/W
x
x
R/W
LSB
x
ADRESL
U
-x
A/D Result Register High byte
R/W
R/W
R/W
x
x
x
A/D Result Register Low byte
U
U
U
---x
x
x
adresa
R/W
R/W
x
x
9C h
Bank 1
adresa
U
-x
U
-x
9B h
Bank 1
7.4. Povolení AD převodníku
Obvod AD převodníku je po signálu Reset odpojen od napájecího napětí. Tím je snížen příkon
mikrořadiče. Před použitím musí být AD převodník povolen nastavením bitu ADON v registru
ADCON0.
ADCON0 A/D Control Register 0
adresa
-R/W
R/W
R/W
R/W
R/W
R/W
R/W
9D h
GO_DONE
-CHS4
CHS3
CHS2
CHS1
CHS0
ADON
Bank 1
0
0
0
0
0
0
0
0
ADON ADC Enable
1 = ADC Enabled – AD převodník povolen
0 = ADC Disabled – AD převodník zakázán
7.5. Spuštění AD převodu
Vstupní analogové napětí je přiváděno na vzorkovací obvod (Sample & Hold), ve kterém je
nabíjen kondenzátor s kapacitou 10pF. Před spuštěním každého AD převodu musí být tento
kondenzátor nabit na plné napětí. Čas potřebný pro nabití kondenzátoru je ovlivněn zejména
hodnotou vstupního rezistoru (max10k), požadovanou přesností převodu (standardně ½ LSB),
velikostí napájecího napětí (standardně 5 V) a teplotou mikrořadiče (standardně 50°C).
Pro uvedené hodnoty je čas pro nabití kondenzátoru cca 4.4s. Tento čas se nejsnáze vytvoří
opakováním instrukcí nop, při taktovacím kmitočtu 4MHz je doba vykonání jedné instrukce
rovna 1s, postačuje tedy 5 instrukcí nop.
Vlastní AD převod je spuštěn nastavením bitu GO_DONE v registru ADCON0 na hodnotu 1
ADCON0 A/D Control Register 0
adresa
-R/W
R/W
R/W
R/W
R/W
R/W
R/W
9D h
GO_DONE
-CHS4
CHS3
CHS2
CHS1
CHS0
ADON
Bank 1
0
0
0
0
0
0
0
0
Bit GO_DONE nemá být nastavován v jedné instrukci spolu s bitem ADON.
39
7.6. Ukončení AD převodu
O ukončení převodu informuje AD převodník požadavkem na přerušení (když je povoleno)
nastavením bitu ADIF v registru PIR1 a nulováním bitu GO_DONE v registru ADCON0. Výsledek
převodu je uložen do registrů ADRESH a ADRESL.
Není-li využíváno přerušení, je nutné ukončení AD převodu zjistit testováním bitu GO_DONE
bsf
ADCON0, GO_DONE
; start AD převodu
btfsc ADCON0, GO_DONE
; převod ukončen?
goto $-1
; ne, opakuj test
Před startem nového převodu je nutné uklidit výsledek převodu kopií registrů ADRESH a
ADRESL do některého GPR registru. Dalším převodem je výsledek přepsán.
Registry, jejichž obsah má vliv na funkci AD převodníku. Bity v šedých polích ADC nevyužívá.
40
8. Čítače a časovače
Mikrořadiče PIC16F1937 obsahují pět modulů čítačů / časovačů:
- modul TIMER0, osmibitový čítač s osmibitovým předděličem
- modul TIMER1, šestnáctibitový čítač s tříbitovým předděličem
- moduly TIMER2, TIMER 4, TIMER 6, osmibitové čítače se čtyřbitovými předděliči
8.1. Čítač / časovač TIMER0
Modul TIMER0 obsahuje osmibitový čítač vpřed tvořený registrem TMR0. Nastavením bitu
TMR0CS v registru OPTION_REG může být čítač inkrementován buď taktovacím signálem
mikrořadiče při vykonání každé instrukce nebo vnějším signálem, přivedeným na pin T0CKI
(RA4). Vnější signál může čítač inkrementovat buď nástupnou nebo sestupnou hranou podle
hodnoty bitu TMR0SE v registru OPTION_REG.
Před čítač může být bitem PSA připojen osmibitový předdělič, jehož dělicí poměr může být
nastaven na hodnoty 1 : 2 až 1 : 256 třemi bity PS2 : PS0 v registru OPTION_REG.
Při změně obsahu čítače (registru TMR0) z hodnoty FFH na 00H je nastaven bit TMR0IF
v registru INTCON. Přeplnění registru TMR0 může být počítáno čítačem TIMER1.
OPTION_REG Option Register
R/W
R/W
R/W
R/W
R/W
NOT_WPUEN INTEDG TMR0CS TMR0SE
PSA
PS2
1
1
1
1
1
1
R/W
adresa
R/W
PS1
1
R/W
PS0
1
95 h
Bank 1
PS2: PS0 Prescaler Rate Select bits – dělící poměr předděliče
000 = 1 : 2
001 = 1 : 4
010 = 1 : 8
011 = 1 : 16
100 = 1 : 32
101 = 1 : 64
110 = 1 : 128
111 = 1 : 256
PSA
0=
1=
Prescaler Assigment bit – vřazení předděliče
předdělič je připojen
předdělič není připojen, dělicí poměr je 1 : 1
TMR0SE
TIMER0 Source Edge select bit – volba hrany vstupního signálu
0=
čítač je inkrementován nástupnou hranou signálu T0CKI na pinu PA4
1=
čítač je inkrementován sestupnou hranou signálu T0CKI na pinu PA4
TMR0CS
TIMER0 Clock Source select bit – volba vstupního signálu
0=
čítač je inkrementován taktovacím signálem mikrořadiče při vykonání každé instrukce
1=
čítač je inkrementován signálem T0CKI na pinu PA4
41
R/W
bit 7
x
R/W
bit 6
x
TMR0 Timer0 Register
R/W
R/W
R/W
R/W
bit 5
bit 4
bit 3
bit 2
x
x
x
x
adresa
R/W
bit 1
x
R/W
bit 0
x
15 h
Bank 0
Registr TMR0 může být čten kdykoliv, čítač po čtení pokračuje v inkrementaci.
Do registru TMR0 může být zapsáno kdykoliv, inkrementace čítače je zakázána po dva
instrukční cykly následující po zápisu.
R/W
GIE
0
R/W
PEIE
0
INTCON Interrupt Control Register
R/W
R/W
R/W
R/W
TMR0IE
INTE
IOCIE
TMR0IF
0
0
0
0
adresa
R/W
INTF
0
R/W
IOCIF
x
0B h
Při přeplnění registru TMR0 (při změně hodnoty FFH na hodnotu 00H) je vždy nastaven bit
TMR0IF (TIMER0 Interrupt Flag) v registru INTCON. Je-li přerušení povoleno nastavením bitu
TMR0IE (TIMER0 Interrupt Enable) program pokračuje obslužnou rutinou přerušení. Když
přerušení využíváno není, musí program bit TMR0IF testovat. Bit TMR0IF musí být nulován
programem, aby mohlo být rozeznáno další přeplnění čítače.
Předdělič není možné číst ani do něho zapisovat. Jestliže PSA = 0, předdělič je vložen před
čítač a při každém zápisu do registru TMR0 je předdělič vynulován.
Registry, jejichž obsah má vliv na funkci čítače TIMER0. Bity v šedých polích čítač nevyužívá.
42
8.2. Čítač / časovač TIMER1
Modul TIMER1 obsahuje šestnáctibitový čítač vpřed tvořený registry TMR1H : TMR1L.
Nastavením bitů TMR1CS1:TMR1CS0 v registru T1CON může být čítač inkrementován buď
taktovacím signálem mikrořadiče, vnějším signálem, přivedeným na pin T1CKI nebo signálem
z modulu CPS (Capacitive Sensing). Před čítač je připojen tříbitový předdělič, jehož dělicí
poměr může být nastaven na hodnoty 1 : 1 až 1 : 8 bity T1CKPS1 : T1CKPS0 v registru T1CON.
Při změně obsahu čítače z hodnoty FFFFH na 0000H je nastaven bit TMR1IF v registru PIR1.
Signál před vstupem do registrů čítače TMR1 může být hradlován signály z přeplnění čítače
TMR0, z výstupů obou analogových komparátorů nebo vnějším signálem na pinu T1G.
Hradlovací signál je vybírán nastavením bitů T1GSS1:T1GSS0 v registru T1GCON. Funkce
hradlování čítače TMR1 není v této kapitole popisována.
T1CON Timer1 Control Register
R/W
R/W
R/W
R/W
R/W
R/W
TMR1CS1 TMR1CS0 T1CKPS1 T1CKPS0 T1OSCEN T1SYNC
0
0
0
0
0
0
adresa
R/W
-0
R/W
TMR1ON
0
18 h
Bank 0
TMR1ON
Timer1 On bit – povolení čítače a hradlování
0=
čítač je zastaven
1=
čítač je povolen a spuštěn
TMR1CS1 : TMR1CS0
Timer1 Clock Source bits – volba vstupního signálu
00 = čítač je inkrementován taktovacím signálem mikrořadiče při vykonání každé instrukce
01 = čítač je inkrementován taktovacím signálem
10 = čítač je inkrementován signálem T1CKI nebo z vnitřního oscilátoru 32.768kHz
11 = čítač je inkrementován signálem z modulu CPS (Capacitive Sensing Oscillator)
T1CKPS1: T1CKPS0
00 = 1 : 1
01 = 1 : 2
10 = 1 : 4
11 = 1 : 8
Timer1 Clock Prescaler Rate Select bits – dělící poměr předděliče
T1OSCEN
Timer1 Oscillator Enable bit – povolení oscilátoru
0=
oscilátor odpojen
1=
oscilátor povolen
Povolení oscilátoru je podmíněno nastavením konfiguračních bitů FOSC2 : FOSC0 v registru
_CONFIG1 na hodnotu 100B
43
R/W
bit 7
x
R/W
bit 7
x
R/W
bit 6
x
TMR1H
R/W
bit 5
x
Timer1 High Byte Register
R/W
R/W
R/W
bit 4
bit 3
bit 2
x
x
x
R/W
bit 6
x
TMR1L
R/W
bit 5
x
Timer1 Low Byte Register
R/W
R/W
R/W
bit 4
bit 3
bit 2
x
x
x
adresa
R/W
bit 1
x
R/W
bit 0
x
0F H
bank 0
adresa
R/W
bit 1
x
R/W
bit 0
x
0E H
bank 0
Registry TMR1x mohou být čteny kdykoliv, čítač po čtení pokračuje v inkrementaci.
Před zápisem do registrů TMR1x se doporučuje čítač zastavit.
Předdělič není možné číst ani do něho zapisovat. Při každém zápisu do registrů TMR1x je
předdělič vynulován.
Při přeplnění registrů TMR1x (při změně hodnoty FFFFH na hodnotu 0000H) je nastaven bit
TMR1IF (Timer1 Interrupt Flag) v registru PIR1. Je-li přerušení povoleno nastavením bitu
TMR1IE (Timer1 Interrupt Enable) v registru PIE1, program pokračuje obslužnou rutinou
přerušení. Když přerušení využíváno není, musí program bit TMR1IF testovat. Bit TMR1IF musí
být nulován programem, aby mohlo být rozeznáno další přeplnění čítače.
Registry, jejichž obsah má vliv na funkci čítače TMR1. Bity v šedých polích čítač nevyužívá.
44
8.3. Čítač / časovač TIMER2
Mikrořadič PIC16F1937 obsahuje tři identické moduly TIMER2, TIMER4, TIMER6. Popsán je
modul TIMER2, další dva moduly se chovají analogicky.
Modul TIMER2 obsahuje osmibitový čítač tvořený registrem TMR2 a registrem předvolby PR2.
Čítač je inkrementován taktovacím signálem mikrořadiče při vykonání každé instrukce. Před
čítač je připojen čtyřbitový předdělič, jehož dělicí poměr může být nastaven na hodnoty 1 : 1 až
1 : 16 dvěma bity T2CKPS1 : T2CKPS0 v registru T2CON.
Obsah čítače (registru TMR2) je porovnáván s předvolbou (registr PR2), při shodě je čítač TMR2
nulován a je generován signál, který po průchodu děličem nastavuje bit TMR2IF v registru PIR1.
Dělicí poměr může být nastaven na hodnoty 1 : 1 až 1 : 16 čtyřmi bity TOUTPS3 : TOUTPS0
v registru T2CON.
----
T2CON Timer2 Control Register
R/W
R/W
R/W
R/W
R/W
R/W
R/W
TOUTPS3 TOUTPS2 TOUTPS1 TOUTPS0 TMR2ON T2CKPS1 T2CKPS0
0
0
0
0
0
0
0
TOUTPS3: TOUTPS0
0000 = 1 : 1
0001 = 1 : 2
0010 = 1 : 3
:
1101 = 1 : 14
1110 = 1 : 15
1111 = 1 : 16
adresa
1C h
Bank 0
Timer2 Output Postscaler Rate Select bits – dělící poměr děliče
TMR2ON
Timer2 On bit – povolení čítače
0=
čítač je zastaven
1=
čítač je povolen a spuštěn
T2CKPS1: T2CKPS0
00 = 1 : 1
01 = 1 : 4
10 = 1 : 16
11 = 1 : 64
Timer2 Clock Prescaler Rate Select bits – dělící poměr předděliče
45
R/W
bit 7
0
R/W
bit 6
0
R/W
bit 5
0
TMR2 Timer2 Register
R/W
R/W
R/W
bit 4
bit 3
bit 2
0
0
0
adresa
R/W
bit 1
0
R/W
bit 0
0
1A h
Bank 0
PR2 Timer2 Period Register
adresa
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
1B h
bit 7
bit 6
bit 5
bit 4
bit 3
bit 2
bit 1
bit 0
Bank
0
Registry
1 TMR2 1i PR2 mohou
1 být čteny
1 kdykoliv,1čítač po čtení
1 pokračuje
1 v inkrementaci.
1
Předdělič ani dělič není možné číst ani do nich zapisovat. Při každém zápisu do registrů TMR2
a T2CON jsou oba děliče vynulovány.
Registry, jejichž obsah má vliv na funkci čítače TMR2. Bity v šedých polích čítač nevyužívá.
46
9. Modul CCP
Mikrořadiče PIC16F obsahují tři vylepšené moduly ECCP1, ECCP2, ECCP3 a dva standardní
moduly CCP4 a CCP5.
Modul CCP (Capture / Compare / PWM) může kontrolovat události při dosažení uplynulého
času nebo dosažením nastavené hodnoty. V módu PWM může být generován signál různého
kmitočtu a různé střídy (duty cycle).
V režimech vzorkování (Capture) a porovnání (Compare) je funkce všech pěti modulů shodná.
V režimu PWM (Pulse Width Modulation) se funkce mírně liší.
Funkce modulů CCP přesahuje rámec tohoto textu. Popis modulů je výrazně zjednodušen.
Mód modulů CCPx (x=1 až 5) určuje obsah registrů CCPxCON
R/W
PxM1
0
R/W
PxM0
0
CCPxCON CCPx Control Register
R/W
R/W
R/W
R/W
R/W
R/W
DCxB1
DCxB0 CCPxM3 CCPxM2 CCPxM1 CCPxM0
0
0
0
0
0
0
adresa
CCPxM3: CCPxM0 CCP Mode Select bits – mód modulu CCP
0000 = modul CCP vypnut
0001 = rezerva
0010 = režim porovnání
0011 = rezerva
01xx = režimy vzorkování obsahu čítače TMR1 (Capture mode)
10xx = režimy porovnání s obsahem čítače TMR1 (Compare mode)
11xx = PWM režim
9.1. Režim vzorkování
V režimu vzorkování je obsah šestnáctibitového čítače TMR1 přepsán do dvojice registrů
CCPRxH : CCPRxL každou událostí na pinu CCPx. Událost je definována bity
CCPxM3:CCPxM0 v registru CCPxCON.
CCPxM3: CCPxM0 CCP Mode Select bits – režim modulu CCP
0100 = vzorek na každou sestupnou hranu
0101 = vzorek na každou nástupnou hranu
0110 = vzorek na každou čtvrtou nástupnou hranu
0111 = vzorek na každou šestnáctou nástupnou hranu
9.2. Režim porovnání
V režimu porovnání je obsah šestnáctibitového čítače TMR1 porovnáván s obsahem dvojice
registrů CCPRxH : CCPRxL. Při shodě je vyvolána akce nastavená bity CCPxM3:CCPxM0
v registru CCPxCON
CCPxM3: CCPxM0 CCP Mode Select bits – režim modulu CCP
1000 = výstup CCPx je nastaven na hodnotu 1, je nastaven bit CCPxIF
1001 = výstup CCPx je nulován na hodnotu 0, je nastaven bit CCPxIF
1010 = nastaven bit CCPxIF, požadavek na přerušení
1011 = nulován TMR1, nastaven bit CCPxIF, spuštěn A/D převodník když je povolen
47
9.3. Režim PWM
Ve standardním režimu PWM jsou generovány dva šířkově modulované signály na pinech
CCPx. Oba piny musí být konfigurovány jako výstup.
Kmitočet (perioda) signálu je nastavena v registru PR2, střídu signálu PWM určují registry
CCPR1L a CCPR2L.
Rozlišení PWM signálu je standardně osmibitové, pro 10-ti bitové rozlišení je čítač TMR2
rozšířen o dva bity předděliče a registry CCPRxL o dva bity CCPxCON<5:4>
Period = (PR2 + 1) * 4 * Tosc * TMR2 Prescaler Rate
Když obsah čítače TMR2 je roven obsahu registru PR2 tak :
- čítač TMR2 je nulován
- úroveň pinu CCPx je nastavena =1
- obsah registru CCPRxL je přepsán do registru CCPRxH
Pulse Width = CCPRxL : CCPxCON <5>4> * Tosc * TMR2 Prescaler Rate
Když obsah čítače TMR2 je roven CCPRxL : CCPxCON <5>4> tak
- úroveň pinu CCPx je nulována =0
Jestliže šířka impulsu (Pulse Width) je větší než perioda tak se úroveň pinu CCPx nemění.
48
Postup nastavení modulu CCP ve standardním režimu PWM
- nastavení periody PWM obsahem registru PRx
- konfigurace modulu CCP na režim PWM nastavením registru CCPxCON
- nastavení střídy signálu PWM obsahem registru CCPRxL a bity DCxBx v registrech CCPxCON
- výběr čítače TMR2/4/6 pro modul CCP nastavením bitů CxTSEL<1:0> v registru CCPTMRSx
- nulování bitu TMRxIF v registru PIRx
- nastavení dělicího poměru TMRx bity TxCKPS1 a TxCKPS0 v registru TxCON
- konfigurace pinů CCPx jako výstupy nulováním bitů TRISx
Registry, jejichž obsah má vliv na funkci modulu CCP v režimech vzorkování a porovnání. Bity
v šedých polích CCP nevyužívá.
Registry, jejichž obsah má vliv na funkci modulu CCP v režimu standardního PWM. Bity
v šedých polích CCP nevyužívá.
49
10. Přerušovací systém PIC16F917
10.1. Zdroje přerušení
Chod programu může být přerušen logickým signálem z některého ze zdrojů přerušení:
a. Vnější signál přivedený na pin RB0
b. Přeplnění čítače Timer0
c. Změna úrovně signálu na některém pinu Portu B
d. Periferní obvody (AD převodník, komparátor, sériové kanály, . . . . . )
10.2. Obsluha přerušení
Každý zdroj přerušení má přidělen jeden bit (Flag) v řídících registrech INTCON, PIR1, PIR2,
nebo PIR3. Požadavek na přerušení nastavuje příslušný Flag na hodnotu 1. V každém
instrukčním cyklu procesor testuje hodnotu všech požadavků.
Každé přerušení může být jednotlivě povoleno nebo zakázáno příslušným bitem v registrech
INTCON, PIE1, PIE2 nebo PIE3 . Všechna přerušení současně (globálně) mohou být povolena
nebo zakázána bitem GIE v registru INTCON.
Pokud je některý z požadavků nastaven a přerušení je povoleno, pak :
1. Bit GIE v registru INTCON je nulován, všechna přerušení jsou zakázána
2. Obsah čítače programu (návratová adresa) je uložen do zásobníku.
3. Do stínových registrů v bance 31 jsou uloženy registry W, STATUS, BSR, FSR, PCLATH
4. Do čítače programu je vložena hodnota 0004h a program pokračuje obslužnou rutinou
přerušení, jejíž první instrukce musí být na této adrese. Obslužná rutina musí:
- Otestovat všechny požadavky na přerušení a určit zdroj přerušení
- Vynulovat Flag, který přerušení způsobil a umožnit tak přijetí nového požadavku na přerušení
- Skončit instrukcí retfie
5. Instrukce retfie
- Vyzvedne návratovou adresu ze zásobníku a uloží ji do čítače programu
- Obnoví obsah registrů W, STATUS, BSR, FSR, PCLATH
- Nastaví bit GIE v registru INTCON na hodnotu 1 a povolí všechna přerušení
Příklad obslužné rutiny přerušení od čítače Timer0
org
ISR:
04
btfsc
goto
goto
ServiceTimer0:
INTCON, TMR0IF ; test bitu T0IF, požadavek na přerušení od čítače Timer0
ServiceTimer0
ExitISR
:
bcf
ExitISR:
retfie
INTCON, TMR0IF ; nuluje požadavek na přerušení, umožňuje další požadavek
50
10.3. Vnější přerušení
Signál vnějšího přerušení musí být přiveden na pin RB0, bit INTEDG v registru OPTION_REG
určuje, jestli požadavek na přerušení vyvolá nástupná nebo sestupná hrana. Platný požadavek
nastaví bit INTF v registru INTCON. Vnější přerušení může být zakázáno nulováním bitu INTE.
R/W
GIE
0
GIE
0=
1=
R/W
PEIE
0
INTCON Interrupt Control Register
R/W
R/W
R/W
R/W
TMR0IE
INTE
IOCIE
TMR0IF
0
0
0
0
adresa
R/W
INTF
0
R
IOCIF
0
R/W
PS1
1
R/W
PS0
1
0B h
General Interrupt Enable – povolení všech přerušení
všechna přerušení zakázána
všechna přerušení povolena
INTE Interrupt Enable – povolení vnějšího přerušení
0=
vnější přerušení zakázáno
1=
vnější přerušení povoleno
INTF Interrupt Flag – příznak vnějšího přerušení
0=
žádný požadavek vnějšího přerušení
1=
požadavek vnějšího přerušení nastaven
R/W
R/W
NOT_RBPU INTEDG
1
1
OPTION_REG Option Register
R/W
R/W
R/W
R/W
T0CS
T0SE
PSA
PS2
1
1
1
1
adresa
95 h
Bank 1
INTEDG
Interrupt Edge – hrana vnějšího přerušení
0=
požadavek vnějšího přerušení na sestupnou (falling) hranu
1=
požadavek vnějšího přerušení na nástupnou (rising) hranu
10.4. Přerušení od čítače Timer 0
Při přeplnění registru TMR0 (při změně hodnoty FFH na hodnotu 00H) je nastaven bit T0IF
v registru INTCON. Přerušení může být zakázáno nulováním bitu T0IE.
R/W
GIE
0
GIE
0=
1=
R/W
PEIE
0
INTCON Interrupt Control Register
R/W
R/W
R/W
R/W
TMR0IE
INTE
IOCIE
TMR0IF
0
0
0
0
adresa
R/W
INTF
0
General Interrupt Enable – povolení všech přerušení
všechna přerušení zakázána
všechna přerušení povolena
TMR0IE
Timer0 Interrupt Enable – povolení přerušení od čítače Timer 0
0=
přerušení Timer0 zakázáno
1=
přerušení Timer0 povoleno
TMR0IF
Timer0 Interrupt Flag – příznak přerušení od čítače Timer 0
0=
žádný požadavek přerušení od Timer 0
1=
požadavek přerušení od Timer 0 nastaven
51
R
IOCIF
0
0B h
10.5. Přerušení od změny logické úrovně na pinech Portu B
Při změně logické úrovně na pinech Portu B je nastaven bit IOCIF v registru INTCON. Přerušení
může být zakázáno nulováním bitu IOCIE. Jednotlivé piny portu B mohou být konfigurovány
v registrech IOCBN a IOCBP.
R/W
GIE
0
GIE
0=
1=
R/W
PEIE
0
INTCON Interrupt Control Register
R/W
R/W
R/W
R/W
TMR0IE
INTE
IOCIE
TMR0IF
0
0
0
0
adresa
R/W
INTF
0
R
IOCIF
0
0B h
General Interrupt Enable – povolení všech přerušení
všechna přerušení zakázána
všechna přerušení povolena
IOCIE PortB Interrupt Enable – povolení přerušení od Portu B
0=
přerušení PortB zakázáno
1=
přerušení PortB povoleno
IOCIF PortB Interrupt Flag – příznak přerušení od Portu B
0=
žádný požadavek přerušení od Portu B
1=
požadavek přerušení od Portu B nastaven
Bit IOCIF je Read Only a je nulován, když všechny bity registru IOCBF byly vynulovány
programem.
R/W
IOCBN7
0
IOCBN Interrupt On-Change Port B Register
R/W
R/W
R/W
R/W
R/W
R/W
IOCBN6 IOCBN5 IOCBN4 IOCBN3 IOCBN2 IOCBN1
0
0
0
0
0
0
R/W
IOCBN0
0
R/W
IOCBP7
0
IOCBP Interrupt On-Change Port B Register
R/W
R/W
R/W
R/W
R/W
R/W
IOCBP6 IOCBP5 IOCBP4 IOCBP3 IOCBP2 IOCBP1
0
0
0
0
0
0
R/W
IOCBP0
0
adresa
395 h
Bank 7
adresa
394 h
Bank 7
IOCBN7: IOCBN0 Interrupt On-Change Port B Negative edge – přerušení na sestupnou hranu
IOCBP7: IOCBP0 Interrupt On-Change Port B Positive edge – přerušení na nástupnou hranu
0=
přerušení zakázáno
1=
přerušení na sestupnou (nástupnou) hranu povoleno
R/W
IOCBF7
0
IOCBF Interrupt On-Change Port B Register
R/W
R/W
R/W
R/W
R/W
R/W
IOCBF6 IOCBF5 IOCBF4 IOCBF3 IOCBF2 IOCBF1
0
0
0
0
0
0
adresa
R/W
IOCBF0
0
IOCBF7 : IOCBF0 Interrupt On-Change PortB – příznak přerušení od pinů Portu B
0=
žádný požadavek na přerušení od změny úrovně na pinu Portu B
1=
požadavek na přerušení od změny úrovně na pinu Portu B
52
396 h
Bank 7
10.6. Přerušení od periférií
Všechny periferie na čipu mikrořadičů PIC16F mohou žádat o přerušení nastavením
příslušných bitů v registrech PIR1, PIR2 a PIR3. Každé přerušení je možno individuálně povolit
nebo zakázat nastavením nebo nulováním bitů v registrech PIE1, PIE2 a PIE3.
Všechna přerušení od periferií je možno povolit nebo zakázat nastavením nebo nulováním bitu
PEIE v registru INTCON.
R/W
GIE
0
GIE
0=
1=
R/W
PEIE
0
INTCON Interrupt Control Register
R/W
R/W
R/W
R/W
TMR0IE
INTE
IOCIE
TMR0IF
0
0
0
0
adresa
R/W
INTF
0
R
IOCIF
0
0B H
bank 0
General Interrupt Enable – povolení všech přerušení
všechna přerušení zakázána (včetně přerušení od periferií)
všechna přerušení povolena
PEIE Peripheral Interrupt Enable – povolení přerušení od periferií
0=
přerušení od periferií zakázána
1=
přerušení od periferií povolena
R/W
TMR1GIE
0
PIE1 Peripheral Interrupt Enable 1 Register
R/W
R/W
R/W
R/W
R/W
R/W
ADIE
RCIE
TXIE
SSPIE
CCP1IE TMR2IE
0
0
0
0
0
0
adresa
R/W
TMR1IE
0
91 h
Bank 1
TMR1GIE
TMR1 Gete Interrupt Enable
ADIE
A/D Converter Interrupt Enable
RCIE
USART Receive Interrupt Enable
TXIE
USART Transmit Interrupt Enable
SSPIE
SSP (Synchronous Seriál Port) Interrupt Enable
CCP1IE
CCP1 Interrupt Enable
TMR2IE
TMR2 to PR2 Match Interrupt Enable
TMR1IE
TMR1 Overflow Interrupt Enable
0=
přerušení od periferie zakázáno
1=
přerušení od periferie povoleno
R/W
OSFIE
0
R/W
C2IE
0
PIE2 Peripheral Interrupt Enable 2 Register
R/W
R/W
R/W
R/W
C1IE
EEIE
BCLIE
LCDIE
0
0
-0
OSFIE
Oscillator Fail Interrupt Enable
C2IE
Comparator C2 Interrupt Enable
C1IE
Comparator C1 Interrupt Enable
EEIE
EEPROM Write Completion Interrupt Enable
BCLIE
MSSP Bus Collision Interrupt Enable
LCDIE
LCD Module Interrupt Enable
CCP2IE
CCP2 Interrupt Enable
0=
přerušení od periferie zakázáno
1=
přerušení od periferie povoleno
53
adresa
----
R/W
CCP2IE
0
92 h
Bank 1
PIE3 Peripheral Interrupt Enable 3 Register
R/W
R/W
R/W
R/W
-R/W
CCP5IE CCP4IE CCP3IE TMR6IE
-TMR4IE
0
0
0
0
-0
----
adresa
----
93 h
Bank 1
CCP5IE
CCP5 Interrupt Enable
CCP4IE
CCP4 Interrupt Enable
CCP3IE
CCP3 Interrupt Enable
TMR6IE
TMR6 to PR6 Match Interrupt Enable
TMR4IE
TMR4 to PR4 Match Interrupt Enable
0=
přerušení od periferie zakázáno
1=
přerušení od periferie povoleno
PIR1
R/W
TMR1GIF
0
R/W
ADIF
0
PIR2
R/W
OSFIF
0
R/W
C2IF
0
Peripheral Interrupt Request 1 Register
R
R
R/W
R/W
R/W
RCIF
TXIF
SSPIF
CCP1IF TMR2IF
0
0
0
0
0
Peripheral Interrupt Request 2 Register
R/W
R/W
R/W
R/W
C1IF
EEIF
BCLIF
LCDIF
0
0
0
0
adresa
R/W
TMR1IF
0
adresa
----
Peripheral Interrupt Request 3 Register
R/W
R/W
R/W
-R/W
CCP4IF CCP3IF TMR6IF
-TMR4IF
0
0
0
-0
R/W
CCP2IF
0
0=
1=
R/W
CCP5IF
0
----
žádný požadavek přerušení od periferie
požadavek přerušení od periferie nastaven
Registry, jejichž obsah má vliv na funkci přerušení. Bity v šedých polích CCP nevyužívá.
54
12 h
Bank 0
adresa
PIR3
----
11 h
Bank 0
13 h
Bank 0
11. Časovač WDT (Watchdog Timer)
Časovač WDT generuje signál Reset, jestliže program nevykoná instrukci clrwdt během
nastavené periody časovače. Časovač WDT je typicky používán k vyvedení mikrořadiče
z neočekávaného stavu.
Časovač WDT může pracovat ve čtyřech módech, které se nastavují bity WDTE<1:0>
v konfiguračním registru _CONFIG1
7
/CP
1
6
MCLRE
1
_CONFIG1 Config 1 Register Low Byte
5
4
3
2
WDTE0
/PWRTE WDTE1
FOSC2
1
1
1
1
adresa
1
FOSC1
1
0
FOSC0
1
8007 h
Flash
WDTE1 : WDTE0 Watchdog Timer Enable bit – povolení časovače WDT
11 = časovač WDT povolen, symbol _WDTE_ON
10 = časovač WDT povolen a zakázán ve Sleep módu, symbol _WDTE_NSLEEP
01 = časovač WDT nastaven bitem SWDTEN v registru WDTCON, symbol _WDTE_SWDTEN
00 = časovač WDT zakázán, symbol _WDTE_OFF
V ladícím režimu na MPLAB IDE musí být WDT zakázán
Časovač WDT je 23 bitový dělič s vlastním vnitřním oscilátorem 31 kHz, z kterého je odvozena
perioda časovače od 1ms do 256 s. Časovač je nulován kteroukoliv z událostí:
- jakýkoliv Reset
- instrukce clrwdt
- vstupem do módu Sleep
- výstupem z módu Sleep
- výpadkem oscilátoru
- zákazem WDT
----
----
WDTCON Watchdog Timer Control Register
R/W
R/W
R/W
R/W
R/W
R/W
WDTPS4 WDTPS3 WDTPS2 WDTPS1 WDTPS0 SWDTEN
0
1
0
1
1
0
WDTPS4 : WDTPS0 Watchdog Timer Period Select Bits
00000 =
1:32 (interval cca 1ms)
00001 =
1:64 (interval cca 2ms)
:
01010 =
01011 =
1:32768 (interval cca 1s)
1:65536 (interval cca 2s, hodnota po stavu Reset)
:
10001 =
10010 =
1: 222 (interval cca 128s)
1: 223 (interval cca 256s)
10011 =
reserved (interval cca 1ms)
:
11111 =
reserved (interval cca 1ms)
Všechny hodnoty intervalu jsou v originál dokumentu.
SWDTEN
Software Enable/Disable WDT Bit
If WDTE1:WDTE0 = 01 pak
0=
WDT zakázán
1=
WDT povolen
55
adresa
97 h
Bank 1
12. Reset
Stav Reset mikrořadiče může být vyvolán několika způsoby. Signál Reset nuluje obsah čítače
programu a nastavuje obsah některých registrů na definovaný obsah.
Signál Reset může být vyvolán:
- připojením napájecího napětí VDD na mikrořadič, stav POR (Power On Reset)
- poklesem napětí VDD pod danou mez a opětným vzestupem, stav BOR (Brown Out Reset)
- aktivací pinu MCLR (Manual Clear)
- přeplněním časovače WDT (Watch Dog Timer)
- instrukcí reset
- přetečením zásobníku
- ukončením programování paměti Flash
12.1. Power On Reset (POR), Reset po připojení napájecího napětí
Po připojení napájecího napětí VDD je generován signál Reset po dosažení úrovně VPOR=1,6V..
Pro spolehlivý náběh některých obvodů mikrořadiče může být zařazena prodleva 64ms po
dosažení úrovně VPOR. Prodlevu generuje časovač PWRT, pokud je povolen nulováním bitu
PWRTE v registru _CONFIG1
7
/CP
1
6
MCLRE
1
_CONFIG1 Config 1 Register Low Byte
5
4
3
2
/PWRTE WDTE1
WDTE0
FOSC2
1
1
1
1
adresa
1
FOSC1
1
0
FOSC0
1
8007 h
Flash
/PWRTE
Power-Up Timer Enable bit – zpoždění programu při zapnutí napájení
1 = zpoždění zakázáno, symbol _PWRTE_OFF
0 = zpoždění povoleno, symbol _PWRTE_ON
12.2. Brown Out Reset (BOR), Reset po poklesu napájecího napětí pod danou mez
Při poklesu napájecího napětí pod úroveň VBOR je generován signál Reset
Hodnota VBOR může být nastavena bitem BORV v registru _CONFIG2
15
-1
14
-1
_CONFIG2 Config 1 Register High Byte
13
12
11
10
9
LVP
/DEBUG
-BORV STVREN
1
1
1
1
1
adresa
8
PLLEN
1
8008 h
Flash
BORV
Brown-Out Reset Voltage Selection bit – napětí pro aktivaci BOR
1 = napětí pro aktivaci BOR je 1.9V, symbol _BORV_19 nebo _BORV_LO
0 = napětí pro aktivaci BOR je 2.5V, symbol _BORV_25 nebo _BORV_HI
Modul BOR může být nastaven do čtyř režimů bity BOREN v registru _CONFIG1
15
-1
14
-1
_CONFIG1 Config 1 Register High Byte
13
12
11
10
9
FCMEN
IESO /CLKOUTEN BOREN1 BOREN0
1
1
1
1
1
adresa
8
/CPD
1
8007 h
Flash
BOREN1 : BOREN0
Brown-out Reset bit – Reset při poklesu napájecího napětí
11 = Brown-out Reset povolen, symbol _BOREN_ON
10 = Brown-out Reset povolen, zakázán v režimu Sleep, symbol _BOREN_NSLEEP
01 = Brown-out Reset nastaven bitem SBOREN v registru BORCON, symbol _BOREN_SBODEN
00 = Brown-out Reset zakázán, symbol _BOREN_OFF
56
R/W
SBOREN
1
----
BORCON
----
Brown-Out Reset Control Register
----------
adresa
----
R
BORRDY
q
116 h
Bank 2
SBOREN
Software Brown-Out Reset Enable bit – Programové řízení BOR
Když BOREN<1:0> = 01
1 = BOR je povolen
0 = BOR je zakázán
BORRDY
Brown-Out Reset Circuit Ready Status bit – příznak aktivity BOR
1 = BOR je aktivní
0 = BOR je neaktivní
Při poklesu napájecího napětí VDD pod úroveň VBOR je vyvolán stav Reset, obsah registrů RAM
se nemění.
Při poklesu napájecího napětí VDD pod úroveň 1,5 V je obsah registrů ztracen a obnoví se na
definované hodnoty dalším stavem Reset.
12.3. Reset aktivací pinu /MCLR
Nastavením úrovně L na pinu /MCLR je vyvolán stav Reset. Pin /MCLR je připojen na napětí
VDD přes vnitřní Pull-Up rezistor.
Funkce pinu /MCLR je konfigurována bity MCLRE a LVP v registrech _CONFG1 a _CONFIG2
7
/CP
1
15
-1
6
MCLRE
1
14
-1
_CONFIG1 Config 1 Register Low Byte
5
4
3
2
/PWRTE WDTE1
WDTE0
FOSC2
1
1
1
1
adresa
1
FOSC1
1
_CONFIG2 Config 1 Register High Byte
13
12
11
10
9
LVP
/DEBUG
-BORV STVREN
1
1
1
1
1
0
FOSC0
1
8007 h
Flash
adresa
8
PLLEN
1
8008 h
Flash
MCLRE
MCLR pin function bit – funkce pinu RE3 / MCLR
Když bit LVP=0 tak:
1 = pin RE3 je konfigurován jako vstup /MCLR (Manual Clear), symbol _MCLRE_ON
0 = pin RE3 je digitální vstup pro všeobecné použití, symbol _MCLRE_OFF
Když bit LVP=1 tak je bit MCLRE ignorován
Když je Reset na pinu zakázán, má pin finkci standardního vstupu.
Pin je opatřen filtrem, který detekuje a ignoruje krátké impulzy.
12.4. Reset přeplněním časovače WDT
Časovač WDT generuje signál Reset, jestliže program nevykoná instrukci clrwdt během
nastavené periody časovače.
Bity NOT_TO a NOT_PD v registru STATUS jsou nulovány.
12.5. Reset programem
Instrukce reset vyvolá stav Reset. Bit RI v registru PCON je nulován.
57
12.6. Reset přetečením / podtečením zásobníku Stack
Při uložení více než 16 adres do zásobníku nebo vyzvednutí více než 16 adres ze zásobníku.
Reset je povolen bitem STVREN v registru _CONFIG2
_CONFIG2 Config 1 Register High Byte
adresa
15
14
13
12
11
10
9
8
8008 h
--LVP
/DEBUG
-BORV STVREN PLLEN
Flash
1
1
1
1
1
1
1
1
STVREN
Stack Overflow/Underflow Reset Enable bit – reset při přeplnění zásobníku
1 = přeplnění nebo vyprázdnění zásobníku způsobí RESET, symbol _STVREN_ON
0 = přeplnění nebo vyprázdnění zásobníku nezpůsobí RESET, symbol _STVREN_OFF
Bity STKOVF nebo STKUNF v registru PCON indikují podmínky, za kterých byl Reset vyvolán.
12.7. Reset po ukončení zápisu do paměti Flash
Výstup z režimu programování paměti Flash způsobí Reset jako při zapnutí napájení (POR).
12.8. Časovač Power-Up
Po vyvolání stavu POR nebo BOR může být spuštěn časovač Power-Up, který podrží
mikrořadič ve stavu Reset, aby napájecí napětí VDD mohlo dosáhnout dostatečné a stabilní
hodnoty. Doba časovače je závislá na konfiguraci oscilátoru a časovače Power-Up a je typicky
40ms až 140ms.
Časovač je povolen bitem /PWRTE v registru _CONFIG1
7
/CP
1
6
MCLRE
1
_CONFIG1 Config 1 Register Low Byte
5
4
3
2
/PWRTE WDTE1
WDTE0
FOSC2
1
1
1
1
adresa
1
FOSC1
1
0
FOSC0
1
/PWRTE
Power-Up Timer Enable bit – zpoždění programu při zapnutí napájení
1 = zpoždění zakázáno, symbol _PWRTE_OFF
0 = zpoždění povoleno, symbol _PWRTE_ON
Stav speciálních registrů po vyvolání Reset.
58
8007 h
Flash
13. Instrukční soubor mikrořadičů PIC16F
13.1. Struktura instrukce
Instrukční soubor má 49 instrukcí, každá má délku 14 bitů. Každá instrukce obsahuje kód
instrukce a až dva operandy.
kód
zdrojový
cílový
instrukce
operand
operand
nop
příklad instrukce bez operandu
; prázdná instrukce
clrw
; vynuluje W registr
instrukce bez zdrojového operandu, cílový operand (W registr) je součástí kódu instrukce
movlw
05
; uloží konstantu 05h do W registru
cílový operand (W registr) je součástí kódu instrukce
movwf
TRISD
; zkopíruje W registr do registru TRISD
zdrojový operand (W registr) je součástí kódu instrukce
movf
PORTD,
0
; zkopíruje PORTD do W registru
cílový operand (W registr) je určen hodnotou 0
decf
Counter,
1
; uloží hodnotu Counter - 1 do Counter
cílový operand (Counter registr) je určen hodnotou 1
Operace přesunů mezi registry a uložení konstanty do registru musí být provedeny přes registr
W (Working register), musí být vykonány pomocí dvou instrukcí.
Všechny instrukce, které mají jako operand registr (file) pracují v módu Read – Modify – Write,
tedy obsah registru je čten, obsah je změněn a výsledek je zapsán do cílového operandu.
Většina instrukcí je vykonána v jednom instrukčním cyklu, který je složen ze čtyř taktů
hodinového kmitočtu. Při taktovacím kmitočtu 4MHz je instrukce vykonána za 1s.
Instrukce s podmíněným skokem a instrukce, které mění obsah čítače programu, jsou vykonány
ve dvou instrukčních cyklech.
Instrukce jsou rozděleny do tří skupin
- bytově orientované operace, operandem je celý byte (registr)
incf
Counter,
1
; inkrementuje Counter, výsledek uloží do Counter
- bitově orientované, operandem je určený bit určeného byte (registru)
bsf
STATUS,
RP0
; nastaví bit RP0 registru STATUS
- operace s přímým operandem (konstantou) a řídící operace
movlw
5A
; uloží konstantu 5Ah do registru W
goto
Start
; nepodmíněný skok na návěští Start
nop
; prázdná instrukce
59
13.2. Přehled instrukcí
mnemonika funkce
cykly
Bytově orientované instrukce
addwf f, d Add W and f
1
addwfc f, d Add with Carry W and f
1
andwf f, d
AND W with f
1
asrf
f, d
Arithmetic Right Shift
1
lslf
f, d Logical Left Shift
1
lsrf
f, d
Logical Right Shift
1
clrf
f
Clear f
1
clrw
Clear W
1
comf
f, d
Complement f
1
decf
f, d
Decrement f
1
decfsz f, d
Decrement f, Skip if 0
1 (2)
incf
f, d
Increment f
1
incfsz f, d
Increment f, Skip if 0
1 (2)
iorwf f, d
Inclusive OR W with f
1
movf
f, d
Move f
1
movwf f
Move W to f
1
rlf
f, d
Rotate Left f through Carry
1
rrf
f, d
Rotate Right f through Carry
1
subwf f, d
Subtract W from f
1
subwfb f, d
Subtract with Borrow W from f 1
swapf f, d
Swap nibbles in f
1
xorwf f, d
Exclusive OR W with f
1
Bitově orientované instrukce
bcf
f, b
Bit Clear f
1
bsf
f, b
Bit Set f
1
btfsc f, b
Bit Test f, Skip if Clear
1 (2)
btfss f, b
Bit Test f, Skip if Set
1 (2)
Instrukce s přímým operandem (konnstantou)
addlw k
Add literal and W
1
andlw k
AND literal with W
1
iorlw k
Inclusive OR literal with W
1
movlb k
Move literal to BSR
1
movlp k
Move literal to PCLATH
1
movlw k
Move literal to W
1
sublw k
Subtract W from literal
1
xorlw k
Exclusive OR literal with W
1
f
d=0
d=1
b
k
14 bitů instrukce
status
00 0111 d f f f
11 1101 d f f f
00 0101 d f f f
11 0111 d f f f
11 0101 d f f f
11 0110 d f f f
00 0001 1 f f f
00 0001 0000
00 1001 d f f f
00 0011 d f f f
00 1011 d f f f
00 1010 d f f f
00 1111 d f f f
00 0100 d f f f
00 1000 d f f f
00 0000 1 f f f
00 1101 d f f f
00 1100 d f f f
00 0010 d f f f
11 1011 d f f f
00 1110 d f f f
00 0110 d f f f
ffff
ffff
ffff
ffff
ffff
ffff
ffff
00xx
ffff
ffff
ffff
ffff
ffff
ffff
ffff
ffff
ffff
ffff
ffff
ffff
ffff
ffff
C, DC, Z
C, DC, Z
Z
C, Z
C, Z
C, Z
Z
Z
Z
Z
01 00bb b f f f
01 01bb b f f f
01 10bb b f f f
01 11bb b f f f
ffff
ffff
ffff
ffff
11 1110 kkkk kkkk
11 1001 kkkk kkkk
11 1000 kkkk kkkk
00 0000 001kkkkk
11 0001 1kkk kkkk
11 0000 kkkk kkkk
11 110x kkkk kkkk
11 1010 kkkk kkkk
Z
Z
Z
C
C
C, DC, Z
C, DC, Z
Z
C, DC, Z
Z
Z
C, DC, Z
Z
7-bitová adresa registru, může adresovat 128 registrů tj. jedna banka paměti RAM
cílový operand je W
cílový operand je f
3-bitová adresa bitu, může adresovat 8 bitů (tj. bity 0 až 7)
8-bitová hodnota přímého operandu (konstanta) tj. hodnota 0 až 255
60
mnemonika funkce
Řídící instrukce
bra
k
Relative Branch
brw
Relative Branch with W
call
k
Call subroutine
callw
Call subroutine with W
goto k
Go to address
retfie
Return from interrupt
retlw k
Return with literal in W
return
Return from Subroutine
Inherentní instrukce
clrwdt
Clear Watchdog Timer
nop
No Operation
option
Load OPTION_REG with W
reset
Software Reset
sleep
Go into Sleep mode
tris
f
Load TRIS register with W
Instrukce pro optimalizaci C překladače
addfsr n, k
Add literal k to FSRn
moviw n, m Move FSRn to W
k[n] Move INDFn to W
movwi n, m Move W to FSRn
k[n] Move W to INDFn
f
k
k
n
m
cykly 14 bitů instrukce
status
2
2
2
2
2
2
2
2
11 001k kkkk kkkk
00 0000 0000 1011
10 0kkk kkkk kkkk
00 0000 0000 1010
10 1kkk kkkk kkkk
00 0000 0000 1001
11 0100 kkkk kkkk
00 0000 0000 1000
1
1
1
1
1
1
00 0000 0110 0100
00 0000 0000 0000
00 0000 0110 0010
00 0000 0000 0001
00 0000 0110 0011
00 0000 0110 0 f f f
1
1
1
1
1
11 0001 0nkk kkkk
00 0000 0001 0nmm Z
Z
11 1111 0nkk kkkk
00 0000 0001 1nmm
11 1111 1nkk kkkk
/TO, /PD
/TO, /PD
7-bitová adresa registru, může adresovat 128 registrů tj. jedna banka paměti RAM
přímý operand (konstanta), 6, 8 nebo 9 bitů
11-bitová adresa (call a goto), může adresovat 2K instrukcí tj. 1 stránka paměti Flash
n=0 pro FSR0 a INDF0 nebo n=1 pro FSR1 a INDF1
inkrement / dekrement při nepřímém adresování
/TO Time-Out Status Bit NOT_TO
0 = naplněn interval časovače WDT (Watch Dog Timer)
1 = po zapnutí napájení nebo po instrukcích clrwdt nebo sleep
/PD Pover Down Status Bit NOT_PD
0 = po instrukci sleep
1 = po zapnutí napájení nebo po instrukci clrwdt
Z Zero Flag Bit
0 = výsledek logické nebo aritmetické operace není 0
1 = výsledek logické nebo aritmetické operace je 0
DC Decimal Carry Flag Bit
0 = výsledek operace bez přenosu ze 4 bitu
1 = výsledek operace s přenosem ze 4 bitu
Pro instrukce addwf , addlw , subwf , sublw. Při výpůjčce (Borrow) je bit DC reverzní.
C Carry Flag Bit
0 = výsledek operace bez přenosu z nejvyššího bitu
1 = výsledek operace s přenosem z nejvyššího bitu
Pro instrukce addwf , addlw , subwf , sublw. Při výpůjčce (Borrow) je bit C reverzní.
61
13.3. Formát instrukcí
Bytově orientované instrukce
13
8
kód instrukce
7
d
6
f
f
f
f
f
0
f
f
0
f
k
0
k
f
d = 0 cílový operand je W
d = 1 cílový operand je f
f
7-bitová adresa, může adresovat 128 registrů tj. jedna banka paměti RAM
Bitově orientované instrukce
13
10
kód instrukce
9
b
b
7
b
6
f
f
f
f
f
3-bitová adresa bitu
7-bitová adresa, může adresovat 128 registrů tj. jedna banka paměti RAM
b
f
Instrukce s přímým operandem
13
8
kód instrukce
7
k
k
k
k
k
k
8-bitová hodnota přímého operandu (konstanta) tj. hodnota 0 až 255
k
Instrukce CALL a GOTO
13
11
10
kód instrukce
k
k
k
k
k
k
k
k
k
k
k
11-bitová adresa, může adresovat 2K instrukcí tj. 1 stránka paměti Flash
0
k
Instrukce pro nepřímé adresování
13
7
kód instrukce
n
k
6
n
k
k
k
k
0
k
2
n
1
m
0
m
0 pro FSR0 nebo 1 pro FSR1
6-bitová hodnota přímého operandu (konstanta) tj. hodnota 0 až 63
13
3
kód instrukce
n
m
5
k
0 pro FSR0 nebo 1 pro FSR1
2-bitová hodnota inkrementu / dekrementu
62
13.4. Popis instrukcí
addfsr
Syntaxe:
Operace:
Status:
Popis:
addlw
Syntaxe:
Operace:
Status:
Popis:
Příklad:
addwf
Syntaxe:
Operace:
Status:
Popis:
Příklad:
addwfc
Syntaxe:
Operace:
Status:
Popis:
andlw
Syntaxe:
Operace:
Status:
Popis:
Příklad:
Add Literal to FSRn
addfsr FSRn,k
-32 k  +31
n=0 nebo 1
FSRn + k  FSRn
-šestibitová konstanta k se znaménkem je přičtena k registru FSRnH:FSRnL
Add Literal and W
addlw
k
0 k  255
W + k W
C, DC, Z
obsah registru W je přičten k osmibitové konstantě k a výsledek je uložen do W
addlw 15
před instrukcí
W = 10h
po instrukci
W = 25h
Add W and f
addwf f, d
0  f  127
d = 0 nebo 1
W + f destination
C, DC, Z
obsahy registrů W a f jsou sečteny, výsledek je uložen do W když d = 0
obsahy registrů W a f jsou sečteny, výsledek je uložen do f když d = 1
addwf FSR, 0
před instrukcí
W = 17h, FSR = C2h
po instrukci
W = D9h, FSR = C2h
addwf INDF, 1
před instrukcí
W = 17h, obsah FSR = 20h
po instrukci
W = 17h, obsah FSR = 37h
Add W and Carry bit to f
addwfc f, d
0  f  127
d = 0 nebo 1
W + f + C destination
C, DC, Z
obsahy registrů W a f jsou sečteny s C, výsledek je uložen do W když d = 0
obsahy registrů W a f jsou sečteny s C, výsledek je uložen do f když d = 1
AND Literal with W
andlw k
0 k  255
W AND k W
Z
logická operace AND obsahu registru W s konstantou k, výsledek je uložen do W
andlw 5F
před instrukcí
W = A3h = 1010 0011b
k = 5Fh = 0101 1111b
po instrukci
W = 03h = 0000 0011b
63
andwf
Syntaxe:
Operace:
Status:
Popis:
Příklad:
asrf
Syntaxe:
Operace:
Status:
Popis:
bcf
Syntaxe:
Operace:
Status:
Popis:
Příklad:
bra
Syntaxe:
Operace:
Status:
Popis:
brw
Syntaxe:
Operace:
Status:
Popis:
bsf
Syntaxe:
Operace:
Status:
Popis:
Příklad:
AND W with f
andwf f, d
0  f  127
d = 0 nebo 1
W AND f destination
Z
logická operace AND obsahu registrů W a f, výsledek do W když d = 0
logická operace AND obsahu registrů W a f, výsledek do f když d = 1
andwf FSR, 1
před instrukcí
W = 17h = 0001 0111b
FSR = C2h =1100 0010b
po instrukci
W = 17h
FSR = 02h = 0000 0010b
Arithmetic Right Shift
asrf f, d
0  f  127
d = 0 nebo 1
f<7> dest<7>
f<7:1> dest<6:0>
f<0> C
C, Z
obsah registru f je posunut o jeden bit doprava, LSB do C, MSB se nemění
výsledek do W když d = 0 , výsledek do f když d = 1
Bit Clear f
bcf
f, b
0  f  127
0b7
0 f <b>
-bit b v registru f je vynulován
bcf
STATUS, 6
před instrukcí
STATUS = E7h = 1110 0111b
po instrukci
STATUS = A7h = 1010 0111b
Relative Branch
bra k
-256  f  +255
PC +1 + k PC
-obsah PC je inkrementován a přičtena 9-bit konstanta se znaménkem
Relative Branch with W
brw
PC +1 + W PC
-obsah PC je inkrementován a přičten obsah registru W
Bit Set f
bsf
f, b
0  f  127
0b7
1 f <b>
-bit b v registru f je nastaven na hodnotu 1
bsf
STATUS, 5
před instrukcí
STATUS = 0Ah = 0000 1010b
po instrukci
STATUS = 2Ah = 0010 1010b
64
btfsc
Syntaxe:
Operace:
Status:
Popis:
btfss
Syntaxe:
Operace:
Status:
Popis:
call
Syntaxe:
Operace:
Status:
Popis:
Příklad:
callw
Syntaxe:
Operace:
Status:
Popis:
clrf
Syntaxe:
Operace:
Status:
Popis:
Příklad:
Bit Test, Skip if Clear
btfsc f, b
0  f  127
0b7
skip iff <b> = 0
-když bit b v registru f je 0 pak následující instrukce je vykonána jako nop
Bit Test, Skip if Set
btfss f, b
0  f  127
0b7
skip iff <b> = 1
-když bit b v registru f je 1 pak následující instrukce je vykonána jako nop
Call Subroutine
call
k
0  k  2047
PC + 1 Top of Stack (TOS)
k PC<10:0>
PCLATH <6:3> PC<14:11>
-13-bitová návratová adresa PC+1 je uložena do zásobníku
11-bitová adresa k je uložena do PC<10:0>
nejvyšší čtyři bity PC jsou nataženy z PCLATH<6:3>
Here: call
There
před instrukcí PC = Here
po instrukci PC = There , TOS = Here + 1
Call Subroutine with W
callw
PC + 1 Top of Stack (TOS)
W PC<7:0>
PCLATH <6:0> PC<14:8>
-13-bitová návratová adresa PC+1 je uložena do zásobníku
8-bitová adresa W je uložena do PC<7:0>
nejvyšší bity PC jsou nataženy z PCLATH<6:0>
Clear f
clrf
f
0  f  127
00h f
1 Z
Z
obsah registru f je vynulován, příznak Z je nastaven na hodnotu 1
clrf TRISD
před instrukcí TRISD = 5Ah
po instrukci TRISD = 00h, Z = 1
65
clrw
Syntaxe:
Operace:
Status:
Popis:
Příklad:
clrwdt
Syntaxe:
Operace:
Status:
Popis:
Příklad:
comf
Syntaxe:
Operace:
Status:
Popis:
Příklad:
decf
Syntaxe:
Operace:
Status:
Popis:
Příklad:
decfsz
Syntaxe:
Operace:
Status:
Popis:
Příklad:
Clear W
clrw
00h W
1 Z
Z
obsah registru W je vynulován, příznak Z je nastaven na hodnotu 1
clrw
před instrukcí W = 5Ah
po instrukci W = 00h, Z = 1
Clear Watchdog Timer
clrwdt
00h WDT
0 WDT předdělička
1 NOT_TO
1 NOT_PD
NOT_TO, NOT_PD
časovač WDT i předdělička vynulovány, příznaky NOT_TO a NOT_PD nastaveny
clrwdt
před instrukcí WDT = xx
po instrukci WDT = 00, prescaler count= 0
Complement f
comf
f, d
0  f  127 d = 0 nebo 1
NON f destination
Z
obsah registru f je invertován po bitech, výsledek do W když d = 0
obsah registru f je invertován po bitech, výsledek do f když d = 1
comf Reg1, 0
před instrukcí Reg1 = 13h = 0001 0011b
po instrukci
W = ECh = 1110 1100b
Reg1 = 13h = 0001 0011b
Decrement f
decf
f, d
0  f  127 d = 0 nebo 1
f - 1 destination
Z
obsah registru f je dekrementován (zmenšen o 1), výsledek do W když d = 0
obsah registru f je dekrementován (zmenšen o 1), výsledek do f když d = 1
decf Count, 1
před instrukcí Count = 02h
po instrukci Count = 01h
Decrement f, Skip if 0
decfsz f, d
0  f  127 d = 0 nebo 1
f - 1 destination, skip if f-1= 0
-obsah registru f je dekrementován (zmenšen o 1), výsledek do W když d = 0
obsah registru f je dekrementován (zmenšen o 1), výsledek do f když d = 1
když výsledek je 0 pak následující instrukce je vykonána jako nop
Loop: decfsz Count, 1
před instrukcí PC = Loop, Count = 01h
goto Loop
po instrukci PC = Continue, Count = 00h
Continue:
66
goto
Syntaxe:
Operace:
Status:
Popis:
Příklad:
incf
Syntaxe:
Operace:
Status:
Popis:
Příklad:
incfsz
Syntaxe:
Operace:
Status:
Popis:
Příklad:
iorlw
Syntaxe:
Operace:
Status:
Popis:
Příklad:
iorwf
Syntaxe:
Operace:
Status:
Popis:
Go to address, nepodmíněný skok
goto k
0  k  2047
k PC<10:0>
PCLATH<6:3> PC<14:11>
-nepodmíněný skok na adresu k
11-bitová adresa k je uložena do PC<10:0>
nejvyšší čtyři bity PC jsou nataženy z PCLATH<6:3>
Here: goto 200
před instrukcí PC = Here
po instrukci PC = 200h
Increment f
incf
f, d
0  f  127 d = 0 nebo 1
f + 1 destination
Z
obsah registru f je inkrementován (zvětšen o 1), výsledek do W když d = 0
obsah registru f je inkrementován (zvětšen o 1), výsledek do f když d = 1
incf Count, 1
před instrukcí Count = FFh
po instrukci Count = 00h, Z = 1
Increment f, Skip if 0
incfsz f, d
0  f  127 d = 0 nebo 1
f + 1 destination, skip if f+1= 0
-obsah registru f je inkrementován (zvětšen o 1), výsledek do W když d = 0
obsah registru f je inkrementován (zvětšen o 1), výsledek do f když d = 1
když výsledek je 0 pak následující instrukce je vykonána jako nop
Loop: incfsz Count, 1
před instrukcí PC = Loop, Count = FFh
goto Loop
po instrukci PC = Continue, Count = 00h
Continue:
Inclusive OR Literal with W
iorlw k
0 k  255
W OR k W
Z
logická operace OR obsahu registru W s konstantou k, výsledek je uložen do W
iorlw 35
před instrukcí W = 9Ah = 1001 1010b
k = 35h = 0011 0101b
po instrukci W = BFh = 1011 1111b
Inclusive OR W with f
iorwf f, d
0  f  127
d = 0 nebo 1
W OR f destination
Z
logická operace OR obsahu registrů W a f, výsledek do W když d = 0
logická operace OR obsahu registrů W a f, výsledek do f když d = 1
67
lslf
Syntaxe:
Operace:
Status:
Popis:
lsrf
Syntaxe:
Operace:
Status:
Popis:
movf
Syntaxe:
Operace:
Status:
Popis:
movlb
Syntaxe:
Operace:
Status:
Popis:
movlp
Syntaxe:
Operace:
Status:
Popis:
movlw
Syntaxe:
Operace:
Status:
Popis:
Příklad:
Logical Left Shift
lslf f, d
0  f  127
d = 0 nebo 1
f<7> C
f<6:0> dest<7:1>
0 dest<0>
C, Z
obsah registru f je posunut o jeden bit doleva, MSB do C, LSB je nulován
výsledek do W když d = 0 , výsledek do f když d = 1
Logical Right Shift
lsrf f, d
0  f  127
d = 0 nebo 1
0 dest<7>
f<7:1>  dest<6:0>
f<0> C
C, Z
obsah registru f je posunut o jeden bit doprava, MSB je nulován, LSB do C
výsledek do W když d = 0 , výsledek do f když d = 1
Move f
movf f, d
0  f  127
d = 0 nebo 1
f destination
Z
obsah registru f je přesunut do W když d = 0
obsah registru f je přesunut do f když d = 1 (použitelné pro test obsahu f)
Move Literal to BSR
movlb k
0 k  15
k BSR
-pětibitová konstanta k je uložena do BSR
Move Literal to PCLATH
movlp k
0 k  127
k PCLATH
-sedmibitová konstanta k je uložena do PCLATH
Move Literal to W
movlw k
0 k  255
k W
-osmibitová konstanta k je uložena do W
movlw 5A
před instrukcí
po instrukci
68
W = xxxx
k = 5Ah
W = 5Ah
movwf
Syntaxe:
Operace:
Status:
Popis:
Příklad:
nop
Syntaxe:
Operace:
Status:
Popis:
Příklad:
option
Syntaxe:
Operace:
Status:
Popis:
reset
Syntaxe:
Operace:
Status:
Popis:
retfie
Syntaxe:
Operace:
Status:
Popis:
Příklad:
Move W to f
movwf f
0  f  127
W f
-obsah registru W je přesunut do f
movwf Reg1
před instrukcí W = 47h
Reg1 = FFh
po instrukci W = 47h
Reg1 = 47h
No Operation
nop
No operation
-žádná operace, čítač programu inkrementuje
nop
před instrukcí PC = xx
po instrukci PC = PC + 1
Load OPTION_REG with W
option
W OPTION_REG
-obsah registru W je přesunut do OPTION_REG
Software Reset
reset
0 RI bit v registru PCON
-Reset mikrořadiče, nastavení příznaku RI (Reset Instruction)
Return from Interrupt
retfie
TOS  PC (Top of Stack to Program Counter)
1 GIE (General Interrupt Enable)
-13-bitová adresa ze zásobníku je uložena do PC
GIE, sedmý bit registru INTCON je nastaven na hodnotu 1, přerušení povoleno
retfie
před instrukcí PC = xxxx
po instrukci PC = TOS, GIE = 1
69
retlw
Syntaxe:
Operace:
Status:
Popis:
Příklad:
return
Syntaxe:
Operace:
Status:
Popis:
Příklad:
rlf
Syntaxe:
Operace:
Status:
Popis:
Příklad:
rrf
Syntaxe:
Operace:
Status:
Popis:
Příklad:
Return with Literal in W
retlw k
0 k  255
k  W
TOS  PC (Top of Stack to Program Counter)
-osmibitová konstanta k je uložena do W
13-bitová adresa ze zásobníku je uložena do PC
Here: call
Table ; W obsahuje počáteční adresu tabulky
po instrukci W = 8
Table: addwf
PCL,0
PC = TOS = Here + 1
retlw
1
; začátek tabulky
xx
retlw
8
; konec tabulky
Return from Subroutine
return
TOS  PC (Top of Stack to Program Counter)
-13-bitová adresa ze zásobníku je uložena do PC
return
před instrukcí PC = xxxx
po instrukci PC = TOS
Rotate Left f through Carry
rlf
f, d
0  f  127
d = 0 nebo 1
viz příklad
C
obsah registru f rotuje o 1 bit vlevo včetně příznaku C, výsledek do W když d = 0
obsah registru f rotuje o 1 bit vlevo včetně příznaku C, výsledek do f když d = 1
rlf
Reg1, 0
před instrukcí Reg1 = E6h = 1110 0110b
C=0
po instrukci
Reg1 = E6h = 1110 0110b
W = BBh = 1100 1100b
C=1
Rotate Right f through Carry
rrf
f, d
0  f  127
d = 0 nebo 1
viz popis
C
obsah registru f rotuje o 1 bit vpravo včetně příznaku C, výsledek do W když d = 0
obsah registru f rotuje o 1 bit vpravo včetně příznaku C, výsledek do f když d = 1
rrf
Reg1, 1
před instrukcí Reg1 = E6h = 1110 0110b
C=0
po instrukci
Reg1 = 73h = 0111 0011b
C=0
70
sleep
Syntaxe:
Operace:
Status:
Popis:
Příklad:
sublw
Syntaxe:
Operace:
Status:
Popis:
Příklad:
subwf
Syntaxe:
Operace:
Status:
Popis:
Příklad:
subwfb
Syntaxe:
Operace:
Status:
Popis:
Sleep
sleep
00h WDT
0 WDT předdělička
1 NOT_TO
0 NOT_PD
NOT_TO, NOT_PD
mikrořadič je uveden do stavu Sleep, oscilátor je zastaven
časovač WDT i předdělička vynulovány, NOT_PD nulován, NOT_TO nastaven
sleep
Subtract W from Literal
sublw
k
0 k  255
k - W W
C, DC, Z
obsah registru W je odečten od osmibitové konstanty k a výsledek je uložen do W
sublw
02
před instrukcí
W = 01h
po instrukci
W = 01h, C = 1, Z = 0
sublw
02
před instrukcí
W = 02h
po instrukci
W = 00h, C = 1, Z = 1
sublw
02
před instrukcí
W = 03h
po instrukci
W = FFh, C = 0, Z = 0
sublw
Myreg
před instrukcí
W = 10h
adresa registru Myreg = 37h
po instrukci
W = 27h, C = 1
Subtract W from f
subwf f, d
0  f  127
d = 0 nebo 1
f - W destination
C, DC, Z
obsah registru W je odečten od registru f , výsledek je uložen do W když d = 0
obsah registru W je odečten od registru f , výsledek je uložen do f když d = 1
subwf
Reg1, 1
před instrukcí
W
= 02h
Reg1 = 03h
po instrukci
W
= 02h
Reg1 = 01h
Subtract W from f with Borrow
subwf f, d
0  f  127
d = 0 nebo 1
f – W - B destination
C, DC, Z
obsah registru W je odečten od registru f , výsledek je uložen do W když d = 0
obsah registru W je odečten od registru f , výsledek je uložen do f když d = 1
71
swapf
Syntaxe:
Operace:
Status:
Popis:
Příklad:
tris
Syntaxe:
Operace:
Status:
Popis:
xorlw
Syntaxe:
Operace:
Status:
Popis:
Příklad:
xorwf
Syntaxe:
Operace:
Status:
Popis:
Příklad:
Swap Nibbles in f
swapf f, d
0  f  127
d = 0 nebo 1
f<3:0> destination <7:4>
f<7:4> destination <3:0>
-spodní a horní půlbyty registru f jsou zaměněny, výsledek do W když d = 0
spodní a horní půlbyty registru f jsou zaměněny, výsledek do f když d = 1
swapf
Reg1, 1
před instrukcí
Reg1 = A5h
po instrukci
Reg1 = 5Ah
Load TRIS register with W
tris
f
5f7
W TRISf
-když f=5, obsah registru W je přepsán do registru TRISA
když f=6, obsah registru W je přepsán do registru TRISB
když f=7, obsah registru W je přepsán do registru TRISC
Exclusive OR Literal with W
xorlw k
0 k  255
W XOR k W
Z
logická operace XOR obsahu registru W s konstantou k, výsledek je uložen do W
xorlw 0AF
před instrukcí
W = B5h = 1011 0101b
k = AFh = 1010 1111b
po instrukci
W = 1Ah = 0001 1010b
Exclusive OR W with f
xorwf f, d
0  f  127
d = 0 nebo 1
W XOR f destination
Z
logická operace XOR obsahu registrů W a f, výsledek do W když d = 0
logická operace XOR obsahu registrů W a f, výsledek do f když d = 1
xorwf Reg1, 1
před instrukcí W = B5h = 1011 0101b
Reg1 = AFh = 1010 1111b
po instrukci Reg1 = 1Ah = 0001 1010b
72
14. Assembler MPASM [2]
Assembler je strojově orientovaný programovací jazyk, ve kterém jsou psány zdrojové soubory
xxx.asm aplikačních programů pro mikrořadiče PIC16F.
14.1. Syntaktická pravidla assembleru MPASM
14.1.1. Příkazový řádek
Základním elementem zdrojového textu je příkazový řádek, který je rozdělen do čtyř polí, jejichž
pořadí a pozice na řádku musí být dodrženy
- label (návěští)
- mnemonics (instrukce, direktiva, makro)
- operands (operandy)
- commentary (komentář)
Příklad :
label mnemonics operands
commentary
#include
p16f1937.inc
Dest
equ
0B
; definice proměnné Dest
org
goto
00
Start
; reset vector
org
20
; začátek programu
movlw
movwf
bcf
goto
end
0A
Dest
Dest, 3
Start
; uloží konstantu 0Ah to W
; kopíruje W (0Ah) do proměnné Dest
; instrukce se dvěma operandy, nuluje třetí bit proměnné Dest
; smyčka
Start :
14.1.2. Label (návěští)
Návěští (label) je pojmenování jednoho nebo více řádků a slouží pro větvení programu.
Pravidla pro návěští jsou :
- začíná na prvním sloupci řádku
- může obsahovat až 32 znaků
- jako poslední znak má být mezera, Tab, „:“ (dvojtečka) nebo konec řádku (Enter)
- nesmí být použita vyhrazená slova tj. instrukce a direktivy
- jsou Case sensitive, tj. rozlišují se malá a velká písmena, Delay a DELAY jsou různá návěští
14.1.3. Mnemonics (instrukce, direktivy)
Instrukce jsou vyhražená slova (add, call, movwf) která jsou překládána do strojového kódu.
Direktivy jsou příkazy pro způsob překladu a nejsou překládány.
Pravidla:
- začínají na druhém nebo dalším sloupci řádku
- na prvním sloupci smí být jen direktiva jejíž první znak je # (mříže), např. #include
- pokud je label na stejném řádku s instrukcí, musí být oddělen znakem „:“ (dvojtečka)
- nejsou Case sensitive, MOVWF a movwf jsou shodné instrukce
73
14.1.4. Operandy
Operandy obsahují data, s kterými jsou prováděny operace a adresy uložení instrukcí. Každý
řádek může obsahovat až dva operandy.
Pravidla:
- operandy následují za instrukcí
- mezi instrukcí (direktivou) a operandem musí být jedna nebo více mezer
- dva operandy musí být odděleny znakem „ , “ (čárka)
- jsou Case sensitive, JEDNA a jedna jsou dva různé symboly operandů
14.1.5. Komentář
Komentář (poznámky) jsou texty, které vysvětlují funkci programu. Doporučuje se opatřit každý
zdrojový text dostatečným počtem komentářů. Komentář není překládán.
Pravidla:
- komentář následuje za operandy, může začínat na kterékoliv pozici řádku včetně první
- komentář začíná znakem „ ; “ (středník) a končí znakem konec řádku (Enter)
14.2. Konstanty
Assembler podporuje následující aritmetické konstanty
- hexadecimální
H‘9F‘
nebo h‘9F‘
nebo 9F
- dekadické
D‘100‘
nebo d‘100‘
- binární
B‘0100‘
nebo b‘0100‘
Ve standardních projektech v MPLAB IDE jsou ve výchozím nastavení konstanty interpretovány
jako hexadecimální, je tedy možné psát 9F místo H‘9F‘
Výchozí nastavení konstant je možné změnit direktivou radix.
Aritmetická konstanta musí začínat číslicí. Před hexadecimální konstanty začínající znaky A až
F musí být zapsána číslice 0, např 0A0 nebo 0FF.
14.3. Oprerátory
Aritmetické operátory mohou být použity spolu s direktivami a jejich proměnnými :
operátor
popis
příklad
$
obsah čítače programu
goto $+3
low
nižší byte adresy
movlw low Table
high
vyšší byte adresy
movlw high Table
*
násobení
a=b*c
/
dělení
a=b/c
=
rovná se
index = 0
Assembler MPASM podporuje cca 40 operátorů, uvedeny jsou jen ty nejčastěji použité ve
vzorových programech a při cvičení.
74
14.4. Direktivy
Direktivy jsou příkazy assembleru, které jsou součástí zdrojového textu, ale nejsou překládány
do spustitelného souboru. Direktivy určují postup překladu, nastavují vstupy, výstupy a umístění
dat.
Většina direktiv má více jmen a formátů kvůli podpoře starších verzí assembleru. Dále jsou
uvedeny jen direktivy a jejich formát použitý ve vzorových programech a cvičeních.
Direktivy nejsou Case Sensitive, END, End a end jsou totožné direktivy.
banksel
symbol
Nastaví assembler na banku RAM, která obsahuje symbol. Tento symbol musí být dříve
definován.
#include
p16f1937.inc ; obsahuje standardní definice symbolů pro PIC16F1937
banksel
TRISB
; nastavuje Banku 1 ve které je umístěn registr TRISB
clrf
banksel
TRISB
PORTB
; nuluje TRISB, nastavuje PORTB jako výstupy
; nastavuje banku 0 ve které je umístěn registr PORTB
movlw
movwf
goto $
end
55
PORTB
; ukládá hodnotu 55h na Port D
; každý program musí být ukončen direktivou end
cblock
address
Definuje seznam symbolů a určuje jejich adresy v paměti RAM.
address nastavuje adresu prvního symbolu seznamu, musí být umístěna do pole registrů GPR
(pro všeobecné použití). První adresa GPR v bance 0 mikrořadiče PIC16F1937 je 20h. Pokud
není definováno jinak, je symbolu přiřazen jeden registr (jeden byte).
Seznam symbolů končí direktivou endc.
cblock
Delay1
Delay2
20
; definuje registr Delay1 na adrese 020h
; definuje registr Delay2 na adrese 021h
endc
__config
výraz
Nastavuje konfigurační bity procesoru, který musí být předtím definován direktivou list nebo
v projektu MPLAB IDE volbou Configure / Select Device
Direktiva má být umístěna na začátku zdrojového textu. Výraz má obsahovat symboly bitů
použité v hlavičkovém souboru .inc pro daný typ mikrořadiče. Více bitů může být spojeno
znakem & (logický AND).
Direktiva začíná znaky __ (dvojí podtržení), pro řadu PIC18F má být používán formát config.
#include
p16F1937.inc
__config _CONFIG1, _BOR_OFF & _MCLRE_OFF & _PWRTE_ON
75
end
Konec zdrojového textu. Při překladu jednoho zdrojového textu musí být obsažena právě jedna
direktiva end. Pokud zdrojový text obsahuje soubor .inc, nesmí tento soubor obsahovat end.
#include
:
:
end
p16f1937.inc
; instrukce programu
; konec zdrojového textu
endc
Konec seznamu symbolů začínající direktivou cblock. Direktivy cblock a endc musí být vždy
v páru.
cblock
20
Delay1
Delay2
; Definuje dva registry
endc
symbol equ výraz
Hodnota výraz je přiřazena k symbol
Používá se zejména k přiřazení symbolu k adrese registru SFR
STATUS
TRISD
PORTD
PORTC
PCLATH
equ
equ
equ
equ
equ
03
88
08
07
0A
; místo adresy 03h může program používat symbol STATUS
; místo adresy 88h může program používat symbol TRISD
; místo adresy 08h může program používat symbol PORTD
#include file.inc
#include “c:\ Program Files \ myfile.inc”
Specifikovaný soubor file.inc je čten jako součást zdrojového textu na místě direktivy jako by
celý soubor byl skutečně na místě direktivy napsán.
Pokud je použit vlastní soubor .inc nebo pokud název souboru obsahuje mezery, musí být
uzavřen v uvozovkách.
#include
p16F1937.inc ; standardní include soubor
76
org
adresa
Definuje první adresu paměti Flash na kterou je uložen přeložený strojový kód. Obvykle
používané adresy pro mikrořadiče PIC16F jsou:
00h
reset vektor
04h
vektor rutiny pro ošetření přerušení
05h nebo vyšší
začátek uživatelského programu
#include
p16f1937.inc ; vložení standardní definice symbolů
org
goto
00
Main
; následující přeložená instrukce bude uložena na adresu 0h
; skok na adresu s návěštím Main
org
goto
04
int_routine
; následující přeložená instrukce bude uložena na adresu 04h
; skok na adresu s návěštím int_routine
org
10
; následující přeložená instrukce bude uložena na adresu 10h
Main
; hlavní program
; smyčka na návěští Main
Main
;
goto
org
100
int_routine
;
retfie
end
; následující přeložená instrukce bude uložena na adresu 100h
; obslužná rutina přerušení
; návrat z přerušení
radix
hex / dec / oct
Nastavuje radix (základ číselné soustavy) pro interpretaci dat. V projektech v MPLAB IDE je
výchozí nastavení hex a není ho nutné nastavovat.
movlw
movlw
movlw
D‘50‘ ; 50 je deklarováno jako dekadické číslo
O‘50‘ ; 50 je deklarováno jako oktalové (osmičkové) číslo
50
; 50 není deklarováno a je ve výchozím nastavení jako hexadecimální
radix
movlw
movlw
movlw
dec
H‘50‘ ; 50 je deklarováno jako hexadecimální číslo
O‘50‘ ; 50 je deklarováno jako oktalové (osmičkové) číslo
50
; 50 není deklarováno a je direktivou radix nastaveno jako dekadické
77
15. Elektrické parametry mikrořadičů PIC16(L)F
Originální text [1] definuje stovky elektrických parametrů. Zde je uvedeno jen několik
nejdůležitějších, dostačujících pro návrh jednoduchých konstrukcí.
Napájecí napětí
VDD
PIC16F1937
PIC16LF1937
Spotřeba
IDD
PIC16LF1937
PIC16F1937
Spotřeba ve Sleep
IPD
PIC16LF1937
PIC16F1937
1,8 – 5,5 V
2,3 – 5,5 V
1,8 – 3,6 V
2,3 – 3,6 V
Fosc  16 MHz
Fosc  32 MHz
Fosc  16 MHz
Fosc  32 MHz
9A
750A
5,0 mA
40 A
930 A
5,0 mA
VDD=3,0V, Fosc=32kHz
VDD=3,0V, Fosc=4 MHz
VDD=3,6V, Fosc=32 MHz
VDD=5,0V, Fosc=32 kHz
VDD=5,0V, Fosc=4 MHz
VDD=5,0V, Fosc=32 MHz
0,08 A
27 A
VDD=3,0V, periferie neaktivní
VDD=5,0V, periferie neaktivní
Flash
Počet zápisů/čtení
EP
Doba zápisu 1 slova TIW
Trvanlivost
TRET
10 0000
2 ms
40 let
Vstupní úroveň L
VIL
<0,8 V
VDD 4,5V
Vstupní úroveň H
VIH
>2,0 V
VDD 4,5V
Výstupní úroveň L
VOL
<0,6 V
Výstupní úroveň H
VOH
VDD-0,7 V
Výstupní proud
max 20 mA / pin
max 100 mA / Port
Ztrátový výkon
max 0,8 W
Teplota okolí
TA
-40°C TA -+85°C
-40°C TA -+125°C
78
PIC16(L)F1937 –I (Industrial)
PIC16(L)F1937 –E (Extended)
16. Vyráběné typy mikrořadičů PIC16F1937
typový znak
PIC16F1937-I/ML
PIC16F1937-I/MV
PIC16F1937-I/P
PIC16F1937-I/PT
PIC16F1937-E/ML
PIC16F1937-E/MV
PIC16F1937-E/P
PIC16F1937-E/PT
pouzdro
QFN 44
UQFN 40
DIP 40
TQFP 44
QFN 44
UQFN 40
DIP 40
TQFP 44
pracovní teploty
-40°C až +85°C
-40°C až +85°C
-40°C až +85°C
-40°C až +85°C
-40°C až +125°C
-40°C až +125°C
-40°C až +125°C
-40°C až +125°C
PIC16LF1937-I/ML
PIC16LF1937-I/MV
PIC16LF1937-I/P
PIC16LF1937-I/PT
PIC16LF1937-E/ML
PIC16LF1937-E/MV
PIC16LF1937-E/P
PIC16LF1937-E/PT
QFN 44
UQFN 40
DIP 40
TQFP 44
QFN 44
UQFN 40
DIP 40
TQFP 44
-40°C až +85°C
-40°C až +85°C
-40°C až +85°C
-40°C až +85°C
-40°C až +125°C
-40°C až +125°C
-40°C až +125°C
-40°C až +125°C
QFN 44
8x8x0,9 mm
UQFN 40
5x5x0,5 mm
DIP 40
52x15x6 mm
cena / 1ks (USD)
2.24
2.10
2.31
2.12
2.45
2.31
2.52
2.33
vzorky
X
X
X
2.24
2.10
2.31
2.12
2.45
2.31
2.52
2.33
TQFP 44
10x10x1 mm
Ceny jsou platné v červenci 2014
Vzorky označené X jsou dostupné u Microchip v omezeném množství zdarma (bez záruky !)
17. Literatura
[1] PIC16(L)F1934/6/7 Data Sheet, Microchip Technology Inc., 2008-2011
[2] MPASM Assembler, Microchip Technology Inc., 2005
79

Podobné dokumenty

PIC16F87/88 - Tlg.estranky.sk

PIC16F87/88 - Tlg.estranky.sk Další informace o uvedených mikropočítačích lze získat v dokumentaci s označením DS33023 s názvem PICmicro® Mid-Range Reference Manual, kterou lze získat na internetových stránkách výrobce. Mikropo...

Více

Osmibitové mikrořadiče Microchip

Osmibitové mikrořadiče Microchip roku 2001 je firma Microchip vedoucí světovou firmou na trhu osmibitových mikrořadičů. Do roku 2008 firma Microchip vyrobila 6 000 000 000 mikrořadičů. Mikrořadiče PIC byly první, které v roce 1993...

Více

Monolitické mikropočítače III

Monolitické mikropočítače III Mikrořadiče PIC střední třídy jsou dalším vývojovým stupněm mikrořadičů PIC 16C5X popsaných v předchozích dílech seriálu. Repertoár vyráběných typů je mnohem pestřejší než u základní řady a v souča...

Více

Zobrazení informací o monitoru

Zobrazení informací o monitoru aplikace jako je kreativní grafika a zpracování digitálních fotografií, kde je věrné podání barev prioritou. Tento výrobek byl speciálně nastaven pro použití v regionu, do kterého byl původně dodán...

Více

Popis instrukční sady procesorů PIC

Popis instrukční sady procesorů PIC Rotuje obsah registru f doprava přes bit C (carry), výsledek uloží do registru W (je-li d=0) nebo do registru f (je-li d=1). Ovlivňuje: C SWAP F SWAPF f, d f<0:3> → d<4:7>, f<4:7> → d<0:3> Zamění s...

Více

Sbírka příkladů z matematické analýzy II

Sbírka příkladů z matematické analýzy II Tato rovnost je splněna (při x 6= 0) pro kořeny λ1 = 2, λ2 = 3, uvedeného polynomu. Funkce y1 (x) = x2 , y2 (x) = x3 tvoří fundamentální systém dané rovnice a její obecné řešení má tvar y = C1 x2 +...

Více