Re: 為什麼EEPROM寫不進去??
|
||||
---|---|---|---|---|
資深會員
|
要用 c 是無所謂,但是要 debug
還是請你貼 asm list file 上來 誰知道你的 c compiler 到底『私自』做了什麼事 新手學 pic 應該要由 asm 上手, 雖然一開始走得慢,但是這樣才有機會走得遠 用 c 雖然看起來走得快,但是一出問題,還是得回歸 asm
發表於: 2008/9/20 1:30
|
|||
|
Re: 為什麼EEPROM寫不進去??
|
||||
---|---|---|---|---|
初級會員
|
感謝jlian大的指點,小弟還是式不出來,所以用Debug模式下,給EEPROM值,然後讀取!!讀取是沒問題,但還是寫不進去!!請問我是不是還需要設定什麼初始值嗎??
再次謝謝jlian大的指點!!對於我這種接觸PIC不久的人而言,真的收穫不少!!謝謝!! char DATA_EE_ADDR=0x40; char DATA_EE_DATA=0x41; //---------------------- write EEPROM ---------------------// void writeeeprom(void) { EEADR=0; EEDAT=0; EEADR=DATA_EE_ADDR; EEDAT=DATA_EE_DATA; //EEPGD=0; //WREN=1; EECON1=0b00001100; GIE=0; while(GIE==1){INTCON=0b00000000;} EECON2=0x55; EECON2=0xAA; WR=1; while(WR); GIE=1; WREN=0; }//void writeeeprom //---------------------------- Read EEPROM -------------------// void readeeprom(void) { readEE=0; EEADR=0x11; //強制給值 EECON1=0b00000001; //EEPGD=0; //RD=1; readEE=EEDAT; } void main(void) { INTCON=0b11001000; readeeprom(); writeeeprom(); }
發表於: 2008/9/19 19:13
|
|||
|
Re: 為什麼EEPROM寫不進去??
|
||||
---|---|---|---|---|
資深會員
|
你好:
post hitec-16C for PIC16f917 to you: void eeprom_write(uchar value,uchar addr) { EEDATA=value; EEADR=addr; EEPGD=0; WREN=1; GIE=0; EECON2=0x55; EECON2=0xAA; WR=1; GIE=1; WREN=0; while(WR); } 試試看! Thanks.
發表於: 2008/9/19 11:39
|
|||
|
Re: 為什麼EEPROM寫不進去??
|
||||
---|---|---|---|---|
初級會員
|
感謝jlian大,小弟把程式修改如下,但似乎還是不動,請問大大該怎麼解??還是寫不進去,真是讓人心急!!
char DATA_EE_ADDR=0x20; char DATA_EE_DATA=0x45; // void writeeeprom(void) { EEIF=0; EEADR=0; EEDAT=0; EEADR=DATA_EE_ADDR; EEDAT=DATA_EE_DATA; EEPGD=0; WREN=1; GIE=0; EECON2=0x55; EECON2=0xAA; WR=1; GIE=1; asm("nop"); asm("nop"); while(!EEIF); { } EEIF=0; WREN=0; } void interrupt isr_Sevr ( void ) { writeeeprom(); }
發表於: 2008/9/19 11:19
|
|||
|
Re: 為什麼EEPROM寫不進去??
|
||||
---|---|---|---|---|
資深會員
|
你好:
先用SIM模擬,須先將EEPROM視窗打開, 在程式中的寫完EEPROM後設斷點, 看EEPROM是否有寫入. Thanks.
發表於: 2008/9/19 10:31
|
|||
|
Re: 為什麼EEPROM寫不進去??
|
||||
---|---|---|---|---|
資深會員
|
你好:
原 int DATA_EE_ADDR=0x20; int DATA_EE_DATA=0x41; 改 char DATA_EE_ADDR=0x20; char DATA_EE_DATA=0x41; 用我給的code試試. Thanks.
發表於: 2008/9/19 10:26
|
|||
|
Re: 為什麼EEPROM寫不進去??
|
||||
---|---|---|---|---|
初級會員
|
感謝jlian大,不過小弟手邊沒有18F,所以還是要用16F來做!!不過真的感謝回覆!!
順便一問,我從view>EEPROM視窗中,看到都是FF,都燒不進去,實在是太奇怪了!!
發表於: 2008/9/19 9:50
|
|||
|
Re: 為什麼EEPROM寫不進去??
|
||||
---|---|---|---|---|
資深會員
|
你好:
EEIF=0; EEADR=addr; EEDATA=value; //EEPGD=0; //CFGS=0; WREN=1; GIE=0; EECON2=0x55; EECON2=0xAA; EEWR=1; GIE=1; //while(EEWR); while(!EEIF); EEIF=0; WREN=0; 用18F試試看! Thanks.
發表於: 2008/9/19 9:29
|
|||
|
為什麼EEPROM寫不進去??
|
||||
---|---|---|---|---|
初級會員
|
各位前輩好,小弟剛接觸單晶片沒多久,問題真是一大堆!!希望前輩指導,如果問的問題很低階,還請多包含!!
請問前輩們,小弟使用16F883,我照著datasheet上的範例,為什麼還是寫不進去??是我有遺漏什麼嗎??還是需要設定什麼我沒設定??還請大家多指導,謝謝!! int DATA_EE_ADDR=0x20; int DATA_EE_DATA=0x41; //---------------------------------------- EEADR=DATA_EE_ADDR;//Data Memory Address to write EEDAT=DATA_EE_DATA; //Data Memory Value to write EEPGD=0; // EECON1 Program/Data EEPROM Select bit WREN=1; // EECON1 EEPROM Write Enable bit GIE=0; // disable INT EECON2=0x55; EECON2=0xAA; WR=1; // EECON1 Write Control bit GIE=1; // Enable INT asm("nop"); // Assembly no operation asm("nop"); // Assembly no operation WREN=0;
發表於: 2008/9/18 21:23
|
|||
|