PIC 16F628 popis
http://web.telecom.cz/doveda/procesory/pic16f62x/index.html
Úvod
Mikroprocesor PIC16F628 patří do rodiny PIC16CXX. Jsou to univerzální 8-mi bitové jednočipové mikrokontrolery. Všechny tyto řadiče jsou vyrobeny technologií CMOS a jsou založeny na rozšířené architektuře RISC (Reduced Instruction Set). Mají oddělenou programovou a datovou paměť (Harvardská architektura). Vnitřní systém redukuje nutnost připojení externích obvodů na minimum, čímž zlevňuje konečné aplikace.
Obsah
Typ | Pamět | A/D převodník kanálů |
I/O Ports |
Max. frekvence [MHz] |
počet časo- vačů |
počet instrukcí |
počet vývodů |
||
---|---|---|---|---|---|---|---|---|---|
ROM Words |
RAM Bytes |
EEPROM Bytes |
|||||||
PIC16F627 | 1024x14 | 224 | 128 | - | 15 | 4 (20) | 3 | 35 | 18 |
PIC16F628 | 2048x14 | 224 | 128 | - | 15 | 4 (20) | 3 | 35 | 18 |
Popis procesoru
- Sada 35 instrukcí
- Všechny instrukce používají jeden cyklus programu, při odskoku a návratu dva cykly
- Provozní frekvence: hodiny 20Mhz - 200ns jeden instrukční cyklus
- Interupt capability
- 16 speciálních funkcí hardwarových registrů
- 8-úrovňový hardwarový zásobník
- Přímý, nepřímý a poměrný adresový režim
Popis periférií
- 15 nastavitelných vývodů - vstup / výstup
- Velké zatížení do / z pro ovládání LED
- Analogový komparátor s
- - dva analogový komparátory
- programovatelné referenční napětí (Vref)
- multiplexovaný vstup a vnitřní referenční napětí
- výstup komparátoru pro externí požití - Časovač0: 8-bitový časovač / čítač s 8-bitovou předděličkou
- Časovač1: 16-bitový časovač / čítač s externí krystalem
- Časovač2: 8-bitový časovač / čítač s 8-bitovým registrem, předděličkou a děličkou
- Zachytávač, comparátor, PWM (CCP) modul
- zachytávač je 16-bit, max. rozlišení je 12,ns
- porovnání je 16-bit, max rozlišení je 200ns
- PWM max. rozlišení je 10-bit - Univerzální synchroní/asynchroní příjmač/vysílač USART/SCI
- 16bytů společné RAM
Speciální funkce procesoru
- Po zapnutí RESET (POR)
- Časovač zapnutí (PWRT)
- Časovač zapnutí oscilátoru (OST)
- Brown-out Detect (BOD)
- Watchdog (WDT)
- Multiplexován vstup MCLR
- Programovatelné nastavení pull-up odpory na PORTB
- Programovatelná ochrana kódu
- Programování nízkým napětím
- Spící mód
- Výběr typu oscilátoru
- Sériové programování v zapojení (ICSP) pomocí dvou vývodů
Technologie CMOS
- Nízký odběr, vysoká rychlost CMOS FLASH technologie
- Úplně statický design
- Rozsah pracovního napětí:
- PIC16F62x 3,0V - 5,5V
- PIC16LF62x 2,0V - 5,5V - Komerční, průmyslový a zvláštní teplotní rozsah
- Nízký odběr:
- < 2mA při 5V, 4MHz
- 15uA při 3V, 32kHz
- < 1uA stand-by při 3V
Popis vývodů
vývod | pin | typ I/O/P | provedení | popis |
---|---|---|---|---|
RA0/AN0 RA1/AN1 RA2/AN2/Vref RA3/AN3/CMP1 RA4/TOCKI/CMP2 RA5/MCLR/THV RA6/OSC2/_CLKOUT RA7/OSC1/CLKIN |
17 18 1 2 3 4 15 16 |
I/O I/O I/O I/O I/O I I/O I/O |
ST ST ST ST ST ST ST ST |
PORTA je obousměrný vstupně/výstupní port Může být jako zdroj CLK signálu pro TMR1. Jako výstupní má otevřený kolektor !!! |
MCLR/Vpp | 4 | I/P | ST | RESET/vstup programovacího napětí. Tento vývod je aktivní v nule, kdy provádí RESET obvodu. |
Vss | 5 | P | - | zem |
RB0/INT RB1/RX/DT RB2/TX/CK RB3/CCP1 RB4/PGM RB5 RB6/T1OSO/T1CKI RB7/T1OSI |
6 7 8 9 10 11 12 13 |
I/O I/O I/O I/O I/O I/O I/O I/O |
TTL/ST TTL TTL TTL TTL TTL TTL/ST TTL/ST |
PORTB je obousměrný vstupně/výstupní port. PORTB může mít programově připojen slabý vnitřní pull-up odpor na všech vstupech. může být vybrán jako zdroj vnějšího přerušení přerušení při změně vstupu přerušení při změně vstupu přerušení při změně vstupu/CLK při programování přerušení při změně vstupu/DATA při programování |
Vdd | 14 | P | - | napájení +5V |
I = Input (vstup) O = Output (výstup) I/O = Input/Output (vstup/výstup) P = Power
- = nevyužito TTL = TTL input ST = Schmitt Trigger input (na vstupu Schmittův obvod)
Architektura
Vysoký výkon mikrokontroléru je způsoben znaky architektury společné s mikroprocesory RISC. U mikrokontrolrů PIC16CXX jsou data a program v oddělených částech paměti, a tedy mohou mít různou velikost. Data jsou šířky 8 bitů a kód programu 14 bitů. Tato šířka instrukčního slova umožňuje mít všechny instrukce jednoslovné a proveditelné během jednoho instrukčního cyklu. To neplatí pro instrukce provádějící větvení programu (vyžadují 2 instrukční cykly).
ALU umožňuje sčítat, odčítat, posouvat obsah registru a logické operace. Aritmetické operace mají dva operandy, z nichž jeden je vždy v pracovním registru (W-registr) a druhý operand je registr v paměti nebo konstanta. U jednoduchých instrukcí je operandem vlastní pracovní registr (W-registr), nebo registr v paměti. Pracovní registr (W) je 8-bitový a je určen pro práci ALU. Nejde o programem adresovatelný registr.
V závislosti na vykonávání instrukcí ALU jsou ovlivňovány hodnoty příznaků v registru STATUS:
- C (CARRY - přenos)
- DC (Digit Carry - přenos mezi čísly, 4 bity v bytu je 1 číslo)
- Z (ZERO - příznak nulového výsledku)
Příznaky C a DC jsou nastaveny podle výsledků aritmetických operací.
Uspořádání paměti
Paměť programu
Procesor PIC16F62X má 13-bitový programový čítač (PC), který adresuje programovou paměť o velikosti 8K x 14. Jenom první 1K x 14 (0000h - 03FFh) pro PIC16F627 a 2K x 14 bitů (0000h-07FFh) pro PIC16F628 je fyzicky implementováno. Pokus o přístup nad 3FFh způsobí návrat na první adresu prostoru (na adresu 0000h). Po resetu procesor začína na adrese 0000h. Vektor přerušení je na adrese 0004h. Díky prodloužení instrukčního slova, obsáhnou instrukce GOTO a CALL stránky programové paměti o velikosti plných 2K. Odpadne tím stránkování paměti procesoru, které se používá u PIC16C56-8.
Paměť dat
Paměť dat je rozdělena do čtyř bank (prostorů) o velikosti 128Bajtů, které obsahují základní funkční registry (00h - 1Fh v bance) a registry volné pro uživatele 20h - 7Fh, A0h-FFh, 12h-14Fh, 170h-17Fh a 1F0-1Fh ve statické RAM. Adresy F0h-Fh, 170h-17Fh a 1F0h-1FFh jsou ve společné paměti RAM namapovany na adrese 70h-7Fh. Některé z těchto systémových registrů jsou dostupné ve všech čtyřech bankách některé pouze v bance 0 nebo 1.
Zásobník návratových adres
Procesor má 8-mi úrovnový zásobník s šířkou 13 bitů. Zásobník není součástí programové ani datové paměti a není možné provádět jeho čtení nebo zápis. Při instrukci volání podporgramu CALL je do zásobníku uložena celá 13 bitová hodnota programového čítače (PC). Obsah zásobníku je vybrán při vykonání instrukce RETURN, RETLW nebo RETFIE.
Porty
Mikrokontrolér PIC16F627 a PIC16F628 má 2 porty, port A a port B. Celkem nabízí 15 vstupních nebo výstupních vývodů. Funkce vývodů u těchto portů mohou být měněny v závislosti na požadavku programu.
Port A
Port A je 5-bitový. Vývod RA4 má na vstupu Schmittův obvod a jako výstup má otevřený kolektor. Všechny ostatní vývody portu A mají jako vstupní úrovně TTL a jako výstup budiče CMOS. Všechny I/O výstupy mají řídící bit pro směr toku dat (v TRISA registru), kterým může být každý z vývodů nastaven jako vstup nebo výstup nezávisle na ostatních. Nastavením příslušného bitu na "1" v registru TRISA se nastaví příslušný vývod jako vstupní, nastavením příslušného bitu na "0" se nastaví příslušný vývod jako výstupní.
Vývod portu RA<4> je možné přepnout jako vstup pro hodinový signál TMR0.
Čteni portu A probíhá tak, že je čten stav vývodů portu A. Zápis na port A zapisuje do výstupního bufferu.
Port B
Port B je 8-bitový. Odpovídající směry toku dat jednotlivých vývodů se nastavují v registru TRISB. Při čtení portu B je čten stav vývodů v registru TRISB, při zápisu je hodnota zapsána do řídícho bufferu portu B.
Každý z vývodů portu B může mít programově připojen slabý vnitřní pull-up odpor (cca 100 uA) na všech vývodech konfigurovaných jako vstupní. Toto je automaticky vypnuto u těch vývodů, které jsou nastaveny jako výstupní.
Čtyři vývody portu B (RB4 - RB7) mají při příslušném nastavení schopnost vyvolat přerušení při změně stavu. Avšak tato schopnost je dána pouze vývodům nastaveným jako vstupní.
Čítač/časovač TMR0
Modul TMR0 má následující vlastnosti:
- 8bitový registr čítače/časovače
- je povoleno čtení obsahu i zápis do registru
- 8bitový programovatelný předdělič
- volba vnitřní/vnější zdroj hodinového signálu
- přerušení při přetečení (FFh -> 00h)
- výběr hrany při externím vstupním hodinovém signálu
V režimu Časovač (TIMER) je obsah registru TMR0 zvětšován při každém instrukčním cyklu (fosc/4). Toto platí nebude-li použit předdělič. Je-li do registru TMR0 zapsána hodnota, je zvýšení jeho obsahu povoleno až po dvou následujících instrukčních cyklech.
V režimu Čítač (Counter) bude obsah registru TMR0 zvyšován s každou vzestupnou případně sestupnou hranou na vývodu RA4/T0CKI.
Předdělič je volitelně možné přiřadit buď k funkčnímu modulu TMR0 nebo WDT. Obsah předděliče není možné číst ani do něj zapisovat a tak jej měnit. Je-li předdělič přiřazen k funkčnímu modulu TMR0 je možné programově zvolit tyto dělící poměry 1:2, 1:4, ..., 1:256.
TMR0 - přerušení
Přerušení je čítačem TMR0 generováno tehdy, přetéká-li obsah registru čítače/časovače z hodnoty FFh -> 00h. Při tomto přerušení je nastaven příznakový bit T0IF. Toto přerušení může být zakázáno nastavením řídícího bitu T0IE na "0". Po vyvolání přerušení musí být příznakový bit TOIF vynulován programem dříve, než je přerušení opět povoleno. Přerušení od TMR0 není schopno oživit obvod, pokud se nachází ve stavu SLEEP.
Organizace registrů v procesoru PIC16F627 a PIC16F628
adresa | banka 0 | adresa | banka 1 | adresa | banka 2 | adresa | banka 3 |
---|---|---|---|---|---|---|---|
00h | INDF * | 80h | INDF * | 100h | INDF * | 180h | INDF * |
01h | TMR0 | 81h | OPTION | 101h | TMR0 | 181h | OPTION |
02h | PCL | 82h | PCL | 102h | PCL | 182h | PCL |
03h | STATUS | 83h | STATUS | 103h | STATUS | 183h | STATUS |
04h | FSR | 84h | FSR | 104h | FSR | 184h | FSR |
05h | PORTA | 85h | TRISA | 105h | 185h | ||
06h | PORTB | 86h | TRISB | 106h | PORTB | 186h | TRSIB |
07h | 87h | 107h | 187h | ||||
08h | 88h | 108h | 188h | ||||
09h | 89h | 109h | 189h | ||||
0Ah | PCLATH | 8Ah | PCLATH | 10Ah | PCLATH | 18Ah | PCLATH |
0Bh | INTCON | 8Bh | INTCON | 10Bh | INTCON | 18Bh | INTCON |
0Ch | PIR1 | 8Ch | PIE1 | 10Ch | 18Ch | ||
0Dh | 8Dh | 10Dh | 18Dh | ||||
0Eh | TMR1L | 8Eh | PCON | 10Eh | 18Eh | ||
0Fh | TMR1H | 8Fh | 10Fh | 18Fh | |||
10h | T1CON | 90h | 110h | 190h | |||
11h | TMR2 | 91h | 111h | 191h | |||
12h | T2CON | 92h | PR2 | 112h | 192h | ||
13h | 93h | 113h | 193h | ||||
14h | 94h | 114h | 194h | ||||
15h | CCPR1L | 95h | 115h | 195h | |||
16h | CCPR1H | 96h | 116h | 196h | |||
17h | CCP1CON | 97h | 117h | 197h | |||
18h | RCSTA | 98h | TXSTA | 118h | 198h | ||
19h | TXREG | 99h | SPBRG | 119h | 199h | ||
1Ah | RCREG | 9Ah | EEDATA | 11Ah | 19Ah | ||
1Bh | 9Bh | EEADR | 11Bh | 19Bh | |||
1Ch | 9Ch | EECON1 | 11Ch | 19Ch | |||
1Dh | 9Dh | EECON2* | 11Dh | 19Dh | |||
1Eh | 9Eh | 11Eh | 19Eh | ||||
1Fh | CMCON | 9Fh | VRCON | 11Fh | 19Fh | ||
20h až 7Fh |
pamět (SRAM) 96 bajtů |
A0h až EFh |
80 bajtů | 120h až 16Fh |
48 bajtů | 1A0h až 1EFh |
|
F0h až FFh |
paralelně 70h - 7Fh |
170h až 17Fh |
paralelně 70h - 7Fh |
1F0h až 1FFh |
paralelně 70h - 7Fh |
* Není fyzický registr
BANKA 0 | |||||||||
---|---|---|---|---|---|---|---|---|---|
Adresa | registr | bit 7 | bit 6 | bit 5 | bit 4 | bit 3 | bit 2 | bit 1 | bit 0 |
00h | INDF | (není fyzický registr) | |||||||
01h | TMR0 | 8-bitový časovač | |||||||
02h | PCL | ||||||||
03h | STATUS | IRP | RP1 | RP0 | /TO | /PD | Z | DC | C |
04h | FSR | ||||||||
05h | PORTA | RA7 | RA6 | RA5 | RA4 | RA3 | RA2 | RA1 | RA0 |
06h | PORTB | RB7 | RB6 | RB5 | RB4 | RB3 | RB2 | RB1 | RB0 |
07h | -- | neimplementováno | |||||||
08h | -- | neimplementováno | |||||||
09h | -- | neimplementováno | |||||||
0Ah | PCLATH | -- | -- | -- | |||||
0Bh | INTCON | GIE | EEIE | T0IE | INTE | RBIE | T0IF | INTF | RBIF |
0Ch | PIR1 | EEIF | CMIF | RCIF | TXIF | -- | CCP1IF | TMR2IF | TMR1IF |
0Dh | -- | ||||||||
0Eh | TMR1L | Holding register for the least signitifant byte of the 16-bit TMR1 | |||||||
0Fh | TMR1H | Holding register for the most signitifant byte of the 16-bit TMR1 | |||||||
10h | T1CON | -- | -- | T1CKPS1 | T1CKPS0 | T1OSCEN | T1SYNC | TMR1CS | TMR1ON |
11h | TMR2 | TMR2 modul register | |||||||
12h | T2CON | -- | TOUTPS3 | TOUTPS2 | TOUTPS1 | TOUTPS0 | TMR2ON | T2CKPS1 | T2CKPS0 |
13h | -- | ||||||||
14h | -- | ||||||||
15h | CCPR1L | Capture / Compare / PWM register (LSB) | |||||||
16h | CCPR1H | Capture / Compare / PWM register (MSB) | |||||||
19h | TXREG | USART registr vysílacích dat | |||||||
1Ah | RCREG | USART registr přijímací dat | |||||||
1Bh | -- | ||||||||
1Ch | -- | ||||||||
1Dh | -- | ||||||||
1Eh | -- | ||||||||
1Fh | CMCON | C2OUT | C1OUT | C2INV | C1INV | CIS | CM2 | CM1 | CM0 |
BANKA 1 | |||||||||
---|---|---|---|---|---|---|---|---|---|
Adresa | registr | bit 7 | bit 6 | bit 5 | bit 4 | bit 3 | bit 2 | bit 1 | bit 0 |
80h | INDF | (není fyzický registr) | |||||||
81h | OPTION | /RBPU | INTEDG | T0CS | TS0E | PSA | PS2 | PS1 | PS0 |
82h | PCL | ||||||||
83h | STATUS | IRP | RP1 | RP0 | /TO | /PD | Z | DC | C |
84h | FSR | ||||||||
85h | TRISA | TRISA7 | TRISA6 | -- | TRISA4 | TRISA3 | TRISA2 | TRISA1 | TRISA0 |
86h | TRISB | TRISB7 | TRISB6 | TRISB5 | TRISB4 | TRISB3 | TRISB2 | TRISB1 | TRISB0 |
87h | -- | neimplementováno | |||||||
88h | -- | neimplementováno | |||||||
89h | -- | neimplementováno | |||||||
8Ah | PCLATH | -- | -- | -- | |||||
8Bh | INTCON | GIE | EEIE | T0IE | INTE | RBIE | T0IF | INTF | RBIF |
8Ch | PIE1 | EEIE | CMIE | RCIE | TXIE | -- | CCP1IE | TMR2IE | TMR1IE |
8Dh | -- | ||||||||
8Eh | PCON | -- | -- | -- | -- | OSCF | -- | /POR | /BOD |
8Fh | -- | ||||||||
90h | -- | ||||||||
91h | -- | ||||||||
92h | PR2 | Timer2 Period Register | |||||||
93h | -- | ||||||||
94h | -- | ||||||||
95h | -- | ||||||||
96h | -- | ||||||||
97h | -- | ||||||||
98h | TXSTA | CSRC | TX9 | TXEN | SYNC | -- | BRGH | TRMT | TX9D |
99h | SPBRG | Baut Rate Generator Register | |||||||
9Ah | EEDATA | EEPROM data register | |||||||
9Bh | EEADR | -- | EEPROM adres register | ||||||
9Ch | EECON1 | -- | -- | -- | -- | WRERR | WREN | WR | RD |
9Dh | EECON2 | EEPROM control register2 (není fyzický registr) | |||||||
9Eh | -- | neimplementováno | |||||||
9Fh | VRCON | VREN | VROE | VRR | -- | VR3 | VR2 | VR1 | VR0 |
Podrobnější popis procesoru najdete u výrobce Microchip.