Страница 1 из 1

Помогите со стеком 2313

Добавлено: Пт мар 14, 2014 13:27:34
Eugene_Artemyev
Привет!
Начинаю делать устройства на АVR, не пойму, как правильно обращаться со стеком, после reti оно переходит на строчку, где сработало прерывания и потом идёт по очереди, а не возвращается к месту, в котором было вызвано.
Всё лишнее в программе обрезал, осталось только сама обработка, которая не работает. Я уже не понимаю просто ничего.

.device AT90s2313
.include "2313def.inc"
.def t0=r16
.def t1=r17
.def t2=r18

rjmp l0
rcall i1
nop
l0:

ldi r16,0xfd
out spl,r16

ldi t0,128
out sreg,t0
ldi t0,15
out mcucr,t0
ldi t0,255
out gimsk,t0
ldi t0,8
//////////////////////
c1:
nop
rjmp c1

i1:
reti
nop

Re: Помогите со стеком 2313

Добавлено: Пт мар 14, 2014 13:51:56
Gudd-Head
Eugene_Artemyev писал(а):

Код: Выделить всё

rjmp l0
rcall i1
В обработчике прерывания надо rjmp ставить, а не rcall. Блеать, для кого примеры вектора прерываний в ДШ пишут???

Re: Помогите со стеком 2313

Добавлено: Пт мар 14, 2014 14:04:16
ИС-пытатель
Вы включаете Int1, а обработчик написали для Int0.

Посмотрите внимательно еще раз на таблицу векторов и на регистр GIMSK.

У Вас два варианта.
1. Либо Вы используете Int0. Тогда Вам надо в GIMSK загрузить 0b01000000 (64 ; 0x40)
2. Либо если Вы используете Int1. Тогда Вам надо добавить операцию reti между rjmp I0 и rcall i1. Кстати Вместо rcall также необходимо написать rjmp. Это еще одна ошибка.

P.S. Почитайте еще раз внимательно про таблицу векторов.

Re: Помогите со стеком 2313

Добавлено: Пт мар 14, 2014 14:10:47
ИС-пытатель
Gudd-Head писал(а): Блеать, для кого примеры вектора прерываний в ДШ пишут???
:))) Именно так! БЛЕАТЬ! ))))

Re: Помогите со стеком 2313

Добавлено: Пт мар 14, 2014 18:07:16
Alkul
Gudd-Head писал(а):Блеать, для кого примеры вектора прерываний в ДШ пишут???
Такое впечатление, что сейчас новички вообще даташитов не читают.

Автор, посмотрите эту тему. Там я подробно пишу, как нужно оформлять программу.
Откройте даташит на контроллер, скопируйте оттуда в свою программу всю таблицу векторов прерываний, сделайте блок "заглушек" неиспользуемых обработчиков прерываний.
Пользуйтесь командами и Если нужно - и для размещения данных в нужных областях памяти с нужных адресов.
Изучайте инструмент, которым собираетесь работать.

Re: Помогите со стеком 2313

Добавлено: Пт мар 14, 2014 23:19:01
Eugene_Artemyev
Да, спасибо, буду.