|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測(cè)控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動(dòng)編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
89c51操作k9f2808 |
| 作者:cxc51 欄目:單片機(jī) |
寫(xiě)三個(gè)數(shù)據(jù)到K9F2808前三字節(jié),擦寫(xiě)讀都正確。下面是我寫(xiě)的程序,大家看看有哪些地方不妥可以改進(jìn)的。我用的是89C52寫(xiě)的,與k9d2808電平不配,除了用電平轉(zhuǎn)換芯片外,還可以用分立元件處理嗎?還有就是想建壞塊表,哪位給些提示! sbit flash_cle=P2^6; sbit flash_ce=P2^7; sbit flash_ale=P2^5; sbit flash_we=P3^4; sbit flash_re=P3^5; sbit flash_rb=P3^0; unsigned CHAR data savedata[16] _at_ 0x60; void read(unsigned CHAR *buffer) //讀操作 { unsigned int i; //寫(xiě)命令 flash_ce=0; flash_cle=1; flash_we=0; P1=0x00; flash_we=1; flash_cle=0; flash_ale=1; //寫(xiě)地址 flash_we=0; P1=0x00; flash_we=1; flash_we=0; P1=0x00; flash_we=1; flash_we=0; P1=0x00; flash_we=1; flash_ale=0; while(!flash_rb); for(i=0;i<3;i++) { flash_re=0; *buffer++=P1; flash_re=1; } flash_ce=1; } void write(unsigned CHAR *buffer) //寫(xiě)操作 { unsigned int i; flash_cle=0; flash_ce=0; flash_we=1; flash_ale=0; flash_re=1; //寫(xiě)命令 flash_cle=1; flash_we=0; P1=0x80; flash_we=1; flash_cle=0; //寫(xiě)地址 flash_ale=1; flash_we=0; P1=0x00; flash_we=1; flash_we=0; P1=0x00; flash_we=1; flash_we=0; P1=0x00; flash_we=1; flash_ale=0; flash_we=0; P1=0x0a; flash_we=1; flash_we=0; P1=0x0b; flash_we=1; flash_we=0; P1=0x0c; flash_we=1; //寫(xiě)命令 flash_cle=1; flash_we=0; P1=0x10; flash_we=1; //讀狀態(tài) flash_cle=1; flash_we=0; P1=0x70; flash_we=1; flash_cle=0; flash_re=0; *(buffer+6)=P1; flash_re=1; flash_ce=1; } void erase_block(unsigned CHAR *buffer) { unsigned int i; flash_cle=0; flash_ce=1; flash_we=1; flash_ale=0; flash_re=1; //寫(xiě)命令 flash_cle=1; flash_ce=0; flash_we=0; P1=0x60; flash_we=1; //寫(xiě)頁(yè)地址 flash_ale=1; flash_cle=0; flash_we=0; P1=0x00; flash_we=1; flash_we=0; P1=0x00; flash_we=1; //寫(xiě)命令 flash_cle=1; flash_ale=0; flash_we=0; P1=0xd0; flash_we=1; flash_cle=0; for(i=0;i<10;i++); //讀狀態(tài) flash_cle=1; flash_we=0; P1=0x70; flash_we=1; flash_cle=0; flash_re=0; *(buffer+5)=P1; flash_re=1; } main(void) { while(1) { erase_block(&savedata); write(&savedata); read(&savedata); } } |
| 2樓: | >>參與討論 |
| 作者: cxc51 于 2005/4/23 10:00:00 發(fā)布:
讀ID程序 讀ID程序如下,成功讀出數(shù)據(jù)。對(duì)于程序?qū)懛ú煌椎牡胤秸?qǐng)高手賜教,第一次用C51啊... void read_id(void) //讀操作 { unsigned CHAR *id=savedata; flash_cle=0; flash_ce=0; flash_we=1; flash_ale=0; flash_re=1; //寫(xiě)命令 flash_cle=1; flash_we=0; P1=0x90; flash_we=1; flash_cle=0; flash_ale=1; //寫(xiě)地址 flash_we=0; P1=0x00; flash_we=1; flash_ale=0; flash_ale=0; //讀id flash_re=0; while(!flash_rb); *id=P1; flash_re=1; flash_re=0; while(!flash_rb); *(id+1)=P1; } |
|
| 3樓: | >>參與討論 |
| 作者: 2shift 于 2005/4/23 10:53:00 發(fā)布:
電平轉(zhuǎn)換可以用芯片74LVC4245, 利用K9F2808的第0塊永遠(yuǎn)不壞的特性,建立壞塊表。第一次使用芯片的時(shí)候,對(duì)每個(gè)快掃描一遍,檢測(cè)出壞塊,建立表格。以后讀寫(xiě)的時(shí)候,到了相應(yīng)的壞塊出,跳過(guò)就行了。我記得好像是每個(gè)塊的0,1頁(yè)的第517(可能使這個(gè),具體看數(shù)據(jù)手冊(cè))個(gè)字節(jié),在塊擦出后,如果不是0xff,那馬么這個(gè)塊就是壞塊。 |
|
| 4樓: | >>參與討論 |
| 作者: cxc51 于 2005/4/25 10:35:00 發(fā)布:
哦 K9F2808有1024塊,把一個(gè)壞塊號(hào)記下來(lái)要用兩個(gè)字節(jié)吧?寫(xiě)入數(shù)據(jù)前是不是一定要擦除塊,那這樣的話(huà),找到一個(gè)壞塊號(hào)就寫(xiě)入K9F2808的第0塊里,之前的數(shù)據(jù)不是給擦除了嗎?! |
|
| 5樓: | >>參與討論 |
| 作者: zyork 于 2005/5/11 14:54:00 發(fā)布:
請(qǐng)問(wèn)關(guān)于你用的振蕩器頻率 中間不需要有延時(shí)嗎?你有沒(méi)有加外部上拉電阻。苛硗饽阕x出的ID十四個(gè)字節(jié)還是五個(gè)字節(jié)?我也剛開(kāi)始用 |
|
|
|
| 免費(fèi)注冊(cè)為維庫(kù)電子開(kāi)發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號(hào) |