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

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

Пн июн 26, 2023 22:32:56

asvhmao писал(а):команда movfw это тоже самое что и movf или есть отличия?
С точки зрения функции им выполняемой, отличий не должно быть. Но всё зависит от ассемблера и компилятора вами применяемого. Т.е. как он сиё воспринимает читайте в документации на применяемый вами инструментарий программирования.
(Например какой- нибудь MPLAB ххх - см. таблицу стандартных команд на данный МК и макросы, понимаемые используемым компилятором).

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

Вт июн 27, 2023 12:24:08

Просматриваю разные тексты, иногда попадается команда movfw это тоже самое что и movf или есть отличия?...

Есть система команд "среднемладших" (
шаблон_команд_PIC10_12_16.pdf
(648.72 KiB) Скачиваний: 26
) и есть дополнительные "удобные макросы" от компилятора в Mplab IDE (созданные на основе того же исходного набора команд), смотрим (запустив IDE):
HELP -> Topics... -> MPASM Assembler -> OK -> reference -> 12-Bit/14-Bit Instruction Width Pseudo-Instructions
там полный перечень применяемых с описанием "начинки".
8)
Вложения
шаблон_команд_PIC10_12_16_em.pdf
(786.17 KiB) Скачиваний: 31

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

Пт июн 30, 2023 16:52:56

Запустился генератор, еле остановил. :))) Пока не разобрался, как правильно совмещать нулевую позицию таблицы и ноль в регистре, где идёт подсчёт, для полной остановки. Сделал двойную проверку на ноль, при нажатии на кнопку и после вычитания единицы.
MPLAB 8.10 кушает movfw и movf , правда пока ещё делаю ctrl+c --->. ctrl+v из разных кусков :oops: Работает и то и другое.
Почитав про таймеры и процедуры с ними, предыдущие вопросы отпали сами собой.
В остальном работает как задумывалось. В железе и на точность ещё не проверял,. :beer:

Изображение

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

Пт июн 30, 2023 17:22:28

У мплаба свой симулятор и весьма точный.
Там же можно и контроль стека и диаграммы смотреть.
8)

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

Пт июн 30, 2023 17:40:19

Не привык просто ещё. Читал, но уже забыл :)) со временем набью руку, особенно если что-то точное надо будет делать. :beer:

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

Вт июл 04, 2023 19:50:16

Понятно, что обращаясь в любом банке по старшим адресам, попадаешь в нулевой. Всего 16 ячеек. А можно из любого же банка обращаться по адресам нулевого, то есть 70-7Fh?
Изображение

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

Вт июл 04, 2023 20:17:26

Понятно, что обращаясь в любом банке по старшим адресам, попадаешь в нулевой.

В системе команд этой платформы есть абсолютная адресация. То есть в самой команде содержится (может содержаться) не только код операции, но и АДРЕС ОПЕРАНДА. При длине команды 14 бит на адрес операнда остается только 7 бит. Таким образом можно адресовать только 128 регистров ОЗУ. Чтобы увеличить это количество, в качестве старших разрядов используется два бита РЕГИСТРА СОСТОЯНИЙ процессора (STATUS) - RP0 и RP1. Эти биты удлинят адрес и реальное обращение будет к ПОЛНОМУ адресу.
При обращении к старшим 16 регистрам 7-битного адреса, расширение адреса маскируется (выключается). Поэтому в каждом банке эти 16 регистров фактически повторяются.

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

Вт июл 04, 2023 20:50:34

... можно из любого же банка обращаться по адресам нулевого, то есть 70-7Fh?
...

Можно.
Но придется работать с компилятором в режиме относительной адресации.
Регистры, размещенные в области обозначенной в документации как "доступ к 70-7F"(accesses 70-7F) объявляется как
секция UDATA_SHR.
У некоторых "малолапых" это единственный вариант для работы с ОЗУ (те же pic12f629/675 к примеру).
Для данного случая выбираем шаблон проекта из
" C:\Program Files\Microchip\MPASM Suite\Template\Object "
к примеру файлики шаблонов
12F629TMPO.asm
16F628ATMPO.asm
8)

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

Ср июл 05, 2023 06:15:04

А что там в этих шаблонах? У меня не MPASM. Просто
Код:
Name UDATA_SHR address
не пойдёт? И потом просто из любого банка обращаться по именам?

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

Ср июл 05, 2023 08:06:25

Не пойдет.
udata_shr - не может иметь адрес. Это директива для линкера, который располагает все имена регистров в диапазоне адресов доступном из всех банков. То есть в этих самых 16 адресах.
Количество байт под этой директивой не должно превышать 16, иначе линкер при сборке кода выдаст ошибку.
При обращении по абсолютному адресации нужно либо следить за банком и его переключать по необходимости, либо всегда переключать, чтобы не ошибаться.
Макрос переключения banksel <name_reg>, либо прямое присвоение битам RP0 и RP1 регистра STATUS соответствующих значений.
Для сравнительно новых МК управление банками происходит посредством регистра BSR. Поскольку объем ОЗУ потребовал более двух дополнительных разрядов.

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

Ср июл 05, 2023 08:29:15

