Основы микропроцессорной техники

Раздел 5. Однокристальный микроконтроллер серии PIC


«Структура курса | Глава 1 | Глава 2 | Глава 3 | Глава 4 | Глава 5 | Глава 6 | Раздел 7 | Глава 8 | Дополнения

Раздел 5 - Страницы: « | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | »

5.2.4. Организация памяти программ и стека

Счетчик команд в МК PIC16F8Х имеет ширину 13 бит и способен адресовать 8Кх14бит объема программной памяти. Однако физически на кристаллах PIC16F83 и PIC16CR83 существует только 512х14 памяти (адреса 0000h-01FFh), а в МК PIC16F84 и PIC16CR84 - 1Кх14 памяти (адреса 0000h-03FFh. Обращение к адресам выше 1FFh (3FFh) фактически является адресация в тех же первые 512 адресов (первые 1К адресов).

Организация памяти программ и стека приведена на Рис. 5.4.

В памяти программ является выделены адреса. Вектор инициализации находится по адресу 0000h, вектор прерывания - по адресу 0004h. Конечно по адресу 0004h располагается подпрограмма идентификации и обработки прерываний, а по адресу 0000h - команда перехода на метку, расположенную по подпрограммой обработки прерываний.


Рис. 5.4 Организация памяти программ и стека.

5.2.5. Организация памяти данных

Память данных МК разбита на две области. Первые 12 адресов - это область регистров специальных функций (SFR), а вторая - область регистров общего назначения (GPR). Область SFR руководит работой прибора.

Обе области разбиты в свою очередь на банки 0 и 1. Банк 0 выбирается путем обнуления бита RP0 регистра статуса (STATUS). Установка бита RP0 в единицу выбирает банк 1. Каждый банк имеет длину 128 байт. Однако для PIC16F83 и PIC16CR83 память данных существует только до адреса 02Fh, а для PIC16F84 и PIC16CR84 - адрес 04Fh.

На Рис. 5.5 изображен организацию памяти данных.


Рис. 5.5 Организация памяти данных.

Некоторые регистры специального назначения продублированы в обоих банках, а некоторые находятся в банке 1 отдельно.

Регистры с адресами 0Ch-4Fh могут использоваться как регистры общего назначения, оторые представляют собой статическое ОЗУ. Адреса регистров общего назначения банка 1 отображаются на банк 0. Итак, когда установленный банк 1, то обращение к адресам 8Ch-CFh фактически адресует банк 0.

В регистре статуса кроме бита RP0 есть еще бит RB1, позволяющий обращаться до четырех страниц (банков) будущих модификаций этого кристалла.

В ячейки ОЗУ можно адресоваться прямо, используя абсолютную адрес каждого регистра, или косвенно, через регистр указатель FSR. Косвенная адресация использует текущее значение разрядов RP1: RP0 для доступа к банкам. Это относится и к EEPROM памяти данных. В обоих случаях можно адресовать до 512 регистров.

5.2.6. Регистры специального назначения

Регистр статуса (STATUS) содержит признаки операции (арифметические флаги) АЛУ, состояние контроллера при инициализации и биты выбора страниц для памяти данных. Назначение битов регистра приведено в табл. 5.3.

Табл .. 5.3. Назначение битов регистра STATUS (адрес 03h, 83h).
R/W-0 R/W-0 R/W-0 R-1 R-1 R / Wx R / Wx R / Wx
IRP RP1 RP0 / TO / PD Z DC C
Бит 7 Бит 6 Бит 5 Бит 4 Бит 3 Бит 2 Бит 1 Бит 0
Бит 7: IRP: бит выбора страницы банка данных (используется при косвенной адресации)
0 = банк 0,1 (00h - FFh)
1 = банк 2,3 (100h - 1FFh)
Бит IRP не используется в МК подгруппы PIC16F8X
Биты 6-5: RP1: RP0: биты выбора страницы банка данных (используются при прямой адресации)
00 = банк 0 (00h - 7Fh)
01 = банк 1 (80h - FFh)
10 = банк 2 (100h - 17Fh)
11 = банк 3 (180h - 1FFh)
В МК подгруппы PIC16F8X используется только бит RP0
Бит 4: / TO: бит срабатывания сторожевого таймера
1 = после включения питания, а также командами CLRWDT и SLEEP
0 = при завершении выдержки сторожевого таймера
Бит 3: / PD: бит снижения потребляемой мощности
1 = после включения питания, а также командой CLRWDT
0 = по команде SLEEP
Бит 2: Z: бит нулевого результата
1 = результат арифметической или логической операции нулевой
0 = результат арифметической или логической операции ненулевой
Бит 1: DC: бит десятичной переноса / займа (для команд ADDWF и ADDLW)
1 = имеет место перенос с 4-го разря да
0 = нет переноса с 4-го разряда
Бит 0: C: бит переноса / заема (для команд ADDWF и ADDLW)
1 = имеет место перенос из самого старшего разряда
0 = нет переноса из самого старшего разряда
Примечание: вычисления осуществляется путем добавления дополнительного кода второго операнда. При выполнении команд сдвига этот бит загружается из младшего или старшего разряда источника, сдвигается.

Здесь и далее: R - бит, читаемого; W - бит, который записывается; S - бит, который устанавливается; U - бит, не используется (читается как "0");-n = 0 или 1 - значение бита после инициализации.

Регистр статуса доступен для любой команды так же, как любой другой регистр. Однако если регистр STATUS является регистром назначения для команды, которая влияет на биты Z, DC или C, то запись в эти три бита запрещается. Кроме того, биты / TO и / PD устанавливаются аппаратно и не могут быть записаны в статус программно. Это следует иметь в виду при выполнении команды с использованием регистра статуса. Например, команда CLRF STATUS обнулит все биты, кроме битов / TO и / PD, а затем установит бит Z = 1. После выполнения этой команды регистр статуса может и не иметь нулевого значения (через биты / TO и / PD) STATUS = 000uu1uu, где u - неизменный состояние. Поэтому рекомендуется для изменения регистра статуса использовать только команды битовой установки BCF, BSF, MOVWF, которые не изменяют другие биты статуса. Влияние всех команд на биты статуса рассматривается в разделе "Описание системы команд.

Регистр конфигурации (OPTION) доступен по чтению и записи регистром, содержит управляющие биты для конфигурации предварительного делителя (предильника), внешних прерываний, таймера, а также резисторов "pull-up" на выводах PORTB. Назначение битов регистра приведен в табл. 5.4.

Табл. 5.4. Назначение битов регистра OPTION
(Адрес 81h).
R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1
/ RBPU INTEDG T0CS T0SE PSA PS2 PS1 PS0
Бит 7 Бит 6 Бит 5 Бит 4 Бит 3 Бит 2 Бит 1 Бит 0
Бит 7: / RBPU: бит установки резисторов "pull-up" на выводах PORTB
0 = резисторы "pull-up" подключены
1 = резисторы "pull-up" отключены
Бит 6: INTEDG: бит выбора перехода сигнала прерывания
0 = прерывание по спаду сигнала на выводе RB0/INT
1 = прерывание по фронту сигнала на выводе RB0/INT
Бит 5: T0CS: бит выбора источника сигнала таймера TMR0
0 = внутренний тактовый сигнал (CLKOUT)
1 = переход на выводе RA4/T0CKI
Бит 4: T0SE: бит выбора перехода необходимо установить TMR0
0 = увеличение по фронту сигнала на выводе RA4/T0CKI
1 = увеличение по спаду сигнала на выводе RA4/T0CKI
Бит 3: PSA: бит назначения предильника
0 = предильник подключен к TMR0
1 = предильник подключен к сторожевого таймера WDT
Биты 2-0: PS2: PS0: биты выбора коэффициента деления предильника
Значение бит Скорость TMR0 Скорость WDT
000
001
010
011
100
101
110
111
1:2
1:4
1:8
1:16
1:32
1:64
1:128
1:256
1:1
1:2
1:4
1:8
1:16
1:32
1:64
1:128

В том случае, когда предильник обслуживает сторожевой таймер WDT, таймера TMR0 назначается коэффициент предварительного деления 1:1.

Регистр условий прерывания (INTCON) доступен по чтению и записи регистром, содержит биты доступа для всех источников прерываний. Назначение битов регистра приведен в табл. 5.5.

Табл. 5.5. Назначение битов регистра INTCON
(Адреса 0Bh, 8Bh.
R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R / Wx
GIE EEIE T0IE INTE RBIE T0IF INTF RBIF
Бит 7 Бит 6 Бит 5 Бит 4 Бит 3 Бит 2 Бит 1 Бит 0
Бит 7: GIE: бит разрешение всех прерываний
0 = запрещены все прерывания
1 = разрешены все незамасковани прерывания
Бит 6: EEIE: бит разрешение прерывания записи в EEPROM
0 = запрещены прерывания записи в EEPROM
1 = разрешены прерывания записи в EEPROM
Бит 5: T0IE: бит раз решение прерывания по переполнению TMR0
0 = запрещены прерывания от TMR0
1 = разрешены прерывания от TMR0
Бит 4: INTE: бит разрешение прерываний с входа RB0/INT
0 = запрещены прерывания с входа RB0/INT
1 = разрешены прерывания с входа RB0/INT
Бит 3: RBIE: бит разрешение прерываний по изменению PORTB
0 = запрещены прерывания по изменению PORTB
1 = разрешены прерывания по изменению PORTB
Бит 2: T0IF: бит запроса прерывания по переполнением TMR0
0 = прерывание по переполнением TMR0 отсутствует
1 = прерывание по переполнением TMR0 имеет место
Бит 1: INTF: бит запроса прерывания с входа RB0/INT
0 = прерывание по входу RB0/INT отсутствует
1 = прерывание с входа RB0/INT имеет место
Бит 0: RBTF: бит запроса прерывания по изменению PORTB
0 = на одном из входов RB7: RB4 состояние не изменилось
1 = хотя бы на одном из входов RB7: RB4 изменился состояние

Бит разрешения всех прерываний GIE сбрасывается автоматически при следующих обстоятельствах:

  • при включении питания;
  • по внешнему сигналу / MCLR при нормальной работе;
  • по внешнему сигналу / MCLR в режиме SLEEP;
  • при завершении задержки таймера WDT при нормальной работе;
  • при завершении задержки таймера WDT в режиме SLEEP.

Прерывание INT может вывести процессор из режима SLEEP, если перед входом в этот режим бит INTE был установлен в единицу. Состояние бита GIE также определяет: будет процессор переходить на подпрограмму прерывания после выхода из режима SLEEP.

Сброс битов - запросов прерываний - должно осуществляться соответствующей программе обработки.


«Структура курса Раздел 5 - Страницы: « | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | »