No.80989 作者:ajaxyynuaa 邮件:yuyuenuaa@tom.com ID:36839 登陆:2次 文章数:4篇 最后登陆IP:221.6.29.66 最后登陆:2005/7/11 18:34:41 注册:2005/7/5 17:14:38 财富:121 发帖时间:2005/7/8 14:49:10 发贴者IP:221.6.29.66 标题:ajaxyynuaa:我的W29C040的读写程序是这样设计的~!老古帮忙拉[原创] 摘要:No.80989我的W29C040的读写程序是这样设计的~!老古帮忙拉[原创] 主程序 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动态显示 TR2=1; //启动定时器2,波特率发生器 flash_init(); flash_erase(); addl_flash=0; count_page=0; tempf=0x5A; do{loopw(); }while(1); } 延时函数,用的是11.0592M的晶振 void delayms(char ticks) { unsigned char count; for (ticks=ticks; ticks> =0; ticks--) { for (count = 0; count <=13; count++) { } } } flash初始化函数 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的察除函数 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; ......
>>返回讨论的主题
|