Заблуждаетесь. FSR - это регистр, а не переменная, и запись "movf FSR,0" вовсе не означает, что в него грузится 0, почитайте эту вырезку внимательнее, сначала. Ошибка в даташите, получается, ну или неточность как минимум.
У микрочипа описание команд введено в даташит (поскольку у каждого отдельно взятого подвида имеются некоторые отличия). Посему или руководствуемся полной документацией, включая последующие еррата-шит ()где указываются обнаруженные опечатки/изменения) или делаем анализ даташитов иных "родственных" кристаллов. При том, что пользоваться предпочтительно наиболее свежим изданием. Как пример "ошибок" можно привести документацию на PIC16F87A DS39582C - основная с "потерянной страничкой" и соответствующая еррата, ту страничку дополняющая DS80276A
Очень даже велика, сводит на нет все преимущества такой точной науки, как цифровая техника
Не юродствуйте. Даташиты пишут живые люди. И читают, кстати, тоже. Минимально грамотному человеку понятно что такое флаги состояний. В большинстве даташитов на 8 битное семейство нет примера на эту команду. Что кагбэ намекаэ на очевидность. ЗЫ. Нет такой науки - "цифровая техника". Есличо...
Эрраты искать там же, где и даташиты. На сайте Микрочипа. Сначала открываете страницу используемого МК и в разделе документация находите не только даташит и эррату, но и аппноты, брифы и референсные мануалы на эту модель, а так же примеры кода.
Подскажите, пож-ста, по поводу стека. У 12F675 из даташита следует, что он не боится переполнения, хоть тысячу раз его переполняй, если с умом, аппаратно это не определить, процессор не остановится. Меня такая логика устраивает, из подпрограммы по CALL по неудаче много выходов по GOTO, и при удаче один по RETURN. То есть стек заполнен одним и тем же адресом возврата:
Выход по GOTO может быть достаточно много раз, значительно больше 8 (обработка медленно меняющегося напряжения). Симулятор при переполнении стопорится, но это можно обойти. А в реальной работе проблем же быть не должно?
Заголовок сообщения: Re: Вопросы начинающих PIC ASM
Добавлено: Сб мар 02, 2019 21:06:56
Модератор
Карма: 90
Рейтинг сообщений: 1430
Зарегистрирован: Чт мар 18, 2010 23:09:57 Сообщений: 4575 Откуда: Планета Земля
Рейтинг сообщения:0 Медали: 1
yor писал(а):
А в реальной работе проблем же быть не должно?
Странный вопрос. Как это может не быть проблем из-за переполнения стека ? То, что проц не сбросится и никак не отреагирует - ничего не значит. В стеке актуальные данные потеряются, и в итоге будет крах программы из-за возврата "не туда".
Ничего странного, если внимательно прочитать мой опус Стек будет всегда полон нужным мне адресом, на который выход произойдёт только в нужном случае. И даже другая подпрограмма удачно отработает, так как из неё нет нелегальных выходов. Вроде так
В данном случае работать будет, но только вопрос - зачем так делать? Помимо формального достижения цели следует писать программу так, чтобы она оставалась открытой для последующих возможных модификаций, а равно для простого понимания ее работы через некоторый промежуток времени. Такшта по факту Вы предлагаете совершенно безобразное решение. Для искомого Вами двойного выхода из функции есть команда retlw <const>, с помощью которой, НЕ РАЗРУШАЯ СТЕК, можно спокойно ветвить исполнение ПОСЛЕ ШТАТНОГО ВЫХОДА из функции. Учите матчасть, милейший, а не фонтанируйте глупостями.
Сейчас этот форум просматривают: Asmodey, serg_svd и гости: 53
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения