Страница 10 из 37
Re: Вопросы начинающих PIC ASM
Добавлено: Пн мар 13, 2017 23:33:14
Пока_без_кота
botchin писал(а):...AN526 Microchip...
Спасибо, мой уродец и рядом не валялся с этим шедевром))
PicNik писал(а):
Простите, но без местоположения меток ничего не понятно.
Re: Вопросы начинающих PIC ASM
Добавлено: Вт мар 14, 2017 03:19:04
КРАМ
Пока_без_кота писал(а):мой уродец и рядом не валялся с этим шедевром
Есть такая наука - ВЫСШАЯ АРИФМЕТИКА. Изучает теорию чисел. Алгоритм преобразования из аппноты микрочипа как раз оттуда. Поэтому в подобных вещах изобретать велосипед не стоит. Оная наука весьма сложна и не зазорно просто воспользоваться некоторыми ее плодами. А если есть интерес, то и попытаться ее освоить в некоем доступном (по образованию) объеме.
Re: Вопросы начинающих PIC ASM
Добавлено: Вт мар 14, 2017 06:55:25
xterro
Доброго времени суток, просветите, не совсем понимаю директиву BANKSEL. Как я понял, если написать, скажем banksel PORTB, то контроллер перейдёт в тот банк памяти, в котором находится этот регистр(сделает этот банк текущим), правильно? Но например у 628-го, PORTB отображается и на нулевой и на второй банк, в какой тогда перейдёт команда... или просто компилятор выкинет ошибку?
http://radiolaba.ru/wp-content/uploads/ ... amyati.jpg
Re: Вопросы начинающих PIC ASM
Добавлено: Вт мар 14, 2017 07:18:13
Zhuk72
Никакой ошибки не будет, а банк будет 0-й.
Re: Вопросы начинающих PIC ASM
Добавлено: Вт мар 14, 2017 09:26:10
xterro
Т.е в таких случаях, компилятор перейдёт на минимальный из двух банк?
Re: Вопросы начинающих PIC ASM
Добавлено: Вт мар 14, 2017 09:37:56
abc
Не минимальный, а основной.
У PIC-ов основной банк - нулевой.
Re: Вопросы начинающих PIC ASM
Добавлено: Вт мар 14, 2017 11:12:40
xterro
Спасибо

Re: Вопросы начинающих PIC ASM
Добавлено: Чт мар 23, 2017 08:00:19
Tigozawr
Люди, объясниет мне, почему перебор не работает (начальный адрес в переменной точно тот, что нужно):
START:
MOVLW B'00000000'
TRIS 0x06
GOTO CODESTART
RETLW 0x07
RETLW 0x0A
CODESTART:
variable a = 0x06
LOOP:
CALL a
MOVWF 0x06
a = a + 1
GOTO LOOP
Переменная a не инкриментируется почему-то

Re: Вопросы начинающих PIC ASM
Добавлено: Чт мар 23, 2017 08:03:26
BOB51
Это че за "гибрид" ассемблера с "сампридумал"?

Re: Вопросы начинающих PIC ASM
Добавлено: Чт мар 23, 2017 08:09:34
Tigozawr
Вроде, не гибрид. Я делал все по мануалу в MPLAB X, так что все претензии к ним

. Директива varible там есть и, вроде, работает, но в этом случае переменная почему-то не хточет изменять значение

