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

 
 
3 страниц V  < 1 2 3 >  
Reply to this topicStart new topic
> ATmega8 адресс метки
Палыч
сообщение Jun 19 2011, 17:38
Сообщение #16


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(Shadovv13 @ Jun 19 2011, 21:31) *
Частично изменил код...
Код
s:
brtc en
b:icall
rjmp s


Уведомление осталось....
Этот кусок кода будет выполнятся до тех пор, пока не изменится флаг T. Кто (какая команда) его изменит.
P.S. Так и не понял Вашей программы, но, наверное, ошибка здесь: должна ли выполняться команда с меткой е00, если не выполнится условие перехода предыдущей команды (breq s)?

Цитата(Shadovv13 @ Jun 19 2011, 21:31) *
Какой адрес указать для стека в ATmega8?
Обычно стек устанавливают так, как это сделано в примерах в DS
Цитата
$001 RESET:ldi r16,high(RAMEND); Main program start
$002 out SPH,r16 ; Set Stack Pointer to top of RAM
$003 ldi r16,low(RAMEND)
$004 out SPL,r16
Go to the top of the page
 
+Quote Post
Shadovv13
сообщение Jun 19 2011, 19:06
Сообщение #17


Участник
*

Группа: Участник
Сообщений: 29
Регистрация: 2-06-11
Пользователь №: 65 445



Ну вот так все выглядит.
Код
ldi r16,high(RAMEND)
out SPH,r16
ldi r16,low(RAMEND)
out SPL,r16




ldi ZH,high(b)
ldi ZL,low(b)
s:
brtc en
b:icall
rjmp s

en:sbr r18,252
set
ldi ZH,high(e00)
ldi ZL,low(e00)
cpi r18,252
breq s
ldi ZH,high(e01)
ldi ZL,low(e01)
cpi r18,253
breq s
ldi ZH,high(e11)
ldi ZL,low(e11)
cpi r18,255
breq s
ldi ZH,high(e10)
ldi ZL,low(e10)
cpi r18,254
breq s

e00:clt
sbrc r18,0
inc r10
sbrc r18,1
dec r10
ret

e01:clt
sbrc r18,0
inc r10
sbrs r18,1
dec r10
ret

e11:clt
sbrs r18,0
inc r10
sbrs r18,1
dec r10
ret

e10:clt
sbrs r18,0
inc r10
sbrc r18,1
dec r10
ret


Результат, все работает но сообщение все равно присутствует!!
AVR Simulator: Stack Underflow at 0x0020

Может хрен сним?
Go to the top of the page
 
+Quote Post
Палыч
сообщение Jun 19 2011, 19:27
Сообщение #18


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(Shadovv13 @ Jun 19 2011, 23:06) *
Может хрен сним?

Я в предыдущем своем посте сделал приписку - возможно, Вы её не заметили... По-моему, ошибка вот тут
Код
breq s

e00: clt

Хотя я в Вашей программе не разобрался, но мне кажется, что вместо команды "BREQ S" в этом месте должно быть что-то другое.
Go to the top of the page
 
+Quote Post
Shadovv13
сообщение Jun 19 2011, 19:54
Сообщение #19


Участник
*

Группа: Участник
Сообщений: 29
Регистрация: 2-06-11
Пользователь №: 65 445



Обратите внимание что вначале стоит
Код
en:sbr r18,252


значит одно из четырех сравнении
Код
cpi r18,252;,253,254,255

сработает!
Go to the top of the page
 
+Quote Post
Палыч
сообщение Jun 19 2011, 20:15
Сообщение #20


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(Shadovv13 @ Jun 19 2011, 23:54) *
значит одно из четырех сравнении сработает!
Если Вы в этом уверены, то вместо
Код
cpi r18,254
breq s
"правильнее" было бы записать
Код
rjmp s

Кстати, в Вашей программе регистр r18 не изменяется вовсе (за исключением приведенной Вами команды с меткой en)... Или приведён небольшой фрагмент кода? Тогда я совсем не уверен, что регистр r18 принимает только эти четыре значения.
Go to the top of the page
 
+Quote Post
Shadovv13
сообщение Jun 19 2011, 21:14
Сообщение #21


Участник
*

Группа: Участник
Сообщений: 29
Регистрация: 2-06-11
Пользователь №: 65 445



Код
rjmp s
разве что в последнем сравнении!

Регистр R18 будет принимать значение из порта(кнопки и 2 младших бита енкодер), после опроса клавиш, старшие 6 бит уст. в 1, для удобства сравнения(положения енкодера определиться по грей коду 00 01 11 10 .... )
Первый вызов программы определяет положение и адрес обработки второго вызова, устанавливает флаг Т как индикатор захвата положения. Второй вызов определяет в какую сторону сместился енкодер, и проводи увеличение или уменьшение R10. Сбрасывает флаг Т, указывая необходимость делать захват положения.
Ну вот так как кто!

Сообщение отредактировал Shadovv13 - Jun 19 2011, 21:16
Go to the top of the page
 
+Quote Post
Палыч
сообщение Jun 19 2011, 21:32
Сообщение #22


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(Shadovv13 @ Jun 20 2011, 01:14) *
разве что в последнем сравнении!
О нём речь и была.

Цитата(Shadovv13 @ Jun 20 2011, 01:14) *
Ну вот так как кто!
Обработка сигналов энкодера не раз обсуждалась на форуме. Воспользуйтесь поиском.
Go to the top of the page
 
