Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

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




Организация памяти программы

 

Микроконтроллер PIC16F84 имеет 13-разрядный счетчик команд, способный адресовать до 8 K×14 слов памяти программы (). В PIC16F84 присутствуют только первые 1 K×14 (0000 – 03FFh) слов памяти программы, остальные адреса зарезервированы для будущих модификаций. При сбросе процессор запускается с адреса 0000h, вектор прерывания расположен по адресу 0004h. Организация памяти программы и стека показана на рисунке 4.

 

 

Рисунок 4 – Организация памяти программ и стека

 

 

Память данных разделяется на две области. Первая представляет собой регистры специальных функций, вторая – регистры общего назначения (ОЗУ). Специальные регистры включают в себя регистр таймера/счетчика (TMR0), счетчика команд (PC), регистра состояния (STATUS), регистров ввода/вывода (PORTA и PORTB), регистра косвенной адресации (FSR) и регистров управления встроенным электрически перепрограммируемым ПЗУ (EEADR, EEDATA, EECON1, EECON2). Кроме того, специальные регистры TRISA и TRISB управляют конфигурацией портов ввода-вывода, а OPTION – режимами работы предварительного делителя.

Регистры общего назначения используются для хранения переменных по усмотрению пользователя.

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

На рисунке 5 приведена организация памяти данных PIC16F84.

 

Регистры      
00h Косвенный адрес (*) Косвенный адрес (*) 80h
01h TMR0 OPRION 81h
02h PCL PCL 82h
03h STATUS STATUS 83h
04h FSR FSR 84h
05h PORTA TRISA 85h
06h PORTB TRISB 86h
07h     87h
08h EEDATA EECON1 88h
09h EEADR EECON2(*) 89h
0Ah PCLATH PCLATH 8Ah
0Bh INTCON INTCON 8Bh
0Ch 68 регистров Отображаются 8Ch
2Fh общего назначения (ОЗУ) на банк 0 AFh
30h     B0h
       
       
4Fh     CFh
  Банк 0 Банк 1  

 

Примечания

1 Символ (*) означает нефизический адрес.

2 Символ означает, что адресное пространство не используется, содержимое считывается как «0».

 

Рисунок 5 – Организация памяти данных PIC16F84

 

Все регистры могут быть адресованы прямо или косвенно, с использованием регистра косвенной адресации FSR. Непосредственная адресация поддерживается специальными командами, загружающими данные из памяти программы в рабочий регистр W.

 

Регистр состояния STATUS

 

Регистр состояния содержит флаги состояния АЛУ, состояния микроконтроллера при сбросе и биты выбора страниц памяти данных. Регистр STATUS доступен для любой команды так же, как и любой другой регистр. Однако биты и устанавливаются аппаратно и не могут быть изменены программно, это следует иметь в виду при выполнении команд с использованием регистра состояния. Например, команда CLRF STATUS обнулит все биты, кроме битов и , а затем установит бит Z = 1. После выполнения этой команды регистр состояния будет иметь значение 000uu100 ( и не изменились). Поэтому рекомендуется для изменения регистра состояния использовать только команды битовой установки BCF, BSF, а также MOVWF и SWAPF, которые дополнительно не меняют биты регистра состояния.

Биты IRP и RP1 (STATUS <7:6>) не используются в PIC16F84 и должны быть программно установлены в «0». Использование этих битов в качестве битов общего назначения не рекомендуется. Биты C и DC при вычитании функционируют как биты заема и десятичного заема соответственно. Подробное описание разрядов регистра приведено в таблице 2.

Если регистр STATUS используется в качестве регистра операнда для команд, изменяющих биты Z, DC и C, то непосредственная запись в эти три бита запрещается. Биты устанавливаются в соответствии с внутренней логикой микроконтроллера.

 

Таблица 2 – Описание разрядов регистра STATUS

 

Регистр STATUS Адрес: 03h, 83h Состояние по включению питания:   1XXX
R/W R/W R/W R R R/W R/W R/W
IRP RP1 RP0 Z DC C
бит 7 бит 0
                         

Окончание таблицы 2

 

    Бит является флагом переноса для команд сложения ADDWF, ADDLW и инверсным флагом заема для команд вычитания SUBWF, SUBLW. Бит устанавливается в «1» в командах сложения ADDWF и ADDLW, если в результате операции из старшего разряда произошел перенос (результат больше 0FFh). При выполнении команд сдвига RRF, RLF бит загружается из младшего или старшего бита сдвигаемого регистра соответственно. Вычитание осуществляется путем прибавления дополнительного кода второго операнда. Бит устанавливается в «1» в командах вычитания SUBWF и SUBLW, если при вычитании не произошло заема (результат больше или равен 0)
   
