Страница 17 из 25
Re: MPLAB в вопросах и ответах
Добавлено: Ср фев 01, 2017 06:44:28
botchin
MPSM Assembler help писал(а):#v(expr) - Return the integer value of expr. Typically, used to create unique variable names with common prefixes or suffixes. Cannot be used in conditional assembly directives (e.g. ifdef, while).
Особое внимание на ето -
Cannot be used in conditional assembly directives (e.g. ifdef, while).
Да и (лично) я не пойму - что за любов к макросам. Сколько раза въ исползуете етот макрос в коде? И неужели он повъсить читаемость кода? Не верю!
Re: MPLAB в вопросах и ответах
Добавлено: Ср фев 01, 2017 08:03:00
Пока_без_кота
Нет, этот макрос по сути будет использован лишь 1 раз. Но все они (макросы) в куче приводят вид обработчика перехода на нужную менюшку/подменюшку к довольно компактному и читабельному (кол. строчек по вертикали) коду:
Спойлер
Код: Выделить всё
include MicroMenu.h
;===========================
MicroMenu code 0x100-3
Main_Menu_Table
movfw index_menu
clrf PCLATH
bsf PCLATH,0
addwf PCL
goto Zastavka
goto_Punkt_Menu
Menu_Switch
movfw index_menu
clrf PCLATH
bsf PCLATH,0
addwf PCL
nop
goto_Menu_Table
goto_Menu_Submenu ; Супермакрос, создает цепочку макросов, в количестве пунктов меню
;===========================
Num_of_Submenu_Table ; Возвращаем количество пунктов в нужном подменю
movfw index_menu
clrf PCLATH
bsf PCLATH,0
addwf PCL
retlw 0
retlw_num_of_submenu_punkts
;===========================
Action_Switch ; Выполним действие, на котором находится курсор
movfw index_menu ; Берем выбраный пункт меню
clrf PCLATH
bsf PCLATH,0
addwf PCL ; Переходим на нужную ветку
nop
goto_Menu_Table_action
goto_Menu_Submenu_action ; Супермакрос, создает цепочку макросов, в количестве веток выполняемых действий
Re: MPLAB в вопросах и ответах
Добавлено: Ср фев 01, 2017 08:13:49
botchin
Пока_без_кота писал(а):лишь 1 раз.
!!!!!!?????
Как я делаю
Код: Выделить всё
main_loop
call Fr_Main_Ch ; въбор режима и ожидание кнопки избор режим на работа и чакане за бутон
btfsc Fx_Key
call Fx_Work ; Frequency
btfsc FxP_Key
call Fx_Work ; Freq + Preskaler
btfsc Cx_Key
call Cx_Work ; Cx Meter
btfsc Lx_Key
call Lx_Work ; Lx Meter
btfsc Tx_Key
call Tx_Work ; Tx Meter
goto main_loop
Сравните с то что въ предлагаете.
Re: MPLAB в вопросах и ответах
Добавлено: Ср фев 01, 2017 13:53:57
Пока_без_кота
botchin писал(а):...Сравните с то что въ предлагаете.
Это немного не то. У Вас простой обработчик нажатия кнопки, вызывает соответствующую процедуру. И судя по всему, это простое одноуровневое меню, которе в зависимости от нажатой кнопки совершает 1 соответсвующее действие.
У меня все немного сложнее. Есть 4 кнопки - крестовина, нажимаем любую - вызывается меню (курсор на 1 пункте). Нажимаем вниз-вверх - ходим по меню, наживаем вправо - входим в соответствующее подменю, там тоже гуляем вниз-вверх, еще раз нажимаем вправо и выполняем действие, на котором находиться курсор. Нажимаем влево - выходим в главное меню (курсор на пункте меню из которого только что вышли), еще раз влево - выход из меню. И это все (количество пунктов меню и каждого подменю) настраивается с помощью нескольких констант в заголовочном файле. И я сделал так, что все работает как надо, просто вот вылез интересный глюк препроцессора, который я пока поборол довольно банально, написав следующее:
Спойлер
Код: Выделить всё
NUM_OF_SUBMENU_PUNKTS_1 equ NUM_OF_SUBMENU_1_PUNKTS
NUM_OF_SUBMENU_PUNKTS_2 equ NUM_OF_SUBMENU_2_PUNKTS
NUM_OF_SUBMENU_PUNKTS_3 equ NUM_OF_SUBMENU_3_PUNKTS
NUM_OF_SUBMENU_PUNKTS_4 equ NUM_OF_SUBMENU_4_PUNKTS
NUM_OF_SUBMENU_PUNKTS_5 equ NUM_OF_SUBMENU_5_PUNKTS
NUM_OF_SUBMENU_PUNKTS_6 equ NUM_OF_SUBMENU_6_PUNKTS
NUM_OF_SUBMENU_PUNKTS_7 equ NUM_OF_SUBMENU_7_PUNKTS
NUM_OF_SUBMENU_PUNKTS_8 equ NUM_OF_SUBMENU_8_PUNKTS
Re: MPLAB в вопросах и ответах
Добавлено: Ср фев 01, 2017 15:13:47
botchin
Ето у меня 2-ой уровень (правда отсюда к первому возврата нет). За етим следуют до 2 уровня - вход и возврат, уменьшение/увеличение, память и т.д. Давно писал не помню уже все ....
Пока_без_кота писал(а):поборол довольно банально, написав следующее:
Пока_без_кота писал(а):довольно компактному и читабельному (кол. строчек по вертикали) коду:
У вас сейчась как-то так:
Код: Выделить всё
NUM_OF_SUBMENU_PUNKTS_1 equ NUM_OF_SUBMENU_1_PUNKTS
NUM_OF_SUBMENU_PUNKTS_2 equ NUM_OF_SUBMENU_2_PUNKTS
NUM_OF_SUBMENU_PUNKTS_3 equ NUM_OF_SUBMENU_3_PUNKTS
NUM_OF_SUBMENU_PUNKTS_4 equ NUM_OF_SUBMENU_4_PUNKTS
NUM_OF_SUBMENU_PUNKTS_5 equ NUM_OF_SUBMENU_5_PUNKTS
NUM_OF_SUBMENU_PUNKTS_6 equ NUM_OF_SUBMENU_6_PUNKTS
NUM_OF_SUBMENU_PUNKTS_7 equ NUM_OF_SUBMENU_7_PUNKTS
NUM_OF_SUBMENU_PUNKTS_8 equ NUM_OF_SUBMENU_8_PUNKTS
retlw_num_of_submenu_punkts macro ; Макрос, автоматически создаст таблицу возвратов количества пунктов в нужном подменю
local a=1
while a<NUM_OF_MAIN_MENU_PUNKTS+1
retlw NUM_OF_SUBMENU_#v(a)_PUNKTS
a+=1
endw
endm
заместо:
Код: Выделить всё
154 3403 RETLW 0x3 36: retlw_num_of_submenu_punkts
155 3403 RETLW 0x3 ;точка для обработки ...... .....
156 3403 RETLW 0x3 ; или там что-то еще
157 3403 RETLW 0x3
158 3403 RETLW 0x3
159 3403 RETLW 0x3 ;NUM_OF_SUBMENU_8_PUNKTS
15A 3403 RETLW 0x3 ;или хотя так
15B 3403 RETLW 0x3
с соответсвующие коментариев.
Извини, но для меня более приглядно второе представление. Напоминаете моего коллега расспишавнии умножение на 1.2 на 22 страниц кода.
Вам виднее. Если вам так нравится - делайте так.
Re: MPLAB в вопросах и ответах
Добавлено: Сб фев 04, 2017 08:14:59
КРАМ
Пока_без_кота писал(а):
Это немного не то.
А зачем писать на АСМе, если Вас волнует читабельность в стиле Си?
Поддержу болгарского коллегу на предмет "кому нравится арбуз, а кому свиной хрящик".
Человеку пишущему, в том числе, на АСМе нет необходимости громоздить макросные синтаксические конструкции имеющие целью скрыть собственно АСМ аббревиатуры, заменив их на абстракции. К тому же эти абстракции ни разу не сокращают сам листинг.
ПишИте подобные меню на Си и будет не только искомая читабельность, но и НАСТОЯЩЕЕ абстрагирование кода с сокращением текста до уровня "беллетристики для дилетанта".
Re: MPLAB в вопросах и ответах
Добавлено: Сб фев 04, 2017 09:07:37
otest
Как импортировать текст из ДШ и ANов в МПЛАБ для компиляции ?
Например:
003F 00152 Freq10Kto50
003F 0070 00153 clrf InputCounthi ;0 --> InputCount
0040 006F 00154 clrf InputCountlo ; /
0041 0C17 00155 movlw B’00010111’ ;start TMR0 with internal
0042 0002 00156 option ; clk. = 1uS
0043 0C0F 00157 movlw B’00001111’ ;set RA0 as a input
0044 0005 00158 tris PORTA ; /
0045 0705 00159 btfss _ra0 ;see if level low
0046 0A49 00160 goto FirstHigh ;yes then check leading edge
Re: MPLAB в вопросах и ответах
Добавлено: Вс фев 05, 2017 08:04:52
shindax
otest писал(а):Как импортировать текст из ДШ и ANов в МПЛАБ для компиляции ?...
Так почти всегда, к AN прилагаются файлы с исходниками.
Re: MPLAB в вопросах и ответах
Добавлено: Вс фев 05, 2017 08:58:10
otest
Ну и как их скормить MPLAB ???
Re: MPLAB в вопросах и ответах
Добавлено: Вс фев 05, 2017 09:06:44
КРАМ
Так же, как и свои, создав проект и включив в этот проект файлы с исходниками примеров, либо просто скопипастить из этих файлов фрагменты кода.
Re: MPLAB в вопросах и ответах
Добавлено: Вс фев 05, 2017 11:22:17
otest
КРАМ
Попробуй это сделать и выложи скрин.
Re: MPLAB в вопросах и ответах
Добавлено: Вс фев 05, 2017 11:31:03
Albert_V
Как вариант - вначале скопируйте текст в MS Word и отредактируйте.
Выделение вертикальных блоков - нажатый Alt + "левая кнопка мыши".
Re: MPLAB в вопросах и ответах
Добавлено: Вс фев 05, 2017 11:36:00
КРАМ
otest писал(а):КРАМ
Попробуй это сделать и выложи скрин.
Что "это"?
Вы поразительно невнятно выражаетесь...
Вместо предложений что либо сделать, изложите свои проблемы конкретно.
Я копирую код из референсных исходников и на АСМе и на Си. Что Вы желаете увидеть?

