Y
YangFuHome
Unregistered / Unconfirmed
GUEST, unregistred user!
unsigned char *combuf; /*模拟控制器程序内存的缓冲区指针*/
unsigned int asta,aend,par[130];/*asta内存开始地址,aend内存结束地址*/
char *buf1 = "COM1",*buf2 = "COM2";/*PC机串行口的标志*/
unsigned int comp;/*PC机串行口地址的偏移*/
unsigned int Wdey;
long int Sdey;
char dd,fname[20];
lfile()
{
FILE *fp;
char rbuf[80],ss[2],ad[4],ch;
unsigned char lengh,ad0,ad1,ad2,ad3;
unsigned int sadd,ladd,lladd,address,i;
sadd=60000;/*缓冲区开始地址初值*/
lladd=0; /*缓冲区结束地址判别初值*/
fp=fopen(fname,"r");
if(fp==NULL) goto ee;/*打开文件不正确*/
fgets(rbuf,80,fp); /*读一个文件记录*/
if(rbuf[0]!=':') goto ee2;/*文件格式不正确,记录是以':'开头*/
goto l1; /*开始处理文件一个记录*/
l2: fgets(rbuf,80,fp); /*读一个文件记录*/
l1: if(rbuf[1]<60) ss[0]=rbuf[1]-48;else ss[0]=rbuf[1]-55;/*将字符串长度高位代表的字符转换为数值*/
if(rbuf[2]<60) ss[1]=rbuf[2]-48;else ss[1]=rbuf[2]-55;/*将字符串长度低位代表的字符转换为数值*/
lengh=ss[0]*16+ss[1]; /*计算长度*/
if(lengh==0) goto ee1; /*长度为零,表示文件结束*/
for (i=0;i<=3;i++){
if(rbuf[i+3]<60) ad=rbuf[i+3]-48;else ad=rbuf[i+3]-55;}/*将数据开始地址的字符串转换为数值*/
address=ad[0]*4096+ad[1]*256+ad[2]*16+ad[3];/*计算开始地址*/
if(address>lladd) {lladd=address;ladd=address+lengh-1;}/*计算缓冲区结束地址*/
if(address<sadd) sadd=address; /*计算缓冲区开始地址*/
for (i=0;i<=lengh-1;i++){
if(rbuf[i*2+ 9]<60) ss[0]=rbuf[i*2+ 9]-48;else ss[0]=rbuf[i*2+ 9]-55;
if(rbuf[i*2+10]<60) ss[1]=rbuf[i*2+10]-48;else ss[1]=rbuf[i*2+10]-55;
combuf[address+i]=ss[0]*16+ss[1];} /*将一个记录的数据写入缓冲区*/
goto l2;
ee2: gotoxy(20,15);printf(" File format error !");goto ee3;
ee: gotoxy(20,15);printf(" No the filename or path error !");goto ee3;
ee1: asta=(sadd/128)*128; /*计算开始页地址*/
aend=(ladd/128)*128+127;/*计算结束页地址*/
goto ee4;
ee3: gotoxy(40,19); printf("press any key......");
dd=11;/*文件处理错误标志*/
ee4: fclose(fp);
}
unsigned int asta,aend,par[130];/*asta内存开始地址,aend内存结束地址*/
char *buf1 = "COM1",*buf2 = "COM2";/*PC机串行口的标志*/
unsigned int comp;/*PC机串行口地址的偏移*/
unsigned int Wdey;
long int Sdey;
char dd,fname[20];
lfile()
{
FILE *fp;
char rbuf[80],ss[2],ad[4],ch;
unsigned char lengh,ad0,ad1,ad2,ad3;
unsigned int sadd,ladd,lladd,address,i;
sadd=60000;/*缓冲区开始地址初值*/
lladd=0; /*缓冲区结束地址判别初值*/
fp=fopen(fname,"r");
if(fp==NULL) goto ee;/*打开文件不正确*/
fgets(rbuf,80,fp); /*读一个文件记录*/
if(rbuf[0]!=':') goto ee2;/*文件格式不正确,记录是以':'开头*/
goto l1; /*开始处理文件一个记录*/
l2: fgets(rbuf,80,fp); /*读一个文件记录*/
l1: if(rbuf[1]<60) ss[0]=rbuf[1]-48;else ss[0]=rbuf[1]-55;/*将字符串长度高位代表的字符转换为数值*/
if(rbuf[2]<60) ss[1]=rbuf[2]-48;else ss[1]=rbuf[2]-55;/*将字符串长度低位代表的字符转换为数值*/
lengh=ss[0]*16+ss[1]; /*计算长度*/
if(lengh==0) goto ee1; /*长度为零,表示文件结束*/
for (i=0;i<=3;i++){
if(rbuf[i+3]<60) ad=rbuf[i+3]-48;else ad=rbuf[i+3]-55;}/*将数据开始地址的字符串转换为数值*/
address=ad[0]*4096+ad[1]*256+ad[2]*16+ad[3];/*计算开始地址*/
if(address>lladd) {lladd=address;ladd=address+lengh-1;}/*计算缓冲区结束地址*/
if(address<sadd) sadd=address; /*计算缓冲区开始地址*/
for (i=0;i<=lengh-1;i++){
if(rbuf[i*2+ 9]<60) ss[0]=rbuf[i*2+ 9]-48;else ss[0]=rbuf[i*2+ 9]-55;
if(rbuf[i*2+10]<60) ss[1]=rbuf[i*2+10]-48;else ss[1]=rbuf[i*2+10]-55;
combuf[address+i]=ss[0]*16+ss[1];} /*将一个记录的数据写入缓冲区*/
goto l2;
ee2: gotoxy(20,15);printf(" File format error !");goto ee3;
ee: gotoxy(20,15);printf(" No the filename or path error !");goto ee3;
ee1: asta=(sadd/128)*128; /*计算开始页地址*/
aend=(ladd/128)*128+127;/*计算结束页地址*/
goto ee4;
ee3: gotoxy(40,19); printf("press any key......");
dd=11;/*文件处理错误标志*/
ee4: fclose(fp);
}