|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機 | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
我的W29C040的讀寫程序是這樣設(shè)計的~! |
| 作者:ajaxyy 欄目:單片機 |
主程序 main() { WDTCN = 0xde; // 禁止軟件看門狗定時器 WDTCN = 0xad; //不禁止看門狗,定時器1將工作不正常。 //SYSCLK_Internal(); SYSCLK_External(); PORT_Init(); Timer1_Init(); //定時器1,2,3初始化 Timer2_Init (SYSCLK_OUT/BAUDRATE/32); UART0_Init (); EIE2 |= 0x02; //允許ADC中斷 IE|=0x10; //允許UART中斷 EA = 1; //允許全局中斷 TR1=1; //啟動定時器1,LED動態(tài)顯示 TR2=1; //啟動定時器2,波特率發(fā)生器 FLASH_init(); FLASH_erase(); addl_FLASH=0; count_page=0; tempf=0x5A; do{loopw(); }while(1); } 延時函數(shù),用的是11.0592M的晶振 void delayms(CHAR ticks) { unsigned CHAR count; for (ticks=ticks; ticks>=0; ticks--) { for (count = 0; count<=13; count++) { } } } FLASH初始化函數(shù) void FLASH_init(void) { PRT1CF=0x00; P1=0xff; //P1口輸入總線 PRT2CF=0xff; P2=0xff; //允許P2口輸出 PRT3CF=0xff; //允許P3口輸出 P3 &=0x7f; //LE=0 P3 |=0x78; //CE1,CE2,WE,OE=1 } void select_sec(void) { SWITCH(count_sec) //選擇FLASH存儲的段 { case 0: P3 &=0xf8; break; /* 29C040 a18a17a16= 000 00000-0ffff */ case 1: P3 &=0xf9;P3 |=0x01; break; /* 29C040 a18a17a16= 001 10000-1ffff */ case 2: P3 &=0xfa;P3 |=0x02; break; /* 29C040 a18a17a16= 010 20000-2ffff */ case 3: P3 &=0xfb;P3 |=0x03; break; /* 29C040 a18a17a16= 011 30000-3ffff */ case 4: P3 &=0xfc;P3 |=0x04; break; /* 29C040 a18a17a16= 100 40000-4ffff */ case 5: P3 &=0xfd;P3 |=0x05; break; /* 29C040 a18a17a16= 101 50000-5ffff */ case 6: P3 &=0xfe;P3 |=0x06; break; /* 29C040 a18a17a16= 110 60000-6ffff */ case 7: P3 |=0x07; break; /* 29C040 a18a17a16= 111 70000-7ffff */ } } FLASH的察除函數(shù) void FLASH_erase(void) { count_page=0x55; addl_FLASH=0x55; //A0-A7低地址 tempf=0xAA; FLASH1_w(); count_page=0x2A; addl_FLASH=0xAA; //A0-A7低地址 tempf=0x55; FLASH1_w(); count_page=0x55; addl_FLASH=0x55; //A0-A7低地址 tempf=0x80; FLASH1_w(); count_page=0x55; addl_FLASH=0x55; //A0-A7低地址 tempf=0xAA; FLASH1_w(); count_page=0x2A; addl_FLASH=0xAA; //A0-A7低地址 tempf=0x55; FLASH1_w(); count_page=0x55; addl_FLASH=0x55; //A0-A7低地址 tempf=0x10; FLASH1_w(); delayms(50); } FLASH的寫讀函數(shù) void FLASH1_r(void) { CE1=0; select_sec(); P2=count_page;//A8-A15高地址 PRT1CF=0x0ff; //允許D為輸出 P1=addl_FLASH; //A0-A7低地址 LE=1; _nop_(); LE=0; //鎖存地址 PRT1CF=0x00;//允許D為輸入 P1=0x0ff; OE=0; //P3&=0xf7//讀選通 _nop_(); tempf=P1; OE=1;//P3 |=0x08 CE1=1;//P3 |=0x20 } //FLASH的寫函數(shù) void FLASH1_w(void) { CE1=0; select_sec(); P2=count_page; //A8-A15高地址 PRT1CF=0xff; //允許D為輸出 P1=addl_FLASH; //A0-A7低地址 LE=1; _nop_(); LE=0; //鎖存地址 P1=tempf; WE=0; //鎖存地址到FLASH _nop_(); WE=1; //鎖存數(shù)據(jù)到FLASH PRT1CF=0x00; P1=0xff; //允許D輸入 CE1=1; } //***************************FLASH1存儲********************** void loopw(void) { bit data flage; flage=EA; EA=0; FLASH1_w(); //loopr(); addl_FLASH++; if (addl_FLASH==0) { delayms(10); EA=flage; addl_FLASH=0; count_page=0; loopr(); } } //***************************FLASH1串口發(fā)送********************** void loopr(void) { FLASH1_r(); addl_FLASH++; if(addl_FLASH!=0) /* TI=0; SBUF=tempf; while(!TI); & |
| 2樓: | >>參與討論 |
| 作者: ajaxyy 于 2005/7/8 15:07:00 發(fā)布:
沒有人看嘛?搞不清楚啊,唉,最近一直被這個煩惱 |
|
| 3樓: | >>參與討論 |
| 作者: zyncn 于 2005/7/8 15:46:00 發(fā)布:
先把芯片放在編程器上,解保護后再試試 |
|
| 4樓: | >>參與討論 |
| 作者: hotpower 于 2005/7/8 19:37:00 發(fā)布:
好好的51全讓你搞砸了 硬件不規(guī)范,MOVX用不成,ALE,RD,WE還要模擬... 樓主真累呀... |
|
| 5樓: | >>參與討論 |
| 作者: ajaxyy 于 2005/7/9 10:05:00 發(fā)布:
我用的是C8051F系列的, 都是直接對端口操作,不存在樓上所說的問題啊 |
|
| 6樓: | >>參與討論 |
| 作者: jqimao 于 2005/7/9 10:43:00 發(fā)布:
W29C040和020我一次都沒寫進去過。 估計是芯片的原因,我花了15塊錢買了片W29C040,隨便怎么弄,數(shù)據(jù)就是不進去,跟你一樣,讀出來全是FF,華邦的W29C020也相同。我心不干,隨后跑到舊貨市場花5塊錢從別人的費主板上撬下一片AT29C020,回來一寫,一次OK! 所以,從現(xiàn)在起,我再也不用華邦的存儲產(chǎn)品了,還是ATMEIL的兼容性好。 |
|
| 7樓: | >>參與討論 |
| 作者: hotpower 于 2005/7/10 2:47:00 發(fā)布:
兩個問題 1.樓主雖然說可以寫入,但此設(shè)計絕對不鼓勵. 2.jqimao可能沒去掉寫保護,所以寫不進入.并非兼容的問題. |
|
| 8樓: | >>參與討論 |
| 作者: makesoft 于 2005/7/10 9:53:00 發(fā)布:
人家編程器寫的好好的,這還存在兼容性的問題啊? 估計是芯片的原因,我花了15塊錢買了片W29C040,隨便怎么弄,數(shù)據(jù)就是不進去,跟你一樣,讀出來全是FF,華邦的W29C020也相同。我心不干,隨后跑到舊貨市場花5塊錢從別人的費主板上撬下一片AT29C020,回來一寫,一次OK! 人家編程器寫的好好的,這還存在兼容性的問題啊? * - 本貼最后修改時間:2005-7-10 9:54:44 修改者:makesoft |
|
| 9樓: | >>參與討論 |
| 作者: JQIMAO 于 2005/7/10 12:12:00 發(fā)布:
請教hotpower如何去掉寫保護,我的編程器是最最低檔的 |
|
| 10樓: | >>參與討論 |
| 作者: john_light 于 2005/7/10 13:58:00 發(fā)布:
總覺得樓主的硬件連接最好重新設(shè)計 |
|
|
|
| 免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號 |