16进制转换算成10进制程序_第1页
16进制转换算成10进制程序_第2页
16进制转换算成10进制程序_第3页
16进制转换算成10进制程序_第4页
16进制转换算成10进制程序_第5页
免费预览已结束,剩余22页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

STC单片机中的eeprom写入和读取6位的10进制数需要进行数据种类变换吗?详尽是怎样现的呢?2013-06-0410:24满意回答提问者采纳2013-06-0410:276位10进制数,变换为16进制,再写入EEPROM.longx;分4个字节写入ucharc1;c1=x>>24;//最高字节c1=x>>16;//次高字节c1=x>>8;//次低字节c1=x&0xff;//最低字节分别写入就能够了。追问我用的是stc12C5A60S2单片机,我将转变轩16进制的数保存在一个数组,此后整个数组写进去,当需要的时候再读出来复原成十进制数能否呢?回答当然能够。追问想了一下,不知应当怎样用单片机C语言去实现啊,能够指导下不?提问者讨论感谢哈讨论|ningling_21知道达人|来自团队单片机学习|十级采纳率26%擅长:其他编程语言汇编语言C/C++16进制变换算成10进制程序根源:本站整理作者:佚名2009年01月14日23:330分享[导读]16进制变换算成10进制程序unsignedchard[10];//用于显示的10位显示缓存//======================要点词:进制16进制变换算成10进制程序unsignedchard[10];//用于显示的10位显示缓存//========================================================//16进制to10进制输出子程序:显示数据,初步位,结束位,有无小数点//========================================================voidoutput(unsignedlongdd,unsignedchars,unsignedchare,unsignedchardip){unsignedlongdiv;unsignedchartm[8],i,j;div=10000000;for(i=0;i<8;i++){tm[i]=dd/div;dd%=div;div/=10;}for(i=0;i<6;i++){if(tm[i]!=0)break;tm[i]=nul;}tm[5]|=dip;//小数点控制,请看“串行LED数码管显示驱动程序”j=7;for(i=s;i<e;i++){d[i]=tm[j];j--;}}把显示位5-9位的10进制数变换成为16进制数unsignedintinput(void){unsignedintdd,dat;dd=10000;dat=0;for(i=5;i<10;i++){dat+=dd*temp;dd/=10;}return(dat);}/*89C51系列CPU编程器接收CPU程序*/include<reg51.h>include<intrins.h>include<absacc.h>#definee8#definep9#definel10sbitled=P3^2;sbitp27=P2^7;sbitp26=P2^6;sbitp36=P3^6;sbitp37=P3^7;sbitrst=P3^3;sbitale=P3^5;sbitvpp=P3^4;bitb_break;unsignedintadds;13.8mSvoidint_t0(void)interrupt1{TH0=-100;b_break=1;}voidwait(unsignedcharw){unsignedintt=w*184;b_break=0;TL0=-t%256-1;TH0=-t/256;while(b_break==0){}}voidnop(void){_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();}unsignedcharcommand(void){TH0=-100;b_break=0;while(RI==0){if(b_break==1)return(0);}RI=0;return(SBUF);}voidearsure(unsignedcharcpu){switch(cpu){case1://89C51case2:rst=p26=1;p27=p36=p37=0;nop();vpp=1;nop();ale=0;wait(110);ale=1;nop();break;case3:case4:break;case5:case6:break;}}voidprogram(unsignedcharcpu){unsignedintbdataadds=0;unsignedchard;switch(cpu){case1://89C51case2:p36=p37=1;rst=1;while(1){TH0=-100;b_break=0;while(RI==0){if(b_break==1)return;}RI=0;d=SBUF;//addressP0=adds%256;P2=adds/256;p27=1;//dataP1=d;nop();//48clcl//vppvpp=1;nop();//48clcl//aleale=0;wait(1);//100uSale=1;nop();//10uSvpp=0;nop();//48clclp27=0;nop();//48clclP1=0xff;TH0=-100;b_break=0;while(d!=P1){if(b_break==1)return;}

