⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sle4442.inc

📁 单片机用TDS-ICE仿真器的试验程序。
💻 INC
📖 第 1 页 / 共 2 页
字号:
          SETB     IO                    
          LCALL    Delay5uS    
          RET


;**************************************************
;函数名称: SendByte
;功能描述: 向卡发送一个字节
;入口参数:A --- 要发送的字节
;返回参数: 无
;***************************************************
SendByte:                                 ;发送一个字节数据 
          MOV       R3,#8        	  ;一个字节有8 bits         
SendLoop: 
          RRC       A                     
          MOV       IO,C                  ;每个循环发送1 bit
          LCALL     Delay10uS             
          SETB      CLK
          LCALL     Delay10uS             
          CLR       CLK
          DJNZ      R3,SendLoop
          RET


;**************************************************
;函数名称: Repm  和 Remm
;功能描述: 从保护存储器 或 从主存储器中读数据块 
;入口参数:R2 --- 要求读的字节数
;	   R5 ---   保护存储器的起始地址(0 - 3)
;		  或  主存储器的起始地址(0 - 255)
;返回数据: 从R0所指的数据缓冲区中输出 
;***************************************************
Repm:                                ;设置读保护存储器命令
          MOV      R4,#34H              
          SJMP     RmStart           
Remm:                                ;设置读主存储器命令
          MOV      R4,#30H            
RmStart:      
          LCALL    SendComm	     ;发送命令	
RmLoop:  
          CLR      A
          MOV      R3,#8     	           
RmByte:
          CLR      CLK
          NOP                        
          NOP
          NOP
          NOP
          SETB     IO                  
          NOP
          MOV      C,IO		       ;接收1 bit
          RRC      A
          NOP
          NOP
          SETB     CLK
          LCALL    Delay10uS           
          DJNZ     R3, RmByte	       ;判断是否接收完8 bits	
          MOV      @R0,A  	       ;接收的数据存入缓冲区中            
          INC      R0
          DJNZ     R2, RmLoop	       ;判断是否接收完指定的字节
          LCALL    Break               ;中止操作
          RET

Break:    CLR      CLK		       ;中止操作
          LCALL    Delay5uS            
          SETB     RST
          LCALL    Delay5uS           
          CLR      RST
          RET

;**************************************************
;函数名称: Verda
;功能描述: 输出数据模式的各种命令:
;	   Verda : 比较校验数据命令
;	   Wrscm : 修改加密存储器命令
;	   Wrpm:   修改保护存储器命令
;	   Wrmm:   修改  主存储器命令
;入口参数:无
;返回数据: 无
;***************************************************
Verda:   
          MOV        R4,#33H           ;设置比较校验数据命令
          SJMP       WrStart
Wrscm:  
          MOV        R4,#39H           ;设置修改加密存储器命令
          SJMP       WrStart
Wrpm:   
          MOV        R4,#3CH           ;设置修改保护存储器命令
          SJMP       WrStart
Wrmm:    
          MOV        R4,#38H           ;设置修改主存储器命令
WrStart:       
          LCALL      SendComm          
WrmOption: 			       ;下面为一个处理过程
          CLR        CLK
          NOP                      
          NOP
          NOP
          NOP
          SETB       IO                
          NOP
          MOV        C,IO
          JC         WrmOK             ;如果 I/O 返回高状态,中止处理过程
          NOP                     
          NOP
          NOP
          NOP
          SETB       CLK
          LCALL      Delay10uS         
          SJMP       WrmOption
WrmOK:  
          RET


;**************************************************
;函数名称: Rescm
;功能描述: 读加密存储器的四个字节
;入口参数:无
;返回数据: 加密存储器中的内容输出到EC所指的4字节缓冲区中
;***************************************************
Rescm:    MOV     R4,#31H       ;设置读加密存储器命令
          LCALL   SendComm	;发送读加密存储器命令
          MOV     R2,#4 	;读4 个字节	              	
          MOV     R0,#EC	;接收缓冲区
rescm2:   
          MOV     R3,#8		;一个字节有8 bits,要接收8次                
rescm1:   CLR     CLK
          NOP                         
          NOP
          NOP
          NOP
          SETB    IO                  
          NOP
          MOV     C,IO		;接收1 bit
          RRC     A
          NOP
          NOP
          SETB    CLK
          LCALL   Delay10uS           
          DJNZ    R3,rescm1
          MOV     @R0,a 	;把接收到的一个字节保存起来              
          INC     R0		;接收缓冲区地址加1	
          DJNZ    R2,rescm2
          CLR     CLK                
          LCALL   Delay5uS             
          RET


;**************************************************
;函数名称: Anrst
;功能描述: 读加密存储器的四个字节
;入口参数:无
;返回数据: A --- 0 复位成功
;	   A --- 1 复位失败 
;          复位信号的内容输出到EC所指的4字节缓冲区中
;***************************************************
Anrst:                                 
          MOV      R0,#EC
          SETB     RST                ;产生复位响应时序
          LCALL    Delay5uS            
          SETB     CLK
          LCALL    Delay10uS           
          CLR      CLK
          LCALL    Delay5uS            
          CLR      RST
                                       ;接受复位响应值  
          MOV      R2,#4               
anrst1:   MOV      R3,#8               
anrst2:   LCALL    Delay10uS           
          SETB     CLK
          SETB     IO                  
          NOP
          NOP
          MOV      C,IO
          RRC      A 
          LCALL    Delay5uS           
          CLR      CLK
          DJNZ     R3,anrst2	       ;判断是否接收了一个字节
          MOV      @R0,A
          INC      R0
          DJNZ     R2,anrst1	       ;判断是否接收了4个字节

;**************************************************      
;以下代码根据复位响应返回值判断卡的合法性及有效性  
;**************************************************       
          MOV   R0,#EC
          MOV   A,@R0
          CJNE   A,#Idetify1,CardErr
          INC     R0
          MOV   A,@R0
          CJNE   A,#Idetify2,CardErr      
          INC     R0
          MOV   A,@R0
          CJNE   A,#Idetify3,CardErr      
          INC     R0
          MOV   A,@R0
          CJNE   A,#Idetify4,CardErr      
          MOV   A,#00H			;复位成功			
          RET
CardErr:  MOV   A,#01H			;复位失败,为坏卡
          RET

;**************************************************
;函数名称: Delay10uS
;功能描述: 延时10Us子程序
;入口参数:无
;返回数据: 无
;***************************************************
Delay10uS:                       ;延时10Us
          MOV    R7,#06H          
          DJNZ   R7,$
          RET

;**************************************************
;函数名称: Delay5uS
;功能描述: 延时5Us子程序
;入口参数:无
;返回数据: 无
;***************************************************
Delay5uS:                        ;延时5Us
          MOV    R7,#02H          
          DJNZ   R7,$
          RET

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -