Поклонники продукции Microchip Technology Inc тусуются тут.
Ответить

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

Пн янв 11, 2016 17:11:36

Здравствуйте!
Подскажите пож-ста. PIC 12F675 Не работает такой код
Код:
btfsc W,0 ; W 0bit -> Out0
bsf Outstat,Out0

В АКБ 0x1, а он просто идёт дальше, как-будто W(0)=0. В железе не пошло сразу, мучаю в симуляторе пока. Есть сомнения, что в этой команде можно использовать АКБ, хотя даташиту вроде не противоречит, но в инете попадается, что нельзя...

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

Пн янв 11, 2016 17:28:18

Команда btfsc W,0 в PIC12F675 не пройдёт.
Сохраните W в RAM (в некий регистр) и сделайте в нём проверку бита "0".

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

Пн янв 11, 2016 17:48:13

Да уж, что это за аккумулятор такой недоделанный... Компилятор gpasm не выдаёт в этом случае ни ошибки ни даже предупреждения, а другие более возлюбленные микрочипом?
Даташит:
BTFSC bit Test, Skip if Clear
Syntax: [label] BTFSC f,b
Operands: 0<=f<=127 0<=b<=7
Вроде формально укладывается, предупреждений/запретов на использование W нет.

И думаю, по аналогии,
Код:
decf W,W
тоже нельзя?

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

Пн янв 11, 2016 18:21:45

Откройте таблицу команд в родном pdf-е и посмотрите какие команды на какие флаги влияют.
Лень проверять на железе, но уверен что decf W,W он не выполнит.
-----
Более менее можно верить MPLAB SIM, но иногда и там встречаются "недочёты" в Debugger-е.

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

Пн янв 11, 2016 18:30:42

Не могу сообразить, причём тут флаги. Мне тоже кажется, что не выполнит.
DECF Decrement f
Syntax: [label] DECF f,d
Operands: 0<=f<=127 d=[0,1]
Operation: (f) - 1 -> (destination)
Status Affected: Z

Может и до меня кто заметил, но думаю, если в мнемонике команды нет буквы W, то использовать его нельзя :))

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

Пн янв 11, 2016 18:48:37

yor писал(а):Не могу сообразить, причём тут флаги....
...Status Affected: Z

Z - флаг ZERO ("0").
-------
В 12-ой серии decf W,x не выполняется.
-------
Замените btfsc W,0 на
Код:
   movwf   TEMPx
   btfsc   TEMPx,0

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

Пн янв 11, 2016 19:10:45

yor писал(а):Может и до меня кто заметил, но думаю, если в мнемонике команды нет буквы W, то использовать его нельзя :))
Так оно и есть.

А проверить нулевой бит в аккумуляторе можно, сделав побитовое "И" его с константой (ANDLW) и проверить флаг Z.

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

Пн янв 11, 2016 19:23:33

Albert_V писал(а):Z - флаг ZERO ("0").
-------
В 12-ой серии decf W,x не выполняется.

Как из первого следует второе?

Аlex писал(а):Так оно и есть.

Странно, что не находится прямого вразумления от микрочипа. Даже PICmicro Mid-Range Reference Manual-33023a просмотрел (не очень конечно досконально) - и тишина...

Аlex писал(а):побитовое "И" его с константой (ANDLW) и проверить флаг Z.

Это уже не одна команда, но это мелочи, и вкупе с другими неподдерживающими АКБ командами не имеет смысла, проще действительно сторонний регистр задействовать.

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

Пн янв 11, 2016 19:29:12

yor писал(а):...Как из первого следует второе?...

Никак.
Я специально проставил "разделитель" между фразами (не три поста же "городить").

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

Пн янв 11, 2016 19:42:04

yor писал(а):Странно, что не находится прямого вразумления от микрочипа.
Не понятно, какое вразумление Вам нужно ?
Команда btfsc - проверка бита в регистре. Именно в регистре ! Все команды имеют описание. Если в описании оперирует аккумулятор (кстати, это далеко не АКБ) - значит операция производится именно с ним.
Аккумулятор не имеет адресации, по этому обратиться к нему напрямую (даже косвенно), как к регистру, нельзя. И никакой он не недоделанный, просто такая система команд слабоватая.

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

