Перейти к содержанию

Smen

Участник
  • Публикаций

    213
  • Зарегистрирован

  • Посещение

Репутация

0 Обычный

Информация о Smen

  • Звание
    Местный

Контакты

  • Сайт
    http://
  • ICQ
    0

Информация

  • Город
    Питер
  1. Коллеги, а как PCB перенести в SCH (если вообще возможно), "с нуля", так сказать? Поиск что-то ничего не даёт. AD13, если что.
  2. Собственно зависит от программатора. Проблема в том, что в нормальном ХЕКСе для ПИКов содержится и область программы и область слова конфигурации и область EEPROM. В этом бинарнике можно понять что куда относится (у меня он не открывается)? Разумеется такого быть не должно (пропадает весь смысл хекса), но и криминала в этом тоже нет. Должен открываться и прошиваться (может ругаться, что объём больше памяти МК, но это опять от программатора зависит). Как вариант - удалить "пустые" строки с "FF". Так всё, вероятно, по в/у причине (не понятно в какую область переводить).
  3. Т.е. используются и таймеры и УАРТ? В чём смысл?
  4. Требуется_инженер-электроник

    А город-то какой? Дефолтсити?
  5. про PCLATH вопрос

    Если Вы имеете ввиду про то, что в/у команда пишется в одну строчку, так какая разница, будет в программе 3000 строк, или 3001? :rolleyes: Вообще, говорить о краткости листинга, используя АСМ как-то стрёмно. Переходите уж тогда на СИ. Про "команды, которые нужно внедрить для манипуляций с аккумулятором" я что-то вообще не понял. Что Вы там ещё внедрять хотите? Кроме в/у двух команд ничего не требуется. Кстати, Ваши двойные вызовы ПП вовсе не сокращают листинг, да вдобавок ещё и стэк забивают, а ведь он не резиновый. Это очень плохо. Попробую ещё раз пояснить. В PCLATH необходимо загрузить (именно "загрузить") адрес "таблицы переходов". В моём примере он туда и загружается, а в Вашем в него загружается указатель вершины стэка, в котором оказывается нужное значение. Сейчас это сработало, но когда-нибудь может в указателе оказаться совсем не то, что нужно, а вот адрес таблицы всегда останется адресом. Я уже молчу о совместимости кода с другими семействами. И если Вы возразите, что никуда его переносить не собираетесь, то я отвечу, что тогда Вам вообще нужно использовать команды табличного чтения.
  6. про PCLATH вопрос

    Возвращаться я не предлагал, мне просто показалась несколько странной последовательность Ваших действий. :rolleyes: Команда movff занимает два МЦ и два слова памяти программ, ровно столько же, сколько и в/у две команды (читайте уже наконец даташит), так что с точки зрения времени выполнения/размера обе конструкции одинаковы. А вот относительно логики. :rolleyes: В моей последовательности загружается адрес таблицы, а в Вашей, указатель стека. Разницу чувствуете? Насчёт волнений по поводу аккумулятора, вообще не понятно. На то он и аккумулятор, что б его активно использовать. У Вас следом пойдёт ещё одна movlw, так какая разница, что там в аккумуляторе будет находиться?
  7. про MPLAB SIM вопрос

    balk, канэшна дыка ызвыняюсь, но Вы вроде ещё с PCLATH не разобрались, а уже за ЮСБ взялись? Аднака... :rolleyes:
  8. про PCLATH вопрос

    В PCLATH - ноль (а в реале может быть любое число, поскольку нет инициализации регистра), вот он и подставляется в старший байт адреса. Что ж тут непонятного? Вставьте перед movlw mowlw high table movwf PCLATH,0 И попадёте куда нужно. P.S.: Только конструкция всё-равно кривая. И для записи листинга программы на форуме пользуйтесь тэгом code (см. кнопочки вверху окна сообщения).
  9. про PCLATH вопрос

    У ТС 18F2550. :rolleyes:
  10. про PCLATH вопрос

    Старший (точнее средний) байт адреса метки (т.е. то, что должно находиться в PCLATH). :rolleyes: Выше я расписывал алгоритм. Для retlw PCLATH не нужен, но он необходим при переходе на этот retlw. И никакого разрушения стэка быть не должно, хотя я тоже считаю, что данная конструкция "через Ж". balk, если у Вас вся таблица только из retlw (т.е. долько данные), то 18 семейство позволяет использовать специальные команды табличного чтения. Может Вам посмотреть в эту сторону?
  11. про PCLATH вопрос

    Как-то совсем авантюрно. :rolleyes: Это сперва должен быть вызов ПП. А чем не устраивает обычный movlw hight Label movwf PCLATH Да какие адреса? Это же виртуальный регистр. Он существует только в отладчике для визуального удобства восприятия. Судя по разрядности, это PCLATU + PCLATH + PCL
  12. про PCLATH вопрос

    Тогда понятно. Я говорил про 12-16 серии. Там такого не было, насколько помню. В 18 подшаманили. На десять строк выше Вашей цитаты. :rolleyes: Это, видимо PCLATH и PCLATU вместе взятые. Разрядов-то сколько? Такая же фигня и с TMR1H и TMR1L, например. Удобнее смотреть целиком (ИМХО, разумеется).
  13. про PCLATH вопрос

    Давайте-ка по прядку. Что у Вас за камень?
  14. про PCLATH вопрос

    Фигня какая-то. В том-то весь и фокус, что операции с програмным счётчиком никак не влияют на содержимое регистра PCLATH. Что туда запишите, то там и будет находиться до следующей перезаписи. Реальный сегмент находится в PCH. Если в произвольном, то надо делать пару десятков строк дополнительного кода. В двух словах так: Сперва пишите в PCLATH старшую половину адреса метки начала таблицы переходов. Затем производите сложение PCL с переменной перехода, но с результатом в аккумулятор. Если поднят флаг переноса, инкрементируете PCLATH. Опять производите сложение с PCL, но уже результат в регистр. Если необходимо сократить код и/или повысить быстродействие (т.е. сократить количество команд), есть вариант размещать таблицу переходов строго в пределах 256-строчного сегмента адресов (чтобы при сложении PCL гарантировано не было переполнения).
  15. про PCLATH вопрос

    Вы неправильно понимаете смысл регистра PCLATH. 01 (так понимаю, это - хексы, поэтому не забывайте указывать 01h, или 0x01, и т.п.) у Вас в старшем регистре програмного счётчика. PCLATH используется, когда опкод не содержит значение для в/у регистра. Тогда предварительно надо в PCLATH записать значение, которое будет переписано в старший регистр програмного счётчика, при выполнении команд с таким опкодом. Ну, и как принято говорить: читайте даташит. :rolleyes: Там всё очень хорошо разрисовано (за что люблю Майкрочип).