Микроконтроллер будем использовать AT90s2313 или аналог ATtiny2313, тогда замените строку .include «2313def.inc». Микроконтроллер тактируется внешним кварцевым резонатором на частоте 1МГц. На PORTB выводятся значения от 1 до 255. Вешаем светодиод например на PORTB.1, он будет мигать с частотой ~ 4 Гц (частота тактирования делится на 1024 делителем, а потом еще на 255 т.к. счет ведется до переполнения 8-битного регистра). Про timer0 более подробно написано в datasheet на микроконтролер.
Код самой программы:
{codecitation class=»brush: vb; gutter: true;» width=»700px» }
.include «2313def.inc»
rjmp RESET;
nop;
nop;
nop;
nop;
nop;
nop;
rjmp TIM0_OVF; ; вектор прерывания по переполнению timer0
nop;
nop;
nop;
nop;
nop;
main: ; тело цикла
nop; ; команда, которая ничего не делает
nop;
nop;
rjmp main; ; переход на метку main
RESET:
ldi r16,$DF ; загружаем константу в регистр общего пользования r16
out SPL,r16 ; указываем верхнюю границу стэка
ser r16 ; устанавливаем все биты в 1 т.е. r16 содержит OxFF
out DDRB,r16 ; отправляем содержимое в регистр защелку (все ноги выходы)
ldi r16,0b00000101 ; загружаем константу
out TCCR0,r16 ; делитель таймера CK/1024
ldi r16,$02
out TIMSK,r16 ; разрешаем прерывание timer0 по переполнению
ldi r16,$00
out TCNT0,r16 ;начальное значение счетчика — 0
sei; ; разрешить прерывания
rjmp main ; возврат в тело пустого цикла
TIM0_OVF: ; выполняется при переполнении timer0
inc r17 ; увеличить значение в r17 на 1
out PORTB,r17 ; вывести в порт содержимое регистра
reti ; возврат из прерывания
{/codecitation}
Для начинающих рекомендую почитать книгу Мортон Д. — «Микроконтроллеры AVR. Вводный курс», скачать можно в нашем разделе книги по микроконтроллерам.