неработающая отличается только тем, что выход на запись идет из основного цикла, а не из подпрг обработки прерывания. Вот так не работает
Код
;================ Начало ================
;Версия программы:3.00
processor 16F876a;Используемый процессор.
include"p16f876a.inc";Заголовочный файл для микроконтроллера PIC16F876a.
#define flagMlp rFlag,0 ;
#define zero STATUS,2 ;
#define carry STATUS,0 ;
#define enHrd PORTC,5 ; 0 data ready to trm, 1-data rdy to rsv
__CONFIG( _CP_OFF & _BODEN_OFF & _HS_OSC & _WRT_OFF & _WDT_OFF & _PWRTE_ON & _DEBUG_ON & _CPD_OFF & _LVP_OFF )
org 0x0000
goto Start
;********** Начало обработчика прерываний **********
org 0x0004;Вектор прерывания.
btfsc PORTB,5 ;
bsf itog,5 ;
btfsc PORTB,0 ;
bsf itog,0
btfss PORTB,4 ; переход к подпрограмме сохранения результата
bsf itog,6 ;
bcf INTCON,RBIF;
bcf INTCON,INTF;
retfie ;конец обработки прерывания
;********** Конец обработчика прерываний************
;***************** Блок подпрограмм ****************
;******************Запись в память************
Write
;.......
retlw 0
;************Чтение из памяти****************
Read
;.......
retlw 0
;***************************************************
;************* Конец блока подпрограмм *************
;********************* Программа**********************
;********** Начало Инициализации процессора **********
Start
clrwdt
banksel INTCON
clrf INTCON ; Перестраховываемся, запрещаем все прерывания.
banksel OPTION_REG
movlw b'11100000';
movwf OPTION_REG;используем сторожевой таймер
movlw b'11111111';
movwf TRISA ;
movlw b'11111111';
movwf TRISB ;
movlw b'10000000';
movwf TRISC ;
banksel PIE1
clrf PIE1
banksel RCSTA
clrf RCSTA
banksel PORTA
clrf PORTA
clrf PORTB
clrf PORTC
clrf count;
clrf countr;
clrf itog;
;config the hard uart
banksel SPBRG
movlw 081 ;129d for asinh
movwf SPBRG ;speed 9.6 k
movlw b'01100100'
movwf TXSTA ;TX9=1,TXEN=1,SYNC=0,BRGH=1, TXD9=0 (8,e,1) 11 bit, 9600k
bcf TXSTA,TXEN
banksel RCSTA
movlw b'11010000'
movwf RCSTA ; SPEN=1,RX9=1,CREN=1,ADDEN=0, RX9D=0 (8,e,1) 11 bit, 9600k
;********** Конец Инициализации процессора *********
;====================================================
;====================================================
banksel INTCON
movlw b'10011000';
movwf INTCON ; глобальное разрешение прерываний и разрешение прерываний по RB0, RB4-RB7
call Read
banksel PIR1
bcf PIR1,RCIF
Begin
bcf enHrd
bsf RCSTA,CREN; rcv enable
clrwdt
btfsc PIR1,RCIF; check status registers
call trmStatus;
fMainPrg
banksel itog
btfsc itog,5 ;
call CheckStat
btfsc itog,6 ;
goto Write ;
btfsc itog,0 ;
goto Null ;
goto Begin ;
clrwdt
end
насчет флага itog,6 - выставляю точку останова, и при такой записи программа туда вообще не уходит. остальные подпрг это обработка uart'a и на запись они вообще не влияют.