卷
卷起千堆雪tyn
Unregistered / Unconfirmed
GUEST, unregistred user!
大体要求:
打开一个*.ep文件,将其写入IC卡;
首先判断是否插入IC卡,并口操作,如果是低电平,则有IC卡插入;若是高电平,则一直判断;
然后,先写到IC卡的缓存,每次写256个字节,作为一页,然后写到主存,直到全部写完。
详细内容见以下 : (请发到EMAIL : forevertyn@263.net)
将以下的C改为DELPHI,或者自己做一个写IC卡的DELPHI程序;有问题在线呼叫。
[red]写一个DELPHI程序,包括并口电平的判断,写入缓存,再写入主存!参照以下的C程序。[/red]
IC卡相关 :
命令字 保留位 页地址 字节地址
???缓存器:84H或者87H XXXX XXXXXXXXXXX BF8A-BFA0
主存器 83H或者86H 0000 PA10-PA0 XXXXXXXXX
#include <dos.h>
#include<string.h>
#include<stdio.h>
#include<conio.h>
#include<fcntl.h>
/*int cmd; 命令字
char pad2; 高页面地址,低四位有效
char pad1; 低页面地址,高7位有效
char pad0; 字节地址,
char data 发送数据
选通 cs
自动换行 sck
允许输入 si*/
void s_dat(char data);
void bufiwrite(char pad0,char data); /*一字节数据写入缓存器中*/
/*调bufiwrite()写一页(256字节)到缓存器后,再调bufwrite()写入到主存储器中*/
void bufwrite(char pad2,char pad1);
/*缓存器到主存储器的页写,每页256字节,每写一页pad1加2,pad1进位pad2加1*/
char bufread(char pad2,char pad1,char pad0);
char r_dat();
main(int argc,char **argv)
{ FILE *fp;
char *file="3121.ep";
char tmp,add0=0,add1=0,add2=0;
int i,num;
char j,n;
i=0xc4; /*初始化*/
outportb(0x37a);
/*判断有无ic卡 i=0有,1无*/
i=outportb(0x379);
i=i&0x40;
if(argc!=2)
printf("the excutive is error. file name ep name/n" );
strcpy(file,argv[1]);
printf("argv is %s/n",argv[1]);
printf("file is %s/n",file);
strcpy(file,"this is strcpy");
printf("the strcopy file is %s/n",file);
if((fp=fopen(file,"rb"))==NULL)
{ printf("the file ep does not exist ");
getch();
exit(0);}
num=filelength(fp);
n=num/256;
if(num%256!=0)
n++;
n=30;
for(j=0;j<n;j++)
{ for(i=0;i<256;i++)
{ tmp=getc(fp);
bufiwrite(add0,tmp);
add0++;}
bufwrite(add2,add1);
delay(400);
if(add1==0xfe)
{add1=0;
add2++;}
add1=add1+2;
}
}
void bufwrite(char pad2,char pad1)
{
char tmp;
tmp=inportb(0x37a);
tmp=tmp|0x01;
outportb(0x37a,tmp); /*clr cs*/
tmp=tmp|0x02;
outportb(0x37a,tmp); /*clr sck*/
s_dat(0x86); /*送命令字56h*/
s_dat(pad2);
s_dat(pad1);
s_dat(0);
tmp=tmp&0xfe;
outportb(0x37a,tmp);
tmp=tmp&0xfd;
outportb(0x37a,tmp);
return;
}
char bufread(char pad2,char pad1,char pad0)
{ char tmp,data;
tmp=inportb(0x37a);
tmp=inportb(0x37a);
tmp=tmp|0x01;
outportb(0x37a,tmp); /*clr cs*/
tmp=tmp|0x02;
outportb(0x37a,tmp); /*clr sck*/
s_dat(0x52); /*送命令字56h*/
s_dat(pad2);
s_dat(pad1);
s_dat(pad0);
s_dat(0);
s_dat(0);
s_dat(0);
s_dat(0);
data=r_dat();
tmp=tmp&0xfe;
outportb(0x37a,tmp);
tmp=tmp&0xfd;
outportb(0x37a,tmp);
return(data);
}
void bufiwrite(char pad0,char data)
{
int i;
char tmp;
tmp=inportb(0x37a);
tmp=tmp|0x01;
outportb(0x37a,tmp); /*clr cs*/
tmp=tmp|0x02;
outportb(0x37a,tmp); /*clr sck*/
s_dat(0x87); /*送命令字56h*/
s_dat(0);
s_dat(0);
s_dat(pad0);
s_dat(data);
tmp=tmp&0xfe;
outportb(0x37a,tmp);
tmp=tmp&0xfd;
outportb(0x37a,tmp);
return;
}
void s_dat(char data1)
{ int i;
char tmp=0,tmp1;
for(i=0;i<8;i++)
{ tmp=inportb(0x37a);
tmp=tmp|0x02; /*clr sck*/
outportb(0x37a,tmp);
tmp1=data1&0x80;
if(tmp1) /*si=1*/
{
tmp=tmp&0xf7;
/* outportb(0x37a,tmp);*/
}
else /*si=0*/
{
tmp=tmp|0x08;
/* outportb(0x37a,tmp); */
}
outportb(0x37a,tmp);
tmp=tmp&0xfd;
outportb(0x37a,tmp);
data1=data1<<1;
}
return;
}
char r_dat()
{ int i;
char data,tmp,j;
data=0;
tmp=inportb(0x37a);
for(i=0;i<8;i++)
{ tmp=tmp|0x02; /*clr sck*/
outportb(0x37a,tmp);
tmp=tmp&0xfd;
outportb(0x37a,tmp);
j=inportb(0x379);
j=j&0x20;
if(j)
data=data+1;
data=data<<1;
}
return(data);
}
打开一个*.ep文件,将其写入IC卡;
首先判断是否插入IC卡,并口操作,如果是低电平,则有IC卡插入;若是高电平,则一直判断;
然后,先写到IC卡的缓存,每次写256个字节,作为一页,然后写到主存,直到全部写完。
详细内容见以下 : (请发到EMAIL : forevertyn@263.net)
将以下的C改为DELPHI,或者自己做一个写IC卡的DELPHI程序;有问题在线呼叫。
[red]写一个DELPHI程序,包括并口电平的判断,写入缓存,再写入主存!参照以下的C程序。[/red]
IC卡相关 :
命令字 保留位 页地址 字节地址
???缓存器:84H或者87H XXXX XXXXXXXXXXX BF8A-BFA0
主存器 83H或者86H 0000 PA10-PA0 XXXXXXXXX
#include <dos.h>
#include<string.h>
#include<stdio.h>
#include<conio.h>
#include<fcntl.h>
/*int cmd; 命令字
char pad2; 高页面地址,低四位有效
char pad1; 低页面地址,高7位有效
char pad0; 字节地址,
char data 发送数据
选通 cs
自动换行 sck
允许输入 si*/
void s_dat(char data);
void bufiwrite(char pad0,char data); /*一字节数据写入缓存器中*/
/*调bufiwrite()写一页(256字节)到缓存器后,再调bufwrite()写入到主存储器中*/
void bufwrite(char pad2,char pad1);
/*缓存器到主存储器的页写,每页256字节,每写一页pad1加2,pad1进位pad2加1*/
char bufread(char pad2,char pad1,char pad0);
char r_dat();
main(int argc,char **argv)
{ FILE *fp;
char *file="3121.ep";
char tmp,add0=0,add1=0,add2=0;
int i,num;
char j,n;
i=0xc4; /*初始化*/
outportb(0x37a);
/*判断有无ic卡 i=0有,1无*/
i=outportb(0x379);
i=i&0x40;
if(argc!=2)
printf("the excutive is error. file name ep name/n" );
strcpy(file,argv[1]);
printf("argv is %s/n",argv[1]);
printf("file is %s/n",file);
strcpy(file,"this is strcpy");
printf("the strcopy file is %s/n",file);
if((fp=fopen(file,"rb"))==NULL)
{ printf("the file ep does not exist ");
getch();
exit(0);}
num=filelength(fp);
n=num/256;
if(num%256!=0)
n++;
n=30;
for(j=0;j<n;j++)
{ for(i=0;i<256;i++)
{ tmp=getc(fp);
bufiwrite(add0,tmp);
add0++;}
bufwrite(add2,add1);
delay(400);
if(add1==0xfe)
{add1=0;
add2++;}
add1=add1+2;
}
}
void bufwrite(char pad2,char pad1)
{
char tmp;
tmp=inportb(0x37a);
tmp=tmp|0x01;
outportb(0x37a,tmp); /*clr cs*/
tmp=tmp|0x02;
outportb(0x37a,tmp); /*clr sck*/
s_dat(0x86); /*送命令字56h*/
s_dat(pad2);
s_dat(pad1);
s_dat(0);
tmp=tmp&0xfe;
outportb(0x37a,tmp);
tmp=tmp&0xfd;
outportb(0x37a,tmp);
return;
}
char bufread(char pad2,char pad1,char pad0)
{ char tmp,data;
tmp=inportb(0x37a);
tmp=inportb(0x37a);
tmp=tmp|0x01;
outportb(0x37a,tmp); /*clr cs*/
tmp=tmp|0x02;
outportb(0x37a,tmp); /*clr sck*/
s_dat(0x52); /*送命令字56h*/
s_dat(pad2);
s_dat(pad1);
s_dat(pad0);
s_dat(0);
s_dat(0);
s_dat(0);
s_dat(0);
data=r_dat();
tmp=tmp&0xfe;
outportb(0x37a,tmp);
tmp=tmp&0xfd;
outportb(0x37a,tmp);
return(data);
}
void bufiwrite(char pad0,char data)
{
int i;
char tmp;
tmp=inportb(0x37a);
tmp=tmp|0x01;
outportb(0x37a,tmp); /*clr cs*/
tmp=tmp|0x02;
outportb(0x37a,tmp); /*clr sck*/
s_dat(0x87); /*送命令字56h*/
s_dat(0);
s_dat(0);
s_dat(pad0);
s_dat(data);
tmp=tmp&0xfe;
outportb(0x37a,tmp);
tmp=tmp&0xfd;
outportb(0x37a,tmp);
return;
}
void s_dat(char data1)
{ int i;
char tmp=0,tmp1;
for(i=0;i<8;i++)
{ tmp=inportb(0x37a);
tmp=tmp|0x02; /*clr sck*/
outportb(0x37a,tmp);
tmp1=data1&0x80;
if(tmp1) /*si=1*/
{
tmp=tmp&0xf7;
/* outportb(0x37a,tmp);*/
}
else /*si=0*/
{
tmp=tmp|0x08;
/* outportb(0x37a,tmp); */
}
outportb(0x37a,tmp);
tmp=tmp&0xfd;
outportb(0x37a,tmp);
data1=data1<<1;
}
return;
}
char r_dat()
{ int i;
char data,tmp,j;
data=0;
tmp=inportb(0x37a);
for(i=0;i<8;i++)
{ tmp=tmp|0x02; /*clr sck*/
outportb(0x37a,tmp);
tmp=tmp&0xfd;
outportb(0x37a,tmp);
j=inportb(0x379);
j=j&0x20;
if(j)
data=data+1;
data=data<<1;
}
return(data);
}