+Quote Post
Shadovv13
сообщение Jun 19 2011, 22:03
Сообщение #23


Участник
*

Группа: Участник
Сообщений: 29
Регистрация: 2-06-11
Пользователь №: 65 445



Если помните, как называлась тема с енкодером, дайте ссылку пожалуйста. А то поиском страниц много.

Ну и вопрос остался открытым.
Go to the top of the page
 
+Quote Post
Палыч
сообщение Jun 20 2011, 04:33
Сообщение #24


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(Shadovv13 @ Jun 20 2011, 02:03) *
дайте ссылку пожалуйста.
Вот, например.
Go to the top of the page
 
+Quote Post
Shadovv13
сообщение Jun 20 2011, 13:33
Сообщение #25


Участник
*

Группа: Участник
Сообщений: 29
Регистрация: 2-06-11
Пользователь №: 65 445



Цитата(Палыч @ Jun 20 2011, 07:33) *
Вот, например.


Посмотрел и прочел! Вопросы, обсуждаемые в теме, я для себя давно решил . И этот код как раз решает проблемы, с дребезгом, с резким поворотом енкодера, а также учет всех перепадов(переходов).
Кстати там же я нашел много подобных решений, схожих с моим!!!!!


Спасибо за ссылку!!!! a14.gif

Сообщение отредактировал Shadovv13 - Jun 20 2011, 13:34
Go to the top of the page
 
+Quote Post
ae_
сообщение Jun 20 2011, 14:07
Сообщение #26


Участник
***

Группа: Свой
Сообщений: 462
Регистрация: 2-04-07
Из: Иркутск
Пользователь №: 26 695



Цитата(Shadovv13 @ Jun 20 2011, 04:06) *
...
ldi ZH,high(b)
ldi ZL,low(b)
s:
brtc en
b:icall
rjmp s
en:
...
Результат, все работает но сообщение все равно присутствует!!
AVR Simulator: Stack Underflow at 0x0020
Может хрен сним?

Ваш фрагмент работает точно так же, как и этот:
Код
s:
brtc en
БЕСКОНЕЧНЫЙ_ЦИКЛ: call БЕСКОНЕЧНЫЙ_ЦИКЛ
rjmp s
en:
...

Т.е. если при переходе на метку "s" флаг "T" сброшен, всё будет нормально,
но если флаг "T" установлен до перехода на метку "s", то программа входит в бесконечный цикл, непрерывно заполняя стек одним и тем же адресом возврата, о чём и кричит AVRstudio.
Go to the top of the page
 
+Quote Post
Shadovv13
сообщение Jun 20 2011, 15:09
Сообщение #27


Участник
*

Группа: Участник
Сообщений: 29
Регистрация: 2-06-11
Пользователь №: 65 445



Цитата(ae_ @ Jun 20 2011, 17:07) *
Ваш фрагмент работает точно так же, как и этот:
Код
s:
brtc en
БЕСКОНЕЧНЫЙ_ЦИКЛ: call БЕСКОНЕЧНЫЙ_ЦИКЛ
rjmp s
en:
...

Т.е. если при переходе на метку "s" флаг "T" сброшен, всё будет нормально,
но если флаг "T" установлен до перехода на метку "s", то программа входит в бесконечный цикл, непрерывно заполняя стек одним и тем же адресом возврата, о чём и кричит AVRstudio.


Спасибо уважаемый ae_. Кто же мог подумать что AVRstudio будет так глубоко анализировать!!!
Думаю убрать метку b, она там в прицепе ненужна а регистр Z задам нулевой адрес(оставлю пустим).
Так как Т флаг сто пудов буде сброшен, все будет норм. Ну а если нет РЕСТАРТ с 0
Go to the top of the page
 
+Quote Post
Палыч
сообщение Jun 20 2011, 15:39
Сообщение #28


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(Shadovv13 @ Jun 20 2011, 19:09) *
Кто же мог подумать что AVRstudio будет так глубоко анализировать!!!
В том то и дело, что сообщение - не результат анализа, а результат выполнения (симуляции выполнения) Вашей программы.
Go to the top of the page
 
+Quote Post
Shadovv13
сообщение Jun 20 2011, 15:54
Сообщение #29


Участник
*

Группа: Участник
Сообщений: 29
Регистрация: 2-06-11
Пользователь №: 65 445



Цитата(Палыч @ Jun 20 2011, 18:39) *
В том то и дело, что сообщение - не результат анализа, а результат выполнения (симуляции выполнения) Вашей программы.


Я с вами несогласен!!!
В пошаговой отладке видно, что программа работает нормально и в бесконечный цикл не входит!
Но при первом RET уведомляет, о возможном опустошении стека(я так думаю). smile3046.gif

Сообщение отредактировал Shadovv13 - Jun 20 2011, 15:55
Go to the top of the page
 
+Quote Post
Палыч
сообщение Jun 20 2011, 16:41
Сообщение #30


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(Shadovv13 @ Jun 20 2011, 19:54) *
Но при первом RET уведомляет, о возможном опустошении стека(я так думаю). smile3046.gif
Огласите значение указателя стека после его инициализации в начале программы и перед выполнением команды RET.
Go to the top of the page
 
+Quote Post

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

 


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


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