Память программ
Как следует из названия, память программ предназначена для хранения команд, управляющих функционированием микроконтроллера. В памяти программ хранятся также различные константы, не меняющиеся во время работы программы. Как уже было сказано, память программ представляет собой электрически стираемое ППЗУ (FLASH_ПЗУ). Поскольку все команды занимают в памяти по 16 бит, память программ имеет 16-разрядную организацию. Соответственно объем памяти микроконтроллеров семейства составляет 512…1024 16-битных слова. Для адресации памяти программ используется счетчик команд (PC—Program Counter). Размер счетчика команд составляет 9 или 10 разрядов в зависимости от объема адресуемой памяти. По адресу $000 памяти программ находится вектор сброса. После инициализации (сброса) микроконтроллера выполнение программы начинается с этого адреса (по этому адресу рекомендуется размещать команду относительного перехода к инициализационной части программы). Начиная с адреса $001 располагается таблица векторов прерываний. Размер этой области зависит от модели микроконтроллера и составляет от 4 (адреса $001…$004) до 8 (адреса $001…$008) векторов. При возникновении прерывания после сохранения в стеке текущего значения счетчика команд происходит выполнение команды, расположенной по адресу соответствующего вектора. Поэтому по этим адресам располагаются команды относительного перехода к подпрограммам обработки прерываний. Ниже приведен типичный листинг начала программы для модели ATtiny28: Если в программе прерывания не используются (запрещены), то основная программа может начинаться непосредственно с адреса $001. Следует отметить, что память программ может использоваться не только для хранения кода программы, но также и для хранения различных констант. Для пересылки байта из памяти программ в память данных имеется специальная команда — LPM Rd, Z. Адрес, по которому производится чтение, перед использованием этой команды должен быть загружен в индексный регистр Z (см. далее). При этом старшие 15 разрядов содержимого регистра будут определять адрес слова, а младший разряд будет определять, какой из байтов будет прочитан: «0» — младший байт, «1» — старший байт (Рис. 5.5).
Рис. 5.5. Косвенная адресация памяти программ В заключение следует отметить, что FLASH-ПЗУ, используемое в микроконтроллерах AVR, рассчитано как минимум на 1000 циклов стирания/записи.
|