Re: Вопросы начинающих PIC ASM
Добавлено: Чт мар 23, 2017 08:23:44
Zhuk72
Какой пик?
Гибрид, причем неудачный.
movwf 0x06 перестает содержимое аккумулятора в переменную (регистр) по указанному адресу.
А выше вы объявляете переменную и назначаете ей значение 6. Не стыкуется одно с другим, не говоря уже об адресации внутри пика. Адрес и содержимое как бы разные вещи.
Re: Вопросы начинающих PIC ASM
Добавлено: Чт мар 23, 2017 08:47:03
BOB51
Есть понятие "макрос" и там некоторые примеры авторазметки/автозаполнения.
НО...
Макросы перед подстановкой в код обрабатываются препроцессором компилятора.
И всего-то выполняют роль подстановок сгенерированного фрагмента кода в нужное место программы, а не непосредственного исполнения - участок кода будет исполняться АЛУ(ядром) МК.
Посему - любое изменение делать должен исключительно МК, опираясь на имеющиеся ресурсы.
Ежли есть изменяемая константа - то только в регистре(ЕЕПРОМ) и/или акумуляторе.
А далее используя имеющуюся систему команд и ресурсы ядра проводим с той переменной необходимые действия ПОКОМАНДНО.
Это ассемблер, а не чего более "высокоуровневого" (к примеру СИ).
Отсюда такой перл
"CODESTART:
variable a = 0x06
LOOP:
CALL a
MOVWF 0x06
a = a + 1
GOTO LOOP"
вообще весьма сомнительный: "а" (в CALL a) есть адрес подпрограммы, котроая выполняет "= a + 1"
а затем без усякого return принудительно посылается на GOTO LOOP...
Это всего-то вместо использования какого-нибудь регистра ОЗУ в текущем банке с командой INCF Rn,f даже без использования W
...

Re: Вопросы начинающих PIC ASM
Добавлено: Чт мар 23, 2017 09:26:10
Tigozawr
PIC12F509. А как тогда мее реалтзовать на нем перебор информации, занесенной при помощи RETLW? Мне, просто, нужно хранить больше констант, чем влезет в файловые регистры. И CALL a работает как раз корректно, вызывая именно первый RETLW. Оно, просто, не хочет выполнять a = a + 1, которое работает, если делать не цикл, а последовательно писать
CALL a
MOVWF 0x06
a = a + 1
CALL a
MOVWF 0x06
a = a + 1
...
Re: Вопросы начинающих PIC ASM
Добавлено: Чт мар 23, 2017 09:32:49
BOB51
У PIC12F509-го аж 48 регистров РОН...
Неуж-то мало?
Тогда ищем кристалл с ЕЕПРОМ - там возможно хранение изменяемых величин.

Касательно возврата по таблице...
Там используется особенность ПИКовых подставлять значения в счетчик команд.
Табличка снабжается заголовочным фрагментом к которому и обращается вызов CALL, а уже сам заголовок выполняет функционал выборки нужного RETLW.
Принцип примерно такой:
Код: Выделить всё
shaps
movf Rn,w
addwf PCL,f
table
dt ...............
только там еще кучка замечаний и относительно корректного размещения самой таблицы и относительно диапазона (ибо переполнение PCL не влияет на содержимое PCLATH содержимое коего используется при любой модификации PCL)....

Re: Вопросы начинающих PIC ASM
Добавлено: Чт мар 23, 2017 09:45:12
Zhuk72
В конце листинга пишете, скажем, org 0x300, после чего через dt перечисляете константы.
Затем читаете раздел 4.7 даташита.
Re: Вопросы начинающих PIC ASM
Добавлено: Вс май 07, 2017 16:40:43
Dimas_D
Здравствуйте!!! Подскажите почему при попытке чтения PIC16F73, не отображается окно EEPROM, в то время как у PIC16F628a все нормально отображается. Программатор Pickit3.
Re: Вопросы начинающих PIC ASM
Добавлено: Вс май 07, 2017 19:12:37
Albert_V
Dimas_D писал(а):почему при попытке чтения PIC16F73, не отображается окно EEPROM
А с чего вы взяли что у PIC16F73 есть EEPROM?
По крайней мере, Microchip об этом не знает.
Re: Вопросы начинающих PIC ASM
Добавлено: Вс май 07, 2017 19:24:59
Пока_без_кота
Открываем даташит на этот Пик. Ищем хоть слово про EEPROM. Не находим, успокаиваемся и закрываем.
П.С. Вкладка была долго открыта, опередили))
Re: Вопросы начинающих PIC ASM
Добавлено: Пн май 08, 2017 00:26:00
Dimas_D
Мне просто показалось Eeprom и " Память данных" это одно и тоже. А как же тогда эту память посмотреть?
Re: Вопросы начинающих PIC ASM
Добавлено: Пн май 08, 2017 00:35:22
Albert_V
Никак.
Program Memory вы не сможете прочитать, поскольку установлен бит защиты.