//datapollingSBUF=d;adds++;}break;case3:case4:case5:case6:break;}}voidlock(unsignedcharcpu){unsignedchari;switch(cpu){case1://89c51case2://lock1rst=p26=p36=p27=p37=1;nop();vpp=1;nop();ale=0;for(i=0;i<6;i++)wait(100);wait(1);ale=1;nop();vpp=0;nop();//lock2rst=p26=p27=1;p36=p37=0;nop();vpp=1;nop();ale=0;for(i=0;i<6;i++)wait(100);wait(1);ale=1;nop();vpp=0;nop();//lock3rst=p26=p36=1;p27=p37=0;nop();vpp=1;nop();ale=0;for(i=0;i<6;i++)wait(100);wait(1);ale=1;nop();vpp=0;nop();break;case3:case4:case5:case6:break;}}voidmain(void){unsignedchardisp,flash,temp,cpu;EA=1;SCON=0xd8;PCON=0x80;TMOD=0x21;TL1=TH1=0xff;TR1=1;TH0=-100;ET0=TR0=1;flash=0x80;while(1){temp=command();switch(temp){case0:case1://89c51case2://89C52case3://80f51case4://80F52case5://87F51case6:cpu=temp;SBUF=temp;break;//87f52casee:SBUF=temp;earsure(cpu);break;

//erasurecasep:SBUF=temp;program(cpu);break;

//programcasel:lock(cpu);SBUF=temp;break;

//lockdefault:SBUF=temp;break;}b_break=0;if((++disp)>flash){disp=0;led=!led;}}}//HT1380实时时钟驱动程序sbitclock_dat=P0^1;sbitclock_clk=P0^2;sbitclock_rst=P0^3;sbita0=ACC^0;sbita1=ACC^1;sbita2=ACC^2;sbita3=ACC^3;sbita4=ACC^4;sbita5=ACC^5;sbita6=ACC^6;sbita7=ACC^7;voidclock_out(unsignedchardd){ACC=dd;clock_dat=a0;clock_clk=1;clock_clk=0;clock_dat=a1;clock_clk=1;clock_clk=0;clock_dat=a2;clock_clk=1;clock_clk=0;clock_dat=a3;clock_clk=1;clock_clk=0;clock_dat=a4;clock_clk=1;clock_clk=0;clock_dat=a5;clock_clk=1;clock_clk=0;clock_dat=a6;clock_clk=1;clock_clk=0;clock_dat=a7;clock_clk=1;clock_clk=0;}unsignedcharclock_in(void){clock_dat=1;a0=clock_dat;clock_clk=1;clock_clk=0;a1=clock_dat;clock_clk=1;clock_clk=0;a2=clock_dat;clock_clk=1;clock_clk=0;a3=clock_dat;clock_clk=1;clock_clk=0;a4=clock_dat;clock_clk=1;clock_clk=0;a5=clock_dat;clock_clk=1;clock_clk=0;a6=clock_dat;clock_clk=1;clock_clk=0;a7=clock_dat;return(ACC);}unsignedcharread_clock(unsignedcharord){unsignedchardd=0;clock_clk=0;clock_rst=0;clock_rst=1;clock_out(ord);dd=clock_in();clock_rst=0;clock_clk=1;return(dd);}voidwrite_clock(unsignedcharord,unsignedchardd){clock_clk=0;clock_rst=0;clock_rst=1;clock_out(ord);clock_out(dd);clock_rst=0;clock_clk=1;}/*

单个汉字库字摸提取程序,

tc2.0

编译*/#include"stdio.h"#include"dos.h"#include"process.h"#include"string.h"voidmain(void){longintnum_bytes,qm,wm;unsignedchard,i,j,k,a[132],b[132];unsignedchar*data;unsignedchar*hz;staticunsignedchardd[103];FILE*fp;if((fp=fopen("hzk16f","rb"))==NULL){printf("can'topenhzk16\n");exit(1);}clrscr();while(1){data=(unsignedchar*)malloc(33);printf("pleaseinput:\n");scanf("%s",dd);/*输入一个汉字

