Здрасьте всем!
у меня проблема- если в ПП прерывания от приемника читать данные из ЕЕРRОМ и последовательно отправлять их комп тогда устройство перестает работать вообще, подскажите в чем проблема чего я не догоняю?
org 0
goto Start
;=======================================================================================================
org 4 ; Точка входа в прерывание.
movwf pr_w ; Сохранение содержимого
movf Status,W ; регистров W и Status на
movwf pr_stat ; момент ухода в прерывание.
bcf Status,RP0 ; Переход в 0-й банк.
movf RCREG,W ; Копирование байта из регистра данных приемника
movwf DateL4 ; USART (через W) в регистр временного хранения.
call Trans
movf pr_stat,W ; Восстанавление
movwf Status ; содержимого
swapf pr_w,F ; регистров
swapf pr_w,W ; W и Status.
retfie ; Выход из ПП прерывания.
;=======================================================================================================
;*********************************************************************************************
; Группа подпрограмм табличных вычисляемых переходов, определяющих как сами символы, так и
; последовательность их вывода на индикацию.
;=============================================================================================
TEXT_1 addwf PC,F ; Приращение PC на величину содержимого W.
dt "SERIC-1 " ; Запись в W адресного запроса к содержимому
; одной из ячеек знакогенератора.
;********************************************************************************************
TEXT_2 addwf PC,F ; Приращение PC на величину содержимого W.
dt "SERIC-2 " ; Запись в W адресного запроса к содержимому
; одной из ячеек знакогенератора.
;********************************************************************************************
TEXT_3 addwf PC,F ; Приращение PC на величину содержимого W.
dt "SERIC-3 " ; Запись в W адресного запроса к содержимому
; одной из ячеек знакогенератора.
;********************************************************************************************
TEXT_4 addwf PC,F ; Приращение PC на величину содержимого W.
dt "SERIC-4 " ; Запись в W адресного запроса к содержимому
; одной из ячеек знакогенератора.
;********************************************************************************************
TEXT_5 addwf PC,F ; Приращение PC на величину содержимого W.
dt "No Sensor " ; Запись в W адресного запроса к содержимому
; одной из ячеек знакогенератора.
;********************************************************************************************
; "Рабочая" инициализация ЖКИ модуля.
;============================================================================================
LCD_INIT movlw b'00101000' ; Установка: 4-разрядный интерфейс, 2 строки, 5х7 точек.
call ENTER_BF ; "Плавающая" задержка со стробом под команду 00101000.
;----> Возврат по стеку из ПП ENTER_BF.
LCD_INIT_1 movlw b'00101000' ; Установка: 4-разрядный интерфейс, 2 строки, 5х7 точек.
call ENTER_BF ; "Плавающая" задержка со стробом под команду 00101000.
;----> Возврат по стеку из ПП ENTER_BF.
movlw b'00001100' ; Установка: дисплей включен, видимое отображение
; курсора выключено.
call ENTER_BF ; "Плавающая" задержка со стробом под команду 00001100.
;----> Возврат по стеку из ПП ENTER_BF.
movlw b'00000001' ; Установка: очистка дисплея со сбросом данных,
; установка курсора в начало 1-й строки.
call ENTER_BF ; "Плавающая" задержка со стробом под команду 00000001.
;----> Возврат по стеку из ПП ENTER_BF.
clrwdt
return
;=============================================================================================
ENTER_BF bcf IntCon,GIE
movwf date ; Переправка старшего п/байта регистра W на линии
movwf PortD ; RB4...7 (состояния линий RB0...3 не важны).
;------------------------------------------
; Запуск в работу старшего п/байта (строб).
;------------------------------------------
nop ; Задержка в 1 м.ц.
bsf PortE,E ; Установка на линии Е "1".
nop ; Задержка в 1 м.ц.
bcf PortE,E ; Установка на линии Е "0".
;------------------------------------------
swapf date,W ; Смена п/байтов с сохранением результата операции в W.
movwf PortD ; Переправка младшего п/байта регистра W на линии
; RB4...7 (состояния линий RB0...3 не важны).
;------------------------------------------
; Запуск в работу младшего п/байта (строб).
;------------------------------------------
nop ; Задержка в 1 м.ц.
bsf PortE,E ; Установка на линии Е "1".
nop ; Задержка в 1 м.ц.
bcf PortE,E ; Установка на линии Е "0".
;-------------------------------------------------
; Проверка состояния флага занятости BF.
;-------------------------------------------------
; Подготовка к проверке.
;------------------------
bsf Status,RP0 ; Переход в 1-й банк.
movlw b'11110000' ; Запись в W "11110000"
movwf TrisD ; RB4...7 работают на вход, а RB0...3 работают на выход.
bcf Status,RP0 ; Переход в 0-й банк.
bcf PortE,RS ; Установка на линии RS "0" (режим команд).
bsf PortE,RW ; Линия RW в "1" (режим чтения данных).
nop ; Задержка в 1 м.ц.
bsf PortE,E ; Установка на лини Е "1".
POVTOR clrwdt ; Задержка в 1 м.ц.
;-----------------------
; Сама проверка.
;-----------------------
btfsc PortD,BF ; Проверка состояния флага занятости BF.
goto POVTOR ; Если BF=1, то продолжение задержки до тех пор, пока
; BF не установится в "0" (программа исполняется далее).
;-----------------------
; Завершение процедуры.
;-----------------------
clrf PortE ; Сброс в "0" всех защелок порта А (RW=0, RS=0, E=0).
bsf Status,RP0 ; Переход в 1-й банк.
clrf TrisD ; Все выводы порта В работают на выход.
bcf Status,RP0 ; Переход в 0-й банк.
bsf IntCon,GIE
return ; Возврат по стеку.
;*********************************************************************************************
; Вывод результатов измерений и сопровождающей их надписи "СЕРИК-1 " на индикацию.
;*********************************************************************************************
;============================================================================================
; ПП передачи байта данных (USART).
;============================================================================================
RS232 btfss PIR1,TXIF ; Предыдущий байт данных передан или нет?
goto $-1 ; Если еще не передан, то ожидаем
movwf TXREG ; Если передан, то загрузка следующего байта
; данных в буфер передатчика.
return ; Возврат.
;=============================================================================================
; Запись данных в EEPROM
;--------------------------------------------------------------------------------------------
EEPR
bsf Status,RP1
bsf Status,RP0
btfsc EECon1,1
goto $-1
bcf Status,RP0
bcf Status,RP1
movf LED4,W
bsf Status,RP1
movwf EEAdr
bcf Status,RP1
movf DateH3,W
bsf Status,RP1
movwf EEData
bsf Status,RP0
bcf EECon1,7
bsf EECon1,2
bcf IntCon,GIE
movlw 0x55
movwf EECon2
movlw 0xAA
movwf EECon2
bsf EECon1,1
bsf IntCon,GIE
bcf EECon1,2
bcf Status,RP0 ; Переход в нулевой банк.
bcf Status,RP1
incf LED4,f
return
Trans movlw .22
movwf LED4
Transfer clrwdt
movf LED4,0
sublw d'16'
bsf Status,RP1
bcf Status,RP0
movwf EEAdr
bsf Status,RP0
bcf EECon1,7
bsf EECon1,0
bcf Status,RP0
movf EEData,0
bcf Status,RP1
call RS232
DALE
decfsz LED4,f
goto Transfer
return