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

 
 
> c8051F350 обработка прерываний на ассемблере, Помогите задать вектор прерывания
Marser
сообщение Jul 6 2009, 06:32
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 162
Регистрация: 12-09-08
Из: Казань
Пользователь №: 40 143



Здравствуйте, уважаемые разработчики.
Кто нибудь знает, как написать подпрограмму обработки прерываний таймера на ассемблере? То есть как написать подпрограмму я знаю, а как задать контроллеру вектор прерывания, чтобы при возникновении прерывания выполнялась именно эта подпрограмма, не понятно.
На С это делается просто :Timer_ISR() interrupt 10.
Заранее спасибо.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Harbinger
сообщение Jul 9 2009, 12:58
Сообщение #2


старший лаборант
******

Группа: Свой
Сообщений: 2 702
Регистрация: 30-09-05
Из: ЮЗЖД
Пользователь №: 9 097



Собственно, вектор можно и оперативно перенаправлять, с целью заставить таймер выполнять различные функции в различных режимах работы устройства. Резервируем переменную для адреса перехода (скажем, TimerVector_l и TimerVector_h - младший и старший байт соответственно).
Вместо
Код
ljmp timer

пишем
Код
push TimerVector_l
push TimerVector_h
ret; тем самым в PC оказывается значение TimerVector.

Перед запуском таймера переменную, разумеется, нужно проинициализировать, вроде:
Код
mov TimerVector_l, #LOW(gen1kHz)
mov TimerVector_h, #HIGH(gen1kHz)
;________собственно обработчики
gen1kHz:  ;bla-bla...
;...
                 reti
gen2kHz:  ;bla-bla...
;...
                        reti
blink:    ;bla-bla...
;...
                        reti


--------------------
Китайская комплектация - европейское качество! ;)
Go to the top of the page
 
+Quote Post



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

 


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


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