*/qm=*dd;/*经过区位码计算其在qm=qm-161;if(qm>87)exit(0);wm=*(dd+1);wm=wm-161;if(wm>94)exit(0);num_bytes=((long)qm*94+wm)*32;fseek(fp,num_bytes,SEEK_SET);fgets(data,33,fp);for(i=0;i<32;i++)b[i]=*data++;for(i=0;i<32;i+=2)a[i/2]=b[i];for(i=0;i<32;i+=2)a[i/2+16]=b[i+1];for(i=8;i<16;i++)b[i]=a[i];for(i=8;i<16;i++)a[i]=a[i+8];for(i=8;i<16;i++)a[i+8]=b[i];

hzk16f

文件中的偏移地点

*//*

变换,hzf16f

在电脑的积蓄格式是以行为字节计算的,一般的

lcd

都采纳以列为字节计算*/for(k=0;k<32;k+=8){for(j=0;j<8;j++){d=0;for(i=0;i<8;i++){if(a[i+k]>=0x80){switch(i){case0:d+=1;break;case1:d+=2;break;case2:d+=4;break;case3:d+=8;break;case4:d+=0x10;break;case5:d+=0x20;break;case6:d+=0x40;break;case7:d+=0x80;break;}}}for(i=0;i<8;i++)a[i+k]<<=1;b[j+k]=d;}}clrscr();printf("/*%s:*/\n",dd);/*输出0x00格式的16进制数*/for(k=0;k<32;k+=8){for(j=0;j<8;j++)printf("0x%x,",b[j+k]);printf("\n");}getch();}}按键扫描驱动程序unsignedcharkey,key_h,kpush;unsignedintkey_l;//按键连结到p1.0、p1.1、p1.2voidint_t0(void)interrupt1{unsignedchardd,i;TL0=TL0+30;TH0=0xfb;//800/*按键鉴别*/if((P1&0x7)==0x7){if((key_l>30)&&(key_l<800)&&(key_h>30)){//释放按键,假如以前按键时间少于1秒,读入键值key=kpush;}if((++key_h)>200)key_h=200;key_l=0;if(key>=0x80)key=0;//假如以前的按键为长按1秒,除掉键值}else{kpush=P1&0x7;key_l++;if((key_l>800)&&(key_h>30)){假如按键超出1秒,键值加0x80标志长按键key=kpush|0x80;key_h=0;key_l=0;}}}voidmain(void){TMOD=0x1;TR0=1;ET0=1;EA=1;while(1){while(!key){}switch(key){case1:break;case2:break;}}串行驱动led显示,//一个74hc595位移存放器驱动三极管驱动//两个74hc595驱动led段,方式位5位//5分频,每次扫描时间位1.25ms

ledx8段

位,x2=10

个数码管定义特别符号#definenul0xf#defineqc0xc#defineqb0xb#defineq_0xa#defineq__0xd#defineq___0xe#defineqp0x10#defineqe0x11#defineqj0x12#defineqn0x13#defineqf0x14#defineqa0x15#defineqr0x16#defineqd0x17#definequ0x18#defineql0x19#defineqh0x1a#defineqwen0x1b#defineqt0x1c#defineqla0x1d#defineqlb0x1e#defineqlc0x1f#defineqld0x20#defineqle0x21#defineqlf0x22#defineqlg0x23#defineqldp0x24//显示段信息,不相同led排列组合的段信息只要改正8个数值即可。因此,该定义拥有通用性。显示-d20//|c40|e10//-g80//|b2|f4_a1.dp8#definepa1#definepb2#definepc0x40#definepd0x20#definepe0x10#definepf4#definepg0x80#definepdp8//--------------#definel0pdp+pg#definel1255-pf-pe#definel2pdp+pc+pf#definel3pdp+pc+pb#definel4pdp+pa+pb+pd#definel5pdp+pb+pe#definel6pdp+pe#definel7pdp+pc+pg+pb+pa#definel8pdp#definel9pdp+pb#definelapdp+pa#definelbpdp+pd+pe#definelcpdp+pg+pe+pf#defineldpdp+pc+pd#definelepdp+pe+pf#definelfpdp+pe+pf+pa#definel_255-pg#definelnul255#definellpdp+pg+pd+pf+pe#definelppdp+pa+pf#defineltpdp+pd+pe+pf#definelrpdp+pe+pf+pg+pa#definelnpdp+pg+pa#definelhpdp+pd+pe+pa#definelypdp+pb+pd#definelupdp+pg+pd#definel__pdp+pg+pb+pc+pe+pf#definel___l__-pg#definel_1255-pa#definel_2255-pa-pg#definelj255-(pe+pf+pa)#definelwen255-(pd+pe+pg+pb)#definelall0#definella255-pa#definellb255-pb#definellc255-pc#definelld255-pd#definelle255-pe#definellf255-pf#definellg255-pg#definelldp255-pdp//串行送出的位信息,当前是10位led显示。unsignedcharcodeun_dig[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb};串行送出的短信息。unsignedcharcodeun_disp[]={l0,l1,l2,l3,l4,l5,l6,l7,l8,l9,l_,lb,lc,l__,l___,lnul,lp,le,lj,ln,lf,la,lr,ld,lu,ll,lh,lwen,lt,lla,llb,llc,lld,lle,llf,llg,lldp,lnul};sbitd_clk=P0^0;//移位时钟sbitd_dat=P0^1;sbitd_st=P0^2;

