关于STC单片机EEPROM的应用总结
if(_IOC_NR(cmd)> ioarg = &mem_devp-> wait-> if (list_empty(&wait-> spin_unlock_irqrestore(&q-> spin_lock_irqsave(&q-> list_for_each_entry_safe(curr, next, &q-> unsigned flags = curr-> struct mem_dev *dev = filp-> if(p > 地址 IAP_ADDRH=addr>>8; IAP_TRIG=0X5A; IAP_TRIG=0XA5; _nop_(); dat=IAP_DATA; iapidle(); return dat; } /*写一个字节的IAP/ISP/EEPROM空间 输入: 字节地址 要写入的数据 Void iapprogrambyte(uint addr,uchar dat) { IAP_CONTR=ENABLE_IAP;//打开IAP功能并设置等待时间 IAP_CMD=CMD_PROGRAM;//设置写命令 IAP_ADDRL=addr;//设置字节地址低8位 IAP_ADDRH=addr>>8;//设置字节地址的高8位 IAP_DATA=dat;//写内容 IAP_TRIG=0X5A;//发送触发命令1 IAP_TRIG=0XA5;//发送触发命令2 _nop_();//等待直到写操作完成 Iapidle(); } /*扇区擦除 输入:地址 Void iaperasesector(uint addr) { IAP_CONTR=ENABLE_IAP;//开IAP功能并设置等待时间 IAP_CMD=CMD_ERASE;//设置擦除命令 IAP_ADDRL=addr; IAP_ADDRH=addr>>8; IAP_TRIG=0x5a; IAP_TRIG=0XA5; _nop_(); Iapidle(); } /********写595函数*******************/ void write_595(uchar x) { uchar j; for(j=0;j<8;j++) { x=x<1; SHIFT=0; _nop_(); _nop_(); _nop_(); DATA=CY; SHIFT=1; _nop_(); _nop_(); _nop_(); SHIFT=0; } } /********595输出函数函数*******************/ void out_595(void) { STORAGE=0; _nop_(); _nop_(); STORAGE=1; _nop_(); _nop_(); STORAGE=0; } /*软件延时 */ void delay(uchar t) { uchar x; while(t--) { for(x=0;x<250;x++) { _nop_(); _nop_(); _nop_(); _nop_(); } } } /******按键检测函数**********************/ void keycheck(void) { if(SW==0)//判断开关按键是否按下 {delay(10);//抗干扰 if(SW==0)//确实按下 {kai=~kai; } while(!SW)//一直按下 {BEEP=1;}//蜂鸣器响 BEEP=0;//松开按键,蜂鸣器关闭 } if(INC==0&kai==1&MA<9)//如果处于开的状态并且数字小于9则按下增大键执行 { delay(10); if(INC==0&kai&MA<9) {MA++;} while(!INC) {BEEP=1;} BEEP=0; } if(DEC==0&kai&MA>1) { delay(10); if(DEC==0&kai&MA>1) {MA--;} while(!DEC) {BEEP=1;} BEEP=0; } if(kai==1) //如果电源打开了,则将电源开的状态标志置1 {biaozhi=1;} if(biaozhi==1&kai==0)//判断电源打开后被关闭,目的是只在开关键关闭时,写一次EEPROM,避免不停的擦写EEPROM { biaozhi=0; iaperasesector(0x00); programbyte(0x00,MA); // 执行EEPROM写程 } } //主函数 Void main(void ) { BEEP=0; //关闭蜂鸣器 iapreadbyte(0x00);//读出EEPROM的值 MA=dat; if(MA<1|MA>9)//如果读出的值不在1-9范围内则强制为5. {MA=5;} while(1) { keycheck();//执行按键扫描程序 write_595(num[MA]); write_595(num[MA]); out_595(); } } 这只是一个简单的读写一个字节的简单测试程序,对于扇区擦除的结果也没有进行验证。 想要验证需要在加一段代码。具体请参照STC的数据手册。
STC单片机EEPRO 相关文章:
- STC单片机 EEPROM/IAP 功能测试程序演示(12-01)
- STC单片机EEPROM的应用和程序(11-24)
- STC单片机EEPROM功能模块(11-23)
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)