;Правильная программа для ознакомления с принципами программирования AVR ;Программа выводит в порт числовое значение .include "2313def.inc" ;подключаем файл описаний контроллера AT90S2313 .CSEG ;сегмент кода .org 0 ;самый первый его адрес rjmp reset ;идём на метку reset. Можно было бы просто начать программу с этого места ;но в дальнейшем мы будем тут ещё описывать вектора прерываний. reset: ldi r16,low(RAMEND) ;Обязательно инициализируем стек! Это будет очень необходимо out SPL,r16 ;для последующих программ. Но привыкать надо сразу. ldi r16, 0xFF ;загружаем в регистр r16 шестнадцатиричное число FF out DDRB, r16 ;копируем это значение из r16 в регистр настройки PortB ;теперь этот порт готов к выводу данных. Но он пока ничего не выводит ldi r16, 0b01010101 ;загружаем в регистр r16 двоичное число 01010101 out PORTB, r16 ;копируем это значение из r16 в PortB ;теперь это двоичное значение оказалось представленным на выводах PortB ;соответствующими уровнями напряжения. Если PortB соединён с индикаторами, то ;можно увидеть их свечение loop: rjmp loop ;зацикливаем программу. Это необходимо по такой причине: программный ;счётчик после выполнения последней нами заданной команды попытается дать процессору ;адрес следующей ячейки программной памяти, думая что там находится следующая команда. ;А поскольку мы туда ничего не записывали, там может оказаться "мусор", вследствие чего ;микроконтроллер начнёт выполнять непредсказуемый код.