Микроконтролери и електроника
http://mcu-bg.com/mcu_site/

AT90S2313 и инструкция IJMP
http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=1803
Страница 1 от 1

Автор:  Wise [ Нед Фев 12, 2006 9:50 pm ]
Заглавие:  AT90S2313 и инструкция IJMP

Здравейте, колеги.
Не знам дали не съм вече изперкал, но не ми работи
тази инструкция. :oops:
ldi Zl, low(address)
ldi Zh, high(address)
ijmp

на address има цикълче и клатя едно пинче
но програмата се отнася някъде :roll:

(не ползвам Z в IRQ)

ако напиша
rjmp address
всичко си е точно.


Вярно, че едното е ралативно, а другото абсолютно, ама
асемблерът да го мисли.....

Нали с ldi зареждам адреса на прехода...

Чиповете са AT90S2313-10SI 9852
(52 sedmica na 98-a godina?)
Звучи малко идиотски, но .......
Кернела с 2313 не ми тръгна, а с 8515 си работи (там се ползва IJMP)
Не помня да сме го обсъждали- затова пиша. Ако някой знае нещо.
Аз помня само, че тогава не можеше да се нулира прекъсването от
таймер 0, извън IRQ. Пишеш си 1 в бита, ама флагчето не се нулира.
Но сега ме изненада това чудо...........А вече ги няма - има Тини....

Автор:  Syrius-B [ Пон Фев 13, 2006 2:07 am ]
Заглавие: 

А защо ти е да ползваш IJMP
2313 няма толкова памет

Автор:  Wise [ Пон Фев 13, 2006 3:44 pm ]
Заглавие: 

Syrius-B написа:
А защо ти е да ползваш IJMP
2313 няма толкова памет

Ами не е заради адресирането. Правя си няколко задачки и всяка
чака нещо си. Докато чака си взема адресчето за продължение и
скача в една програмка, дето само вдига разни флагове при
някакви условия. Та при изпълнение на някакво условие с
IJMP (в Z си се постарал да е обратния адрес) си се връща в
мястото откъдето е дошла.
Ще се наложи с RCALL,...... POP,POP , DO_SOMETHING,PUSH,PUSH, RET да го правя.

Автор:  Syrius-B [ Пон Фев 13, 2006 3:54 pm ]
Заглавие: 

Най-голямото предимство на AVR е, че всяко прекъсване си има вектор.
(за разлика от PIC нпр.)
Просто не е нужно да се правиш на магьосник, за да имитираш паралелизъм (многозадачност) по друг начин.
TINI2313 има и още три вектора (и харчи 3 пъти по-малко ток)
Все пак, ядрото е едно и в даден момент изпълняваш само едно действие.

Автор:  Wise [ Пон Фев 13, 2006 5:16 pm ]
Заглавие: 

Нужно си е. Как ще наблюдаваш 10 входа (релейни). Трябва да чакаш по 10 милисекунди
при всяка промяна на някой от тях. А трябва и нещо друго да правиш......

По-добре си е да обновяваш 10 таймера на 1 милисекунда и да имаш една обща
програма, следяща кога някой таймер ще свърши и да върне управлението
на клончето което чака този таймер. И тъй като в това клонче може 20 пъти
да ползваш таймера - към него си върви и обратния адрес за връщане.

това бачка:)

rcall breack
continue:
next_command
..................................


breack:
pop temp1
pop temp2
do_something
.......................
push temp2
push temp1
ret ;go to next_command

Страница 1 от 1 Часовете са според зоната UTC + 2 часа [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/