Пн янв 11, 2016 19:49:08

Вот хотя бы такое, спасибо :))

А в каком состоянии после включения, POR и прочих сбросов находятся общие регистры, которые ОЗУ? Некоторые в любом, некоторые в определённом (а иначе невозможно было бы начать работу), а про общие не пишут. Понятно, что для надёжности/определённости можно сбрасывать, но всё-таки, если кто знает? Да и если каждый сбрасывать, много места зря пропадает.

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

Пн янв 11, 2016 22:48:54

FF

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

Вт янв 12, 2016 00:22:32

Не пишут - значит в неопределённом.
А зачем их сбрасывать ? Чем сброс отличается от установки в него, к примеру, 0x55 ? Чем сброс поможет Вам ?

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

Вт янв 12, 2016 09:16:10

Ну в смысле инициализировать, я имел ввиду. А вот возвращаясь к напечатанному:
Albert_V писал(а):Команда btfsc W,0 в PIC12F675 не пройдёт.

А в каких-нибудь PIC-ах вообще пройдёт? Учитывая
yor писал(а):если в мнемонике команды нет буквы W, то использовать его нельзя


yor писал(а):Компилятор gpasm не выдаёт в этом случае ни ошибки ни даже предупреждения, а другие более возлюбленные микрочипом?

Это как-то неприлично выглядит со стороны, gpasm ладно понятно, СПО и всё такое, но неужели и mpasm и прочие типа серъёзные компиляторы так же себя ведут в этом случае? Проверьте пож-ста, кому не трудно, а то я сам под линуксом живу.

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

Вт янв 12, 2016 09:32:07

yor писал(а):...А в каких-нибудь PIC-ах вообще пройдёт?...

В PIC24FJ проходит.
В PIC18F26K22 - так же проходит btfss WREG,0 (проверил на реальном "железе").

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

Вт янв 12, 2016 10:53:22

Команда btfsc W,0 в PIC12F675 не пройдёт.

А в каких-нибудь PIC-ах вообще пройдёт?


Что значит не пройдёт? Мне кажется вы неверно представляете это.
На самом деле пройдёт.

Если вы напишите BTFSC W,0 то как и в любом другом случае, если вы не нарушили синтаксис, будет создан соответствующий опкод.
А именно : Вместо W подставится ноль, ведь именно так он у вас определён, только это команда работает с адресом регистра, поэтому будет обращение к регистру с адресом 0x00, а это indf. А кто сказал что к нему нельзя обращаться, и к его любому биту?

А хотели ли вы обратиться к indf, когда писали W, это уже другой вопрос.

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

Вт янв 12, 2016 11:12:45

Это понятно, но как задумано всё-таки не пройдёт. Потому и компилится без ошибок. Не зря существуют (слышал краем уха) всякие лексические-грамматические анализаторы.

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

Вт янв 12, 2016 11:18:08

yor, если пишите программу на ASM - лучше никому не доверять проверку логики работы программы.
Только сами.
"Если что" - в MPLAB Sim можете посмотреть "что происходит", но на 100% у меня к нему доверия нет.
Синтаксис и орфографию проверит транслятор в любом случае.
----
P.S.
Пока изучаете PIC-и - лучше не отключать Warning-и.
Пусть, лучше, будет "куча" предупреждений типа "проверьте к какому банку вы обращаетесь" или "по умолчанию результат сохранён в регистре" (это если забыли в команде, к примеру, decf regx указать куда сохранить результат).
По крайне мере, будет повод ещё раз перепроверить текст программы.

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

Вт янв 12, 2016 12:12:59

Ну как тут не согласиться, согласен конечно со всем:)) Я в gpsim проверяю, случай с "btfsc W" поймал :))

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

Вт янв 12, 2016 12:17:22

yor писал(а):...Я в gpsim проверяю...

Лучше, на мой взгляд, пользоваться официальным софтом от производителя контроллеров.
Для PIC-ов - MPLAB (бесплатный).
Ответить