| Микроконтролери и електроника 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 |
Здравейте, колеги. Не знам дали не съм вече изперкал, но не ми работи тази инструкция. ldi Zl, low(address) ldi Zh, high(address) ijmp на address има цикълче и клатя едно пинче но програмата се отнася някъде (не ползвам 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 ] | |||||||||
| Заглавие: | ||||||||||
Ами не е заради адресирането. Правя си няколко задачки и всяка чака нещо си. Докато чака си взема адресчето за продължение и скача в една програмка, дето само вдига разни флагове при някакви условия. Та при изпълнение на някакво условие с 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/ |
|