CPU卡程序设计实例(十一)CPU卡字节数据接收
2017-04-28 19:16
197 查看
CPU卡字节接收函数
/*******************************************
函数名称:CardReceChar
函数功能:卡接收一个字节
输入参数:无
输出参数:cTemp,卡复位响应的13个字节
描述:最多接收3次,接收10位,第一位是起始位,第10位是校验位
,每接收一位(起始位除外),都要计算校验位(偶校验),
然后与接收的校验位比较,相等则数据正确
*******************************************/
unsigned char CardReceChar(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(!(CardSDAInputCheck)) break;
else if(iTemp>(40000-2))
{
//超时错误
CardError=ErrorRWBIT|CardError;
goto RstOkEnd;
}
}
//接受1个字节,8位
for(iTemp=8;iTemp>=1;iTemp--)
{
cTemp=cTemp>>0x1;
Delay1ETU();
if(CardSDAInputCheck)
{
CardWorkFlag=CardWorkFlag^0x80; //生成偶校验
cTemp=0x80|cTemp;
}
else
{
cTemp=(~0x80)&cTemp;
}
}
Delay1ETU();
//判断偶校验是否正确
if(CardSDAInputCheck) CardWorkFlag=ICXOR|CardWorkFlag;
if(CardWorkFlag&ICXOR)
{
if(CardWorkFlag&MXOR) goto RstOkEnd;
}
else if(!(CardWorkFlag&MXOR)) goto RstOkEnd;
//如果校验位错,则将I/O口置低—高,等待字符的再次发送。最多3次
CardError=ErrorRWBIT|CardError;
CardSDAOutput;
CardSDAOutputLow;
Delay1ETU();
CardSDAOutputHigh;
}
RstOkEnd:
Delay05XETU();
return cTemp;
}
/*******************************************
函数名称:CardReceChar
函数功能:卡接收一个字节
输入参数:无
输出参数:cTemp,卡复位响应的13个字节
描述:最多接收3次,接收10位,第一位是起始位,第10位是校验位
,每接收一位(起始位除外),都要计算校验位(偶校验),
然后与接收的校验位比较,相等则数据正确
*******************************************/
unsigned char CardReceChar(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(!(CardSDAInputCheck)) break;
else if(iTemp>(40000-2))
{
//超时错误
CardError=ErrorRWBIT|CardError;
goto RstOkEnd;
}
}
//接受1个字节,8位
for(iTemp=8;iTemp>=1;iTemp--)
{
cTemp=cTemp>>0x1;
Delay1ETU();
if(CardSDAInputCheck)
{
CardWorkFlag=CardWorkFlag^0x80; //生成偶校验
cTemp=0x80|cTemp;
}
else
{
cTemp=(~0x80)&cTemp;
}
}
Delay1ETU();
//判断偶校验是否正确
if(CardSDAInputCheck) CardWorkFlag=ICXOR|CardWorkFlag;
if(CardWorkFlag&ICXOR)
{
if(CardWorkFlag&MXOR) goto RstOkEnd;
}
else if(!(CardWorkFlag&MXOR)) goto RstOkEnd;
//如果校验位错,则将I/O口置低—高,等待字符的再次发送。最多3次
CardError=ErrorRWBIT|CardError;
CardSDAOutput;
CardSDAOutputLow;
Delay1ETU();
CardSDAOutputHigh;
}
RstOkEnd:
Delay05XETU();
return cTemp;
}
相关文章推荐
- CPU卡程序设计实例(十二)ESAM模块字节接收函数
- CPU卡程序设计实例(十五)数据校验
- CPU卡程序设计实例(二十一)4字节随机数读取
- CPU卡程序设计实例(十九)取响应数据命令
- CPU卡程序设计实例(十三)终端向ESAM发送数据
- CPU卡程序设计实例(二十)8字节随机数读取
- CPU卡程序设计实例(十四)终端向CPU卡发送数据
- httpClient 使用post方法提交json数据,接收返回数据实例
- Android接收wifi路由器发送过来的一组字节数据
- node.js系列(实例):原生node.js实现接收前台post请求提交数据
- PHP利用超级全局变量$_GET来接收表单数据的实例
- PHP利用超级全局变量$_POST来接收表单数据的实例
- read函数接收socket数据实例
- jquery的ajax异步请求接收返回json数据实例
- BLE发送接收任意字节数据
- Android实例demo21之json数据封装,服务器json数据接收
- ajax提交json数据并使用Springmvc接收实例
- Android蓝牙开发之数据窜位和数据接收错误以及重组字节数据
- 面向对象的程序设计学习笔记-18-静态数据成员实例
- PHP中实现接收多个name相同但Value不相同表单数据实例