Форум » Для начинающих. » И снова вычесляемый переход не работает (( » Ответить

И снова вычесляемый переход не работает ((

Habble: Знаю о границе 256 байт, что нельзя ее пересекать таблицей, но это правило не помогает. Проблема показана на видео http://file.karelia.ru/vv295n/. Почему когда попадаю на метку TABLE_5 осуществляется переход на таблицу метки TABLE?

Ответов - 34

Tamerlan: В PCLATH у тебя 00011000 - .24 , а надо 00011010 - .26 попробуй.

lowbyte: Это почему нельзя пересекать? Сколько угодно... Все проблемы от НЕПОНИМАНИЯ процесса. Еще раз. Есть ДВА регистра управляющих переходом программы. Это младший байт самого счетчика команд: PCL - ProgramCounterLow и ЗАЩЕЛКА старшего байта счетчика команд PCLATH - ProgramCounterLatchHi. При записи в младший байт счетчика ОДНОВРЕМЕННО происходит перезапись из защелки старшего байта в сам старший байт. По завершении этой команды программа оказывается по записанному в счетчик команд вектору(адресу). Смысл перехода заключается в ПРЕДВАРИТЕЛЬНОМ вычислении ПОЛНОГО адреса перехода, записи старшего байта в защелку и В ПОСЛЕДНЮЮ ОЧЕРЕДЬ запись младшего байта в сам счетчик. Применение команды addwf PCL, f в первой строке таблицы требует учета состояния защелки старшего байта. Типичная ошибка - неучет значения этой защелки. Обычно забывают, что не всегда там по умолчанию ноль. Применяйте явную пересылку movwf PCL, f и будет Вам счастье...

Александр: А ты коррекцию PCLATH делаешь, перед скачком? не могу загрузить пишет ошибку, наверно инет снова гонит


Александр: вот тебе пример работы с корекцией старшего регистра счетчика команд, сам недавно разбирался, с работой на границе разных блоков, и страницах памяти программ http://zalil.ru/31839907

Habble: Александр пишет: вот тебе пример работы с корекцией старшего регистра счетчика команд movlw high TEXT1_1; записать ст. байт счетчика команд метки TEXT1_1 в w movwf PCLATH call TEXT1_1 ; Переход в ПП TEXT1_1. ПРЫГАЕМ!!!!!! bcf PCLATH,3 ; Выбираем страницу 0 а как и где прописана high TEXT1_1? Похожие операции делают в этом описании, но я там тоже не разобрался, что такое LOW Table и HIGHT Table, как они определяются? http://www.ianpaterson.org/projects/spokepov20050704/links/AN556.pdf

Dmitry Dubrovenko: Habble пишет: а как и где прописана high TEXT1_1?Это - старший байт полного (двухбайтного) адреса метки TEXT1_1. Соответственно low - младший байт.

Habble: Всем спасибо, вечерком испробую эти программные фишки :)

Александр: если тебя интнрнсует шапка программы то в ней просто прописываются в регистрах спец назначения положение PCL equ _ _ H ; и PCLATH equ _ _H; а low и high это операнды младшего байта и старшего полубайта, можешь с ними не заморачиваться их в шапке прописывать не нужно, просто прими как данное и всё. вот пример с шапкой программы http://zalil.ru/31840414

lowbyte: Александр, не стоит советовать глупости. Для объявления регистров спецназначения (SFR) необходимо и ДОСТАТОЧНО включить в проект стандартный хедер для ПРИМЕНЯЕМОГО контроллера из папки MPASM Suite МПЛАБа (<имя контроллера>.inc). Давайте, наконец, забудем "наследие" КЕА.

Alex: Habble пишет: Почему когда попадаю на метку TABLE_5 осуществляется переход на таблицу метки TABLE?Всё просто. Вы устанавливаете 4 и 5 бит PCLATH, и в нём становится значение = 0b11000 = 0x18. Вот программа и улетает на адрес 0x18xx, где xx - значение PCL. Вам, в PCLATH, нужно записать 1A.

Александр: lowbyte это не глупости, для новичков inc файлы такая же не понятная директива как и операнды, сужу по себе, (в свое время пытался не раз прыгнуть выше головы, и приходилось снова и снова копаться в куче литеры), и т.к. программа будет работать и так и этак ошибкой я это не считаю!

Alex: Александр , а это и не ошибка. Ошибкой Вы свой код признаете тогда, когда решите, к примеру, перенести его на другой МК. Да и действительно, глупо переписвать все SFR заного, когда они уже прописаны (прчём по некому стандарту, делавший Ваш код читабельным). Достаточно только подключить нужный файл и всё.

Александр: С файлом inc я согласен работать удобно, вопрос был задан что делать с low, high операнда где их приписывать, я так понимаю что человек не в курсе как они работают вообще, вот я и выложил одну из своих решений вместе с шапкой программы показав что их там прописывать не нужно, а за номера ячеек которые берутся из карты опер. Памяти речь не идет, думаю понятно что разные пики среднего семейства имеют разные карты и соответственно адреса.

Alex: Александр , тогда не понятно, чем-же шапка в Вашей программе помогла понять человеку что такое high и low. Причём тут шапка и директивы ? Можно же просто сказать - это директивы MPASM( ! ), позволяющие извлечь из 2-х байтовой константы старший и младший байты. И, кстати, без зазрения совести, можно послать на подобный документ http://www.microchip.ru/files/d-sheets-rus/mpasm.pdf . Например: high(0x1234) - это то-же самое, что и 0x12 low(0x1234) - это то-же самое, что и 0x34 Вот и "вся любовь"...

Александр: Если вы рассказываете человеку далекому от понятия работы вычисляемых переходов то чел прочитавший всю эту тему врядли бы понял о чем идет речь, в своем примере показал работу на разных страницах памяти программ, Habble может просто скопировать себе пп без шапки поставить свои данные выводящиеся на лсд, и убрать команду bcf PCLATH,3, т к корректировать страницу на которой работает ненужно,а нужно всего лишь скорректировать блок в который необходимо прыгнуть для счетчика PC, и не цепляйтесь к словам, если спецы то лучше бы пп набросали, всёж куда проще бы было объяснить человеку что за штука такая рег. PCLath и с чем его едят!!!

Александр: А также убрать org 801

Alex: Александр пишет: и не цепляйтесь к словам Александр, никто не цепляется к словам. Просто тема зашла о вычисляемом переходе, а пришла к примерам(извините, но плохим) с шапками. По этому Вас и одёрнули. Никто из нас себя спецами не считает, мы все учимся... По сабжу, сейчас чего-нибудь нкалякаем....

Александр: Вот это другой разговор, а шапка неудачная ну чтож поделать, зато в ней сразу видно что операнды отдельно не прописываются.

Alex: Тупой форум блин. Нихера не выравнивает текст Выложил текстовый документ http://zalil.ru/31844649 Код накидан на скорую руку, так что если решили "пнуть", лучше не надо

Александр: Оригинально, но зачем устанавливать адрес пп Table ?? Ведь команда call работает во всей странице памяти программ без ошибочно...

Alex: Это для теста. Я подобрал адрес так, чтобы страницы пересеклись в середине таблицы. Вроде же написал:; Устанавливаем, для примера, начальный адрес

Habble: Благодаря Вам я продвинулся дальше Всем огромное спасибо за разъяснения! Моя работа еще в стадии отладки - http://www.youtube.com/watch?v=B97NL6B1-_Y

Александр: Ну вот и славненько, что совместными усилиями одной темой нерешенной меньше, обращайся, что знаем то подскажет.

Dmitry Dubrovenko: Habble пишет: Моя работа еще в стадии отладкиНадеюсь, там кроме надписи "GSM" ещё и сам блок присутствует?

Habble: Dmitry Dubrovenko пишет: Надеюсь, там кроме надписи "GSM" ещё и сам блок присутствует? Неа, телефон GSM модуля нету, хотя наверное было бы солидней его подцепить...

SanSanich: Habble А в машину такая сигналка пойдёт?

Habble: В принципе пойдет для любого места охраны, сердце сигнализации уже почти создано, остается только добавить нужные заказчику функции.

Dmitry Dubrovenko: Habble пишет: Неа, телефонНу, хоть управляется командами, или просто "кнопки нажимаются"?

Habble: Dmitry Dubrovenko пишет: Ну, хоть управляется командами, или просто "кнопки нажимаются"? Еще к этому не дошел, есть мысля использовать управлением AT командами, но еще не определился с телефоном который их поддерживает, их есть тьма, на каком остановится не знаю. На крайний случай управлять буду кнопками телефона через оптопары, тогда любая модель подойдет, правда ее придется обвесить проводами ))), дальнейшее использование в обычном виде уже будет почти невозможным...