//移位数据//移位锁定unsignedchardig;

//位扫描计数器unsignedchard[10];

//显示缓冲送出8位串行数据voidout_disp(unsignedchardd){unsignedchari;for(i=0;i<8;i++){if(dd&1)d_dat=1;elsed_dat=0;d_clk=0;dd>>=1;d_clk=1;}}控制小数点和闪烁,显示数据|0x040表示有小数点;显示数据|0x80表示闪烁。voidout_displ(unsignedchardd){if(dd>=0x80){if(s001>flash_time){out_disp(0xff);return;}}dd&=0x7f;if(dd>=0x40){dd=un_disp[dd&0x3f]^pdp;}elsedd=un_disp[dd];out_disp(dd);}unsignedints001;//闪烁时间参照voidint_t0(void)interrupt1{unsignedchardd;TL0=TL0+30;TH0=0xfb;//800time++;if((++s001)>=800)s001=0;//显示if((++dig)>4)dig=0;d_st=0;dd=d[dig+5];out_displ(dd);dd=d[dig];out_displ(dd);out_disp(un_dig[dig]);d_st=1;}voidmain(void){unsignedchari;TMOD=0x1;TR0=ET0=1;EA=1;for(i=0;i<10;i++)d[i]=i;//displaytestwhile(1){}}STC单片机中的eeprom写入和读取6位的10进制数需要进行数据种类变换吗?详尽是怎样现的呢?2013-06-0410:24dwsxfg|分类:内存|阅读34次分享到:举报|2013-06-0410:27提问者采纳6位10进制数,变换为16进制,再写入EEPROM.longx;分4个字节写入ucharc1;c1=x>>24;//最高字节c1=x>>16;//次高字节c1=x>>8;//次低字节c1=x&0xff;//最低字节分别写入就能够了。追问我用的是stc12C5A60S2单片机,我将转变轩16进制的数保存在一个数组,此后整个数组写进去,当需要的时候再读出来复原成十进制数能否呢?回答自然能够。追问想了一下,不知应当怎样用单片机C语言去实现啊,能够指导下不?提问者讨论感谢哈一个牛人的对于STC的EEPROM的介绍(很不错)说明:有关内容来自网上,整理而成。转贴在此主要供参照学习用单片机运行时的数据都存在于RAM(随机积蓄器)中,在掉电后RAM中的数据是无法保存的,那么怎样使数据在掉电后不扔掉呢?这就需要使用EEPROM或FLASHROM等积蓄器来实现。在传统的单片机系统中,一般是在片外扩展积蓄器,单片机与积蓄器之间经过IIC或SPI等接口来进行数据通信。这样不只会增加开发成本,同时在程序开发上也要花更多的心思。在STC单片机中内置了EEPROM(其实是采纳IAP技术读写内部FLASH来实现EEPROM),这样就节俭了片外资源,使用起来也更为方便。下面就详尽介绍STC单片机内置EEPROM及其使用方法。STC各型号单片机内置的EEPROM的容量各有不相同,见下表:(内部EEPROM能够擦写100000次以上)上面提到了IAP,它的意思是“在应用编程”,即在程序运行时程序积蓄器可由程序自己进行擦写。正是是因为有了IAP,进而能够使单片机能够将数据写入到程序积蓄器中,使得数据忧如烧入的程序相同,掉电不扔掉。自然写入数据的地区与程序积蓄区要分开来,以使程序不会碰到损坏。要使用IAP功能,与以下几个特别功能存放器有关:ISP_DATA:ISP/IAP操作时的数据存放器。ISP/IAP从Flash读出的数据放在此处,向Flash写的数据也需放在此处ISP_ADDRH:ISP/IAP操作时的地点存放器高八位。ISP_ADDRL:ISP/IAP操作时的地点存放器低八位。ISP_CMD:ISP/IAP操作时的命令模式存放器,须命令触发存放器触发方可奏效。ISP_TRIG:ISP/IAP操作时的命令触发存放器。当ISPEN(ISP_CONTR.7)=1时,对ISP_TRIG先写入0x46,再写入0xb9,ISP/IAP命令才会奏效。单片机芯片型号初步地点内置EEPROM容量(每扇区512字节)STC89C51RC,STC89LE51RC0x2000共八个扇区STC89C52RC,STC89LE52RC0x2000共八个扇区STC89C54RD+,STC89LE54RD+0x8000共五十八个扇区STC89C55RD+,STC89LE55RD+0x8000共五十八个扇区STC89C58RD+,STC89LE58RD+0x8000共五十八个扇区存放器表记地点名称76543210初始值ISP_DATA0xE2ISP/IAP闪存数据存放器11111111ISP_ADDRH0xE3ISP/IAP闪存地点高位00000000ISP_ADDRL0xE4ISP/IAP闪存地点低位00000000ISP_CMD0xE5ISP/IAP闪存命令存放器MS2MS1MS0xxxxx000ISP_TRIG0xE6ISP/IAP闪存命令触发xxxxxxxxISP_CONTR0xE7ISP/IAP控制存放器ISPENSWBSSWRSTWT2WT1WT000xx000B7B6B5B4B3B2B1B0命令/操作模式选择保存命令选择-----000待机模式,无ISP/IAP操作-----001对用户的应用程序Flash区及数据Flash区字节读-----010对用户的应用程序Flash区及数据Flash区字节编程-----011对用户的应用程序Flash区及数据Flash区扇区擦除ISP_CONTR:ISP/IAP控制存放器。ISPEN:ISP/IAP功能赞同位。0:禁止ISP/IAP编程改变Flash,1:赞同编程改变FlashSWBS:软件选择从用户主程序区启动(0),仍是从ISP程序区启动(1)。SWRST:0:不操作,1:产生软件系统复位,硬件自动清零。ISP_CONTR中的SWBS与SWRST这两个功能位,能够实现单片机的软件启动,并启动到ISP区或用户程序区,这在“STC单片机自动下载”一节,亦有所应用。如:ISP_CONTR=0x60?则能够实现从用户应用程序区软件复位到ISP程序区开始运行程序。ISP_CONTR=0x20?则能够实现从ISP程序区软件复位到用户应用程序区开始运行程序。用IAP向Flash中读写数据,是需要必定的读写时间的,读写数据命令发出后,要等待一段时间才能够读写成功。这个等待时间就是由WT2、WT1、WT0与晶体振荡器频次决定的。(以上的建议时钟是(WT2、WT1、WT0)取不相同的值时的标称时钟,用户系统中的时钟不要过高,否则可能使操作不牢固。)stc单片机EEPROM读写(一)EEPROM操作函数:#defineRdCommand0x01#definePrgCommand0x02#defineEraseCommand0x03#defineError1#defineOk0#defineWaitTime0x01#definePerSector512unsignedcharxdataTtotal[512]?/*ISP_TRIG=0x46?/*触发ISP_IAP命令字节1*/ISP_TRIG=0xb9?/*触发ISP_IAP命令字节2*/_nop_()?}/*字节读*/unsignedcharbyte_read(unsignedintbyte_addr){ISP_ADDRH=(unsignedchar)(byte_addr>>8)?/*地点赋值*/ISP_ADDRL=(unsignedchar)(byte_addr&0x00ff)?ISP_CMD&=0xf8?/*除掉低3位*/ISP_CMD|=RdCommand?/*写入读命令*/ISPgoon()?/*触发履行*/ISP_IAP_disable()?/*returnISP_DATA?/*

