<< Назад к оглавлению
В данном тексте приведены ссылки на книги. "название книги":страница обозначает указатель на определенную страницу книги. "название книги":Гглава - главу. При этом ТО - сокращение для тех. описания контроллера (Datasheet). Например ТО:15 - 15 страница технического описания. ТО:Г3 - третья глава технического описания |
Устройство памяти контроллера
Контроллер - это лишь устройство, которое шаг за шагом выполняет команды. Команды записаны в памяти контроллера и выполняются по очереди.
Команды записаны в понятном контроллеру машинном языке - столбик 2 следующего листинга. Cправа приведено, как эти команды записываются в ассемблере
Внутри контроллера
Адрес ячейки Содержимое ячейки
0x001 0x0e00
0x002 0x6ee0
0x003 0x6a80
0x004 0x6a92
и так далее... |
Описание
Соответствующая команда ассемблера movlw 0 ;записываем в аккумулятор 0 movwf BSR ;аккумулятор -> выбор блока clrf PORTA ;обнуляем выход порта А clrf TRISA ;настраиваем порт А на вывод |
Второй столбик - это машинный код, в шестнадцатеричной системе счисления.
Это и есть команды, записанные в памяти программы.
Но кроме памяти программы (PROGRAM MEMORY) есть еще память данных.
В памяти данных во-первых хранятся настройки для нашего контроллера. Собственно, это просто переменные, меняя которые вы меняете какие-то установки. И еще в памяти данных мы будем создавать переменные. То есть, если программе что-либо надо запомнить, она записывает это в память данных (DATA MEMORY).
То, где хранятся настройки контроллера называется регистрами специального назначения - SPECIAL FUNCTIONS REGISTERS (SFR), а то, что мы используем, как переменные - регистры общего назначения - GENERAL PURPOSE REGISTERS (GPR).
стоит еще отметить, что память поделена на 15 банков в каждом по 16x16 ячеек. для того, чтобы выбрать другой банк данных есть регистр выбора банка BANK SELECT REGISTER (BSR).
Для многих команд можно использовать адрес напрямую, с помощью регистра BSR или же с помощью access банка. При обращении в access bank, до адрес 0x60 мы попадаем в 1й банк. В остальных адресах мы попадем в банк 15. Регистры специального назначения. Когда мы задаем команду в ассемблере мы можем поднять флаг A (0) или B (1) для указания будем ли мы использовать BSR или же access bank. Конкретнее смотрите в ТО в главе instruction set.
Для многих команд можно использовать адрес напрямую, с помощью регистра BSR или же с помощью access банка. При обращении в access bank, до адрес 0x60 мы попадаем в 1й банк. В остальных адресах мы попадем в банк 15. Регистры специального назначения. Когда мы задаем команду в ассемблере мы можем поднять флаг A (0) или B (1) для указания будем ли мы использовать BSR или же access bank. Конкретнее смотрите в ТО в главе instruction set.
Стоит вам записать в него 2, вы тут же начинаете использовать второй банк регистров.
Предлагаю вам самим это посмотреть обратитесь к Тех Описанию. ТО:59 и ТО:65
пример выбора блока регистров movlw 0x5 ;записываем 5 сначала в аккумулятор movwf BSR ;из аккумулятора передаем значение в BSR регистр |
Еще есть EEPROM память, которая спользуется для длительного хранения данных. Но об нёй не сейчас.
Пожалуйста, помогите сделать статью лучше. Увидели непонятность, неточность или ошибку, сообщите в комментарии, или напишите мне. Спасибо. Jasuramme@mail.ru |
Вроде бы говорили, что у PIC18 линейная адресация памяти. Не банки как у PIC16. Можно по-подробнее об этом.
ОтветитьУдалитьПростите, не заметил комментарий, у меня гугл перенес блог в папку social networks.
УдалитьАдресное пространство наверное одно, но с помощью 8битных команд к нему нет возможности адресоваться. (8 бит - число до 255)
Поэтому существует регистр выбора банка BSR (bank select register). В нем содержится информация, к какой части памяти мы будем адресоваться.
Простите, не заметил комментарий, у меня гугл перенес блог в папку social networks.
ОтветитьУдалитьАдресное пространство наверное одно, но с помощью 8битных команд к нему нет возможности адресоваться. (8 бит - число до 255)
Поэтому существует регистр выбора банка BSR (bank select register). В нем содержится информация, к какой части памяти мы будем адресоваться.