Отговори на тема  [ 5 мнения ] 
AT90S2313 и инструкция IJMP 
Автор Съобщение
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Дек 19, 2004 6:26 pm
Мнения: 1628
Местоположение: Сливен
Мнение 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 в бита, ама флагчето не се нулира.
Но сега ме изненада това чудо...........А вече ги няма - има Тини....


Нед Фев 12, 2006 9:50 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пон Яну 30, 2006 2:48 am
Мнения: 1248
Местоположение: София
Мнение 
А защо ти е да ползваш IJMP
2313 няма толкова памет


Пон Фев 13, 2006 2:07 am
Профил WWW
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Дек 19, 2004 6:26 pm
Мнения: 1628
Местоположение: Сливен
Мнение 
Syrius-B написа:
А защо ти е да ползваш IJMP
2313 няма толкова памет

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


Пон Фев 13, 2006 3:44 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пон Яну 30, 2006 2:48 am
Мнения: 1248
Местоположение: София
Мнение 
Най-голямото предимство на AVR е, че всяко прекъсване си има вектор.
(за разлика от PIC нпр.)
Просто не е нужно да се правиш на магьосник, за да имитираш паралелизъм (многозадачност) по друг начин.
TINI2313 има и още три вектора (и харчи 3 пъти по-малко ток)
Все пак, ядрото е едно и в даден момент изпълняваш само едно действие.


Пон Фев 13, 2006 3:54 pm
Профил WWW
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Дек 19, 2004 6:26 pm
Мнения: 1628
Местоположение: Сливен
Мнение 
Нужно си е. Как ще наблюдаваш 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


Пон Фев 13, 2006 5:16 pm
Профил ICQ
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 5 мнения ] 

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 15 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни