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

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

Чт фев 23, 2023 02:17:27

........Выбрал второй, внутри таблицы, т. к. он компактнее.
Разве? убирай его из таблицы и везде перед (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
;;;;

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

Чт фев 23, 2023 10:28:02

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

...нежели когда просто получаешь готовое решение.

Я всё подробно описываю, потомучто только начал изучать PIC и по этой же причине я беру готовые проекты и изучаю, как они работают. С помощью таких подробных комментариев я надеюсь разобраться в пиках, так что благодарю за помощь! Буду обдумывать полученную информацию.

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

Чт фев 23, 2023 11:41:39

Есть еще гибрид 18й и "стандартной среднемладшей" - "улучшенные среднемладшие" (энхансед).
8)
Шпоры по системам команд:
шаблон_команд_PIC10_12_16.pdf
(648.72 KiB) Скачиваний: 60

шаблон_команд_PIC10_12_16_em.pdf
(786.17 KiB) Скачиваний: 59

шпора_PIC18_v2.pdf
(55.09 KiB) Скачиваний: 47

для 18х я на практике не проверял - чистая "теория".
:roll:
Ответить