fl
МИКРОКОНТРОЛЛЕРЫ
&
П ояснения по этом у уч астку
кода:
1. Вот таким
о б р а з о М {
- с помо-
щью директив .equ, - определяют-
ся в програм м е различны е кон-
станты. Эти определения практи-
чески в точности соответствую т
п репр о ц ессо р н ы м д и р е к ти в а м
#define в ассемблере микроконт-
роллера КР 1878В Е 1. Назначение
их то же, что и в КР1878ВЕ1 - дать
осмысленные имена тем или иным
числам.
2. А это - ан ал ог директивы
#include в ассемблере КР1878В Е1.
С его помощью можно включать в
программу содержим ое того или
иного ф айла. В отличие от про-
гр ам м
для
м и кр о к о н тр о л л е р а
КР1878В Е1, во всех без исключе-
ния программах для ATM EL обяза-
тельно требуется включать в нача-
ло текста программы файлы-опи-
сания микроконтроллера, для кото-
рых предназначена эта программа.
Причина здесь одна - ассемблер
ATM EL м ожет генерировать код
для нескольких десятков разновид-
ностей микроконтроллеров, у каж -
дого из которых различный объем
памяти, различное подмножество
системы команд и различный на-
бор внеш них устройств. Им енно
поэтому ему требуются явные ука-
зания, для какого микроконтролле-
ра требуется откомпилировать про-
грамму. Эти указания и расположе-
ны в подключаемых по директиве
.include ф айлах. Для м икроконт-
роллеров АТП пу15 название этого
файла всегда “tn 15d ef.in c”.
3. Так же, как и в КР 1878В Е 1, в
начале программы для микроконт-
роллеров АТТ1пу расп о л агается
таблица векторов прерываний. Для
А Т Т ту 1 5 состав этой таблицы и
расположение векторов им енно
такое, как в приведенном участке
программы, для других микрокон-
троллеров - может заметно, отли-
чаться. Напоминаем читателю, что,
к а к
и
в
м и кр о ко н тр о л л е р е
КР1878В Е1, вектора прерываний в
таблице располагаются по убыва-
нию приоритета (преры вание от
линии В[2] - самое высокоприори-
тетное, от АЦП - самое низкопри-
оритетное).
4.
Такое реш ение - вполне оче-
видное. Для выключения светоди-
ода м ожно либо перестраивать
Ш ИМ таким образом, чтобы на вы-
ходе линии В[1 ] всегда присутство-
вал лог.О (для этого достаточно
загрузить нулевое значение в ре-
гистр О С Р1А ), либо переключать
линию В[1] из реж им а вывода в
режим ввода. Второй путь - проще,
поскольку нам не требуется где-то
хранить значение, находящееся в
регистре О ЯС1А перед выключени-
ем светодиода.
'
5. Напоминаем читателю, что на
линиях порта В в микроконтролле-
ре АТПпу существуют подтягиваю-
щие резисторы. Если линия порта
настроена только на ввод инфор-
мации, этот резистор будет давать
в линию некоторый вы текаю щий
ток, который будет вызывать не-
большую паразитную Ьодсветку
светодиода. Для ее отключения и
предназначена эта последователь-
ность команд.
6. Тайм ер 0 нам потребуется
для реализации виртуального тай-
мера, поэтому необходимо разре-
шить генерацию сигналов преры-
вания от таймера 0 - нам потребу-
ется сигнал тиков.
7. А вот - настройка Ш ИМ. Для
того, чтобы перевести таймер 1 в
режим работы с Ш ИМ, требуется
загр узить соответствую щ ие на-
стройки в управляющий регистр
TC C R 1, а такж е задать длитель-
ность периода импульсов (регистр
O C R 1 B ) и длительность сам ого
импульса (регистр OCR1A).
8. Для работы с линией В[2] нуж-
но не только разрешить прерыва-
ния от нее, но и указать, в каких
ситуациях они должны возникать.
Поэтому для настройки прерыва-
ния от линии В[2] требуется не
только работа с регистром GIMSK,
но и с регистром MCUCR. “Попут-
но” в этой последовательности ко-
манд мы разреш аем и работу ко-
манды sleep.
9. А это - подготовка начальных
значений переменных. О братите
внимание на две последние коман-
ды - это ограничение системы ко-
манд ATTiny (и не только): загру-
жать константу можно только в ре-
гистры с номерами, большими 15.
Загрузить константу (кроме числа
0) в регистры с меньшими номера-
ми можно только таким способом.
По-хорошему, в этой последо-
вательности инициализации требу-
ется ещ е и настройка р егистра
O SCCAL, но в данном случае нам
нет в этом особой необходимости.
А в о т - участок кода, реализующий обработчики прерываний:
sei
; <1> - разрешить прерывания.
again:
sleep
; Перевод микроконтроллера в состояние ожидания.
;
В ЭТОМ МЕСТЕ МОЖНО ВЫПОЛНЯТЬ ФОНОВЫЕ ДЕЙСТВИЯ
rjmp
again
Обработчики прерываний:
ext_int ц
in
ldi
sbis
; <2> - обработчик прерывания от кнопки.
г4,БИЕС
; Сохранить регистр состояния.
г1б,виТТОЫ_ОРР
; <3> - Определить, была ли кнопка нажата
Р Х Ы В
,2
; или отпущена.
28
U Радиолюбитель - 0 7 /2 0 0 7
предыдущая страница 28 Радиолюбитель 2007-07 читать онлайн следующая страница 30 Радиолюбитель 2007-07 читать онлайн Домой Выключить/включить текст