.def temp = r16;рабочая переменная, от слова
Окончательно исходный текст программы будет выглядеть так:
;программа зажигания светодиода
;процессор Tiny2313, частота 4 МГц
.include "tn2313def.inc"
.def temp = r16;рабочая переменная
ldi temp,0b01100000;устанавливаем биты номер 5 и 6 в
out DDRD,temp;выводим это значение в регистр направления порта
sbi PortD,6;устанавливаем в единицу бит 6 регистра данных порта
sleep
.exit
Программа займет в памяти программ контроллера ровно 8 байтов. Последняя команда
А зачем мы в заголовочном комментарии указали тактовую частоту процессора?
В данном случае она не имеет значения (лишь бы контроллер работал), но при использовании любых процедур, связанных со временем, это критично. И поскольку можно забыть, на какую частоту вы рассчитывали при написании программы, следует ее на всякий случай указывать в комментариях.
Таймер без прерываний
Давайте теперь заставим наш МК управлять этим светодиодом так, чтобы он мигал с частотой примерно один раз в секунду из красного в зеленый. И сначала сделаем это самым простым способом — так, как это делали в те времена, когда микропроцессоры еще не были микроконтроллерами и не содержали никаких дополнительных узлов вроде таймеров. Для отсчета времени тогда пользовались тем фактом, что команды выполняются строго определенное время. Причем в AVR этот способ применять особенно удобно, поскольку большинство команд занимают один такт, за исключением команд передачи управления. Этим способом часто пользуются и по сей день для отсчета программных задержек (не станешь же заводить таймер по каждому случаю), потому урок окажется не совсем бесполезным. Заодно познакомимся с понятием процедур (подпрограмм) и с самими командами передачи управления.
Не вникая в подробности, сразу напишем «правильную» процедуру, позволяющую формировать заданные задержки без таймера. Назовем ее

Здесь
Нам не надо, чтобы счет продолжался до бесконечности, и для этой цели служит команда