C (Carry/Borrow) Перенос/Заем
DC (Decimal Carry/Borrow) Десятичный перенос/Заем Бит устанавливается в «1» в командах ADDWF и ADDLW, если произошел перенос результата из бита 3. Бит устанавливается в «1» в командах вычитания SUBWF и SUBLW, если при вычитании не произошло заема из бита 4
Z (Zero) Ноль Бит устанавливается в «1», если результат арифметической или логической операции равен нулю
(Power down) Выключение питания Бит устанавливается в «1» по включению питания или по команде CLRWDT. Бит сбрасывается в «0» по команде SLEEP
(Time-out) Тайм-аут Бит устанавливается в «1» по включению питания, а также командами CLRWDT и SLEEP. Бит сбрасывается в «0» по срабатыванию сторожевого таймера
  (Register Bank Select) Биты RP0, RP1 выбирают одну из четырех страниц памяти данных:
    RP1 RP0 :  
RPO Выбор страницы памяти данных     : страница 0 (000h…07Fh)
RP1     : страница 1 (080h…0FFh)
      : страница 2 (100h…17Fh)
        : страница 3 (180h…1FFh)
    Для PIC16F84 используется только бит RP0. Бит RP1 должен быть установлен в 0
IRP Не используется Не используется. Бит должен быть установлен в «0»
Примечание – R – только чтение, R/W – чтение и запись.

Регистр OPTION

 

Описание разрядов регистра приведено в таблице 3.

Регистр OPTION доступен для чтения и записи и содержит управляющие биты, которые определяют коэффициент деления и использование предварительного делителя, источник внешних прерываний, а также подтягивающие резисторы на PORTB. Если предварительный делитель установлен на сторожевой таймер WDT (PSA = «1»), то таймер TMR0 имеет коэффициент деления 1:1.

 

Таблица 3 – Описание разрядов регистра OPTION

 

Регистр OPTION Адрес: 81h Состояние по включению питания:    
R/W R/W R/W R/W R/W R/W R/W R/W
INTEDG T0CS T0SE PSA PS2 PS1 PS0
бит 7 бит 0
    PS2 PS1 PS0 Коэффициент деления TMR0 Коэффициент деления WDT
          1: 2 1: 1
PS0, PS1, PS2 (Prescaler Value) Значение предварительного делителя       1: 4 1: 2
      1: 8 1: 4
      1: 16 1: 8
      1: 32 1: 16
      1: 64 1: 32
      1: 128 1: 64
      1: 256 1: 128
PSA (Prescaler Assigment) Назначение предварительного делителя 1 – предварительный делитель включен после WDT 0 – предварительный делитель включен перед TMR0
T0SE (TMR0 source edge select) Выбор фронта переключения TMR0 1 – TMR0 увеличивается по перепаду 1/0 на входе T0CKI 0 – TMR0 увеличивается по перепаду 0/1 на входе T0CKI
                                   

Окончание таблицы 3

 

T0CS (TMR0 clock source select) Выбор источника тактирования TMR0 1 – сигнал со входа T0CKI 0 – внутренняя тактовая частота CLKOUT = CLKIN/4
INTEDG (Interrupt Edge select) Выбор фронта переключения RB0/INT 1 – прерывание по перепаду 0/1 на входе RB0/INT 0 – прерывание по перепаду 1/0 на входе RB0/INT
(PORTB Pull-Up enable) Разрешение подтягивающих резисторов на PORTB 1 – подтягивающие резисторы на PORTB отключены 0 – подтягивающие резисторы на PORTB подключены на всех разрядах, запрограммированных как входы
Примечание – R/W – чтение и запись

 

Регистр INTCON

 

Описание разрядов регистра приведено в таблице 4.

 

Таблица 4 – Описание разрядов регистра INTCON

 

Регистр INTCON Адрес: 0Bh, 8Bh Состояние по включению питания:   000X
R/W R/W R/W R R R/W R/W R/W
GIE EEIE T0IE INTE RBIE T0IF INTF RBIF
бит 7 бит 0
RBIF (RB port change Interrupt Flag bit) Флаг прерывания по изменению состояния порта B Устанавливается в «1» по изменению состояния хотя бы на одном из входов RB7 … RB4. Сбрасывается программно
INTF (RB0/INT Interrupt Flag bit) Флаг прерывания INT Устанавливается в «1» по прерыванию INT. Сбрасывается программно
T0IF (TMR0 Overflow Interrupt Flag bit) Флаг прерывания по переполнению таймера TMR0 Устанавливается в «1» при переполнении таймера TMR0. Сбрасывается программно
                         

Окончание таблицы 4

 