封闭ISP,IAP功能*/返回读到的数据*/}/*扇区擦除*/voidsectorerase(unsignedintsector_addr){unsignedintiSectorAddr?iSectorAddr=(sector_addr&0xfe00)?/*取扇区地点*/ISP_ADDRH=(unsignedchar)(iSectorAddr>>8)?ISP_ADDRL=0x00?ISP_CMD&=0xf8?/*清空低3位*/ISP_CMD|=EraseCommand?/*擦除命令3*/ISPgoon()?/*触发履行*/ISP_IAP_disable()?/*封闭ISP,IAP功能*/}/*字节写*/voidbyte_write(unsigned

intbyte_addr,

unsigned

charoriginal_data){ISP_ADDRH=(unsignedISP_ADDRL=(unsigned

char)(byte_addr>>8)?/*取地点*/char)(byte_addr&0x00ff)?ISP_CMD&=0xf8?/*清低3ISP_CMD|=PrgCommand?/*ISP_DATA=original_data?/*

位*/写命令2*/写入数据准备*/ISPgoon()?/*

触发履行

*/ISP_IAP_disable()?/*封闭IAP功能*/}/*字节写并校验*/unsignedcharbyte_write_verify(unsignedintbyte_addr,unsignedcharoriginal_data){ISP_ADDRH=(unsigned

char)(byte_addr>>8)?

/*

取地点*/ISP_ADDRL=(unsigned

char)(byte_addr&0xff)?ISP_CMD&=0xf8?/*清低3位*/ISP_CMD|=PrgCommand?/*写命令2*/ISP_DATA=original_data?ISPgoon()?/*触发履行*//*开始读,没有在此重复给地点,地点不会被自动改变*/ISP_DATA=0x00?/*清数据传达存放器*/ISP_CMD&=0xf8?/*清低3位*/ISP_CMD|=RdCommand?/*读命令1*/ISP_TRIG=0x46?/*触发ISP_IAP命令字节1*/ISP_TRIG=0xb9?/*触发ISP_IAP命令字节2*/_nop_()?/*延时*/ISP_IAP_disable()?/*封闭IAP功能*/if(ISP_DATA==original_data)/*读写数据校验*/returnOk?/*返回校验结果*/elsereturnError?}/*数组写入*/unsignedchararraywrite(unsignedintbegin_addr,unsignedintlen,unsignedchar*array){unsignedinti?unsignedintin_addr?/*判是否是有效范围,此函数不相赞同跨扇区操作*/if(len>PerSector)returnError?in_addr=begin_addr&0x01ff?/*扇区内偏移量*/if((in_addr+len)>PerSector)returnError?in_addr=begin_addr?/*逐个写入并校订*/ISP_IAP_enable()?/*翻开IAP功能*/for(i=0?i<len?i++){/*写一个字节*/ISP_ADDRH=(unsignedchar)(in_addr>>8)?ISP_ADDRL=(unsignedchar)(in_addr&0x00ff)?ISP_DATA=array[i]?/*取数据*/ISP_CMD&=0xf8?/*清低3位*/ISP_CMD|=PrgCommand?/*写命令2*/ISP_TRIG=0x46?/*触发ISP_IAP命令字节1*/ISP_TRIG=0xb9?/*触发ISP_IAP命令字节2*/_nop_()?/*读回来*/ISP_DATA=0x00?ISP_CMD&=0xf8?/*清低3位*/ISP_CMD|=RdCommand?/*读命令1*/ISP_TRIG=0x46?/*触发ISP_IAP命令字节1*/ISP_TRIG=0xb9?/*触发ISP_IAP命令字节2*/_nop_()?/*比较对错*/if(ISP_DATA!=array[i]){ISP_IAP_disable()?returnError?}in_addr++?/*指向下一个字节*/}ISP_IAP_disable()?returnOk?}/*扇区读出*//*程序对地点没有作有效性判断,请调用前早先保证他在规定范围内*/voidarrayread(unsignedintbegin_addr,unsignedcharlen){unsignedintiSectorAddr?unsignedinti?iSectorAddr=begin_addr?//&0xfe00?/*取扇区地点*/ISP_IAP_enable()?for(i=0?i<len?i++){ISP_ADDRH=(unsignedchar)(iSectorAddr>>8)?ISP_ADDRL=(unsignedchar)(iSectorAddr&0x00ff)?ISP_CMD&=0xf8?/*清低3位*/ISP_CMD|=RdCommand?/*读命令1*/ISP_DATA=0?ISP_TRIG=0x46?/*触发ISP_IAP命令字节1*/ISP_TRIG=0xb9?/*触发ISP_IAP命令字节2*/_nop_()?Ttotal[i]=ISP_DATA?iSectorAddr++?}ISP_IAP_disable()?/*封闭IAP功能*/}主函数对EEPROM操作函数进行调用:#include<stc51rd.h>#include<intrins.h>#include<stc_eeprom.h>#include<ados.h>inti?voiddelay(unsignedinttime){while(time)?}voidmain(){_ADOS(22.1184)?//ADOS自动下载//for(i=0?i<100?i++)//{//Ttotal[i]=i?//}//arraywrite(0x8000,100,Ttotal)?/*第一次运行时向EEPROM中写入数据此后再将写入函数说明掉,将先前写入的数据读出,输出在P2口上。*/arrayread(0x8000,100)?for(i=0?i<100?i++){P2=~Ttotal[i]?delay(10000)?}while(1)?}stc单片机EEPROM读写(二)sfrisp_data=0xe2;sfrisp_addrh=0xe3;sfrisp_addrl=0xe4;sfrisp_cmd=0xe5;sfrisp_trig=0xe6;sfrisp_contr=0xe7;unsignedchareeprom_read(unsignedintaddres);voideeprom_write(unsignedintaddress,unsignedcharwdata);voideeprom_eares(unsignedintaddres);//扇区擦除。voideeprom_eares(unsignedintaddres)//扇区擦除。{unsignedi;isp_addrl=addres;//低位地点isp_addrh=addres>>8;//高位地点isp_contr=0x01;isp_contr=isp_contr|0x80;//设时间与充ISP操作。isp_cmd=0x03;//扇区命命令isp_trig=0x46;//触发isp_trig=0xb9;//触发启动。for(i=0;i<3;i++);isp_addrl=0xff;isp_addrh=0xff;isp_contr=0x00;isp_cmd=0x00;isp_trig=0x00;}voideeprom_write(unsignedintaddres,unsignedcharwrite_data)//写数据。{unsignedchari;isp_data=write_data;//要写入的数据。isp_addrl=addres;//低位地点isp_addrh=addres>>8;//高位地点isp_contr=0x01;isp_contr=isp_contr|0x80;//设时间与充ISP操作。isp_cmd=0x02;//写命令isp_trig=0x46;//触发isp_trig=0xb9;//触发启动。for(i=0;i<3;i++);isp_addrl=0xff;isp_addrh=0xff;isp_contr=0x00;isp_cmd=0x00;isp_trig=0x00;}unsignedchareeprom_read(unsignedintaddres){unsignedchari,z;isp_addrl=addres;//低位地点isp_addrh=addres>>8;//高位地点isp_contr=0x01;isp_contr=isp_contr|0x80;//设时间与充ISP操作。isp_cmd=0x01;//写命令isp_trig=0x46;//触发isp_trig=0xb9;//触发启动。for(i=0;i<3;i++);isp_addrl=0xff;isp_addrh=0xff;isp_contr=0x00;isp_cmd=0x00;isp_trig=0x00;z="isp"_data;return(z);}stc单片机EEPROM读写(三)内部EEPROM读写定义ISP_DATAEQU0E2H;写入读出数据存放器.ISP_ADDRHEQU0E3H;地点存放器高8位ISP_ADDRLEQU0E4H;地点存放器低8位ISP_CMDEQU0E5H;命令模式存放器ISP_TRIGEQU0E6H;命令触发存放器ISP_CONTREQU0E7H;ISP/IAP控制存放器.IS

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论