реклама на сайте
подробности

 
 
> Файл Def и прерывание таймера
ILYAUL
сообщение Mar 18 2008, 13:21
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



Всем здравствуйте!

Хоть на форуме зарегестрировался давно , но всё таки хотелось , для начала , научиться и постораться разобраться самому . Так, что постепенно постигаю AVR
B вот возник вопрос в котором я , что-то "застрял" . Пишу программку, где есть прерывание от таймер.счётчика по переполнению . Согласно Datasheet адреса прерываний ( от всех устройств ) я в программе благополучно пропустил т.е. cseg начинается с адреса 0x003E . За TIM2_OVF зарезервировано 0x0016 - правда в файле DEF .equ OVF2addr = 0x0016 ; Timer/Counter2 Overflow имеется вот такая связка. Я пробывал подставлять и этот операнд в JMP , но асемблер всё равно выдаёт ошибку
C:\Program Files\Atmel\AVR Tools\project\wire.asm(22): error: syntax error, unexpected SYMBOL, expecting REGISTER
Помогите понять в чём дело?


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
domowoj
сообщение Mar 18 2008, 13:44
Сообщение #2


Профессионал
*****

Группа: Участник
Сообщений: 1 548
Регистрация: 20-12-07
Из: г.Новосибирск
Пользователь №: 33 486



Нужно взять стандартную шапку для вашего МК
Это для ATtiny45
***************************
.INCLUDE "tn45def.inc"
.DEVICE ATtiny45

.equ pb=portb;

.set ae=portb2
.set ae1=portb1
.set ae2=portb4

.CSEG
.ORG 0
rjmp Reset
nop;rjmp EXT_INT0;
nop;rjmp PC_INT;
rjmp TIM1_COMPA
rjmp TIM1_ovf
rjmp TIM0_OVF
nop;rjmp EE_RDY
nop;rjmp ANA_COMP
nop;rjmp ADCC
nop;rjmp TIM1_COMPB
nop;rjmp TIM0_COMPA
nop;rjmp TIM0_COMPB
nop;rjmp WDT
nop;rjmp USI_START
nop;rjmp USI_OVF
.ORG $10

Reset:
wdr
; настройка направления работы линий портов
;

TIM1_ovf:
;тело п/п прерывания
reti
*****************
По адресу вектора прерывания должен стоять rjmp на тело п\п прерывания

Сообщение отредактировал domowoj - Mar 18 2008, 13:47


--------------------
И на камнях растут деревья!
Go to the top of the page
 
+Quote Post
777777
сообщение Mar 19 2008, 10:12
Сообщение #3


Профессионал
*****

Группа: Участник
Сообщений: 1 091
Регистрация: 25-07-07
Из: Саратов
Пользователь №: 29 357



Цитата(domowoj @ Mar 18 2008, 16:44) *
.CSEG
.ORG 0
rjmp Reset
nop;rjmp EXT_INT0;
nop;rjmp PC_INT;
rjmp TIM1_COMPA
rjmp TIM1_ovf
rjmp TIM0_OVF


Ужас, вы всегда так пишите? А если придется перейти на другой проц, у которого вектора в других адресах? Обычно пишут так:

.CSEG
.ORG 0
rjmp Reset
.ORG OVF2addr
rjmp Int_Tmr2
.ORG ANOTHER_DEVaddr
rjmp Int_AnotherDev
...

.CSEG
Reset: ldi r16, LOW(RAMEND)
out SPL, r16 ; установка стека
...

Int_Tmr2: ... ; обработка прерывания таймера
...

При этом численное значение адреса, по которому окажется метка Reset вас абсолютно не должно волновать (это уже к автору темы).
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 23:17
Рейтинг@Mail.ru


Страница сгенерированна за 0.04854 секунд с 7
ELECTRONIX ©2004-2016