RBIE (RB port change Interrupt enable bit) Маска прерывания RBIF RBIE=0: запрещает прерывания от RBIF; RBIE=1: разрешает прерывания от RBIF
INTE (RB0/INT Interrupt Enable bit) Маска прерывания INT INTE=0: запрещает прерывания от INTF; INTE=1: разрешает прерывания от INTF
T0IE (TMR0 Overflow Interrupt Enable bit) Маска прерывания TMR0 T0IE=0: запрещает прерывания от T0IF; T0IE=1: разрешает прерывания от T0IF
EEIE (EE write complete Interrupt Enable bit) Маска прерывания от записи в ЭППЗУ EEIE=0: запрещает прерывания от EEIF; EEIE=1: разрешает прерывания от EEIF
GIE (Global Interrupt Enable bit) Флаг разрешения прерываний GIE=0: прерывания запрещены; GIE=1: разрешены все немаскированные прерывания
Примечание – R – только чтение, R/W – чтение и запись.

 

Регистр INTCON доступен для чтения и записи и содержит биты разрешения прерываний и флаги прерываний от различных источников. Флаги прерываний устанавливаются при возникновении условия прерывания независимо от состояния соответствующих бит разрешения прерываний и бита общего разрешения прерываний GIE (INTCON).

 

Счетчик команд

 

Счетчик команд PC 13-разрядный, младшим байтом счетчика команд служит регистр PCL, доступный для чтения и записи. Старшие разряды счетчика команд PC<12:8> не могут быть непосредственно считаны или записаны, а адресуются через регистр PCLATH. Содержимое регистра PCLATH заносится в счетчик команд, когда PC загружается новым значением. Это происходит в командах CALL, GOTO и при записи в PCL. По сигналу RESET в счетчик команд записывается «0». Загрузка счетчика команд в различных ситуациях показана на рисунке 6.


 
 

 
 

 

Рисунок 6 – Загрузка счетчика команд командой, модифицирующей PCL (а) и командами GOTO, CALL (б)

 

Стек

 

Микроконтроллер PIC16F84 содержат 8-уровневый аппаратный стек (см. рисунок 4). Стек не является частью памяти программы или памяти данных, а указатель стека не может быть считан или записан. При выполнении команды CALL или при прерывании в вершину стека заносится содержимое счетчика команд PC, предварительно увеличенное на единицу. Одновременно старое значение из вершины стека переписывается в стек следующего уровня. Значение из стека извлекается по командам RETURN, RETLW и RETFILE. Содержимое регистра PCLATH не изменяется при операциях со стеком. Стек работает как последовательный буфер. После того, как в стек было подряд занесено восемь значений счетчика команд, девятое значение переписывает значение, которое было занесено первым. Десятое значение перепишет значение, занесенное вторым, и т.д. При девятом и последующих последовательных извлечениях из стека будет считано то же значение, что и при восьмом извлечении, а именно значение, которое было занесено в стек первым.

Биты, указывающие на переполнение и пустоту стека, отсутствуют.

 

Косвенная адресация данных

 

Регистр INDF физически не существует и используется совместно с регистром FSR для косвенной адресации данных. Любая команда, использующая регистр INDF, в действительности обращается к регистру данных, адресуемому регистром FSR. Например, в команде ADDWF INDF к регистру W будет прибавлено содержимое регистра, адрес которого находится в FSR. Чтение косвенным образом самого регистра INDF даст результат 00h (т.е. FSR = 0). Косвенная запись в регистр INDF аналогична, хотя биты состояния могут быть изменены.

Программа, использующая косвенную адресацию для записи нулей в 16 последовательно расположенных ячеек ОЗУ с адреса 20h до адреса 2Fh, приведена ниже.

 

  MOVLW 0X20 ; Загрузка в W адреса первой ячейки памяти.
  MOVWF FSR ; Пересылка в FSR адреса первой ячейки памяти.
NEXT CLRF INDF ; Это начало цикла очистки ячеек. Команда, ад-
      ; ресующаяся к регистру INDF, в результате по
      ; очереди очищает все ячейки.
  INCF FSR ; Следующий адрес.
      ; Когда пройдут все 16 адресов (10h), в регистре
      ; FSR окажется установленным бит 4
      ; (0011 0000 = 30h) и цикл закончится.
  BTFSS FSR,4 ; Все закончено?
  GOTO NEXT ; Нет, следующая ячейка.
  CONT…   ; Продолжение программы.

 


Порты ввода/вывода

 

Микроконтроллеры PIC16F84 имеют два порта ввода/вывода – PORTA и PORTB. Некоторые разряды портов имеют дополнительные функции. Программа может считывать и записывать данные в регистры ввода/вывода аналогично регистрам общего назначения. При чтении всегда считывается действительное состояние выводов, независимо от того, запрограммированы отдельные биты как входы или как выходы. После сброса все разряды программируются как входы (выходы находятся в высокоимпедансном состоянии), поскольку регистры управления портами TRISA и TRISB устанавливаются в «1». Разряд порта ввода/вывода определяется как выход, если соответствующий бит в регистре управления портом установлен в «0».

 




Поделиться с друзьями:


Дата добавления: 2015-03-29; Просмотров: 544; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.008 сек.