Παιδια θελω την βοηθεια σας...

Εχω ενα προγραμματακι σε PIC16f877A.
Το firmware με λιγα λογια αυτο που κανει ειναι να ελεγχει με ενα IR remote 4 LED 7 segment displays.
Σε καποια φαση θελω ν' αποθηκευει στην EEPROM μερικες τιμες...
Κι ετσι αρχισε ο καυγας

Το ρημαδι, δεν λεει με τιποτα να γραψει στην βρωμο-EEPROM

Δοκιμασα τα παντα.
Στο τελος, το εβαλα στην αρχη-αρχη να κανει μια δοκιμαστικη εγγραφη, αλλα παλι τιποτα!!!
να προσθεσω οτι με τον ιδιο κωδικα, σε αλλη κατασκευη (παλι με το PIC16F877A), εγραφε μια χαρα.

Επισης στο simulation (gpsim) επισης γραφει!
Αν μπορειτε να δειτε κατι εσεις που εμενα μου ξεφευγει...

to firmware:
Κώδικας:
	__CONFIG	_CP_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC  & _BODEN_ON & _LVP_ON


;;blah, blah blah...

INIT
;======================================================
;			INITIALIZATION SECTION START
;======================================================
	clrf		INTCON						; Disable all interrupts.
	clrwdt									; Clear the Watchdog timer


; Before anything else, check if an EEPROM write
; got interrupted due to a reset.
;	BANKSEL		EECON1
;	btfss		EE_WRERR
;	goto		Normal_Init
;	bcf			EE_WRERR
;	PAGESEL		EE_DATA_WRITE
;	call		EE_DATA_WRITE


; *** IO Initialization ***
Normal_Init
	PAGESEL		$


	BANKSEL		PORTA
	clrf		PORTA
	clrf		PORTB
	clrf		PORTC
	clrf		PORTD
	clrf		PORTE

	BANKSEL		ADCON1
	movlw		0x06
	movwf		ADCON1						; All ports digital
	BANKSEL		ADCON0
	bcf			ADCON0,0					; Shutdown ADC.
	
	BANKSEL		TRISA
	clrf		TRISA						; PORTA output
	movlw		B'00000001'					; All output but RB0
	movwf		TRISB
	clrf		TRISC	
	clrf		TRISD
	movlw		B'00000100'					; All output but RE2
	movwf		TRISE
				
	BANKSEL		PORTA
	clrf		PORTA
	movlw		B'00100000'
	movwf		PORTA						; All off but MAX_SCLK
	clrf		PORTB						; All off
	clrf		PORTC						; All off
	clrf		PORTD						; All off
	movlw		B'00000010'					; All off, MAX6957 disselected.
	movwf		PORTE


	bcf			T1CON,T1OSCEN				; Shutoff timer1 oscillator
	bcf			T1CON,TMR1CS				; Timer1 internal clock source (every instruction)
	clrf		TMR1H						; Initialize timer1 output
	clrf		TMR1L						; Both LOW and HIGH
	bcf			T1CON,TMR1ON				; Now timer1 inactive. Raise to activate.

	bcf			OPTION_REG,INTEDG			; RB0/INT on falling edge
;	bsf			OPTION_REG,INTEDG			; RB0/INT on rising edge
;	bsf			INTCON,INTE					; Enable RB0/INT external interrupt
	bcf			INTCON,PEIE					; Disable peripheral interrupts
	bcf			INTCON,T0IE					; Disable timer0 interrupt (for now)
	bcf			INTCON,RBIE					; Disable RB port change interrupts.
;	bsf			INTCON,GIE					; Enable interrupts in general




; MAX6957
	; PORT CFG
	movlw		0x09
	movwf		MAX_CMD_ADDR
	movlw		0x00
	movwf		MAX_DATA
	PAGESEL		MAX_TX
	call		MAX_TX		


	movlw		0x0A
	movwf		MAX_CMD_ADDR
	movlw		0x00
	movwf		MAX_DATA
	PAGESEL		MAX_TX
	call		MAX_TX


	movlw		0x0B
	movwf		MAX_CMD_ADDR
	movlw		0x00
	movwf		MAX_DATA
	PAGESEL		MAX_TX
	call		MAX_TX	

	movlw		0x0C
	movwf		MAX_CMD_ADDR
	movlw		0x00
	movwf		MAX_DATA
	PAGESEL		MAX_TX
	call		MAX_TX


	movlw		0x0D
	movwf		MAX_CMD_ADDR
	movlw		0x00
	movwf		MAX_DATA
	PAGESEL		MAX_TX
	call		MAX_TX


	movlw		0x0E
	movwf		MAX_CMD_ADDR
	movlw		0x00
	movwf		MAX_DATA
	PAGESEL		MAX_TX
	call		MAX_TX


	movlw		0x0F
	movwf		MAX_CMD_ADDR
	movlw		0x00
	movwf		MAX_DATA
	PAGESEL		MAX_TX
	call		MAX_TX
	; PORT CFG
	
	; Config
	movlw		0x04
	movwf		MAX_CMD_ADDR
	movlw		0x01
	movwf		MAX_DATA
	PAGESEL		MAX_TX
	call		MAX_TX
	; 1:Display Test - 0:Normal 
	movlw		0x07
	movwf		MAX_CMD_ADDR
	movlw		0x00
	movwf		MAX_DATA
	PAGESEL		MAX_TX
	call		MAX_TX		
	
	PAGESEL		$
	BANKSEL		remote_id
	
;======================================================
;			INITIALIZATION SECTION END
;======================================================




;======================================================
;			MAIN PROGRAM LOOP
;======================================================
;------------------------------------------------------
Main_Loop
	clrf 		ir_repeat_timer
	bcf			BLINK_0
	bcf			BLINK_1
	bcf			BLINK_2
	bcf			BLINK_3
	movlw		0
	movwf		DigitToBlink
	


	BANKSEL		EECON1
	btfsc		EE_WR						; In case there is another write 
	goto		$-1							; operation, wait it out.
;	bcf			EE_PGD						; Point to data memory
;	bsf			EE_WREN						; Enable writes
	bcf			INTCON,GIE					; Disable interrupts
		
	BANKSEL		EEADR
	movlw		0x11
	movwf		EEADR
	movlw		0x06
	movwf		EEDATA						; Data to be written.
;	call		EE_DATA_WRITE	


	
	BANKSEL		EECON2
	bcf			EE_PGD						; Point to data memory
;	bsf			EE_WREN						; Enable writes
;	bcf			INTCON,GIE					; Disable interrupts
	bsf			EE_WREN						; Enable writes
	movlw		0x55						; EEPROM
	movwf		EECON2						; write 
	movlw		0xAA						; security
	movwf		EECON2						; sequence
		
	bsf			EE_WR						; Start write operation
;	bsf			INTCON,GIE					; Enable interrupts
	btfsc		EE_WR
	goto		$-1							; Wait until write finishes
	bcf			EE_WREN						; Disable further writes
	BANKSEL		PIR2
	bcf			PIR2,EEIF					; EEIF


;;blah blah blah....