Ревич, Ю.В. Программирование микроконтроллеров AVR: от Arduino к ассемблеру

126 Часть 11. Программирование микроконтроллеров АVR на ассемблере модели А Ttiny23 l 3 , m8535def. inc - для модели ATmega8535 и т. п. ) . В обновленном наборе inс-файлов, которые прилагаются к современным версиям Atmel Studio, вы можете встретить даже разные файлы для модификаций одного и того же контрол­ лера, - например: m8def. inc и m8adef. inc (но не m8hvadef. inc или m8u2def. inc - это другие контроллеры ! ), что только путает, потому что по содержанию они, естест­ венно, одинаковые . Файлы определений, как мы уже упоминали, нужны потому, что ассемблер абсо­ лютно не «подозревает» о существовании таких понятий, как PortA или DDRC, а «Знает» только числовые адреса соответствующих регистров (единственное, о чем ассемблер «осведомлен от рождения», - это о существовании РОН с названиями rO-rЗl ) . Соответствие между этими мнемоническими обозначениями и адресами и устанавливается с помощью inс-файлов, причем для разных моделей эти адреса могут различаться . Для того чтобы включить эти соответствия в текст вашей про­ граммы, служит директива . include : . include "tn2 3 1 3def . inc" Здесь подключается файл с определениями констант и адресов для контроллера А Ttiny23 l 3 (разумеется, если файл находится не в текущем каталоге, то следует указать полный к нему путь) . Подобной строкой должен начинаться текст любой А VR-программы, иначе ассемблер может вас «не поняты> . Разумеется, директивой . include можно вставить в ваш текст содержимое любого другого файла - напри­ мер, содержащего типовые процедуры или макросы (и мы этим будем пользовать­ ся). Имя файла здесь может быть абсолютно произвольным - по директиве include компилятор, не раздумывая, разыщет файл с указанным именем (напомним, что он должен находиться в текущем каталоге, или для него должен быть указан полный путь), скопирует из него текст и вставит этот текст в том месте вашей программы, где расположена директива, и только потом начнет разбираться . Потому с директи­ вами include следует быть аккуратными - если файл содержит команды, а не только определения, то вставлять его нужно уже не в начале текста, а после всех векторов прерываний (см. далее), иначе выполнение программы начнется с него . Весьма полезна директива . device, которая должна ставиться в начале програм­ мы, - она отдельно указывает ассемблеру на применяемую модель МК: . device ATtiny2 3 1 3 Если i nс-файлы указывают ассемблеру на истинные адреса регистров для конкрет­ ной модели, то такая директива не позволит использовать команды, которые этой моделью не поддерживаются . В avrasm2 эта простая и лаконичная директива более не поддерживается, вместо нее действует одна из множества директив #pragma, ко­ торыми можно указать компилятору много чего разного. Вообще говоря, самостоя­ тельно указывать ни старую директиву (в случае, если у вас старая версия ассемб­ лера), ни новую в программе не нужно, т. к. с них все равно начинается любой inс-файл . Тем не менее директиву . device вы встретите в программах далее - как дань традиции (ее рекомендовалось указывать для первых версий avrasm) и как памятку для нас самих об используемой модели контроллера.

RkJQdWJsaXNoZXIy MTExODQxMg==