;**************************************
1.发命令,接收响应数据
;向IC卡/SAM模块发命令,并从IC卡/SAM模块接收响应数据,放入数据缓存区COMDATABUF
;若执行成功C=0,接收到的数据及长度在COMDATABUF格式为:长度+数据+SW1SW2
;**************************************
COMMAND:
MOV#CLA,BX
MOV.B#5,RESETCNT//命令个数
CALL#SEND_COMMAND//发送5个命令报头
BIT.B#C,SR//判断发送是否正确
JnzCOM_ERR
CALL#RECCHAR//接收从卡/ESAM来的返回INS
BIT.B#C,SR
JNZCOM_ERR
MOV#REINS,BX
MOV.Btrdata,0(BX)
CMP.B#5,COMMANDLEN
JNZCOM_NEXTCOM//发后续数据
MOV.bLCLE,RESETCNT//接收从卡/ESAM来的数据
MOV#COMDATABUF,BX
COM_NEXTDATA:
CALL#RECCHAR
MOV.Btrdata,0(BX)
INCBX
BIT.B#C,SR
JNZCOM_ERR//=1,ERR
DEC.BRESETCNT
JNZCOM_NEXTDATA
COM_RECSWCH:
MOV#SWCH1,BX//RECEIVESWCH1ANDSWCH2
CALL#RECCHAR
BIT.B#C,SR
JNZCOM_ERR
MOV.Btrdata,0(BX)
MOV#SWCH2,BX
CALL#RECCHAR
BIT.B#C,SR
JNZCOM_ERR
MOV.Btrdata,0(BX)
JMPCOM_OUT
COM_NEXTCOM:
CALL#DELAY05ETU
MOV.BLCLE,RESETCNT
MOV#DATABUF,BX
CALL#SEND_COMMAND
JMPCOM_RECSWCH
COM_ERR:
BIS.B#CARDPRO_ERR
COM_OUT:
RET
;**************************************
2.;取8字节随机数命令串
;**************************************
GET_rannum://取随机数
MOV.B#05,COMMANDLEN
MOV.B#00,CLA
MOV.B#84H,INS
MOV.B#00,P1
MOV.B#00,P2
MOV.B#16,LCLE
RET
;**************************************
3.;读二进制文件命令串
;**************************************
read_b://读二进制文件
MOV.B#05,COMMANDLEN
MOV.B#00,CLA
MOV.B#0b0H,INS
MOV.B#81H,P1
MOV.B#00H,P2
MOV.B#08,LCLE
RET
;**************************************
4.;写二进制文件命令串
;**************************************
WRITE_B://写二进制文件
MOV.B#13,COMMANDLEN
MOV.B#00,CLA
MOV.B#0D0H,INS
MOV.B#81H,P1
MOV.B#00H,P2
MOV.B#08,LCLE
RET
;**************************************