1.端口、变量定义
#include"msp430x41x.h"
;#defineRESET_VECTOR15*2/*0xFFFEReset[HighestPriority]*/
;******P1端口定义******
ICPOWERSET4H//IC卡的VCC
ICRSTset8h//IC卡的RST
ICIOset20h//IC卡的I/O
ICKEYSET40H
;******P4端口定义******
;SAMCLKSET2H
SAMPOWERset4h
SAMRSTset08h
SAMIOset10h
;******ICFlag0,1标志位定义******
#defineICSAM01h,&ICFLAG0//0--对SAM操作1--对卡操作
#defineCARDPRO_ERR02h,&ICFLAG0//0--读写卡操作正常1--读写卡错误
#defineICXOR40h,&ICFLAG1//卡/ESAM传来的校验和
#defineMXOR80h,&ICFLAG1//CPU计算的校验和
;*******用户寄存器*************
sfrBICFLAG0=200h//标志寄存器0
sfrBICFLAG1=201H//标志寄存器1
RSTDATABUFSET210H//复位信号存放的区域,共13个字节
COMMANDLENEQU220H//命令+数据的长度
CLAEQU221H
INSEQU222H
P1EQU223H
P2EQU224H
LCLEEQU225H//发送或接收字节的长度
DATABUFEQU226H//发送数据存放的区域
REINSSET250H//返回的INS代码
SWCH1SET251H//状态字sw1
SWCH2SET252H//状态字sw2
COMDATABUFSET253H//接收数据存放的区域
;*******端口替换*************
#definePOUTAP1OUT
#definePDIRAP1DIR
#definePINAP1IN
#definePOUTBP4OUT
#definePDIRBP4DIR
#definePINBP4IN
;******定义特殊寄存器******
#defineCNTREGR5//发送或接收数据的位数(常为8位)
#defineTRDATAR6//要发送或接收到的数据
#defineERRCNTR7//错误计数器
#defineDELAYCNTR8//接收字符时的延时计数器
#defineRESETCNTR9//计数器,复用
#defineBXR10//作间址寄存器
#defineDELAYNUMR11//计算ETU所用的延时计数器
;*********************************************************************
RSEGCSTACK
DS2
RSEGCODE//程序代码
Reset
MOV#SFE(CSTACK),SP//初始化系统堆栈指针
MOV#WDTPW+WDTHOLD,&WDTCTL//停看门狗
BIC#GIE,SR
BIS.B#ICSAM//对IC卡操作,换成BIC则是对ESAM操作
NOP
NOP
CALL#CARDRESET//复位
MOV.B#17,RESETCNT
W1:CALL#DELAY1ETU
DEC.BRESETCNT
JNZW1
CALL#GET_RANNUM//取随机数,16个,存放在253H开始的RAM中
CALL#COMMAND
MOV.B#8,RESETCNT
W2:CALL#DELAY1ETU
DEC.BRESETCNT
JNZW2
CALL#WRITE_B//写二进制文件,写的内容是从226H开始的8字节
CALL#COMMAND
MOV.B#12,RESETCNT
W3:CALL#DELAY1ETU
DEC.BRESETCNT
JNZW3
CALL#READ_B//读二进制文件,存放在253H开始的RAM中
CALL#COMMAND
CALL#CARDDOWN
;CALL#SAMDOWN
wokk:
jmpwokk