Проблема при переходе с pic16 на pic18

Поклонники продукции Microchip Technology Inc тусуются тут.
Аватара пользователя
Родэрик
Нашел транзистор. Понюхал.
Сообщения: 162
Зарегистрирован: Чт ноя 26, 2015 23:22:35
Откуда: не с Уфы
Контактная информация:

Re: Проблема при переходе с pic16 на pic18

Сообщение Родэрик »

[uquote="Hailmary",url="/forum/viewtopic.php?p=4376032#p4376032"]........Выбрал второй, внутри таблицы, т. к. он компактнее.[/uquote] Разве? убирай его из таблицы и везде перед (CALL TABLE) вместо (MOVF INDx,W) пиши (RLNCF INDx,W)

Про PCLATH тебя не зря предупреждают. До (ADDWF PCL,F) надо бы подгружать старший байт:

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

    MOVLW    HIGH TABLE
    MOVWF    PCLATH
Есть ещё некоторые нюансы, на которые тебе стоило бы обратить внимание:
Во-первых, не надо "прописывать" спецрегистры (типа: BSR EQU 0xFE0 .......), всё это есть в файле"18f4520.inc", и подключив его, ты таким образом одной строчкой разместил в этом месте всё его содержимое. Этот принцип важно понять и использовать. К примеру ты можешь все свои регистры, флаги, константы и прочие определения оформить в отдельном файле и просто подключить его в каком-то главном (типа main.asm), который станет картой всего твоего проекта. Рано или поздно вертикальный скроллинг всё равно заставит прийти к этому, но лучше как можно раньше начать привыкать к более грамотному оформлению проекта. Тогда будет гораздо легче/быстрее ориентироваться/перемещаться.

во-вторых, слишком много подробных комментов. Зачем описывать действия команд, если знаешь их наизусть.

Вместо нулей, единичек, двоек....... пиши имена W, F, Z ........

Разберись с необходимостью "очистки" флага Z (как и C/DC) перед той или иной арифметической операцией. Проработай этот момент в симуляторе.

Ну и стоило бы наверное изучить 18-е команды, пройтись по строчкам, можно много чего оптимизировать. Да и так лучше формируется/закрепляется навык, нежели когда просто получаешь готовое решение.


в 18-х кстати можно и через прямое чтение flash делать доступ к массиву.
саму таблицу в этом случае можно написать так:

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

TABLE_7IND
    DB    b'00000011',b'10011111',b'00100101',b'00001101',b'10011001'
    DB    b'01001001',b'01000001',b'00011111',b'00000001',b'00001001'
В этом случае отсутствует команда возврата (retlw) у каждого байта и соответственно массив сжимается в два раза.

А вот так можно оформить доступ:

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

;;;;
MOVF	INDx,W
CALL	L.7IND
;
;
;
L.7IND
ADDLW	LOW TABLE_7IND
MOVWF	TBLPTRL
;
MOVLW	HIGH TABLE_7IND
MOVWF	TBLPTRH
TBLRD*
MOVF	TABLAT,W 
RETURN
;;;;
Реклама
Hailmary
Первый раз сказал Мяу!
Сообщения: 35
Зарегистрирован: Ср янв 18, 2023 13:01:27

Re: Проблема при переходе с pic16 на pic18

Сообщение Hailmary »

[uquote="Родэрик",url="/forum/viewtopic.php?p=4376441#p4376441"]Зачем описывать действия команд, если знаешь их наизусть.

...нежели когда просто получаешь готовое решение.[/uquote]
Я всё подробно описываю, потомучто только начал изучать PIC и по этой же причине я беру готовые проекты и изучаю, как они работают. С помощью таких подробных комментариев я надеюсь разобраться в пиках, так что благодарю за помощь! Буду обдумывать полученную информацию.
Реклама
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15571
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Проблема при переходе с pic16 на pic18

Сообщение BOB51 »

Есть еще гибрид 18й и "стандартной среднемладшей" - "улучшенные среднемладшие" (энхансед).
8)
Шпоры по системам команд:
шаблон_команд_PIC10_12_16.pdf
(648.72 КБ) 90 скачиваний
шаблон_команд_PIC10_12_16_em.pdf
(786.17 КБ) 95 скачиваний
шпора_PIC18_v2.pdf
(55.09 КБ) 84 скачивания
для 18х я на практике не проверял - чистая "теория".
:roll:
Ответить

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