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

 
 
> Дайте совет , как правильно дописать подпрограмму, нужно при достижении числа выйти из подрограммы
pavel-pervomaysk
сообщение Jan 24 2008, 18:30
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 253
Регистрация: 28-12-07
Из: Украина г. Первомайск
Пользователь №: 33 716



Всем привет !
Возникла у меня проблема в том что никак не могу выйти из данной подпрограммы правильно sad.gif
вот собственно сама подпрограмма

mode_0_255: // выводит в порт Д значения от 00 до FF
ser tmp2
ldi tmp,$01
rcall mod_22

mod_234:

inc tmp // tmp + 1
rcall mod_22 //
rjmp mod_234 //

mod_22:

out portd,tmp // вывести значения регистра в порт
rcall wait
ret

что нужно ?
При достижении числа 0xFF в регистре после ее вывода в порт выйти из подпрограммы в основную
пробовал так :

mod_22:

out portd,tmp // вывести значения регистра в порт
rcall wait
cpc tmp,tmp2 // именно это не работает
brsh main // и это тоже
ret

авр студио ругается на данные команды , подскажите как правильно сделать , может нужно использовать пару старших регистров ?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
adc
сообщение Jan 24 2008, 20:08
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 409
Регистрация: 29-10-07
Пользователь №: 31 836



Цитата(Павлик @ Jan 24 2008, 21:30) *
Всем привет !
Возникла у меня проблема в том что никак не могу выйти ......
....
авр студио ругается на данные команды , подскажите как правильно сделать , может нужно использовать пару старших регистров ?

Сделайте так:
Код
//ВАЖНО регистр tmp должен быть определен r16 и выше для команды "out   portd,tmp "!!!
mode_0_255:      // выводит в порт Д значения от 00 до FF
  clr   tmp
m_01:
  rcall wait //здесь не использовать регистр tmp!!! (или сохранять его где нибудь)
  out   portd,tmp
  inc tmp
  brne m_01//равнен ли tmp нулю? если нет то переход на m_01
  ret

Удачи!

зы: да вот еще добавлю....во избежания граблей..
у атмеги8 стекпоинт уже двухбайтный, так что инициализировать надо и ldi temp,LOW(RAMEND) ; Init Stack Pointer
out spl,temp и ldi temp,high(RAMEND) ; Init Stack Pointer
out sph,temp :-)


--------------------
Умный программист пишет тупым кодом гениальные вещи, а не наоборот...
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 29th July 2025 - 04:04
Рейтинг@Mail.ru


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