;Этот файл предстовляет собой базовый шаблон создания
;перемещаемого кода ассемблера для 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


 

 



                                                                                                                                              ДАЛЕЕ