Белов, А.В. Микроконтроллеры AVR: от азов программирования до создания практических устройств
182 Микроконтроллеры AVR от азов программирования... файл и включить подобную строку в свою программу. Учтите, что без присоединения файла описаний дальнейшая программа работать не будет. Для микроконтроллера ATtiny2313 файл описаний имеет название tn2313def.inc. Если файл описаний находится в указанной выше директории, то в команде include достаточно лишь указать его полное имя (с расширением). Указывать полный путь необязательно. Назначение команды .list (строка 2), надеюсь, у вас уже не вызы вает вопросов. Остановимся на команде макроопределения (строка 3). Эта команда, как уже говорилось, присваивает регистру г16 имя temp. Дальше в программе регистр temp используется для временного хра нения промежуточных величин. Уместно задаться вопросом: почему выбран именно г 16, а, к примеру, не г 0? Это становится понятно, если вспомнить, что регистры, начиная с г 0 и заканчивая г 15, имеют меньше возможностей. Например, в строке 14 программы регистр temp исполь зуется в команде ldi. Однако команда ldi не работает с регистрами г0-г15. Именно по этой причине мы и выбрали г16 . Следующие две команды (строки 4, 5) подробно описаны в начале этого раздела. Они служат для выбора программного сегмента памяти и установки начального значения указателя. В строках 6 и 7 производится инициализация стека. В регистр стека SPL записывается адрес его вершины. В качестве адреса выбран самый верхний адрес ОЗУ Для обозначения этого адреса в данной вер сии Ассемблера существует специальная константа с именем RAMEND. Значение этой константы определяется в файле описаний (в нашем слу чае в файле tn2313def . inc). Для микроконтроллера ATtiny2313 кон станта RAMEND равна OxDF. Одной строкой записать константу в регистр стека невозможно, так как в системе команд микроконтроллеров AVR отсутствует подобная команда. Отсутствующую команду мы заменяем двумя другими. И тут нам пригодится регистр temp. Он послужит в данном случае переда точным звеном. Сначала константа RAMEND помещается в регистр temp (строка 6), а затем уже содержимое temp помещается в регистр SPL (строка 7). В строках 8 — 12 производится настройка портов ввода-вывода. Ранее мы уже договорились, что порт PD у нас будет работать на ввод, а порт РВ — на вывод. Для выбора нужного направления передачи информации запишем управляющие коды в соответствующие регистры DDRx. Во все разряды регистра DDRD запишем нули (настройка порта PD на ввод), а во все разряды регистра DDRB запишем единицы (настройка порта РВ на вывод). Кроме того, нам нужно включить внутренние нагрузочные рези сторы порта PD. Для этого мы запишем единицы (то есть число OxFF) во
Made with FlippingBook
RkJQdWJsaXNoZXIy MTExODQxMg==