Программа с самого начала:
INTOSCIO
list p=16F636 ; list directive to define processor (список директив для определения процессора)
#include <p16F636.inc> ; processor specific variable definitions (определение установок характерных тольком для данного процессора)
__CONFIG _WUREN_OFF & _WDT_OFF & _BOD_OFF & _FCMEN_OFF & _IESO_OFF & _CPD_OFF & _MCLRE_ON & _PWRTE_OFF & _WDT_OFF & _INTRC_OSC_CLKOUT
;_WUREN_ON бит, разрешающий пробуждение из спящего режима повходу reset
;_WDT_OFF выключение "собачьего" таймера
;_BOD_OFF функция контроля питания (при хреновом питании сбрасывает)
;_FCMEN_OFF отключение функции слежения за внешним тактовым генератором
;_IESO_OFF выключение быстрого старта (работает при использовании кварцевых генераторов)
;_CPD_OFF cod protection off
;_MCLRE_ON активация возможности сброса
;_PWRTE_ON разрешение включения питания таймера
;_WDT_ON включение Watchdog Timer
;_INTRC_OSC_NOCLKOUT внутренний генератор без вывода данных наружу
;_INTRC_OSC_CLKOUT - внутр. ген. с выводом на RA4.
;_EXTRC_OSC_CLKOUT - CLKOUT function on RA4/T1G/OSC2/CLKOUT, RC on RA5/T1CKI/OSC1/CLKIN
;******************* VARIABLE DEFINITIONS *****************************
BANK0 equ 0x20 ;опрделение начала банка памяти 0
BANK0_END equ 0x7F ;опрделение конца банка памяти 0
BANK1 equ 0xA0 ;опрделение начала банка памяти 1
BANK1_END equ 0xBF ;опрделение конца банка памяти 1
CBLOCK BANK0
; Моя прога
; Ввод переменных
status_temp
hall ;переменная для определения состояния датчика холла. состояние считывается с датчика холла с RC5
w_temp ;переменная для сохранения аккумулятора
counter ;счетчик количества промежутков по 0,25сек
state ;регистр определяющий состояние процессора в данный момент.
endc
;****************** МАКРОСЫ *******************************************
bank_0 macro ; макрос для перехода в Bank0
bcf STATUS,RP0
endm
bank_1 macro ; макрос для перехода в Bank1
bsf STATUS,RP0
endm
ORG 0x000
bsf STATUS,RP0
movlw b'00000011'
movwf OSCCON
goto init
;______________________________________________________________
;--------------------Вектор прерываний-------------------------
INT_VECTOR
;
exit_int:
swapf status_temp,w ; retrieve copy of STATUS register
movwf STATUS ; restore pre-isr STATUS register contents
swapf w_temp,f
swapf w_temp,w ; restore pre-isr W register contents
retfie ; return from interrupt, enable interrupts
;______________________________________________________________
;-----------------------Настройка------------------------------
init
BCF STATUS,RP0
clrf CMCON1
clrf PIR1
clrf STATUS;
bsf STATUS,RP0
movlw b'00010010'
movwf OPTION_REG
movlw b'11100000'
movwf INTCON
movlw b'00011000'
movwf PIE1
movlw b'00110000'
movwf WPUDA
movlw b'00000000'
movwf TRISA
movlw b'00001011'
movwf TRISC
movlw b'00000011'
movwf OSCCON
movlw b'00100000'
movwf WDA
bcf STATUS,RP0
movlw b'00000100'
movwf CMCON0 ;+
clrf status_temp
clrf hall ;переменная для определения состояния датчика холла. состояние считывается с датчика холла с RC5
clrf w_temp ;переменная для сохранения аккумулятора
movlw 0x28 ;10 сек в аккум
MOVWF counter ;ЗАПоминание нужного значения счетчика(на паузу).
clrf state
sost
bsf PORTA,5
bcf PORTA,5
GOTO sost
Лишнее удалил и почистил (почти все коментарии и вектор прерываний)
Если кто ошибку заметит - подскажите - буду признателен.