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))
/****************************************************************************/