Никаких инклюдов asm-исходников делать не надо.
Просто достаточно включить исходники в ветку Source проекта.
НО!
Все переменные нужно объявлять корректно.
То есть не как константы, а:
Далее нужно объявить глобальные переменные, которые будут видимы всеми остальными файлами
Соответственно в файлах, где эти переменные применяются должна быть строка
Тоже самое должно быть с метками вызовов.
Константы оформляются в виде inc-файлов.
После секции объявления переменных код должен начинаться с директивы code.
Итого код будет выглядеть так:
Файл первый:
Код: Выделить всё
list p=12F683
#include <p12F683.inc>
udata 0x20
www res 1
w_temp res 1
status_temp res 1
global www
extern Func
RST code 0x000
nop
goto start
ISR code 0x004
................
................
MAIN code
start
................
call Func
................
goto start
end
Файл второй:
Код: Выделить всё
#include <p12F683.inc>
#include <MyHeader.inc>
extern www
global Func
SUB code
Func
movf www, f
movlw mask
andwf www, f
movlw offset
addwf www, w
return
end
inc-файл проекта (помимо стандартного контроллерного):
inc-файлы объявляются инклюдами в каждом файле, где константы применяются.
Пользовательский inc-файл (в примере упомянут как MyHeader.inc во втором файле исходника) должен быть включен в проект в ветке Headers.
ЗЫ. Объявление переменных через директиву udata удобно тем, что в проекте РЕАЛЬНО УЧИТЫВАЕТСЯ объем использованного ОЗУ с контролем через скрипт линкера проекта. А так же можно увидеть текущий занятый объем ОЗУ в Wiew-Memory Usage Gauge в самом MPLAB IDE 8.
При объявлении переменных как адресных констант эти фичи недоступны.
Возможность загрузки адреса переменной как константы при косвенной адресации остается.