Свежие обсуждения
Микроконтроллеры

Страницы памяти в PIC - как линковать автоматически?

Столкнулся с программированием PIC16F877 на ассемблере. Обнаружил такую проблему: ассемблер не генерирует автоматически код для корректных переходов call/goto между страницами программной памяти (когда надо менять значения в PCLATH). Каким образом можно решить эту проблему? Т.е. необходимо, чтобы при трансляции кода, ассемблер сначала вычислял адрес метки, а потом его подставлял в макрос, типа такого:
.org 0x0020H
...; какой то код
PCLATH_CHANGE metka1; макрос
goto metka1
...
.org 0x1000H
metka1:
...; какой то код
.org 0x1800H
...; какой то код
PCLATH_CHANGE metka1; макрос
goto metka1

Какой код можно написать в макрос PCLATH_CHANGE, чтоб корректно отрабатывался любой переход?

 

romanetz:
ассемблер сначала вычислял адрес метки
Причина нежелания ассэмблера корректно переходить между страницами, подробно объяснена в даташите.
Что бы подставить в PCLATH необходимое значение, можно использоваь конструкцию:
movlw high метка
movwf PCLATH

Также можно заметить, что данная проблема практически полностью устраняется продуманным расположением программного кода по страницам.