Habble: Dmitry Dubrovenko пишет: Ну, хоть управляется командами, или просто "кнопки нажимаются"? Разобрался с АТ командами, ими все отлично управляется

Александр: Habble пишет: Разобрался с АТ командами, ими все отлично управляется А можно по подробнее про АТ команды и с чем их есть, а то скачал AT_Command.rar почитал, и ложится в голову чтото тяжело... камень я так понял 16f877А, с какой мобилой соединил, что нужно какае кабели? или ты разломал клаву?

Habble: Александр пишет: А можно по подробнее про АТ команды и с чем их есть, а то скачал AT_Command.rar почитал, и ложится в голову чтото тяжело... камень я так понял 16f877А, с какой мобилой соединил, что нужно какае кабели? или ты разломал клаву? Ну, если есть интерес, то попробую за пару вечеров собрать наработанный материал и выложить в отдельной теме, когда сделаю, то тут отпишусь (дам ссылку).

Александр: был бы премного благодарен, а то на даче и в гараже есть задумка сделать дистанционные выключатели, контроллеры состояний, сигнализация проникновения с отправкой смс. с контроллерами вроде подружился, а вот с GSM пока торможу.

Habble: http://pic.borda.ru/?1-2-0-00000210-000-0-0-1323935413



полная версия страницы