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

Поклонники продукции Microchip Technology Inc тусуются тут.
Аватара пользователя
valentinovich
Держит паяльник хвостом
Сообщения: 999
Зарегистрирован: Ср окт 04, 2017 20:47:40

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

Сообщение valentinovich »

asvhmao писал(а):команда movfw это тоже самое что и movf или есть отличия?
С точки зрения функции им выполняемой, отличий не должно быть. Но всё зависит от ассемблера и компилятора вами применяемого. Т.е. как он сиё воспринимает читайте в документации на применяемый вами инструментарий программирования.
(Например какой- нибудь MPLAB ххх - см. таблицу стандартных команд на данный МК и макросы, понимаемые используемым компилятором).
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15553
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

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

Сообщение BOB51 »

[uquote="asvhmao",url="/forum/viewtopic.php?p=4437238#p4437238"]Просматриваю разные тексты, иногда попадается команда movfw это тоже самое что и movf или есть отличия?...[/uquote]
Есть система команд "среднемладших" (
шаблон_команд_PIC10_12_16.pdf
(648.72 КБ) 69 скачиваний
) и есть дополнительные "удобные макросы" от компилятора в 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 КБ) 78 скачиваний
Аватара пользователя
asvhmao
Друг Кота
Сообщения: 3716
Зарегистрирован: Чт мар 07, 2013 20:39:17
Откуда: Краснодар

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

Сообщение asvhmao »

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

Изображение
„Выживает не самый сильный и не самый умный, а тот, кто лучше всех приспосабливается к изменениям.“
— Чарлз Дарвин
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15553
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

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

Сообщение BOB51 »

У мплаба свой симулятор и весьма точный.
Там же можно и контроль стека и диаграммы смотреть.
8)
Аватара пользователя
asvhmao
Друг Кота
Сообщения: 3716
Зарегистрирован: Чт мар 07, 2013 20:39:17
Откуда: Краснодар

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

Сообщение asvhmao »

Не привык просто ещё. Читал, но уже забыл :)) со временем набью руку, особенно если что-то точное надо будет делать. :beer:
„Выживает не самый сильный и не самый умный, а тот, кто лучше всех приспосабливается к изменениям.“
— Чарлз Дарвин
yor
Говорящий с текстолитом
Сообщения: 1677
Зарегистрирован: Сб янв 19, 2008 23:57:27

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

Сообщение yor »

Понятно, что обращаясь в любом банке по старшим адресам, попадаешь в нулевой. Всего 16 ячеек. А можно из любого же банка обращаться по адресам нулевого, то есть 70-7Fh?
Изображение
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25162
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

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

Сообщение КРАМ »

[uquote="yor",url="/forum/viewtopic.php?p=4441139#p4441139"]Понятно, что обращаясь в любом банке по старшим адресам, попадаешь в нулевой.[/uquote]
В системе команд этой платформы есть абсолютная адресация. То есть в самой команде содержится (может содержаться) не только код операции, но и АДРЕС ОПЕРАНДА. При длине команды 14 бит на адрес операнда остается только 7 бит. Таким образом можно адресовать только 128 регистров ОЗУ. Чтобы увеличить это количество, в качестве старших разрядов используется два бита РЕГИСТРА СОСТОЯНИЙ процессора (STATUS) - RP0 и RP1. Эти биты удлинят адрес и реальное обращение будет к ПОЛНОМУ адресу.
При обращении к старшим 16 регистрам 7-битного адреса, расширение адреса маскируется (выключается). Поэтому в каждом банке эти 16 регистров фактически повторяются.
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15553
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

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

Сообщение BOB51 »

[uquote="yor",url="/forum/viewtopic.php?p=4441139#p4441139"]... можно из любого же банка обращаться по адресам нулевого, то есть 70-7Fh?
...[/uquote]
Можно.
Но придется работать с компилятором в режиме относительной адресации.
Регистры, размещенные в области обозначенной в документации как "доступ к 70-7F"(accesses 70-7F) объявляется как
секция UDATA_SHR.
У некоторых "малолапых" это единственный вариант для работы с ОЗУ (те же pic12f629/675 к примеру).
Для данного случая выбираем шаблон проекта из
" C:\Program Files\Microchip\MPASM Suite\Template\Object "
к примеру файлики шаблонов
12F629TMPO.asm
16F628ATMPO.asm
8)
yor
Говорящий с текстолитом
Сообщения: 1677
Зарегистрирован: Сб янв 19, 2008 23:57:27

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

Сообщение yor »

А что там в этих шаблонах? У меня не MPASM. Просто

Код: Выделить всё

Name UDATA_SHR address
не пойдёт? И потом просто из любого банка обращаться по именам?
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25162
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

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

Сообщение КРАМ »

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

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

Сообщение BOB51 »

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

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

Сообщение КРАМ »

[uquote="BOB51",url="/forum/viewtopic.php?p=4441297#p4441297"]Взять тот же pic12f629 - там второй банк ОЗУ полное отображение на первом.[/uquote]
Потому что там память маленькая.
Я же говорю конкретно для ТС с его случаем. Дай Бог ему освоить этот частный случай.
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15553
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

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

Сообщение BOB51 »

На то существуют файлы линкера - особо не углублялся, но поднятый вопрос заинтересовал "на посмотреть"...
К примеру взял
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 раз.
yor
Говорящий с текстолитом
Сообщения: 1677
Зарегистрирован: Сб янв 19, 2008 23:57:27

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

Сообщение yor »

Понял, спасибо. LKR-ы есть у меня))
yor
Говорящий с текстолитом
Сообщения: 1677
Зарегистрирован: Сб янв 19, 2008 23:57:27

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

Сообщение yor »

А таймеры после срабатывания (окончания счёта, переполнения, выставления флага прерывания) продолжают считать или нет? pic16f648 В документации не могу найти про этот момент.
Аватара пользователя
Dmitry Dubrovenko
Поставщик валерьянки для Кота
Сообщения: 2349
Зарегистрирован: Вс янв 09, 2011 16:51:39
Откуда: Санкт-Ленинград
Контактная информация:

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

Сообщение Dmitry Dubrovenko »

yor писал(а):продолжают считать или нет?
Если не выключить, продолжают.
ICQ нет, и, в ближайшее время, не будет.
yor
Говорящий с текстолитом
Сообщения: 1677
Зарегистрирован: Сб янв 19, 2008 23:57:27

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

Сообщение yor »

То есть надо в первых командах подпрограммы прерывания их останавливать, чтобы не утикали. Хотя, он своё дело сделал, всё равно перезаряжать. Или поправку вносить.
OKF
Это не хвост, это антенна
Сообщения: 1385
Зарегистрирован: Вт июн 07, 2011 08:03:18

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

Сообщение OKF »

cnt -= COUNTER; //понятно?
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15553
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

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

Сообщение BOB51 »

Засисит от того таймера и его конфигурации, что в конкретной программе применяем.
8)
veso74
Поставщик валерьянки для Кота
Сообщения: 1905
Зарегистрирован: Сб май 05, 2012 20:24:52
Откуда: KN34PC, Болгария
Контактная информация:

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

Сообщение veso74 »

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

Вернуться в «PIC»