Zapis do EEPROM v 16F877A

Mam zde odskoušený program na zápis dat do EEPROM odskoušený v 16F648A. V 16F877A mi, ale nefunguje. Po zapsání dat do EEPROM se má změnit registr PIR1,EEIF ale ten bohužel vůbec nic nedělá.

ukladanieeprom				
		bsf		STATUS,RP0
		bsf		EECON1,2	
		bcf		STATUS,RP0
		movf	        pozice,0
		bsf		STATUS,RP0
		movwf	EEADR
		bcf		STATUS,RP0
		movf	        hodnota,0
		bsf		STATUS,RP0
		movwf	EEDATA			
		movlw	55h
		movwf	EECON2
		movlw	0aah
		movwf	EECON2
		bsf		EECON1,1
		bcf		EECON1,2
		bcf		STATUS,5
cekanipriukladani	
		btfss	PIR1,EEIF
		goto	cekanipriukladani		
		bcf		PIR1,EEIF			
		return

Toto je nejake divne, cely ten postup ukladania, ja sa divim ze to v tej 648-cke fungovalo, okrem toho, ze mechanizmy pre 648 a 877A su odlisne.
Postup zapisu je v datasheete

BSF STATUS,RP1 ;
BSF STATUS,RP0
BTFSC EECON1,WR ;Wait for write
GOTO $-1 ;to complete
BCF STATUS, RP0 ;Bank 2
MOVF DATA_EE_ADDR,W ;Data Memory
MOVWF EEADR ;Address to write
MOVF DATA_EE_DATA,W ;Data Memory Value
MOVWF EEDATA ;to write
BSF STATUS,RP0 ;Bank 3
BCF EECON1,EEPGD ;Point to DATA memory
BSF EECON1,WREN ;Enable writes
BCF INTCON,GIE ;Disable INTs.
MOVLW 55h ;
MOVWF EECON2 ;Write 55h
MOVLW AAh ;
MOVWF EECON2 ;Write AAh
BSF EECON1,WR ;Set WR bit to begin write
BSF INTCON,GIE ;Enable INTs.
BCF EECON1,WREN ;Disable writes

Na zaciatku sa caka na uvolnenie EEPROM - napriklad ak sa do nej predtym zapisovalo.
Potom sa nasunu data a adresa tam, kam treba, ukaze sa na EEPROM - lebo 877A si moze zapisovat aj do FLASH - vypnu sa prerusenia! To je podstatne, pretoze musi nasledovat bezpecnostna sekvencia a ak by do nej zasiahlo prerusenia, zapis by nenastal. Az potom sa spusti bit WR, cim sa iniciuje zapis. Potom je mozne bud skumat stav WR bitu alebo EEIF bitu.
A este jeden detail:
Nepouzivajte zapis

bsf      EECON1,2

ale

bsf      EECON1,WR

je to omnoho citatelnejsie.

Ok díky. Vycházel jsem z toho, že oba picky mají stejný funkce a další věci a to že tam se to zapisuje jinak mě ani nenapadlo :smiley: Problém vyřešen díky