RP1:RPO | Банк |
00 | 0 |
01 | 1 |
10 | 2 |
11 | 3 |
Об'єм банків пам'яті даних до 128 байтів (7Fh). На початку банку розміщуються регістри спеціального призначення, потім регістри загального призначення виконані як статичний ОЗП. Всі реалізовані банки містять регістри спеціального призначення. Деякі, часто використовувані регістри спеціального призначення можуть відображатися і в інших банках пам'яті.
Регістри можуть бути адресовані прямо або побічно, з використанням регістра непрямої адресації FSR. Безпосередня адресація підтримується спеціальними командами, що завантажують дані з пам'яті програми в робочий регістр W.
Регістри спеціального призначення використовуються для керування функціями мікроконтролера і можуть бути розділені на два набори: регістри базових функцій і регістри периферійних пристроїв. Регістри базових функцій містять у собі регістр-перемикач непряму адресації (INDF), програмний лічильник (РС), представлений двома регістрами PCL і PCLATH, регістр слова стану (STATUS), регістр-покажчик непряму адресації (FSR), робочий регістр (W), регістр переривань (INTCON), а також регістр режимів роботи чи конфігурації попереднього дільника і таймера (OPTION). Регістри периферійних пристроїв містять у собі регістри (RA,RB,RC,RD,RE-порти А,B,C,D,E), регістри даних (EEDATA) і адреси (EEADR) пам'яті даних-констант, регістри таймерів-лічильників (TMR0,1,2) і регістри керування конфігурацією портів вводу/виводу (TRISA, TRISB, TRISC, TRISD, TRISE).
Регістри загального призначення використовуються для зберігання даних по розсуду користувача.
Таблиця спеціальних регістрів приведена в додатку А.
Для виконання непрямої адресації необхідно звернутися до фізично не реалізованого регістра INDF. Звернення до регістра INDF фактично викличе дію з регістром, адреса якого вказана в FSR. Непряме читання регістра INDF (FSR=0) дасть результат 00h. Непрямий запис в регістр INDF не викличе ніяких дій (викликає дії на прапори АЛП в регістрі STATUS). 9-й біт непрямої адреси IRP зберігається в регістрі STATUS<7>. Приклад 9-розрядної непрямої адресації показаний на рисунку 2.4.
Адреса Адреса Адреса Адреса
Регістр * Регістр * Регістр * Регістр * непрямої 00h непрямої 80h непрямої 100h непрямої адресації адресації адресації адресації 180h
TMR0 01h OPTION 81h TMR0 101h OPTION REG 181h PCL 02 h REGPCL 82 h PCL 102 h PCL 182h
STATUS 03 h STATUS 83 h STATUS 103 h STATUS 183h
FSR 04h FSR 84h FSR 104h FSR 184h
PORTA 05h TRISA 85h 105h х 185h
PORTB 06h TRISB 86h PORTB 106h TRISB 186h
PORTC 07h TRISC 87h х 107h х 187h
PORTD(1) 08 h TRISD(1) 88 h х 108 h х 188h PORTEP) 09h TRISEP) 89h х 109h х 189h PCLATH 0Ah PCLATH 8Ah PCLATH 10Ah PCLATH 18Ah
INTCON 0Bh INTCON 8Bh INTCON 10Bh INTCON
PIR1 0Ch PIE1 8Ch EEDATA 10Ch EECON1 18Bh PIR2 0Dh PIE2 8Dh EEADR 10Dh EECON2 18Ch TMR1L 0Eh PCON 8Eh EEDATH 10Eh Резерв^' 18Dh TMR1H 0Fh x 8Fh EEADRH 10Fh Резерв^' 18Eh
T1CON 10h x 90h 110h 18Fh
TMR2 11h SSPCON2 91h Регістри Регістри
T2CON 12 h PR2 92 h
SSPBUF 13h SSPADD 93h
SSPCON 14h SSPSTAT 94h загального загального
CCPR1L 15h x 95h
CCPR1 H 16 h x 96 h призна - призна-
CCP1CON 17 h x 97 h ченнях чення
RCSTA 18h TXSTA 98h
TXREG 19h SPBRG 99h
RCREG 1Ah x 9Ah
CCPR2L 1Bh x 9Bh 16 байтів 16 байтів
CCPR2H 1Ch x 9Ch
CCP2CON 1Dh x 9Dh
ADRESH 1Eh ADRESL 9Eh
ADCONO 1Fh ADCON1 9Fh 11Fh 19Fh 20h Регістри A0h Регістри 120h Регістри
Регістри загаль- загаль- загаль- 1A0h загаль- ного ного ного ного призна- призна- призна -призна- чення чення чення
чення 80 байтів EFh 80 байт ів 16170Fhh 80 байт ів 1EFh
96 байтів Доступ до F0h Доступ до Доступ до 1F0h
7Fh 70h- 7Fh FFh 70h- 7Fh 17Fh 70h- 7Fh
1FFh
Банк 0 Банк 1 Банк 2 БанкЗ
*- не фізичний регистр х - не реалізовані, значення при читанні 00h
Рисунок 2.3 - Карта пам'яті даних мікроконтролерів PIC16F876/877
Рисунок 2.4 - Приклад 9-розрядної непрямої адресації
Регістр стану (адреса 03h, 83h, 103h або 183h) містить арифметичні прапори АЛП, біти стану контролера при скиданні і біти вибору сторінок пам‘яті. Регістр STATUS доступний для будь-якої команди так само, як будь-який інший регістр. Проте, биті TO і PD встановлюються апаратно і не можуть бути записані в регістр статусу програмно. Це слід мати на увазі при виконанні команди з використанням регістра статусу. Наприклад, команда CLRF обнулить всі біти, окрім бітів TO і PD, а потім встановить біт Z=1. Після виконання цієї команди регістр статусу може і не мати нульового значення (із-за бітів TO і PD) 000??100. Тому рекомендується для зміни регістра статусу використовувати тільки команди бітової установки BCF, BSF, MOVWF, які не змінюють решту біт статусу. Розміщення прапорів в регістрі STATUS наступне:
b7 b6 b5 b4 b3 b2 b1 b0
IRP | RP1 | RP0 | -TO | - PD | Z | DC | C |
Біт 7: IRP: Біт вибору банку при непрямій адресації
1- банк 2, 3(100h-1FFh)
0 - банк 0, 1 (000h - 0FFh)
Біти 6-5: RP1:RPO: Біти вибору банку при безпосередній адресації
11 – банк 3 (180h-1FFh)
10 – банк 2 (100h-17Fh)
01 - банк 1 (080h - 0FFh)
00 - банк 0 (000h - 07Fh)
Біт 4: -ТО: Прапор переповнювання сторожового таймера
1 - після POR або виконань команд CLRWDT, SLEEP
0 - після переповнювання WDT
Біт 3: -PD: Прапор включення живлення
1 - після POR або виконань команди CLRWDT
0 - після виконання команди SLEEP
Біт 2: Z: Прапор нульового результату
1 - нульовий результат виконання арифметичної або логічної операції
0 - не нульовий результат виконання арифметичної або логічної операції
Біт 1: DC: Прапор десяткового перенесення/позики (для команд ADDWF, ADDWL, SUBWF, SUBWL), позика має інверсне значення
1 - було перенесення з молодшого півбайта
0 - не було перенесення з молодшого півбайта
Біт 0: С: Прапор перенесення/позики (для команд ADDWF,
ADDWL, SUBWF, SUBWL), позика має інверсне значення
1 - було перенесення із старшого біта
0 - не було перенесення із старшого біта
Примітка. Прапор позики має інверсне значення. Віднімання виконується шляхом збільшення додаткового коду другого операнда. При виконанні команд зрушення (RRF, RLF) біт С завантажується старшим або молодшим бітом зрушуваного регістра.
Регістр OPTION доступний для читання і запису, містить біти управління:
• Попереднім дільником TMR0/WDT;
• Активним фронтом зовнішнього переривання RB0/INT; • Підтягаючими резисторами на входах PORTB.
Примітка. Якщо попередній дільник включений перед WDT, то коефіцієнт ділення тактового сигналу для TMR0 рівний 1:1.
Розміщення бітів керування в регістрі OPTION наступне:
b7 b6 b5 b4 b3 b2 b1 b0
-RBPU | |INTEDG | TOCS | | TOSE | PSA | PS2 | PS1 | PS0 |
біт 7: -RBPU: Включення підтягаючих резисторів на входах PORTB:
1 = підтягаючі резистори відключені, 0 = підтягаючі резистори включені;
біт 6: INTEDG: Вибір активного фронту сигналу на вході зовнішнього переривання: INT 1 = переривання по передньому фронту сигналу,
0 = переривання по задньому фронту сигналу;
біт 5:TOCS: Вибір тактового сигналу для TMR0: 1 = зовнішній тактовий сигнал з виведення RA4/TOCKI, 0 = внутрішній тактовий сигнал CLKOUT;
біт 4: TOSE: Вибір фронту приросту TMR0 при зовнішньому тактовому сигналі: 1 = приріст по задньому фронту сигналу (з високого до низького рівня) на виведенні RA4/TOCKI, 0 = приріст по передньому фронту сигналу (з низького до високого рівня) на виведенні RA4/TOCKI;
біт 3: PSA: Вибір включення переддільника: 1 = переддільник включений перед WDT, 0 = переддільник включений перед TMR0; біти 2-0: PS2 – PS0: Установка коефіцієнта ділення переддільника, коефіцієнти ділення приведені в таблиці 2.2.
Значення PS2 – PS0 | Для TMR0 | Для WDT |
000 | 1 :2 | 1:1 |
001 | 1 :4 | 1:2 |
010 | 1:8 | 1:4 |
011 | 1:16 | 1:8 |
100 | 1:32 | 1:16 |
101 | 1:64 | 1:32 |
110 | 1:128 | 1:64 |
111 | 1 :256 | 1:128 |
Примітка. При використанні режиму низьковольтного програмування і включених підтягаючих резисторах на PORTB необхідно скинути в '0' 3-й біт регістра TRISB для виключення підтягаючого резистора на виведенні RB3.
Регістр INTCON доступний для читання і запису, містить біти дозволів і прапори переривань: переповнювання TMR0; зміни рівня сигналу на виводах PORTB; зовнішнє джерело переривань RBO/INT. Розміщення бітів в регістрі INTCON наступне: