学习cpu 设计(CPU卡程序设计实例)

1、文件主目录宏定义//卡主目录3f 01,Esam主目录3f 00,我来为大家讲解一下关于学习cpu 设计?跟着小编一起来看一看吧!

学习cpu 设计(CPU卡程序设计实例)

学习cpu 设计

1、文件主目录宏定义

//卡主目录3f 01,Esam主目录3f 00

#define MainDir 0x3f

#define CardMainDir 0x01

#define EsamMainDir 0x00

2、响应字符宏定义

//响应状态字SW1,SW2,

//命令正确执行的响应数据为SW1SW2=90 00或SW1SW2=61 00

#define RespondStateByte1 0x90

#define RespondStateByte2 0x00

#define RespondStateByte3 0x61

3、文件标识符宏定义

//文件标识符,短文件标识符 0x80

#define CommonApplyInfoFileID 0x95 //公共应用信息文件

#define CommonApplyInfoBackFileID 0x8f //公共应用信息反馈文件

#define OperateInfoFileID 0x88 //操作信息文件

#define OperateInfoBackFileID 0x89 //操作信息反馈文件

4、标量及标志位定义

unsigned char TxAndRxBuff[124],cTxAndRxStatus;

//cTxAndRxStatus CPU卡接收数据正确标志

#define ReceINSRightBIT BIT0

5、文件选择函数

/*******************************************

函数名称:SelectFile

函数功能:选择文件目录

输入参数:无

输出参数:无

描述:先根据变量选择是对卡还是ESAM操作

选择文件,CPU卡的主目录3F 01,ESAM的主目录3F 00

用于选择卡或ESAM的主工作目录,主目录选择成功后才能继续对卡或ESAM操作

*******************************************/

void SelectFile(void)

{

unsigned char ctemp;

unsigned char ucTransBuf[2]={0};

if(CardORESAM&CardWorkFlag)

{

ucTransBuf[0]=MainDir;

ucTransBuf[1]=CardMainDir;

}

else

{

ucTransBuf[0]=MainDir;

ucTransBuf[1]=EsamMainDir;

}

TxAndRxBuff[0]=0x00;

TxAndRxBuff[1]=0xA4;

TxAndRxBuff[2]=0x00;

TxAndRxBuff[3]=0x00;

TxAndRxBuff[4]=0x02;

cCommandLen=0x05;

SendCommandHead_Pro();

if(ErrorRWBIT&CardError) goto SelectFileEnd;

Delay1XETU(4);

if(ReceINSRightBIT&cTxAndRxStatus)

{

TxAndRxBuff[0]=ucTransBuf[0];

TxAndRxBuff[1]=ucTransBuf[1];

cCommandLen=2;

SendCommand(cCommandLen);

}

if(ErrorRWBIT&CardError) goto SelectFileEnd;

if(CardORESAM&CardWorkFlag) //从卡上取数

{

for(ctemp=0;ctemp<2;ctemp )

{

TxAndRxBuff[ctemp]=CardReceChar();

if(ErrorRWBIT&CardError) break;

}

if(ErrorRWBIT&CardError)

{

CardError=ErrorRSTBIT|CardError;

CardError=~ErrorRWBIT&CardError;

goto SelectFileEnd;

}

}

else //从ESAM取数

{

for(ctemp=0;ctemp<2;ctemp )

{

TxAndRxBuff[ctemp]=EsamReceChar();

if(ErrorRWBIT&CardError) break;

}

if(ErrorRWBIT&CardError)

{

CardError=ErrorRSTBIT|CardError;

CardError=~ErrorRWBIT&CardError;

goto SelectFileEnd;

}

}

//

if((TxAndRxBuff[0]!=RespondStateByte3)&&(TxAndRxBuff[0]!=RespondStateByte1))

CardError=ErrorRWBIT|CardError;

SelectFileEnd:

delay_ms2M(5);

}

6、延时函数

/*****************************************软件延时,主频1M*******************/

#define CPU_F1 ((double)1000000)

#define delay_us1M(x) __delay_cycles((long)(CPU_F1*(double)x/1000000.0))

#define delay_ms1M(x) __delay_cycles((long)(CPU_F1*(double)x/1000.0))

/****************************************************************************/

/*****************************************软件延时,主频2M*******************/

#define CPU_F2 ((double)2000000)

#define delay_us2M(x) __delay_cycles((long)(CPU_F2*(double)x/1000000.0))

#define delay_ms2M(x) __delay_cycles((long)(CPU_F2*(double)x/1000.0))

/****************************************************************************/

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页