Напишем простенькую программку для микроконтроллера. Рассмотрим пример простой программы «мигалка», написанной на ассемблере для микроконтроллера ATtiny2313. Разобравшись с этой программой Вы сможете писать собственные!

Микроконтроллер будем использовать 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}

Скачать программу *.asm

Для начинающих рекомендую почитать книгу Мортон Д. — «Микроконтроллеры AVR. Вводный курс», скачать можно в нашем разделе книги по микроконтроллерам.

 

Просмотров всего: 3 645, сегодня: 1

Напишите комментарий