Форум РадиоКот https://radiokot.ru/forum/ |
|
Вопросы начинающих PIC ASM https://radiokot.ru/forum/viewtopic.php?f=58&t=125684 |
Страница 1 из 37 |
Автор: | yor [ Пн янв 11, 2016 17:11:36 ] |
Заголовок сообщения: | Вопросы начинающих PIC ASM |
Здравствуйте! Подскажите пож-ста. PIC 12F675 Не работает такой код Код: btfsc W,0 ; W 0bit -> Out0 bsf Outstat,Out0 В АКБ 0x1, а он просто идёт дальше, как-будто W(0)=0. В железе не пошло сразу, мучаю в симуляторе пока. Есть сомнения, что в этой команде можно использовать АКБ, хотя даташиту вроде не противоречит, но в инете попадается, что нельзя... |
Автор: | Albert_V [ Пн янв 11, 2016 17:28:18 ] |
Заголовок сообщения: | Re: Вопросы начинающих PIC ASM |
Команда btfsc W,0 в PIC12F675 не пройдёт. Сохраните W в RAM (в некий регистр) и сделайте в нём проверку бита "0". |
Автор: | yor [ Пн янв 11, 2016 17:48:13 ] |
Заголовок сообщения: | Re: Вопросы начинающих PIC ASM |
Да уж, что это за аккумулятор такой недоделанный... Компилятор gpasm не выдаёт в этом случае ни ошибки ни даже предупреждения, а другие более возлюбленные микрочипом? Даташит: BTFSC bit Test, Skip if Clear Syntax: [label] BTFSC f,b Operands: 0<=f<=127 0<=b<=7 Вроде формально укладывается, предупреждений/запретов на использование W нет. И думаю, по аналогии, Код: decf W,W тоже нельзя?
|
Автор: | Albert_V [ Пн янв 11, 2016 18:21:45 ] |
Заголовок сообщения: | Re: Вопросы начинающих PIC ASM |
Откройте таблицу команд в родном pdf-е и посмотрите какие команды на какие флаги влияют. Лень проверять на железе, но уверен что decf W,W он не выполнит. ----- Более менее можно верить MPLAB SIM, но иногда и там встречаются "недочёты" в Debugger-е. |
Автор: | yor [ Пн янв 11, 2016 18:30:42 ] |
Заголовок сообщения: | Re: Вопросы начинающих PIC ASM |
Не могу сообразить, причём тут флаги. Мне тоже кажется, что не выполнит. DECF Decrement f Syntax: [label] DECF f,d Operands: 0<=f<=127 d=[0,1] Operation: (f) - 1 -> (destination) Status Affected: Z Может и до меня кто заметил, но думаю, если в мнемонике команды нет буквы W, то использовать его нельзя ![]() |
Автор: | Albert_V [ Пн янв 11, 2016 18:48:37 ] |
Заголовок сообщения: | Re: Вопросы начинающих PIC ASM |
yor писал(а): Не могу сообразить, причём тут флаги.... ...Status Affected: Z Z - флаг ZERO ("0"). ------- В 12-ой серии decf W,x не выполняется. ------- Замените btfsc W,0 на Код: movwf TEMPx
btfsc TEMPx,0 |
Автор: | Аlex [ Пн янв 11, 2016 19:10:45 ] |
Заголовок сообщения: | Re: Вопросы начинающих PIC ASM |
yor писал(а): Может и до меня кто заметил, но думаю, если в мнемонике команды нет буквы W, то использовать его нельзя Так оно и есть.![]() А проверить нулевой бит в аккумуляторе можно, сделав побитовое "И" его с константой (ANDLW) и проверить флаг Z. |
Автор: | yor [ Пн янв 11, 2016 19:23:33 ] |
Заголовок сообщения: | Re: Вопросы начинающих PIC ASM |
Albert_V писал(а): Z - флаг ZERO ("0"). ------- В 12-ой серии decf W,x не выполняется. Как из первого следует второе? Аlex писал(а): Так оно и есть. Странно, что не находится прямого вразумления от микрочипа. Даже PICmicro Mid-Range Reference Manual-33023a просмотрел (не очень конечно досконально) - и тишина... Аlex писал(а): побитовое "И" его с константой (ANDLW) и проверить флаг Z. Это уже не одна команда, но это мелочи, и вкупе с другими неподдерживающими АКБ командами не имеет смысла, проще действительно сторонний регистр задействовать. |
Автор: | Albert_V [ Пн янв 11, 2016 19:29:12 ] |
Заголовок сообщения: | Re: Вопросы начинающих PIC ASM |
yor писал(а): ...Как из первого следует второе?... Никак. Я специально проставил "разделитель" между фразами (не три поста же "городить"). |
Автор: | Аlex [ Пн янв 11, 2016 19:42:04 ] |
Заголовок сообщения: | Re: Вопросы начинающих PIC ASM |
yor писал(а): Странно, что не находится прямого вразумления от микрочипа. Не понятно, какое вразумление Вам нужно ?Команда btfsc - проверка бита в регистре. Именно в регистре ! Все команды имеют описание. Если в описании оперирует аккумулятор (кстати, это далеко не АКБ) - значит операция производится именно с ним. Аккумулятор не имеет адресации, по этому обратиться к нему напрямую (даже косвенно), как к регистру, нельзя. И никакой он не недоделанный, просто такая система команд слабоватая. |
Автор: | yor [ Пн янв 11, 2016 19:49:08 ] |
Заголовок сообщения: | Re: Вопросы начинающих PIC ASM |
Вот хотя бы такое, спасибо ![]() А в каком состоянии после включения, POR и прочих сбросов находятся общие регистры, которые ОЗУ? Некоторые в любом, некоторые в определённом (а иначе невозможно было бы начать работу), а про общие не пишут. Понятно, что для надёжности/определённости можно сбрасывать, но всё-таки, если кто знает? Да и если каждый сбрасывать, много места зря пропадает. |
Автор: | Родэрик [ Пн янв 11, 2016 22:48:54 ] |
Заголовок сообщения: | Re: Вопросы начинающих PIC ASM |
FF |
Автор: | Аlex [ Вт янв 12, 2016 00:22:32 ] |
Заголовок сообщения: | Re: Вопросы начинающих PIC ASM |
Не пишут - значит в неопределённом. А зачем их сбрасывать ? Чем сброс отличается от установки в него, к примеру, 0x55 ? Чем сброс поможет Вам ? |
Автор: | yor [ Вт янв 12, 2016 09:16:10 ] |
Заголовок сообщения: | Re: Вопросы начинающих PIC ASM |
Ну в смысле инициализировать, я имел ввиду. А вот возвращаясь к напечатанному: Albert_V писал(а): Команда btfsc W,0 в PIC12F675 не пройдёт. А в каких-нибудь PIC-ах вообще пройдёт? Учитывая yor писал(а): если в мнемонике команды нет буквы W, то использовать его нельзя yor писал(а): Компилятор gpasm не выдаёт в этом случае ни ошибки ни даже предупреждения, а другие более возлюбленные микрочипом? Это как-то неприлично выглядит со стороны, gpasm ладно понятно, СПО и всё такое, но неужели и mpasm и прочие типа серъёзные компиляторы так же себя ведут в этом случае? Проверьте пож-ста, кому не трудно, а то я сам под линуксом живу. |
Автор: | Albert_V [ Вт янв 12, 2016 09:32:07 ] |
Заголовок сообщения: | Re: Вопросы начинающих PIC ASM |
yor писал(а): ...А в каких-нибудь PIC-ах вообще пройдёт?... В PIC24FJ проходит. В PIC18F26K22 - так же проходит btfss WREG,0 (проверил на реальном "железе"). |
Автор: | Родэрик [ Вт янв 12, 2016 10:53:22 ] |
Заголовок сообщения: | Re: Вопросы начинающих PIC ASM |
Цитата: Команда btfsc W,0 в PIC12F675 не пройдёт. А в каких-нибудь PIC-ах вообще пройдёт? Что значит не пройдёт? Мне кажется вы неверно представляете это. На самом деле пройдёт. Если вы напишите BTFSC W,0 то как и в любом другом случае, если вы не нарушили синтаксис, будет создан соответствующий опкод. А именно : Вместо W подставится ноль, ведь именно так он у вас определён, только это команда работает с адресом регистра, поэтому будет обращение к регистру с адресом 0x00, а это indf. А кто сказал что к нему нельзя обращаться, и к его любому биту? А хотели ли вы обратиться к indf, когда писали W, это уже другой вопрос. |
Автор: | yor [ Вт янв 12, 2016 11:12:45 ] |
Заголовок сообщения: | Re: Вопросы начинающих PIC ASM |
Это понятно, но как задумано всё-таки не пройдёт. Потому и компилится без ошибок. Не зря существуют (слышал краем уха) всякие лексические-грамматические анализаторы. |
Автор: | Albert_V [ Вт янв 12, 2016 11:18:08 ] |
Заголовок сообщения: | Re: Вопросы начинающих PIC ASM |
yor, если пишите программу на ASM - лучше никому не доверять проверку логики работы программы. Только сами. "Если что" - в MPLAB Sim можете посмотреть "что происходит", но на 100% у меня к нему доверия нет. Синтаксис и орфографию проверит транслятор в любом случае. ---- P.S. Пока изучаете PIC-и - лучше не отключать Warning-и. Пусть, лучше, будет "куча" предупреждений типа "проверьте к какому банку вы обращаетесь" или "по умолчанию результат сохранён в регистре" (это если забыли в команде, к примеру, decf regx указать куда сохранить результат). По крайне мере, будет повод ещё раз перепроверить текст программы. |
Автор: | yor [ Вт янв 12, 2016 12:12:59 ] |
Заголовок сообщения: | Re: Вопросы начинающих PIC ASM |
Ну как тут не согласиться, согласен конечно со всем:)) Я в gpsim проверяю, случай с "btfsc W" поймал ![]() |
Автор: | Albert_V [ Вт янв 12, 2016 12:17:22 ] |
Заголовок сообщения: | Re: Вопросы начинающих PIC ASM |
yor писал(а): ...Я в gpsim проверяю... Лучше, на мой взгляд, пользоваться официальным софтом от производителя контроллеров. Для PIC-ов - MPLAB (бесплатный). |
Страница 1 из 37 | Часовой пояс: UTC + 3 часа |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |