Вопросы начинающих PIC ASM

Поклонники продукции Microchip Technology Inc тусуются тут.
Аватара пользователя
СКАЗОЧНИК
Идёт направо - песнь заводит, Налево - сказку говорит.
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

Re: Вопросы начинающих PIC ASM

Сообщение СКАЗОЧНИК »

Во! Это уже интересно. Спасибо. ) :beer: Вот я тупой...
Станислав
Реклама
Аватара пользователя
СКАЗОЧНИК
Идёт направо - песнь заводит, Налево - сказку говорит.
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

Re: Вопросы начинающих PIC ASM

Сообщение СКАЗОЧНИК »

Кое-чего добился. Простите, но я снова без кода...

Есть в главном цикле часть кода, которая прекрасно работает и делает то, что мне нужно. Следом написал еще одну часть кода точно такую же, только переменная другая. Внутри используется команда сдвига вправо через перенос. Так вот, эта часть совсем не работает, в то время как аналогичная сверху прекрасно пашет.

Ставил индикаторные светодиоды "контрольки", проверил, что все приходит туда. Но сложилось впечатление, что переменная, которую отправляю в эту часть программы приходит нулевая, т.к. после ее сдвига ничего не появляется в флаге С и программа уходит на начало. (проверял тоже индиктором светодиодом, вставив в программе соответствующую строку).
Решил не отправлять через переменную, а жестко задать константу прямо в этой части программы (которая отказывается работать). Тот же результат. После команд сдвига флаг С получается все время пустой и результат работы выходит на новый круг (на начало)...

Что за ???

И еще не понравилось, когда напоролся на команду call. Она работает в ограниченном диапазоне адресов. :facepalm:

Простите за глупые вопросы, но я только изучаю их еще... потому и тупой. :)
Станислав
Реклама
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25259
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Re: Вопросы начинающих PIC ASM

Сообщение КРАМ »

Может, любезный Станислав, Вы приведете ту часть кода, которая вызвала Ваши трудности.
Заодно и с CALL разберемся... Что то я не припомню, чтобы я сталкивался с ограничениями этой команды...
Что за контроллер у Вас нынче?
Аватара пользователя
Z_h_e
Собутыльник Кота
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Re: Вопросы начинающих PIC ASM

Сообщение Z_h_e »

КРАМ писал(а):Что то я не припомню, чтобы я сталкивался с ограничениями этой команды...
Ну как же, стек то аппаратный, глубиной 8 адресов вроде. Только такой глубины ухода в подпрограммы более чем достаточно, как мне кажется.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
СКАЗОЧНИК
Идёт направо - песнь заводит, Налево - сказку говорит.
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

Re: Вопросы начинающих PIC ASM

Сообщение СКАЗОЧНИК »

:) PIC16F84

Приведу код завтра, т.к. приходится все делать у друга. У меня на компе не стоит программное обеспечение, да и программатора для ПИКов нету. Благодарю, что откликнулись. :beer:

А как же она на стек то??? У меня вызов подпрограммы, которая выбирает из таблицы значение цифры индиктора, т.е. сдвигается по ней и тут же выходит с занесением этого значения в аккумулятор. Разве можно этим стек переполнить? :dont_know:
Станислав
Реклама
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25259
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Re: Вопросы начинающих PIC ASM

Сообщение КРАМ »

Если честно, то я догадался, что речь шла о табличном чтении.
Но проблема тут совсем не в команде CALL. Эта команда исполняется во всем поле адресов, потому что она занимает 2 слова команды.
Проблема тут в том, что Вы не понимаете смысл вычисляемого перехода в 8 разрядной машине.
Команда addwf PCL, F прибавляет к счетчику команд значение аккумулятора. Но аккумулятор 8 разрядный, а счетчик команд в общем случае 21 разрядный. То есть прежде чем прибавлять к МЛАДШЕМУ байту программного счетчика (PCL) и тем самым вызывать немедленный переход по вычисленному адресу, следовало бы посчитать и старшие байты (в этом контроллере только один старший байт счетчика команд) и ПРЕДВАРИТЕЛЬНО его записать в защелку PCLATH. Тогда ОДНОВРЕМЕННО с записью в младший PCL будет перезаписан и старший байт из PCLATH в PCH.
Ну либо побеспокоиться о неизменности PCH.
И стек здесь совсем не причем. Ошибка в вычислении перехода приводит к непредсказуемому ходу исполнения флеша.
Реклама
Аватара пользователя
СКАЗОЧНИК
Идёт направо - песнь заводит, Налево - сказку говорит.
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

