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.......................................... 4 1.1. Základní sortiment mikrořadičů PIC.................................... 4 1.2. Mikrořadič PIC16F1937, funkční schéma............................... 5 2. Paměť pro program...................................................... 7 2.1. Organizace paměti Flash............................................ 7 2.2. Čítač programu (PC, Program Counter)................................. 8 2.3. Zásobník (Stack)................................................... 8 3. Paměť RAM............................................................ 9 3.1. Paměť RAM, organizace............................................ 9 3.2. Registry jádra (Core Registers)....................................... 10 3.3. Registry SFR (Special Function Register)............................... 10 3.4. Registry PCL a PCLATH............................................ 16 3.5. STATUS registr................................................... 16 4. I / O porty............................................................. 16 4.1. Digitální vstupy / výstupy............................................ 19 4.2. Analogové vstupy................................................. 20 4.3. Port A.......................................................... 21 4.4. Port B.......................................................... 23 4.5. Port C.......................................................... 25 4.6. Port D.......................................................... 26 4.7. Port E.......................................................... 27 5. Konfigurační bity....................................................... 29 6. Oscilátor.............................................................. 32 6.1. Oscilátor vnější.................................................. 32 6.2. Oscilátor na čipu s vnějšími součástkami.............................. 32 6.2.1. Oscilátor řízený krystalem nebo keramickým rezonátorem.......... 32 6.2.2. Oscilátor řízený RC článkem, mód RC.......................... 32 6.3. Oscilátory vnitřní................................................. 33 6.4. Volba zdroje taktovacího kmitočtu, registr OSCCON...................... 33 6.5. Taktování mikrořadiče při výpadku vnějšího oscilátoru, registr _CONFIG1...... 35 7. AD převodník........................................................... 36 7.1. Princip SAR AD převodníku.......................................... 36 7.2. Blokové schéma AD převodníku...................................... 36 7.3. Konfigurace AD převodníku.......................................... 37 7.3.1. Konfigurace vstupních Portů.................................. 37 7.3.2. Výběr vstupního kanálu...................................... 38 7.3.3. Volba referenčního napětí.................................... 38 7.3.4. Nastavení vzorkovacího kmitočtu AD převodníku.................. 38 7.3.5. Formátování výsledku AD převodu............................. 39 7.4. Povolení AD převodníku............................................ 39 7.5. Spuštění AD převodu.............................................. 39 7.6. Ukončení AD převodu.............................................. 40 8. Čítače a časovače....................................................... 41 8.1. Čítač / časovač TIMER0............................................ 41 8.2. Čítač / časovač TIMER1............................................ 43 8.3. Čítač / časovač TIMER2............................................ 45 9. Modul CCP............................................................. 47 9.1. Režim vzorkování.................................................. 47 9.2. Režim porovnání.................................................. 47 9.3. Režim PWM...................................................... 48 2
10. Přerušovací systém PIC16F917........................................... 50 10.1. Zdroje přerušení................................................. 50 10.2. Obsluha přerušení................................................ 50 10.3. Vnější přerušení................................................. 51 10.4. Přerušení od čítače Timer 0........................................ 51 10.5. Přerušení od změny logické úrovně na pinech Portu B................... 52 10.6. Přerušení od periférií............................................. 53 11. Časovač WDT (Watchdog Timer)......................................... 55 12. Reset................................................................ 56 12.1. Power On Reset (POR), Reset po připojení napájecího napětí............. 56 12.2. Brown Out Reset (BOR), Reset po poklesu napájecího napětí pod danou mez 56 12.3. Reset aktivací pinu /MCLR......................................... 57 12.4. Reset přeplněním časovače WDT.................................... 57 12.5. Reset programem................................................ 57 12.6. Reset přetečením / podtečením zásobníku Stack........................ 58 12.7. Reset po ukončení zápisu do paměti Flash............................. 58 12.8. Časovač Power-Up............................................... 58 13. Instrukční soubor mikrořadičů PIC16F.................................... 59 13.1. Struktura instrukce............................................... 59 13.2. Přehled instrukcí................................................. 60 13.3. Formát instrukcí................................................. 62 13.4. Popis instrukcí................................................... 63 14. Assembler MPASM..................................................... 73 14.1. Syntaktická pravidla assembleru MPASM............................. 73 14.1.1. Příkazový řádek........................................... 73 14.1.2. Label (návěští)........................................... 73 14.1.3. Mnemonics (instrukce, direktivy)............................. 73 14.1.4. Operandy................................................ 74 14.1.5. Komentář................................................ 74 14.2. Konstanty...................................................... 74 14.3. Oprerátory...................................................... 74 14.4. Direktivy........................................................ 75 15. Elektrické parametry mikrořadičů PIC16(L)F................................ 78 16. Vyráběné typy mikrořadičů PIC16F1937.................................... 79 17. Literatura............................................................. 79 3
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 RAM instrukce výkon čítače ADC UART I / O f základní 2 KB 144 B 33 (12bit) 5 MIPS 1 8 bit -- 4-36 20 MHz střední 8 KB 368 B 35 (14bit) 5 MIPS 3 10 bit 1 4-54 20 MHz vylepšená 16 KB 1.5 KB 49 (14bit) 8 MIPS 5 10 bit 1 6-55 32 MHz elitní 64 KB 4 KB 83 (16bit) 16 MIPS 5 12 bit 2 16-70 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ž 2 15 = 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 symbol název stav po POR 00h INDF0 Indirect Addressing via FSR0H:FSR0L x x x x x x x x 01h INDF1 Indirect Addressing via FSR1H:FSR1L x x x x x x x x 02h PCL Program Counter Least Significant Byte 0 0 0 0 0 0 0 0 03h STATUS Status Register - - - 1 1 0 0 0 04h FSR0L File Select Register, Addres 0 Low Pointer 0 0 0 0 0 0 0 0 05h FSR0H File Select Register, Addres 0 High Pointer 0 0 0 0 0 0 0 0 06h FSR1L File Select Register, Addres 1 Low Pointer 0 0 0 0 0 0 0 0 07h FSR1H File Select Register, Addres 1 High Pointer 0 0 0 0 0 0 0 0 08h BSR Bank Select Register - - - 0 0 0 0 0 09h WREG Working Register 0 0 0 0 0 0 0 0 0Ah PCLATH Program Counter Latch High - 0 0 0 0 0 0 0 0Bh INTCON Interrupt Control Register 0 0 0 0 0 0 0 0 3.3. Registry SFR (Special Function Register) Bank 0 adresa symbol název stav po POR 0Ch PORTA Port A Register x x x x x x x x 0Dh PORTB Port B Register x x x x x x x x 0Eh PORTC Port C Register x x x x x x x x 0Fh PORTD Port D Registers x x x x x x x x 10h PORTE Port E Register - - - - x x x x 11h PIR1 Peripheral Interrupt Request Register 1 0 0 0 0 0 0 0 0 12h PIR2 Peripheral Interrupt Request Register 2 0 0 0 0 0 0-0 13h PIR3 Peripheral Interrupt Request Register 2-0 0 0 0-0 - 14h 15h TMR0 Timer 0 Module Register x x x x x x x x 16h TMR1L Timer 1 Module Low byte x x x x x x x x 17h TMR1H Timer 1 Module High byte x x x x x x x x 18h T1CON Timer 1 Control Register 0 0 0 0 0 0-0 19h T1GCON Timer 1 Gate Control Register 0 0 0 0 0 0 0 0 1Ah TMR2 Timer 2 Module register 0 0 0 0 0 x 0 0 1Bh PR2 Timer 2 Period Register 1 1 1 1 1 1 1 1 1Ch T2CON Timer 2 Control Register - 0 0 0 0 0 0 0 1Dh 1Eh CPSCON0 Capacitive Sensing Control Register 0 0 - - - 0 0 0 0 1Fh CPSCON1 Capacitive Sensing Control Register 1 - - - - 0 0 0 0 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
Bank 1 adresa symbol název stav po POR 8Ch TRISA Port A Tri-State Register 1 1 1 1 1 1 1 1 8Dh TRISB Port B Tri-State Register 1 1 1 1 1 1 1 1 8Eh TRISC Port C Tri-State Register 1 1 1 1 1 1 1 1 8Fh TRISD Port D Tri-State Registers 1 1 1 1 1 1 1 1 90h TRISE Port E Tri-State Register - - - - 1 1 1 1 91h PIE1 Peripheral Interrupt Enable Register 1 0 0 0 0 0 0 0 0 92h PIE2 Peripheral Interrupt Enable Register 2 0 0 0 0 0 0-0 93h PIE3 Peripheral Interrupt Enable Register 3-0 0 0 0-0 - 94h 95h OPTION_REG Option Register 1 1 1 1 1 1 1 1 96h PCON Power Control Register 0 0 - - 1 1 q q 97h WDTCON Watch Dog Control Register - - 0 1 0 1 1 0 98h OSCTUNE Oscillator Tuning Register - - 0 0 0 0 0 0 99h OSCCON Oscillator Control Register 0 0 1 1 1-0 0 9Ah OSCSTAT Oscillator Status Register 1 0 q 0 0 q 0 0 9Bh ADRESL A/D Result Register Low byte x x x x x x x x 9Ch ADRESH A/D Result Register High byte x x x x x x x x 9Dh ADCON0 A/D Control Register 0-0 0 0 0 0 0 0 9Eh ADCON1 A/D Control Register 1 0 0 0 0-0 0 0 9Fh Bank 2 adresa symbol název stav po POR 10Ch LATA PortA Data Latch x x x x x x x x 10Dh LATB PortB Data Latch x x x x x x x x 10Eh LATC PortC Data Latch x x x x x x x x 10Fh LATD PortD Data Latch x x x x x x x x 110h LATE PortE Data Latch - - - - - x x x 111h CM1CON0 Comparator 1 Control Register 0 0 0 0 0-1 0 0 112h CM1CON1 Comparator 1 Control Register 1 0 0 0 0 - - 0 0 113h CM2CON0 Comparator 2 Control Register 0 0 0 0 0-1 0 0 114h CM2CON1 Comparator 2 Control Register 1 0 0 0 0 - - 0 0 115h CMOUT Comparator Output Register - - - - - - 0 0 116h BORCON Brown-Out Reset Control Register 1 - - - - - - q 117h FVRCON Fixed Voltage Reference Control Register 0 q 0 0 0 0 0 0 118h DACCON0 Voltage Reference Control Register 0 0 0 0-0 0-0 119h DACCON1 Voltage Reference Control Register 1 - - - 0 0 0 0 0 11Ah SRCON0 S-R Latch Control Register 0 0 0 0 0 0 0 0 0 11Bh SRCON1 S-R Latch Control Register 1 0 0 0 0 0 0 0 0 11Ch 11Dh APFCON Alternate Pin Function Control Register - 0 0 0 0 0 0 0 11Eh 11Fh 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
Bank 3 adresa symbol název stav po POR 18Ch ANSELA PortA Analog Select Register - - 1 1 1 1 1 1 18Dh ANSELB PortB Analog Select Register - - 1 1 1 1 1 1 18Eh 18Fh ANSELD PortD Analog Select Register 1 1 1 1 1 1 1 1 190h ANSELE PortE Analog Select Register - - - - - 1 1 1 191h EEADRL EEPROM/Flash Addres Register Low Byte 0 0 0 0 0 0 0 0 192h EEADRH EEPROM/Flash Addres Register High Byte - 0 0 0 0 0 0 0 193h EEDATL EEPROM/Flash Read Data Register Low Byte x x x x x x x x 194h EEDATH EEPROM/Flash Read Data Register High Byte - - x x x x x x 195h EECON1 EEPROM Control Register 1 0 0 0 0 x 0 0 0 196h EECON2 EEPROM Control Register 2 0 0 0 0 0 0 0 0 197h 198h 199h RCREG USART Receive Data Register 0 0 0 0 0 0 0 0 19Ah TXREG USART Transmit Data Register 0 0 0 0 0 0 0 0 19Bh SPBRGL Select Period Baud Rate Generator Low 0 0 0 0 0 0 0 0 19Ch SPBRGH Select Period Baud Rate Generator High 0 0 0 0 0 0 0 0 19Dh RCSTA Receive Status and Control Register 0 0 0 0 0 0 0 x 19Eh TXSTA Transmit Status and Control Register 0 0 0 0 0 0 1 0 19Fh BAUDCON Baud Rate Control Register 0 1-0 0-0 0 Bank 4 adresa symbol název stav po POR 20Ch 20Dh WPUB Weak Pull-Up PortB Register 1 1 1 1 1 1 1 1 20Eh 20Fh 210h WPUE Weak Pull-Up PortE Register - - - - 1 - - - 211h SSPBUF Sychronous Serial Port Data Buffer x x x x x x x x 212h SSPADD Sychronous Serial Port Address 0 0 0 0 0 0 0 0 213h SSPMSK Sychronous Serial Port Mask Register 1 1 1 1 1 1 1 1 214h SSPSTAT Sychronous Serial Port Status 0 0 0 0 0 0 0 0 215h SSPCON1 Sychronous Serial Port Control Register 1 0 0 0 0 0 0 0 0 216h SSPCON2 Sychronous Serial Port Control Register 2 0 0 0 0 0 0 0 0 217h SSPCON3 Sychronous Serial Port Control Register 3 0 0 0 0 0 0 0 0 218h 219h 21Ah 21Bh 21Ch 21Dh 21Eh 21Fh 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
Bank 5 adresa symbol název stav po POR 28Ch 28Dh 28Eh 28Fh 290h 291h CCPR1L Capture/Compare/PWM Register 1 Low x x x x x x x x 292h CCPR1H Capture/Compare/PWM Register 1 High x x x x x x x x 293h CCP1CON Capture/Compare/PWM Control Register 1 0 0 0 0 0 0 0 0 294h PWM1CON Enhanced PWM Control Register 1 0 0 0 0 0 0 0 0 295h CCP1AS CCP 1 Auto-Shutdown Control Register 0 0 0 0 0 0 0 0 296h PSTR1CON PWM Steering Control Register 1 - - - 0 0 0 0 1 297h 298h CCPR2L Capture/Compare/PWM Register 2 Low x x x x x x x x 299h CCPR2H Capture/Compare/PWM Register 2 High x x x x x x x x 29Ah CCP2CON Capture/Compare/PWM Control Register 2 0 0 0 0 0 0 0 0 29Bh PWM2CON Enhanced PWM Control Register 2 0 0 0 0 0 0 0 0 29Ch CCP2AS CCP 2 Auto-Shutdown Control Register 0 0 0 0 0 0 0 0 29Dh PSTR2CON PWM Steering Control Register 2 - - - 0 0 0 0 1 29Eh CCPTMRS0 PWM Timer Selection Control Register 0 0 0 0 0 0 0 0 0 29Fh CCPTMRS1 PWM Timer Selection Control Register 1 - - - - - - 0 0 Bank 6 adresa symbol název stav po POR 30Ch 30Dh 30Eh 30Fh 310h 311h CCPR3L Capture/Compare/PWM Register 3 Low x x x x x x x x 312h CCPR3H Capture/Compare/PWM Register 3 High x x x x x x x x 313h CCP3CON Capture/Compare/PWM Control Register 3 0 0 0 0 0 0 0 0 314h PWM3CON Enhanced PWM Control Register 3 0 0 0 0 0 0 0 0 315h CCP3AS CCP31 Auto-Shutdown Control Register 0 0 0 0 0 0 0 0 316h PSTR3CON PWM Steering Control Register31 - - - 0 0 0 0 1 317h 318h CCPR4L Capture/Compare/PWM Register 4 Low x x x x x x x x 319h CCPR4H Capture/Compare/PWM Register 4 High x x x x x x x x 31Ah CCP4CON Capture/Compare/PWM Control Register 4 - - 0 0 0 0 0 0 31Bh 31Ch CCPR5L Capture/Compare/PWM Register 5 Low x x x x x x x x 31Dh CCPR5H Capture/Compare/PWM Register 5 High x x x x x x x x 31Eh CCP5CON Capture/Compare/PWM Control Register 5 - - 0 0 0 0 0 0 31Fh 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
Bank 7 adresa symbol název stav po POR 38Ch 38Dh 38Eh 38Fh 390h 391h 392h 393h 394h IOCBP Interrupt On-Change Positive Edge Register 0 0 0 0 0 0 0 0 395h IOCBN Interrupt On-Change Negative Edge Register 0 0 0 0 0 0 0 0 396h IOCBF Interrupt On-Change Flag Register 0 0 0 0 0 0 0 0 397h 398h 399h 39Ah 39Bh 39Ch 39Dh 39Eh 39Fh Bank 8 adresa symbol název stav po POR 40Ch 40Dh 40Eh 40Fh 410h 411h 412h 413h 414h 415h TMR4 Timer 4 Module Register 0 0 0 0 0 0 0 0 416h PR4 Timer 4 Period Register 1 1 1 1 1 1 1 1 417h T4CON Timer 4 Control Register - 0 0 0 0 0 0 0 418h 419h 41Ah 41Bh 41Ch TMR6 Timer 6 Module Register 0 0 0 0 0 0 0 0 41Dh PR6 Timer 6 Period Register 1 1 1 1 1 1 1 1 41Eh T6CON Timer 6 Control Register - 0 0 0 0 0 0 0 41Fh 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
Bank 15 adresa symbol název stav po POR 78Ch 78Dh 78Eh 78Fh 790h 791h LCDCON LCD Control Register 0 0 0-0 0 1 1 792h LCDPS LCD Phase Register 0 0 0 0 0 0 0 0 793h LCDREF LCD Reference Voltage Control Register 0 0 0-0 0 0-794h LCDCST LCD Contrast Control Register - - - - - 0 0 0 795h LCDRL LCD Reference Ladder Register 0 0 0 0-0 0 0 796h 797h 798h LCDSE0 LCD Segment Enable Register 0 0 0 0 0 0 0 0 0 799h LCDSE1 LCD Segment Enable Register 1 0 0 0 0 0 0 0 0 79Ah LCDSE2 LCD Segment Enable Register 2 0 0 0 0 0 0 0 0 79Bh 79Ch 79Dh 79Eh 79Fh 7A0h LCDDATA0 LCD Data Register 0 x x x x x x x x 7A1h LCDDATA1 LCD Data Register 1 x x x x x x x x 7A2h LCDDATA2 LCD Data Register 2 x x x x x x x x 7A3 LCDDATA3 LCD Data Register 3 x x x x x x x x 7A4 LCDDATA4 LCD Data Register 4 x x x x x x x x 7A5 LCDDATA5 LCD Data Register 5 x x x x x x x x 7A6 LCDDATA6 LCD Data Register 6 x x x x x x x x 7A7 LCDDATA7 LCD Data Register 7 x x x x x x x x 7A8 LCDDATA8 LCD Data Register 8 x x x x x x x x 7A9 LCDDATA9 LCD Data Register 9 x x x x x x x x 7AA LCDDATA10 LCD Data Register 10 x x x x x x x x 7AB LCDDATA11 LCD Data Register 11 x x x x x x x x 7AC 7AD 7AE 7AF 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
3.4. Registry PCL a PCLATH PCL Program Counter Least Significant Byte adresa R / W R / W R / W R / W R / W R / W R / W R / W 02 h bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0 0 0 0 0 0 0 0 0 PCLATH Program Counter Latch High adresa -- R / W R / W R / W R / W R / W R / W R / W 0A h -- bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0 -- 0 0 0 0 0 0 0 Čí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 adresa - - - R R R / W R / W R / W 03 h - - - NOT_TO NOT_PD Z DC C - - - 1 1 0 0 0 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 adresa -- R / W R / W R / W R / W R / W R / W R / W 11D h Bank 2 -- CCP3SEL T1GSEL P2BSEL SRNQSEL C2OUTSEL SSSEL CCP2SEL -- 0 0 0 0 0 0 0 -- RE0 RB5 RC0 RA5 RA5 RA5 RC1 po Reset -- RB5 RC4 RD2 RA0 RA0 RA0 RB3 bit=1 Funkce zmíněných signálů a pinů je popsána v příslušných kapitolách. 17
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/Vref- AN1 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 ANSELB PortB Analog Select Register adresa -- -- R / W R / W R / W R / W R / W R / W 18D h Bank 3 -- -- ANSB5 ANSB4 ANSB3 ANSB2 ANSB1 ANSB0 -- -- 1 1 1 1 1 1 -- 4.3. Port A -- AN13 AN11 AN9 AN8 AN10 AN12 ADC -- -- CPS5 CPS4 CPS3 CPS2 CPS1 CPS0 CapSens -- -- - - - C12IN2- C12IN3- - 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 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 ANSELE PortE Analog Select Register adresa -- -- -- -- -- R / W R / W R / W 190 h -- -- -- -- -- ANSE2 ANSE1 ANSEB0 Bank 3 -- -- -- -- -- 1 1 1 -- -- -- -- -- AN7 AN6 AN5 ADC 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
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. PORTA Port A Register adresa R / W R / W R / W R / W R / W R / W R / W R / W 0C h RA7 RA6 RA5 RA4 RA3 RA2 RA1 RA0 Bank 0 x x x x x x x x 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 TRISA < 7 : 0 > Port A Tri-State Control Bit 0 = pin konfigurován jako výstup 1 = pin konfigurován jako vstup LATA Data Latch A Register adresa R / W R / W R / W R / W R / W R / W R / W R / W 10C h LATA7 LATA6 LATA 5 LATA4 LATA3 LATA2 LATA1 LATA0 Bank 2 x x x x x x x x 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 Bank 3 -- -- ANSA5 ANSA4 ANSA3 ANSA2 ANSA1 ANSA0 -- -- 1 1 1 1 1 1 -- -- AN4 - AN3/Vref+ AN2/Vref- AN1 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 RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0 x x x x x x x x 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 adresa 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 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. WPUB Weak Pull-Up Port B Register adresa R / W R / W R / W R / W R / W R / W R / W R / W 20D h WPUB7 WPUB6 WPUB5 WPUB4 WPUB3 WPUB2 WPUB1 WPUB0 Bank 4 1 1 1 1 1 1 1 1 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ů. 0D h Bank 0 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 R / W R / W R / W R / W R / W R / W R / W R / W LATB7 LATB6 LATB 5 LATB4 LATB3 LATB2 LATB1 LATB0 x x x x x x x x 10D h Bank 2 -- -- 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- C12IN3- - Comparator 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 RC7 RC6 RC5 RC4 RC3 RC2 RC1 RC0 x x x x x x x x TRISC < 7 : 0 > Port C Tri-State Control Bit 0 = pin konfigurován jako výstup 1 = pin konfigurován jako vstup 0E h Bank 0 TRISC Tri-State C Register adresa R / W R / W R / W R / W R / W R / W R / W R / W 8E h TRISC7 TRISC6 TRISC5 TRISC4 TRISC3 TRISC2 TRISC1 TRISC0 Bank 1 1 1 1 1 1 1 1 1 LATC Data Latch C Register adresa R / W R / W R / W R / W R / W R / W R / W R / W 10E h LATC7 LATC6 LATC 5 LATC4 LATC3 LATC2 LATC1 LATC0 Bank 2 x x x x x x x x 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 RD7 RD6 RD5 RD4 RD3 RD2 RD1 RD0 x x x x x x x x TRISD < 7 : 0 > Port D Tri-State Control Bit 0 = pin konfigurován jako výstup 1 = pin konfigurován jako vstup 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 0F h Bank 0 TRISD Tri-State D Register adresa R / W R / W R / W R / W R / W R / W R / W R / W 8F h TRISD7 TRISD6 TRISD5 TRISD4 TRISD3 TRISD2 TRISD1 TRISD0 Bank 1 1 1 1 1 1 1 1 1 LATD Data Latch D Register adresa R / W R / W R / W R / W R / W R / W R / W R / W 10F h LATD7 LATD6 LATD 5 LATD4 LATD3 LATD2 LATD1 LATD0 Bank 2 x x x x x x x x 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 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 -- -- -- -- RE3 RE2 RE1 RE0 -- -- -- -- x x x x 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 v registru _CONFIG1 (článek 5). LATE Data Latch E Register adresa 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 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 10 h Bank 0 TRISE Tri-State E Register adresa -- -- -- -- -- R / W R / W R / W 90 h -- -- -- -- -- TRISE2 TRISE1 TRISE0 Bank 1 -- -- -- -- -- 1 1 1 -- -- -- -- -- R / W R / W R / W -- -- -- -- -- LATE2 LATE1 LATE0 -- -- -- -- -- x x x 110 h Bank 2 ANSELE PortE Analog Select Register adresa -- -- -- -- -- R / W R / W R / W 190 h -- -- -- -- -- ANSE2 ANSE1 ANSEB0 Bank 3 -- -- -- -- -- 1 1 1 -- -- -- -- -- AN7 AN6 AN5 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. _CONFIG1 Config 1 Register High Byte adresa 15 14 13 12 11 10 9 8 8007 h -- -- FCMEN IESO /CLKOUTEN BOREN1 BOREN0 /CPD Flash 1 1 1 1 1 1 1 1 _CONFIG1 Config 1 Register Low Byte adresa 7 6 5 4 3 2 1 0 8007 h /CP MCLRE /PWRTE WDTE1 WDTE0 FOSC2 FOSC1 FOSC0 Flash 1 1 1 1 1 1 1 1 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
_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 _CONFIG2 Config 1 Register Low Byte adresa 7 6 5 4 3 2 1 0 8008 h -- -- VCAPEN VCAPEN -- -- WRT1 WRT0 Flash 1 1 1 1 1 1 1 1 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