/* 1. Compiler: TC 2.0 2. Mode: Large 3. Project: Demo5.c Demo5.prj ..\lib\8000l.lib ..\lib\tcpipl.lib 4. Explain: 1. To read and write NVSRAM(0 to 30 totally 31 bytes) 2. It can read and write NVSRAM in any number of cycles 3. Li-battery for data backup, 10 yeasr in the normal condition 5. Hordware: 8831 It's compiled by Tony ---------------------------------------------------------------------- */ #include #include #include #include #include #include"..\lib\8000.h" #include"..\lib\vxcomm.h" /* ------------------------------------------------------------------- */ void ReadRTC(int addr, int *data); void WriteRTC(int addr, int data); /* ReadRTC,WriteRTC addr: 32-63 for NavRam addr: 0-7 Time,Date addr: 8,Control register. Bit7=1:Write protect,0:Write enable if set this bit=1,cannot write data to RTC(time,date,NVRAM) that is you can not set new time or date form ROM DOS command TIME,DATE. and you cannot write new data to NVRAM. */ int data; void main() { unsigned int i=0,j=0; int idx,regidx,quit; char c,cmd[20]; unsigned char NVRAM[31]; int type; int ver; type=Is8000(); /*detect the current operatin system*/ if(type) { ver=GetLibVersion(); Print("Hello 8831! (Flash memory is %d K)\n\r",type); Print("Library version is %d.%02d",ver>>8,ver&0xff); } else { Print("Hello PC!, this program is not run under I-8831."); return; } /* InitLib();*/ /* driver initial */ Init5DigitLed(); /* 5-digit LED initial */ Show5DigitLed(3,17); /* show - in 5-digit LED */ for(j=0;j<=8;j++){ ReadRTC(j,(int *)&i); Print("\n\rClock[%d]=%02X",j,i); } ReadRTC(7,(int *)&j); if(j&0x80) Print("\n\rCurrent is Write Protect"); else { Print("\n\rCurrent is Write Enable"); WriteRTC(7,0x80); /* write protect */ Print("\n\rNow Set to Write Protect"); } /* read current NVRAM 0-31 */ for(j=0;j<31;j++){ NVRAM[j]=ReadNVRAM(j); } Print("\n\rCurrent Values are:\n\r"); for(j=0;j<31;j++) Print("%3d ",NVRAM[j]); for(j=0;j<31;j++) NVRAM[j]++; for (j=0;j<31; j++) WriteNVRAM(j,NVRAM[j]); /* write to NVRAM for test */ Print("\n\rAfter write Values are:\n\r"); for(j=0;j<31;j++) Print("%3d ",ReadNVRAM(j)); WriteRTC(7,0x00); /* write enable */ Print("\n\rNow Set to Write Enable"); for (j=0;j<31; j++) WriteNVRAM(j,NVRAM[j]); /* write to NVRAM for test */ Print("\n\rAfter write Values are:\n\r"); for(j=0;j<31;j++) Print("%3d ",ReadNVRAM(j)); quit=0; cmd[0]=0; idx=0; regidx=0; Print("\n\rdemo5>"); while(!quit){ if(Kbhit()){ switch(c=Getch()){ case 'q': case 'Q': quit=1; case '\r': Putch('\r'); Putch('\r'); cmd[idx]=0; switch(cmd[0]){ case 'a': case 'A': /* set all to xx */ data=atoi(cmd+2); for(j=0;j<31;j++) WriteNVRAM(j,data); Ungetch('s'); Ungetch('\r'); break; case 's': case 'S': /* show all */ for(j=0;j<31;j++) Print("%3d ",ReadNVRAM(j)); break; case 'r': case 'R': /* set register idx */ regidx=atoi(cmd+1); Print("\n\rset idx to %d",regidx); break; case 'd': case 'D': /* show current register value */ ReadRTC(regidx+32,&data); Print("\n\ridx=%d data=%d",regidx,data); break; default: if(cmd[0]>='0' && cmd[0]<='9'){ /* set value to current register */ data=atoi(cmd); WriteNVRAM(regidx,data); Print("\n\rwrite %d to index %d",data,regidx); } } idx=0; Print("\n\rdemo5>"); break; case '\b': if(idx){ cmd[--idx]=0; Putch(c); } break; default: cmd[idx++]=c; Putch(c); break; } } } }