- •СведенИя о процессоре pic16. Система команд Архитектура процессоров семейства pic16
- •Распределение областей памяти процессоров pic16
- •Система команд процессоров pic16
- •Программирование на Ассемблере
- •Синтаксис числовых значений в различных системах счисления
- •Практическая часть Процесс подготовки программ для процессоров pic16 Методические указания
- •Ход работы
- •Лабораторная работа № 1
- •Теоретические сведения
- •Ход работы
- •Лабораторная работа № 2.
- •Теоретические сведения
- •Ход работы
- •Лабораторная работа № 3.
- •Теоретические сведения
- •Ход работы
- •Лабораторная работа № 4
- •Теоретические сведения
- •Ход работы
- •Лабораторная работа № 5
- •Теоретические сведения
- •Ход работы
- •Лабораторная работа № 6
- •Теоретические сведения
- •Ход работы
- •Лабораторная работа № 7
- •Теоретические сведения
- •Ход работы
- •Лабораторная работа № 8
- •Теоретические сведения
- •Ход работы
- •Список литературы
Распределение областей памяти процессоров pic16
Организация памяти программы. Область памяти программ включает в себя 8192 14-разрядных ячеек. Эта область памяти разделена на 4 банка, а каждый банк – на 8 сегментов по 256 ячеек (табл.1.1). Адрес каждой ячейки памяти указывается в счетчике команд PC. Содержимое PC отображается в двух специализированных ячейках области памяти данных имеющих формальные имена PCL и PCLATH (младший байт и старший байт адреса). Переключение между банками осуществляется за счёт модификации разрядов 3 и 4 в регистре PCLATH. Сегменты в пределах каждого банка соответствуют изменению только младшего байта PCL, а номер сегмента определяют биты 0, 1, 2 регистра PCLATH.
Таблица 1.1 – Организация памяти программ
Segment |
Address |
Label |
Address |
Label |
Address |
Label |
Address |
Label |
0 |
0x0000 |
RESET |
0x0800 |
|
0x1000 |
|
0x1800 |
|
… |
|
|
|
… |
|
|
|
|
0x0004 |
V_INT |
|
|
0x1004 |
|
|
|
|
… |
|
|
|
… |
|
|
|
|
0x00FF |
|
0x08FF |
|
0x10FF |
|
0x18FF |
|
|
1 |
0x0100 |
|
0x0900 |
|
0x1100 |
|
0x1900 |
|
… |
|
|
|
… |
|
|
|
|
0x01FF |
|
0x09FF |
|
0x11FF |
|
0x19FF |
|
|
2 |
0x0200 |
|
0x0A00 |
|
0x1200 |
|
0x1A00 |
|
… |
|
|
|
… |
|
|
|
|
0x02FF |
|
0x0AFF |
|
0x12FF |
|
0x1AFF |
|
|
3 |
0x0300 |
|
0x0B00 |
|
0x1300 |
|
0x1B00 |
|
… |
|
|
|
… |
|
|
|
|
0x03FF |
|
0x0BFF |
|
0x13FF |
|
0x1BFF |
|
|
4 |
0x0400 |
|
0x0C00 |
|
0x1400 |
|
0x1C00 |
|
… |
|
|
|
… |
|
|
|
|
0x04FF |
|
0x0CFF |
|
0x14FF |
|
0x1CFF |
|
|
5 |
0x0500 |
|
0x0D00 |
|
0x1500 |
|
0x1D00 |
|
… |
|
|
|
… |
|
|
|
|
0x05FF |
|
0x0DFF |
|
0x15FF |
|
0x1DFF |
|
|
6 |
0x0600 |
|
0x0E00 |
|
0x1600 |
|
0x1E00 |
|
… |
|
|
|
… |
|
|
|
|
0x06FF |
|
0x0EFF |
|
0x16FF |
|
0x1EFF |
|
|
7 |
0x0700 |
|
0x0F00 |
|
0x1700 |
|
0x1F00 |
|
… |
|
|
|
… |
|
|
|
|
0x07FF |
|
0x0FFF |
|
0x17FF |
|
0x1FFF |
|
|
|
Bank 0 |
Bank 1 |
Bank 2 |
Bank 3 |
||||
Организация памяти данных. Шина данных разрядностью 8 бит соединяет группу регистров ОЗУ, порты ввода/вывода и 8-разрядное АЛУ. Область памяти данных содержит до 512 однобайтовых ячеек, разделенных на страницы по 128 байт или секторы по 256 байт. В младших 32 ячейках каждой страницы содержатся служебные регистры, содержащие информацию о состоянии процессора, отображающие режимы работы и состояние устройств ввода и вывода. Регистры, обеспечивающие функционирование процессора – РСL, PCLATH, STATUS, INDF, FSR, INTCON – имеют клоны во всех страницах. Эти ячейки всегда доступны независимо от того, какая страница памяти активна (табл. 1.2). Пользовательские регистры (USER FILES) размещены в нижней части каждой страницы. Некоторые из них (UNITED USER FILES) также объединены для организации пользовательского стека данных.
Таблица 1.2. Организация памяти данных
Address |
file |
Address |
file |
Address |
file |
Address |
file |
0x00 |
INDF |
||||||
0x01 |
TMR0 |
0x81 |
|
0x101 |
|
0x181 |
|
0x02 |
PCL |
||||||
0x03 |
STATUS |
||||||
0x04 |
FSR |
||||||
0x05 |
PORTA |
0x85 |
TRISA |
|
|
|
|
0x06 |
PORTB |
0x86 |
TRISB |
|
|
|
|
0x07 |
PORTC |
0x87 |
TRISC |
|
|
|
|
0x08 |
PORTD |
0x88 |
TRISD |
|
|
|
|
0x09 |
PORTE |
0x89 |
TRISE |
|
|
|
|
0x0A |
PCLATH |
||||||
0x0B |
INTCON |
||||||
… |
|
|
|
|
|
|
|
0x1E |
ADRES |
|
|
|
|
|
|
0x1F |
ADCON0 |
0x9F |
ADCON1 |
|
|
|
|
0x20 |
USER FILES |
0xA0 |
USER FILES |
0x120 |
USER FILES |
0x1A0 |
USER FILES |
… |
… |
… |
… |
||||
0x6F |
0xEF |
0x16F |
0x1EF |
||||
0x70 |
UNITED |
||||||
… |
USER |
||||||
0x7F |
FILES |
||||||
Page 0 |
Page 1 |
Page 2 |
Page 3 |
||||
Sector 0 |
Sector 1 |
||||||
Регистры могут быть адресованы прямо с указанием их адреса в команде либо косвенно путем указания формального адреса INDF, инициирующего извлечение фактического адреса из регистра косвенной адресации FSR. Непосредственная адресация поддерживается специальными командами, загружающими данные из кода команды в программе в рабочий регистр W.
Регистр состояния STATUS. Регистр состояния содержит флаги состояния АЛУ, состояние контроллера при сбросе и биты выбора страниц памяти программы. Регистр STATUS доступен для любой команды так же, как и любой другой регистр. Однако биты ТО и PD устанавливаются аппаратно и не могут быть изменены программно. Это следует иметь в виду при выполнении команд с использованием регистра состояния. Например, команда CLRF STATUS обнулит все биты, кроме битов ТО и PD, а затем установит бит Z=1. После выполнения этой команды регистр состояния будет иметь значение 000uu100 (ТО и PD не изменились). В связи с этим не рекомендуется изменять состояние битов этого регистра непосредственно, а использовать команды, устанавливающие биты признаков в необходимое состояние. Допускается также использовать команды битовой установки BCF, BSF.
