Próbuje zaprogramowaæ pamiêæ 2KB EEPROM w uC 89S8252 (przestrzeñ adresowa:
0x0000-0x7FF). Jednak po zaprogramowaniu paru bajtów program siê krzaczy. Wg mojej opinii poni¿szy program powinien przes³aæ do kompa (RS232) cos takiego:
0
01
0123
01234 ... Jednak zauwa¿y³em, ¿e wynikowe znaki zale¿± (wynika z testów) do warto¶ci pocz±tkowej wska¼nika: BYTE *EE = 0x0000; np.: dla BYTE *EE = 0x000F; wydaje siê, ¿e dzia³a do 44 znaków:
0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTU¶@XYZ[ z tym, ¿e V i W ¼le zapisa³o jako ¶ i @. Po powy¿szym ci±gu 44 znaków zaczyna krzaczyæ:
01<0><0><0>01<0><0><0>01<0><0><0>01<0><0><0>01<0><0><0>01<0><0><0>01<0
'<0>01
Oto kod:
typedef unsigned char BYTE; BYTE *EE = 0x0000; //wska¼nik do pamiêci EEPROM //ODCZYT::------------------------------------------------------------------
------------- void EEPROM_rd(BYTE NoOfBytes, BYTE indexEE, BYTE *to) { idata BYTE i,n; for(i=0;i<NoOfBytes;i++) { WMCON |= 0x08;//dostep do EEPROM n=EE[indexEE+i]; WMCON &= ~0x08;//dostep z powrotem do XData
*(to+i)=n; } } //ZAPIS:--------------------------------------------------------------------
------------- void EEPROM_wr(BYTE NoOfBytes, BYTE indexEE, BYTE *from) { BYTE i,n; for(i=0;i<NoOfBytes;i++) { n=*(from+i); WMCON |= 0x18; EE[indexEE+i]=n; while ( !(WMCON & 0x02) ){} WMCON &= ~0x18; } } //MAIN:---------------------------------------------------------------------
--------------- //wycinek kodu z main(): ... idata unsigned char daneOdczyt[68]; //Odczytany tekst idata unsigned char daneZapis[3]; //znak zapisywany do EEPROM ... while(1) { ... daneZapis[0]=j+'0'; EEPROM_wr(1, j, &daneZapis[0]); //EEPROM_wr( ile zapisac, od ktorego bitu w pamieci, co) j=j+1; EEPROM_rd(j, 0, &daneOdczyt[0]); // EEPROM_rd( ile przeczytac, od ktorego bitu, gdzie ) ... wizualizacja odczytu (RS232->Komp) } //--------------------------------------------------------------------------
------------------
Dziêki za sugestie.