學習cpu 設計?1、文件主目錄宏定義//卡主目錄3f 01,Esam主目錄3f 00,我來為大家講解一下關于學習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))
/****************************************************************************/
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!