CPU卡程序设计实例(十二)ESAM模块字节接收函数
来源:互联网 发布:淘宝实时交易量 编辑:程序博客网 时间:2024/06/18 00:14
ESAM模块字节接收函数
/**************************************
函数名称:EsamReceChar
函数功能:Esam接收一个字节
入口参数:无
出口参数:iTemp,ESAM复位响应的13个字节
描述:最多接收3次,与卡接收一字节函数功能一致
***************************************/
unsigned char EsamReceChar(void)
{
unsigned int iErrCoun;
unsigned long int iTemp;
unsigned char cTemp=0;
CardWorkFlag=~(ICXOR+MXOR)&CardWorkFlag;
for(iErrCoun=0;iErrCoun<3;iErrCoun++)
{
for(iTemp=0;iTemp<40000;iTemp++)
{
//判断起始位
if(!(EsamSDAInputCheck)) break;
else if(iTemp>(40000-2))
{
//超时错误
CardError=ErrorRWBIT|CardError;
goto RstOkEnd;
}
}
//接受1个字节,8位
for(iTemp=8;iTemp>=1;iTemp--)
{
cTemp=cTemp>>0x1;
Delay1ETU();
if(EsamSDAInputCheck)
{
//生成偶校验
CardWorkFlag=CardWorkFlag^0x80;
cTemp=0x80|cTemp;
}
else
{
cTemp=(~0x80)&cTemp;
}
}
Delay1ETU();
//判断偶校验是否正确
if(EsamSDAInputCheck) CardWorkFlag=ICXOR|CardWorkFlag;
if(CardWorkFlag&ICXOR)
{
if(CardWorkFlag&MXOR) goto RstOkEnd;
}
else if(!(CardWorkFlag&MXOR)) goto RstOkEnd;
//如果校验位错,则将I/O口置低—高,等待字符的再次发送。最多3次
CardError=ErrorRWBIT|CardError;
EsamSDAOutput;
EsamSDAOutputLow;
Delay1ETU();
EsamSDAOutputHigh;
}
RstOkEnd:
Delay05XETU();
return cTemp;
}
- CPU卡程序设计实例(十二)ESAM模块字节接收函数
- CPU卡程序设计实例(八)ESAM模块卡上、下电
- CPU卡程序设计实例(十)ESAM复位程序
- CPU卡程序设计实例(二十三)卡和ESAM之间内部认证
- CPU卡程序设计实例(二十六)卡和ESAM之间外部认证
- CPU卡设计实例及程序设计(二十七)外部认证,卡和ESAM通用
- CPU卡程序设计实例(十三)终端向ESAM发送数据
- CPU卡设计实例及程序设计(二十八)ESAM外部认证
- CPU卡设计实例及程序设计(三十)ESAM过程密钥内部认证
- CPU卡程序设计实例(十一)CPU卡字节数据接收
- CPU卡程序设计实例(二十五)ESAM过程密钥内部认证
- CPU卡程序设计实例(二十二)CPU卡内部认证
- CPU卡程序设计实例(十八)命令体函数
- CPU卡程序设计实例(二十)8字节随机数读取
- CPU卡程序设计实例(二十一)4字节随机数读取
- CPU卡程序设计实例(一)电路
- CPU卡程序设计实例(二)软件设计
- CPU卡程序设计实例(四)CPU卡处理流程
- SharePoint REST API
- jsp中request经常是的获取参数的方法总结
- 素数环
- 环境配置链接
- The Shortest Path in Nya Graph
- CPU卡程序设计实例(十二)ESAM模块字节接收函数
- 4月28日,URLReader,每日20行。
- 简单工厂模式
- vim 编辑器常用命令总结
- 模拟实现list(iterator)
- 网页切图div+css命名
- 题目1495:关键点
- 4月28日
- 题目1496:数列区间