Re: Вопросы начинающих PIC ASM

Сообщение СКАЗОЧНИК »

КРАМ писал(а):следовало бы посчитать и старшие байты
А можно подробнее? как же я определю, что их пора считать уже? :dont_know: И как их посчитать непосредственно?
Станислав
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25259
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Re: Вопросы начинающих PIC ASM

Сообщение КРАМ »

В том виде, в котором Вы написали, и сама команда вызова и табличный переход обязаны уместиться в пределах ОДНОЙ СТРАНИЦЫ (256 байт). Не важно какой, нулевой или какой другой. Важно, что при таком вычислении старший байт меняться не имеет права.
А если Вы желаете их разместить В РАЗНЫХ страницах, но не пересекая границу страниц самим телом таблицы, то можно вместо

Код: Выделить всё

addwf PCL, F
применить конструкцию:

Код: Выделить всё

clrf PCLATH
incf PCLATH, F
addwf PCL, F
.........
.........
Или вообще так, без вычислений, прямым присвоением:

Код: Выделить всё

clrf PCLATH
incf PCLATH, F
movwf PCL
............
............
org 0x100
retlw ...
retlw ...
Последний раз редактировалось КРАМ Вт май 03, 2016 08:56:16, всего редактировалось 3 раза.
Аватара пользователя
СКАЗОЧНИК
Идёт направо - песнь заводит, Налево - сказку говорит.
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

Re: Вопросы начинающих PIC ASM

Сообщение СКАЗОЧНИК »

А если эту таблицу разместить сразу где-то после .org0? По сути она же не будет никуда улетать при увеличении кода. Значит ее адресация останется неизменной в пределах одной страницы.
Ткните носом еще, где можно доступно и просто почитать про организацию памяти ПИК. :roll:
Станислав
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25259
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Re: Вопросы начинающих PIC ASM

Сообщение КРАМ »

А зачем таблицу размещать сверху? Это же неудобно. Там вектор сброса и прерываний.
Наоборот, ее нужно засунуть куда нибудь в конец. По последнему варианту с прямым присвоением.
Тогда не нужно вообще думать о пересечении страниц, потому что сама таблица (retlw подряд) будет привязана метакомандами org.
Прочитать проще всего в даташите или в его переводе на http://www.microchip.ru/lit/?mid=1x0
Например: http://www.microchip.ru/files/d-sheets-rus/pic16_6.pdf
Аватара пользователя
СКАЗОЧНИК
Идёт направо - песнь заводит, Налево - сказку говорит.
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

Re: Вопросы начинающих PIC ASM

Сообщение СКАЗОЧНИК »

Прошу прощения, но задам еще один глупый вопрос...

Можно ли как-то затереть стек? Ну или, если быть точнее, то выкинуть последней адрес, который в него положили и сдвинуть его.

Т.е. сделать вид, как будто мы не уходили по команде call?

З.Ы. не спрашивайте, зачем мне это надо... :facepalm:
Станислав
Аватара пользователя
Z_h_e
Собутыльник Кота
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Re: Вопросы начинающих PIC ASM

Сообщение Z_h_e »

СКАЗОЧНИК писал(а):З.Ы. не спрашивайте, зачем мне это надо...
Нет уж, расскажите :).

Стек и указатель стека куда-то зарыты в МК и программного доступа к ним нет.

Ну сделайте аналоги командам вызова и возврата из нескольких других.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Аватара пользователя
СКАЗОЧНИК
Идёт направо - песнь заводит, Налево - сказку говорит.
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

Re: Вопросы начинающих PIC ASM

Сообщение СКАЗОЧНИК »

