一种安全可靠的IC卡读写器系统

技术分类: 工业电子  | 2008-01-24
来源:致信网

  (3)DIG为允许数字键输入标志,00H表示不允许,01H表示允许。此标志主要是防止输入多余的密码,或输入的款数超出限额。

  (4) NUM表示输入第几个数字,00H表示无数字输入,01H~08H表示输入密码,09H~10H表示输入款数或新密码,若NUM为11H,显示出错信息。

  3.3 X76F100读程序举例

 循环键盘显示程序流程图

  图4 循环键盘显示程序流程图

  X76F100为I2C总线E2PROM。SCL为时钟输入,SDA为双向数据输入输出线。通过片输入来控制对器件的访问。下面以页写为例,先结合时序说明X76F100的工作过程,然后给出程序。页写时序如图5所示。在该系统中,GMS97C52为主机,X76F100为从机。首先主机向从机发一个START命令,产生开始条件,然后发写命令字。当从机接到命令后,向主机发一个应答信号NACK。然后跟随8字节密码,随后进入一个写周期,写周期结束后进行密码应答轮询ACK Polling。X76F100要求主机用专用的应答命令55H进行应答轮询。如果输入的密码正确,将返回一个“ACK”。如果密码不正确,将返回“no-ACK”,重试计数器加1,返回到启始位置,提示重新

送入写命令字和8字节密码。若密码正确,主机接着送入8个字节的数据,ACK响应成功后,主机发出STOP命令完成写操作。下面是用写密码进行页写的程序。

页写时序图

  图5 页写时序图(需要密码)

WRITE_USING_WRITE_PASS: ;用写密码进行写操作
ACALL     START
;调开始命令
MOV      A,#SECTOR_WR
;调页写命令
ACALL     OUTBYTE
;调输出字节命令
ACALL     NACK
;X76F100发应答信号
ACALL     WR_WR_PASS 
;调写密码命令
ACALL     T10ms
;10ms延时开始写密码周期
ACALL     ACK_POLLING
;调密码应答轮询子程序
ACALL     WR_DATA
;调页写数据子程序
ACALL      STOP
;调停止命令
ACALL     T10ms
;延时10ms写密码周期
RET
 
WR_WR_PASS: ;将写密码写入X76F100
MOV      R0,#WR_PASS7
;将密码首址送入R0
MOV      R1,#08H
;写密码为8个字节
WP:MOV      A,@R0  ;将R0中的数据送入A中
ACALL    OUTBYTE
;输出字节子程序
ACALL    NACK
 
INC      R0
 
DJNZ     R1,WP
 
RET
 
WR_DATA: ;将数据写到X76F100中
MOV     R0,#DATA0
;将数据首地址送入R0
MOV     R1,#08H
;一页有8个数据
WB: MOV     A,@R0 ;将R0中数据送入A 
ACALL    OUTBYTE
;调输出字节子程序
ACALL    NACK
;从机发应答信号
INC      R0
;下一个字节
DJNZ     R1,WB 
;循环直到R1为0
RET
 
OUTBYTE: ;主机向X76F100发字节
MOV     R2,#08H
;一个字节有8位
LOOPO: 
CLR      SCL_76
 
RLC      A
;移位
MOV     SDA_76,C
;将进位送入数据线
SETB     CL_76
 
DJNZ     R2,LOOP
;循环直到R2为0
RET
 
START: 
SETB     SDA_76
 ;开始子程序
SETB     SCL_76
 
CLR      SDA_76
 
CLR      SCL_76
 
RET
 
STOP: 
CLR      SDA_76
 ;停止子程序
SETB     SCL_76
 
SETB     SDA_76 
 
RET
 
ACK_POLLING: ;密码应答轮询子程序
ACALL    START
 
MOV     A,#55H
;主机发固定应答命令
ACALL   OUTBYTE
 
ACALL   NACK
;调从机发应答信号
JC      PASS_ERROR
;若有进位则密码错误
RET
 
PASS_ERROR: ;密码错误
ACALL   STOP
 
RET 
 
ACK: 
CLR    SDA_76
;主机执行一个应答
ACALL  CLOCK 
 
RET
 
NACK: 
SETB   SDA_76
;从机执行一个应答 
ACALL  CLOCK
 
RET
 
CLOCK: 
SETB  SCL_76
;第9个脉冲
MOV  C,SDA-76
;读SDA状态以判断是否有应答
CLR   SCL_76

0
0
(请您对文章做出评价)
1】【2】【3
加载中

对文章的评论

更多评论

剩余字数:  

浏览该文章的用户还看过...

  • 文 章

  • 论 坛

  • 博 客

  • 小 组

设计资源与分销

  • 博客推荐

  • 论坛推荐

  • 在线研讨会