Re: MPLAB в вопросах и ответах
Добавлено: Вс фев 05, 2017 13:06:18
otest
Выражусь по другому.
Как вот от этого избавиться кроме ручной очистки.
Или как это импортировать (вставить) в МПЛАБ для компиляции.
Если ни как, то зачем такие тексты в АНах печатают ?
Re: MPLAB в вопросах и ответах
Добавлено: Вс фев 05, 2017 13:59:13
Аlex
Уже ответили выше - как вариант, вставить в Word и с зажатым Alt удалить ненужное.
Re: MPLAB в вопросах и ответах
Добавлено: Вс фев 05, 2017 15:56:46
КРАМ
otest писал(а):зачем такие тексты в АНах печатают ?
Затем, чтобы их ЧИТАЛИ. А копипастить если и нужно, то из прилагаемых к аппнотам
архивов с референсными кодами.
Можно и из аппноты набрать текст РУЧКАМИ - не велик труд. Заодно и разобраться в том, как он работает.
К слову, в аппнотах на АСМе больших текстов не бывает. Максимум на три десятка строк.
То, что Вы тут показали - это листинг дизасма, то есть и текст и собственно адреса с кодами.
Для вставки нужны только команды. Адрес и код удаляется.
Re: MPLAB в вопросах и ответах
Добавлено: Вс фев 05, 2017 16:09:15
otest
Я понимаю что нужно удалить и куда вставить. Не понимаю зачем их в таком виде печатают, если МПЛАБ их не ест.
А читать код можно чистый и с коментариями. Цифры для этого не нужны.
Re: MPLAB в вопросах и ответах
Добавлено: Вс фев 05, 2017 16:16:24
КРАМ
Листинги в аппнотах публикуют ПО РАЗНОМУ. Это зависит от АВТОРА аппноты. В отличии от даташитов и мануалов, аппноты являются техническими статьями конкретных авторов, а не нормативными документами.
Кто то из этих авторов предпочитает публиковать дизасм, а кто то исходник. Не вижу в этом никаких проблем.
К слову, в референсных мануалах неоднократно встречал такое форматирование исходников в пдф, которое при копировании текста требует еще больше усилий, нежели удаление лишнего из дизасма.
Re: MPLAB в вопросах и ответах
Добавлено: Вт мар 14, 2017 12:32:54
uldemir
Я в непонятках, может, кто по-быстрому подскажет в чем проблема. Захотел скомпилировать код столетней давности. Поставил свеженький MPLAB X и пытаюсь... Вот компилятору не понравилась такая конструкция, которую я ранее под gpasm-ом использовал, как предохранитель если таблица переползёт границу страницы:
Код: Выделить всё
statesel:
goto init_td
goto startconvert
goto waitconvert
goto read_td
goto relax
goto relax
goto tnext
goto t_error
IF HIGH(statesel)-HIGH($-1) ; <-- ошибка в этой строке.
ERROR "Table statesel over page edge"
ENDIF
Ранее, оно работало правильно, а теперь мплаб выдаёт такое сообщение об ошибке:
Код: Выделить всё
Error[151] C:\USERS\....\NEWPIC_8B_GENERAL.ASM 273 : Operand contains unresolvable labels or is too complex
case sensitivity в настройках компилятора я выключаю.
Re: MPLAB в вопросах и ответах
Добавлено: Вт мар 14, 2017 15:53:35
otest
Укороти путь и имя.