Полная версия этой страницы:
Работа с Таймерами
SergeyM
May 15 2005, 06:17
Народ помогите!
Как в асме работать с прерываниями и их обработкой для таймера. Если можно то ссылку, где есть комментарии. А лучше небольшой пример прям тут, чтобы можно было вопросы задать если что не понятно будет.
niksal
May 15 2005, 08:15
.device at90s8515
.include "8515def.inc"
.include "ind.inc"
.org 0
rjmp start
.org 7 ; адрес вектора смотри в datasheet на кристалл
rjmp timer0
start: ........... ; основной кусок, в т.ч. инициализация стека,
; таймера и разрешение прерываний
...........
timer0: ; прерывание от переполнения т/с0
; частота прерываний около 1 кГц (1 МГц/1024)
push rin
lds rin,c_time0
inc rin
sbrc rin,6
ldi rin,0b01000000 ; увеличить программный счетчик
sts c_time0,rin ; числа переполнений
pop rin
reti
Цитата(yung @ May 16 2005, 08:24)
timer0: ; прерывание от переполнения т/с0
; частота прерываний около 1 кГц (1 МГц/1024)
push rin
lds rin,c_time0
inc rin
А SREG кто сохранять будет, а? Команда INC флаги модифицирует!
LeoLabs
May 16 2005, 09:15
Цитата(yung @ May 16 2005, 12:24)
.org 7 ; адрес вектора смотри в datasheet на кристалл
rjmp timer0
?? адресация побайтовая или пословная?
при побайтовой - косяк нечетный.
Виноват насчет сохранения статуса, необходимо
push rin
in rin,SREG
push rin
.................
.................
pop rin
out SREG,rin
pop rin
reti
Что касается адресации, то директива .org в данном случае работает с памятью программ - со словами. Побайтная адресация памяти программ вроде бы работает через регистры в команде LPM (в новых кристаллах команд больше, но сути это не меняет).
SergeyM
May 17 2005, 14:17
Спасибо примерчики скачал, появятся вопросы то я спрошу :-)
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.