Z_h_e писал(а):Стек и указатель стека куда-то зарыты в МК и программного доступа к ним нет.
А в АВР же есть... Там сам указываешь вершину стека... Блин, жалко.
Z_h_e писал(а):Нет уж, расскажите
Есть у меня друг, ему 42 года. Он меня подсадил на ПИК контроллеры, а так как сам он раньше не занимался программированием и микроконтроллерами, то жутко БЫДЛОКОДИТ.
Я ему помогаю время от времени прерывание на них написать или опрос какой и т.д. Поэтому и сам в них начал понимать уже.
Он читает даташит и ничего не может вкурить. Поэтому звонит мне. Я к нему еду и сам читаю даташит и конфигурирую то, что надо. Также говорю как надо было сделать.
А он упертый. :facepalm:
И сделал вызов подпрограммы задержки, а в подпрограмме задержки сделал опрос кнопки и выход не по RET... , а goto куда ему надо. :facepalm: :facepalm: :facepalm:
Я сказал ему, что есть такое понятие, как стек, и что его будет сносить, а микроконтроллер виснуть. У него еще и прерывание есть в этой программе.
А он уперся, что все работает! И показывает мне эмуляцию в Протеусе. (Еще раз я убедился, что Протеус это тоже зло в руках дилетантов). :))) :))) :)))
На что ему был дан совет собрать всю эту лабуду в железе, а потом застрелиться, но не звонить мне, что бы я приехал и помог разобраться. :kill:

З.Ы. Вопрос задал так, на всякий случай. Вдруг он меня все же достанет. :roll:
Станислав
Аватара пользователя
Z_h_e
Собутыльник Кота
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Re: Вопросы начинающих PIC ASM

Сообщение Z_h_e »

Ну если он решил выпрыгивать из подпрограммы обычным переходом, то пускай в нее этим же методом и запрыгивает.
все работает! И показывает мне эмуляцию в Протеусе
Очень даже может быть, что Протеус параллельно кучей ошибок плюется, он же ведет лог во время симуляции.
Последний раз редактировалось Z_h_e Сб май 07, 2016 20:21:41, всего редактировалось 1 раз.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Аватара пользователя
СКАЗОЧНИК
Идёт направо - песнь заводит, Налево - сказку говорит.
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

Re: Вопросы начинающих PIC ASM

Сообщение СКАЗОЧНИК »

Хм... Тоже вариант. )))
Станислав
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25259
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Re: Вопросы начинающих PIC ASM

Сообщение КРАМ »

Вмешиваться в стек - худшее, что можно придумать. Кнопки в прерывании - не многим лучше.
Так зачем множить глупости?
Аватара пользователя
СКАЗОЧНИК
Идёт направо - песнь заводит, Налево - сказку говорит.
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

Re: Вопросы начинающих PIC ASM

Сообщение СКАЗОЧНИК »

КРАМ писал(а):Кнопки в прерывании - не многим лучше.
Не. это уже другая программа и другой МК. :)
Здесь в прерывании мы просто по таймеру TMR1 мигаем светодиодиком.

А так... многие на своих граблях учатся, даже если им и сказали истину, все равно ошибок нарисуют... Видимо натура такая.
Станислав
Аватара пользователя
xterro
Опытный кот
Сообщения: 873
Зарегистрирован: Чт апр 12, 2012 07:19:59
Откуда: Тюмень

Re: Вопросы начинающих PIC ASM

Сообщение xterro »

Приветствую, такой вопросик, когда начинаете писать код на асме, начинаете с чистого файла или у вас уже есть какой-либо заготовленный шаблон, со всеми опциями и структурой файла(функциями) и вы лишь комментируете или убираете лишнее? Если есть такой шаблрн, поделитесь, а ... охота поглядеть, да себе для пользы сохранить :roll:
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25259
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Re: Вопросы начинающих PIC ASM

Сообщение КРАМ »

Шаблон конечно имеется.
Все зависит от наличия аналогичного проекта. Если ничего подобного еще не было, то просто повторяется типовая шапка.
Какой АСМ интересует? Есть MPASM для 8-разрядных ПИКов и ASM30 для 16-разрядных PIC24/dsPIC30/dsPIC33.
Аватара пользователя
xterro
Опытный кот
Сообщения: 873
Зарегистрирован: Чт апр 12, 2012 07:19:59
Откуда: Тюмень

Re: Вопросы начинающих PIC ASM

Сообщение xterro »

Интересует MPASM для 8-разрядных пиков, ибо я ни с чем, более pic16f... не работал(в принципе и их хвататет) да и работаю с ними не часто, а щаблона до сих пор никакого нет, думаю, наверняка у народа есть, дай спрошу :roll:
Ответить

Вернуться в «PIC»