| Сб, 06.12.2014, 11:55 | Сообщение # 1
|
ELK
Постов: 81
Друзья |
Приветствую всех форумчан.
Недавно начал осваивать AVR-ки, (пользую tiny2313A, программы пишу на Ассемблере), сторлкнулся с такой проблемой - никак не могу научиться пользоваться таймерами/счетчиками, может кто-нибудь написать команды (на примере 0-го таймера)? -как выставить вектор прерываний? -как разрешить прерывания по переполнению TIMER0? -как запустить\остановить таймер (изначально он запущен?)? -как обеспечить переход к метке по переполнению таймера? -что еще нужно сделать?
|
|
| Сб, 06.12.2014, 18:02 | Сообщение # 2
|
ELK
Постов: 81
Друзья |
Все-же сам разобрался, напишу пример для тех, у кого возникнет такая-же трудность. Все связаное с портом D можно выкинуть.
.include "2313Adef.inc" .equ K_div = 250 .def rK_div =r16 .def count = r17 .def temp = r18
;------------------------------------------------------- rjmp Reset .org $006 rjmp TIM0 ;------------------------------------------------------- .org $00C
TIM0: inc count sbrc count, 0 sbr temp, 0b01000000 sbrc count, 0
cbr temp, 0b01000000 ;можно выкинуть out PortD, temp ;можно выкинуть
out TCNT0, rK_div ;********сюда можно вставить действие, выполняемое при переполнении таймера reti
Reset: ;********сюда инициализацию ldi temp, low(RAMEND) out SPL, temp ldi temp, 0b01000000 ;можно выкинуть out DDRD, temp ;можно выкинуть clr count clr temp ldi temp, (1<<TOIE0) out TIMSK, temp ldi rK_div, K_div neg rK_div out TCNT0, rK_div ldi temp, 0b00000010 out TCCR0, temp
sei Cykle: ;********основной цикл rjmp Cykle
|
|