Скорее не 16, а в зависимости от конкретного МК.
Взять тот же pic12f629 - там второй банк ОЗУ полное отображение на первом.
:roll:
Если пишем программу в мплабе, то спаси является частью самого мплаба (находится в его основном каталоге).
Там есть папки с шаблон-заготовками как для абсолютного так и для относительного режима - это (наличие разных и несовместимых в одном файле директив и правил написания текста исходника) главное различие компилятора ассемблера для пиков и ассемблеров для АВР/mcs51.
Те шаблоны удобны еще и тем, что в них уже прописан обязательный для конкретного кристалла минимум для начальной инициализации.
Жаль что иногда ошибки попадаются.
8)

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

Ср июл 05, 2023 08:39:10

Взять тот же pic12f629 - там второй банк ОЗУ полное отображение на первом.

Потому что там память маленькая.
Я же говорю конкретно для ТС с его случаем. Дай Бог ему освоить этот частный случай.

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

Ср июл 05, 2023 09:41:57

На то существуют файлы линкера - особо не углублялся, но поднятый вопрос заинтересовал "на посмотреть"...
К примеру взял
12f629_g.lkr
Спойлер
Код:
#IFDEF _DEBUGDATASTART
  SHAREBANK  NAME=dbgnobnk   START=0x20            END=0x20           PROTECTED
  SHAREBANK  NAME=dbgnobnk   START=0xA0            END=0xA0           PROTECTED

  SHAREBANK  NAME=gpr0       START=0x21            END=0x5F           
  SHAREBANK  NAME=gpr0       START=0xA1            END=0xDF           PROTECTED
#ELSE
  SHAREBANK  NAME=gpr0       START=0x20            END=0x5F           
  SHAREBANK  NAME=gpr0       START=0xA0            END=0xDF           PROTECTED
#FI

и
16f628_g.lkr
Спойлер
Код:
#IFDEF _DEBUGDATASTART
  SHAREBANK  NAME=dbgnobnk   START=0x70            END=0x70           PROTECTED
  SHAREBANK  NAME=dbgnobnk   START=0xF0            END=0xF0           PROTECTED
  SHAREBANK  NAME=dbgnobnk   START=0x170           END=0x170          PROTECTED
  SHAREBANK  NAME=dbgnobnk   START=0x1F0           END=0x1F0          PROTECTED

  SHAREBANK  NAME=gprnobnk   START=0x71            END=0x7F           
  SHAREBANK  NAME=gprnobnk   START=0xF1            END=0xFF           PROTECTED
  SHAREBANK  NAME=gprnobnk   START=0x171           END=0x17F          PROTECTED
  SHAREBANK  NAME=gprnobnk   START=0x1F1           END=0x1FF          PROTECTED
#ELSE
  SHAREBANK  NAME=gprnobnk   START=0x70            END=0x7F           
  SHAREBANK  NAME=gprnobnk   START=0xF0            END=0xFF           PROTECTED
  SHAREBANK  NAME=gprnobnk   START=0x170           END=0x17F          PROTECTED
  SHAREBANK  NAME=gprnobnk   START=0x1F0           END=0x1FF          PROTECTED
#FI

границы таки прописаны достаточно явно...
И так по каждому кристаллу, обрабатываемому имеющейся версией мплаба (и его "сопутствующими компонентами").
Итогом в каждом проекте под ассемблером имеем три обязательных вспомогательных файла
файл описания ресурсов железа МК
name_mk.inc (C:\Program Files\Microchip\MPASM Suite);
файл настроек линкера
name_mk_g.lkr (C:\Program Files\Microchip\MPASM Suite\LKR);
и в зависимости от предпочтений в работе выбираем шаблон:
name_mkTMPO.asm (C:\Program Files\Microchip\MPASM Suite\Template\Object)
или
name_mkTEMP.asm (C:\Program Files\Microchip\MPASM Suite\Template\Code).
А дальше уж свою прожку пишем.
:hunger:
Поправил названия файлов шаблонов...
Просклерозил однако чуток...
:oops:
Последний раз редактировалось BOB51 Ср июл 05, 2023 17:03:39, всего редактировалось 1 раз.

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

Ср июл 05, 2023 10:29:09

Понял, спасибо. LKR-ы есть у меня))

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

Пн июл 31, 2023 21:27:59

А таймеры после срабатывания (окончания счёта, переполнения, выставления флага прерывания) продолжают считать или нет? pic16f648 В документации не могу найти про этот момент.

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

Пн июл 31, 2023 22:10:34

yor писал(а):продолжают считать или нет?

Если не выключить, продолжают.

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

Вт авг 01, 2023 14:41:02

То есть надо в первых командах подпрограммы прерывания их останавливать, чтобы не утикали. Хотя, он своё дело сделал, всё равно перезаряжать. Или поправку вносить.

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

Вт авг 01, 2023 20:59:58

cnt -= COUNTER; //понятно?

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

Вт авг 01, 2023 21:01:41

Засисит от того таймера и его конфигурации, что в конкретной программе применяем.
8)

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

Вт авг 01, 2023 21:15:02

yor, в 16F628/648 можете запускать и останавливать timer1 (bit_0 TMR1ON) и timer2 (bit_2 TMR2ON). У timer0 нет такой возможности. Нaзовите одну причину для этого запроса? Просто убрать перерывание, a пусть timer0 работает. Перед новым использованием присвойте начальное значение и вкл. прерывание ON. В PIC18 есть возможность начать и остановить timer0 (T0CON0 EN).
Ответить