您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 国内外标准规范 > AT88SC1608加密卡
AT88SC153和AT88SC1608加密卡51单片机程序(引自北京卡来通电子技术有限公司);--------------------------------------------------------------------;ATMEL88SC1608读写子程序;P1.0--上电P1.1--SCLP1.2--SDAP1.3--RES;P1.4--P1.5--P1.6--P1.7--;--------------------------------------------------------------------COUNTEQU3AHCOUNT1EQU3BH;AUTHENTICATIONRIEQU3DHSIEQU3EHTIEQU3FHR_I_ADDRESSEQU40HS_I_ADDRESSEQU40HT_I_ADDRESSEQU40HR_0EQUR_I_ADDRESSR_1EQUR_I_ADDRESS+1R_2EQUR_I_ADDRESS+2R_3EQUR_I_ADDRESS+3R_4EQUR_I_ADDRESS+4R_5EQUR_I_ADDRESS+5R_6EQUR_I_ADDRESS+6R_7EQUR_I_ADDRESS+7KEYEQU48HTEMPEQU49HBIT0EQU4AHSI_EQU4BHLASTCALCEQU4CHQ1_TEQU4DHQ2_TEQU4EHNBREEQU4FHR_I_O_ADDRESSEQU0B0HS_I_O_ADDRESSEQU0B8HT_I_O_ADDRESSEQU0C0HCRYPTO_ADDRESSEQU0D0H;CIGC_ADDRESSEQU0D8H;GRAINEQ0_ADDRESSEQU0E0H;HOSTQ1_ADDRESSEQU0E8HQ2_ADDRESSEQU0F0H;AUTHENTICATIONSUBS=f2;----------------------------------------------;CALCULSTATE:IN:RI/SI/TI;OUT:R_I(0-7)/S_i(0-7)/T_i(0-4);USEDREGISTERS:R1R0R2ATEMP;----------------------------------------------CALCULSTATE:MOVR1,#R_I_O_ADDRESSMOVR0,#R_I_ADDRESSMOVR2,#8CALS001:MOVA,@R1MOV@R0,AINCR1INCR0DJNZR2,CALS001;LOADR_I_OUTMEMORYDATAMOVA,R_6MOVR2,#4CALS002:RRADJNZR2,CALS002ANLA,#1MOVBIT0,AMOVA,R_6RLA;R_6*2ORLA,BIT0ANLA,#1FHMOVTEMP,AMOVR_6,R_5MOVR_5,R_4MOVR_4,R_3MOVA,R_2XRLA,RIMOVR_3,AMOVR_2,R_1MOVR_1,R_0;1998.4.8加MOVA,R_4ADDA,TEMPMOVR_0,ACLRCSUBBA,#32;IFR_031JCCALS003MOVB,#31MOVA,R_0DIVABMOVB,#31MULABMOVTEMP,AMOVA,R_0CLRCSUBBA,TEMPMOVR_0,A;R_0%=31JNZCALS003MOVR_0,#31CALS003:MOVR1,#R_I_O_ADDRESSMOVR0,#R_I_ADDRESSMOVR2,#8CALS004:MOVA,@R0MOV@R1,AINCR1INCR0DJNZR2,CALS004MOVR1,#S_I_O_ADDRESSMOVR0,#R_I_ADDRESS;=S_I_ADDRESSMOVR2,#8CALS005:MOVA,@R1MOV@R0,AINCR1INCR0DJNZR2,CALS005MOVA,R_6MOVR2,#6CALS006:RRADJNZR2,CALS006ANLA,#1MOVBIT0,AMOVA,R_6RLAORLA,BIT0ANLA,#7FHMOVTEMP,AMOVR_6,R_5MOVA,R_4XRLA,SIMOVR_5,AMOVR_4,R_3MOVR_3,R_2MOVR_2,R_1MOVR_1,R_0MOVA,R_6ADDA,TEMPMOVR_0,ACLRCSUBBA,#128JCCALS007MOVB,#127MOVA,R_0DIVABMOVB,#127MULABMOVTEMP,AMOVA,R_0CLRCSUBBA,TEMPMOVR_0,AJNZCALS007MOVR_0,#127CALS007:MOVR1,#S_I_O_ADDRESSMOVR0,#R_I_ADDRESSMOVR2,#8CALS008:MOVA,@R0MOV@R1,AINCR1INCR0DJNZR2,CALS008MOVR1,#T_I_O_ADDRESS;MOVR0,#R_I_ADDRESS;=T_I_ADDRESSMOVR2,#5CALS009:MOVA,@R1MOV@R0,AINCR1INCR0DJNZR2,CALS009MOVTEMP,R_4MOVR_4,R_3MOVR_3,R_2MOVA,R_1XRLA,TIMOVR_2,AMOVR_1,R_0MOVA,R_3ADDA,TEMPMOVR_0,ACLRCSUBBA,#32JCCALS0010MOVB,#31MOVA,R_0DIVABMOVB,#31MULABMOVTEMP,AMOVA,R_0CLRCSUBBA,TEMPMOVR_0,AJNZCALS0010MOVR_0,#31CALS0010:MOVR1,#T_I_O_ADDRESSMOVR0,#R_I_ADDRESSMOVR2,#5CALS0011:MOVA,@R0MOV@R1,AINCR1INCR0DJNZR2,CALS0011RET;---------------------------------------;CALCUL(VOID)OUT:RISITISI_LASTCALC;USEDREGISTERS:RISITISI_R_I(0-7)TEMPR1;---------------------------------------CALCULV:MOVLASTCALC,#0MOVSI,#0MOVRI,#0MOVTI,#0LCALLCALCULSTATEMOVR1,#R_I_O_ADDRESSMOVA,@R1MOVR_0,AMOVR1,#R_I_O_ADDRESS+4MOVA,@R1MOVR_4,AXRLA,R_0ANLA,#1FHMOVRI,AMOVR1,#T_I_O_ADDRESSMOVA,@R1MOVR_0,AMOVR1,#T_I_O_ADDRESS+3MOVA,@R1MOVR_3,AXRLA,R_0ANLA,#1FHMOVTI,AMOVR1,#S_I_O_ADDRESSMOVA,@R1MOVSI,A;*********SI_=~S[0]?MOVA,#0FFHCLRCSUBBA,SIMOVSI_,A;*********SI_=~S[0]?MOVA,RIANLA,SI_MOVTEMP,AMOVA,SIANLA,TIORLA,TEMPANLA,#0FHMOVLASTCALC,ARET;-------------------------------------------;CALCULIN:NBREOUT:LASTCALC;-------------------------------------------CALCUL:ACALLCALCULV;CALC=LASTCALCDJNZNBRE,CALCULRET;------------------------------------------;CALCULKEY(KEY)USETEMPKEYA;IN:KEYOUT:R_I(0-7)S_I(0-7)T_I(0-4);------------------------------------------CALCULKEY:MOVA,KEYANLA,#1FHMOVRI,AMOVA,KEYRLARLARLAANLA,#78HMOVTEMP,AMOVA,KEYRRARRARRARRARRAANLA,#7ADDA,TEMPMOVSI,AMOVA,KEYRRARRARRAANLA,#1fhMOVTI,ALCALLCALCULSTATERET;------------------------------------------;AUTHENTICATIONINCRYPTO0-7,GC0-7,Q0-7;OUTQ1,Q2;USEDREGISTERS:A,R1,COUNT;------------------------------------------AUTHENTICATION:MOVCOUNT,#0AUT001:MOVA,COUNTRLA;*2MOVR1,#CRYPTO_ADDRESSADDA,R1MOVR1,AMOVA,@R1MOVKEY,AACALLCALCULKEYAUT0011:MOVR1,#CRYPTO_ADDRESSMOVA,COUNTRLAADDA,R1MOVR1,AINCR1MOVA,@R1MOVKEY,AACALLCALCULKEYAUT0012:MOVR1,#Q0_ADDRESSMOVA,COUNTADDA,R1MOVR1,AMOVA,@R1MOVKEY,AACALLCALCULKEYINCCOUNTMOVA,COUNTCJNEA,#4,AUT001MOVCOUNT,#0AUT002:MOVA,COUNTRLAMOVR1,#GC_ADDRESSADDA,R1MOVR1,AMOVA,@R1MOVKEY,AACALLCALCULKEYMOVR1,#GC_ADDRESSMOVA,COUNTRLAADDA,R1MOVR1,AINCR1MOVA,@R1MOVKEY,AACALLCALCULKEYMOVR1,#Q0_ADDRESS+4MOVA,COUNTADDA,R1MOVR1,AMOVA,@R1MOVKEY,AACALLCALCULKEYINCCOUNTMOVA,COUNTCJNEA,#4,AUT002MOVCOUNT,#0AUT003:MOVNBRE,#2LCALLCALCULMOVA,LASTCALCRLARLARLARLAMOVQ2_T,AMOVNBRE,#2LCALLCALCULMOVA,Q2_TORLA,LASTCALCMOVQ2_T,AMOVNBRE,#2LCALLCALCULMOVA,LASTCALCRLARLARLARLAMOVQ1_T,AMOVNBRE,#2LCALLCALCULMOVA,Q1_TORLA,LASTCALCMOVQ1_T,AMOVR1,#Q1_ADDRESSMOVA,R1ADDA,COUNTMOVR1,AMOVA,Q1_TMOV@R1,AMOVR1,#Q2_ADDRESSMOVA,R1ADDA,COUNTMOVR1,AMOVA,Q2_TMOV@R1,AINCCOUNTMOVA,COUNTCJNEA,#8,AUT003RET;--------------------------------------------------------------------;AUTH:密码认证子程序;功能:密码认证;输入:CI,GC,Q0;输出:;--------------------------------------------------------------------AUTH:MOVR1,#90H;清内部RAM90H--FFHMOVR3,#70HCLRAAUTH01:MOV@R1,AINCR1DJNZR3,AUTH01MOVR1,#CRYPTO_ADDRESS;保存CI,GC,Q0MOVR3,#18HMOVR0,#31HAUTH02:MOV
本文标题:AT88SC1608加密卡
链接地址:https://www.777doc.com/doc-3128198 .html