;Этот файл предстовляет собой базовый шаблон создания
;перемещаемого кода ассемблера для PIC18F1320.Cкопируйте
;этот файл в каталог вашего проекта и модифицируйте его в
;случае необходимости.Создайте проект,используя
;UPLINK в качестве языкового средства создания
;шестнадцатиричного файла.Добавьте в проект этот
;файл и файл 18F1320.LKR
;Архитектура PIC18Fxxx допускает конфигурирование двух
;прерываний.Данный шаблонный код написан в расчете на
;уровни приоритета прерываний.При этом бит IPEN
;регистра RCON должен быть установлен для разрешения
;использования уровней прерываний.Если бит IPEN
;будет оставлен в устанавливаемом для него по умолчанию
;нулевом состоянии то,только вектор прерывания по адресу
;0х008 будет использоваться,а переменные
;WREG_TEMP,BSR_TEMP и STATUS_TEMP не будут использоваться.
;Смотрите Руководство Пользователя для получения
;дополнительной информации по свойствам ассемблера и
;компановщика.
;Смотрите технические спецификации PIC18F1220/1320
;для получения дополнительной информации об
;архитектуре и наборе команд.
;Требуемые файлы: P18F1320.INC
; 18F1320.LKR
LIST P=18F1320, F=INHX32 ;директива определения процессора и формата файла
#INCLUDE <P18F1320.INC> ;определение процессорно-ориентированных переменных
;Биты конфигурации
;Директива CONFIG определяет данные конфигурирования
;внутри файла .ASM.Метки,следующие после директивы,
;определены в файле P18F1320.INC.Технические
;спецификации PIC18F1220/1320 разъесняют функции
;битов конфигурации.Измените нижеследующие строки так,
;чтобы они соответствовали вашему приложению.
CONFIG OSC = INTIO2,FSCM = OFF,PWRT = ON,WDT = OFF
;Определение переменных.
;Эти переменные необходимы только,если используются
;низкоприоритетные прерывания.
;Больше переменных может понадобиться для сохранения
;других специальных функциональных регистров,
;используемых в подпрограммах обслуживания прерываний.
UDATA
WREG_TEMP RES 1 ;Переменная в ОЗУ для сохранения контекста
STATUS_TEMP RES 1 ;Переменная в ОЗУ для сохранения контекста
BSR_TEMP RES 1 ;Переменная в ОЗУ для сохранения контекста
UDATA_ACS
EXAMPLE RES 1 ;Пример переменной в ОЗУ доступа
;Данные ЭСППЗУ
;Здесь определяются данные,подлежащие программированию в ЭСППЗУ
DATA_EEPROM CODE 0xf00000
DE "Test Data",0,1,2,3,4,5
;Вектор сброса.Этот код начнёт выполняться после сброса.
RESET_VECTOR CODE 0x0000
GOTO MAIN ;Переход на запуск основного фрагмента кода
;Векторы высокоприоритетного прерывания
;Этот вектор начнет выполняться после возникновения
;высокоприоритетного прерывания либо в случае
;возникновения прерывания,когда приоритеты прерываний не разрешены
HI_INT_VECTOR CODE 0x0008
BRA HIGH_INT ;Переход на подпрограмму обработки высокоприоритетного прерывания
;Вектор низкоприоритетного прерывания
;Этот код начнет выполняться после возникновения
;низкоприоритетного прерывания.
;Данный код может быть удалён,если низкоприоритетные прерывания не используются
LOW_INT_VECTOR CODE 0x0018
BRA LOW_INT ;Переход на подпрограмму обработки низкоприорететного прерывания
CODE
;Подпрограмма обработки высокоприорететного прерывания
;Здесь помещается программный код обработки
;высокоприорететного прерывания
HIGH_INT:
;Сюда переходит код обработки высокоприоритетного прерывания
RETFIE FAST
;Подпрограмма обработки низкоприоритетного прерывания
;Здесь помещается программный код обработки
;низкоприоритетного прерывания
;Данный код может быть удален,если низкоприоритетные
;прерывания не используются.
LOW_INT: MOVFF STATUS,STATUS_TEMP ;Сохранение регистра состояния
MOVFF WREG,WREG_TEMP ;Сохранение рабочего регистра
MOVFF BSR,BSR_TEMP ;Сохранение регистра BSR
;Сюда переходит код обработки низкоприоритетного прерывания
MOVFF BSR_TEMP,BSR ;Восстановление регистра BSR
MOVFF WREG_TEMP,WREG ;Восстановление рабочего регистра
MOVFF STATUS_TEMP,STATUS ;Восстановление регистра состояния
RETFIE ;Возврат в главную программу
MAIN:
;Сюда помещается код главной программы MAIN
;Конец программ
END
;Без коментариев
LIST P=18F1320, F=INHX32
#INCLUDE <P18F1320.INC>
CONFIG OSC = INTIO2,FSCM = OFF,PWRT = ON,WDT = OFF
UDATA
WREG_TEMP RES 1
STATUS_TEMP RES 1
BSR_TEMP RES 1
UDATA_ACS
EXAMPLE RES 1
DATA_EEPROM CODE 0xf00000
DE "Test Data",0,1,2,3,4,5
RESET_VECTOR CODE 0x0000
GOTO MAIN
HI_INT_VECTOR CODE 0x0008
BRA HIGH_INT
LOW_INT_VECTOR CODE 0x0018
BRA LOW_INT
CODE
HIGH_INT:
RETFIE FAST
LOW_INT: MOVFF STATUS,STATUS_TEMP
MOVFF WREG,WREG_TEMP
MOVFF BSR,BSR_TEMP
MOVFF BSR_TEMP,BSR
MOVFF WREG_TEMP,WREG
MOVFF STATUS_TEMP,STATUS
RETFIE
MAIN:
END
;Шаблон упрощeнный
LIST P=18F1320, F=INHX32
#INCLUDE <P18F1320.INC>
CONFIG OSC = INTIO2,FSCM = OFF,PWRT = ON,WDT = OFF
UDATA_ACS
RESET_VECTOR CODE 0x0000
GOTO MAIN
MAIN:
STOP: BRA STOP
END