jag sitter och försöker knopa ihop en rutin som skall kunna läsa programminnnet på en given adress i en pic16f88.
jag har läst manualen och lyckats skriva(kopiera) ihop en kodsnutt, men det verkar inte fungerar riktigt. När jag simulerar min kod i MPlab så verkar inte värdena till registerna EEADRH och EEADR bli satta till de inställda värdena. De förblir 0.
Jag har antagligen glömt att göra någon inställning, men förstår inte riktigt var.
Enligt exemplet i databladet så står det ibland t.ex "BANKSEL EEADRH" vilket jag kommenterat bort eftersom det ger kompileringsfel. Vad gör den raden egentligen, eller är det bara en förklaring till vad koden undertill gör? vad är BANKSEL för något??
Kompilatorn jag kör med heter bKnudsens c5 (eller nått åt det hållet).
uns16 = unsigned 16bit vaiabel
Kod: Markera allt
uns16 wReadFlash(char ADDRH,char ADDRL)
{
uns16 Serial;
char SerLo,SerHi;
#asm
;BANKSEL EEADRH ; Select Bank of EEADRH
MOVF ADDRH, W ;
MOVWF EEADRH
MOVF ADDRL, W ;
MOVWF EEADR ; LS Byte of Program Address to read
; BANKSEL EECON1
BSF EECON1, EEPGD ; Point to PROGRAM memory
BSF EECON1, RD ; EE Read
NOP ; Any instructions
NOP ; program memory is
;BANKSEL EEDATA
MOVF EEDATA, W ; DATAL = EEDATA
MOVWF SerLo ;
MOVF EEDATH, W ; DATAH = EEDATH
MOVWF SerHi ;
#endasm
Serial.low8 = SerLo;
Serial.high8 = SerHi;
return Serial;
}