微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 单片机控制AT88SC1604卡的应用实例

单片机控制AT88SC1604卡的应用实例

时间:10-08 来源:互联网 点击:

降沿时,地址计数器加1,地址计数器当前所指的地址单元的数据被输出到I/O线上。因此,在整个时钟周期Tdk期间,包含了地址加1(INC)和读出(REA)两项操作。

读IC数据子程序(R2:需读IC卡字节数,R0:数据区存放低位首地址)

RICDAZ: MOV A,#KXXDZ ;卡信息地址送A

LCALL SADR ;寻卡地址

RICDA: MOV R3,#08

RICDA1: SETB ICSDA

NOP

MOV C,ICSDA ;位读到A

RLC A

SETB ICCLK

NOP

CLR ICCLK

NOP

DJNZ R3,RICDA1

MOV @R0,A ;8位数据送数据区

DEC R0

DJNZ R2,RICDA

RET

; 寻IC卡位地址子程序(调用前16进制地址送ACC)

SADR: LCALL FWZCX

MOV B,#08

MUL AB ;计算位地址: 16进制地址*8

MOV R4,A ;低位位地址送R4

MOV R5,B ;高位位地址送R5

JNZ SADR1 ;低位地址不为0转

MOV A,R5

JZ SADR3

DEC R5

SADR1: SETB ICREST ;复位端置1

SETB ICSDA

CLR ICPGM

CLR ICCLK

CLR ICREST

SADR2: SETB ICCLK

SETB ICCLK

CLR ICCLK

CLR ICCLK

DJNZ R4,SADR2

MOV A,R5

JZ SADR3

DEC R5

SJMP SADR2

SADR3: RET

;

(3)比较操作:在进行比较操作时,必须保证使RST脚和PGM脚同时保持为低。比较操作只能对芯片密码控制区执行,且由芯片内部来判断。在FUSE2未熔断时,只能在SV=0时,对SC区进行比较操作,对其它区的比较操作均为无效操作。SV=1时,芯片不做任何比较操作。在FUSE2熔断后,只能在SV=0时,对SC区进行比较操作,对其它区的比较操作均为无效操作。

注:上述芯片密码比较时序图中是假设密码计数器中前两位为0,第三位寻到1的处理时序。

有关芯片SC的时序关系如图2~5图所示:

从操作(B)到(F),地址计数器不变,密码比较的过程是:

(A)比较安全密码/擦除密码序列

(B)在密码输入比较计数器中找出一位为“1”的位

(C)在这个为“1”的单元写“0”

(D)芯片输出“0”

(E)如果比较成功,在PGM的上升沿安全密码/擦除密码的相应标志

(SV,Sn或En)被置“1”,同时安全密码/擦除密码输入比较计数器

(SCAC,SnAC或EnAC)被擦除。

(F)如果擦除成功,相应安全密码/擦除密码标志被置“1”,芯片将输出“1”,否则芯片输出“0”。

(G)在CLK的下降沿,地址计数器加1,并输出下一位的状态。

比较用户密码子程序(地址0AH,0BH)

CPSC: MOV R0,#CMM+2

MOV R1,#06

MOV R2,#02

LCALL MVITI

MOV A,#0AH

LCALL SADR ;寻址

MOV R0,#06

LCALL BJMMRET

; 比较密码程序

BJMM: CLR ICREST

CLR ICPGM

MOV R2,#02

BJMM1: MOV A,@R0

MOV R3,#08

BJMM2: RLC A

MOV ICSDA,C

NOP

SETB ICCLK

NOP

CLR ICCLK

NOP

DJNZ R3,BJMM2

INC R0

DJNZ R2,BJMM1

MOV R2,#08;查8位

BJMM4: SETB ICSDA

NOP

MOV C,ICSDA

JC BJMM5 ;是1转

SETB ICCLK ;指向下一位

NOP

CLR ICCLK

NOP

DJNZ R2,BJMM4

LJMP BJMM8 ;计数器为00,卡锁死转

BJMM5: SETB ICPGM

NOP

CLR ICSDA ;写0

NOP

SETB ICCLK

NOP

CLR ICPGM

NOP

LCALL DELY5

CLR ICCLK

NOP

SETB ICSDA

NOP

MOV C,ICSDA

JNC BJMM6

LJMP BJMM7 ;未写入0,转出错

BJMM6: SETB ICPGM

NOP

SETB ICSDA ;写1(擦除)

NOP

SETB ICCLK

NOP

CLR ICPGM

NOP

LCALL DELY5

CLR ICCLK

NOP

SETB ICSDA

NOP

MOV C,ICSDA

NOP

SETB ICCLK

JNC BJMM7 ;擦除不成功(密码错)转

SETB FGICG1 ;置已校对密码标志

RET

BJMM7: CLR FGICG1 ;建密码错标记

RET

BJMM8: SETB FGICG2 ;置卡锁死标志

RET(4)写入操作:写入操作实际包含着两种:当写入的数据为“0”时,本次操作称为“写入操作”。当写入的数据为“1”时,本次操作称为“擦除操作”。“写入操作”可以按位进行。但“擦除操作”只能按字节进行。即使操作时只对单独一位进行擦除,但执行的结果将使这一位所在的字节的所有8位全部置成“1”。

对芯片的任何一个允许写入或擦除的区域,其执行写入和擦除的必要条件是芯片的SV标志为“1”状态。

注:在CLK为低的状态下,PGM端从“0”到“1”,并延时一段“编程建立时间”(Tspr)之后,CLK端从“0”到“1”(这时是写入/擦除操作的开始),在此刻之前的Tds(数据建立时间)由外部向I/O线给出写入数据。CLK端在“1”状态应至少保持5ms(Tchp)之后,CLK端从“1”到“0”(这时是写入/擦除操作的结束)。应特别注意结束写入操作的CLK端的下降沿并不会使地址计数器加1,而只是将刚写入的“数据”读出, 以便外部验证刚才的“写入操作”。

WICD: MOV A,#KDWDZ ;送擦除卡低位首地址

LCALL SADR ;寻位地址

MOV R2,#30 ;擦除30字节

LCALL

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top