学习cpu 设计(CPU卡程序设计实例)
1、文件主目录宏定义//卡主目录3f 01,Esam主目录3f 00,我来为大家讲解一下关于学习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