aqui les mando mi codigo fuente .......ayudenme a encontrar el error..
list p=16f877A
include<p16f877A.inc>
;///////////declaracion de variables//////////7777777
retar_20 equ 30h
retar1_20 equ 31h
direccion_EEl EQU 0x71
dato_EEl EQU 0x72
direccion_EEh EQU 0x73
dato_EEh EQU 0x74
W_Temp equ 7Ch
Status_Temp equ 7Dh
PClatch_Temp equ 7Eh
FSR_Temp equ 7Fh
;///////////////////////////vectores
org 0x00
goto inicio
org 0x04
goto inter
;configuracion de registros
inicio
call iniciar_perifericos
call iniciar_puertos
call iniciar_variables
goto principal
;programa principal
principal
bsf PORTB,4
call graba_flash
goto principal
;/////////////////interrupciones/////////////
inter
movwf W_Temp
swapf STATUS,w ;Intercambiar STATUS guarda en w
clrf STATUS ;va al banco 0
movwf Status_Temp ;lleva el valor de w a Status_Temp
movf PCLATH,w
movwf PClatch_Temp ;lleva el valor de w a PClatch_Temp
clrf PCLATH ;Pagina cero
movf FSR,w
movwf FSR_Temp ;lleva el valor de w a FSR_Temp
;///////////////////verifica a q interrupcion ir//////////////
btfsc PIR1,TMR1IF ;ve si es la interrupcion del timer2
goto intertimer1 ;va a la interrupcion del timer1
btfsc INTCON,INTF ;ve si es la interrupcion externa
goto interext ;va a la interrupcion externa
btfsc PIR1,TMR2IF ;ve si es la interrupcion del timer2
goto intertimer2 ;va a la interrupcion del timer1
btfsc PIR1,RCIF ;ve si es la interrupcion del puerto serial
goto interserial ;va a la interrupcion del timer1
btfsc INTCON,T0IF ;ve si es la interrupcion del puerto serial
goto intertimer0 ;va a la interrupcion del timer0
;//////////////////salida de las interrupciones///////////
fininter
movf FSR_Temp,w
movwf FSR ;reestablece FSR
movf PClatch_Temp,w
movwf PCLATH ;restablece PCLATH
swapf Status_Temp,w
movwf STATUS
swapf W_Temp,f
swapf W_Temp,w ;restablece w
retfie
;////////////////////////interrupcion timer2////////////////
intertimer2
bcf PIR1,TMR2IF ;limpia la bandera de la interrupcion del timer2
goto fininter
;////////////////////////interrupcion timer1////////////////
intertimer1
bcf PIR1,TMR1IF ;limpia la bandera de la interrupcion del timer2
goto fininter
;////////////////////////interrupcion externa////////////////
interext
bcf INTCON,INTF
goto fininter
;///////////////////////////interrrupcion puerto serial///////////////7
interserial
bcf PIR1,RCIF
goto fininter
;///////////////////////////interrrupcion timer0///////////////7
intertimer0
goto fininter
;/////////////////////rituna q inicializa los perifericos/////////////////////
iniciar_perifericos
bcf STATUS,RP0
movlw b"11010000"
movwf INTCON
bsf RCSTA,CREN
bsf RCSTA,SPEN
bsf STATUS,RP0 ;seleccion del banco 1
movlw b"00100000"
movwf PIE1 ;permiso de interrupciones para el T1 y T2
movlw b"00011001"
movwf SPBRG ;indica q la transmision serial se realiza a 9600 baudios
bsf TXSTA,TXEN
bsf TXSTA,BRGH
bcf OPTION_REG,INTEDG
bcf STATUS,RP0 ;va al banco 0
return
;/////////////////////rituna q inicializa los puertos/////////////////////
iniciar_puertos
bcf STATUS, RP0 ;va al banco 0
clrf PORTA
clrf PORTB
clrf PORTC
clrf PORTD
clrf PORTE
bsf STATUS, RP0 ;va al banco 1
movlw b"00000111" ;RA0,RA1,RA2,RA3,RA4,RA5,RE0,RE1,RE2 digitales
movwf ADCON1 ;Mover el valor al registro
movlw b"00000100" ;0,1,2,3 entradas 4 salida
movwf TRISA
movlw b"11000011" ;0,1,2,3 entradas 4,5,6,7 salidas
movwf TRISB
movlw b"10000000" ;0,1,2,3,4,5,6 salidas 7 entrada
movwf TRISC
movlw b"00000000" ;0,1,2,3,4,5,6,7 salidas entrada
movwf TRISD
movlw b"00000000" ;0,1,2,3,4,5,6,7 salidas entrada
movwf TRISE
bcf STATUS,RP0
return
;/////////////////////rituna q inicializa las variables/////////////////////
iniciar_variables
bcf STATUS,RP0 ;va al banco 0
movlw 0x10
movwf direccion_EEh
movlw 0x00
movwf direccion_EEl
movlw 0x00
movwf dato_EEh
movlw 0xAA
movwf dato_EEl
movlw 0xFF
movwf retar_20
movlw 0x50
movwf retar1_20
return
;//////////////////////////////graba fash/////////////7
graba_flash
;call retardo_20
;bsf STATUS,RP1
;bcf STATUS,RP0
movf direccion_EEh,w
bsf STATUS,RP1
movwf EEADRH
bcf STATUS,RP1
movf direccion_EEl,w
bsf STATUS,RP1
movwf EEADR
bcf STATUS,RP1
movf dato_EEh,w
bsf STATUS,RP1
movwf EEDATH
bcf STATUS,RP1
movf dato_EEl,w
bsf STATUS,RP1
movwf EEDATA
;bcf STATUS,RP1
;bsf STATUS,RP1
;bcf STATUS,RP0
bsf STATUS,RP0
bsf EECON1,EEPGD
bsf EECON1,WREN
bcf INTCON,GIE
movlw 0x55
movwf EECON2
movlw 0xAA
movwf EECON2
bsf EECON1,WR
nop
nop
nop
bsf INTCON,GIE
bcf EECON1,WREN
bcf STATUS,RP1
bcf STATUS,RP0
incf direccion_EEl
return
;///////////////////retardo de 20ms/////////7
retardo_20
retardo22
decfsz retar_20
goto retardo22
movlw 0xFF
movwf retar_20
decfsz retar1_20
goto retardo22
movlw 0x50
movwf retar1_20
return
end