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

📄 1991.txt

📁 门禁读写程序代码
💻 TXT
字号:
    /*******************1-wire bus *************************************/
/*******************************************************************/
/*******************************************************************/
;返回参数:ROM1991,ID1991,PASSWORD,S_DATA
NAME  DS1991
?PR?RWDS1991?DS1991 SEGMENT CODE       		;可执行的程序代码:RWDS1991,DS1991
?DT?RWDS1991?DS1991 SEGMENT DATA OVERLAYABLE    ;RWDS1991,DS1991为内部数据区
						;
PUBLIC RWDS1991
	ROM1991  EQU 8200H
	ID1991   EQU 8210H
	S_DATA   EQU 8220H
        PASSWORD EQU 8330H

   	RSEG ?DT?RWDS1991?DS1991   ;内部数据存储区 在data中声明的目标
	?RWDS1991?BYTE:
  		FLAG1?01: DS 1	   ;int valuable  FLAG1?01为一个字节长度的变量
  		ROM1992: DS 1
       RSEG ?PR?RWDS1991?DS1991    ;Program segment
       USING 0			   ;using 函数属性用来指定一个函数所用的寄存器组
RWDS1991:

	CLR EA
START:
	SETB	P3.2
        LCALL    TSRESET ;如果p3.2=1,则FLAG?01=#0FH
			 ;如果p3.2=0,则FLAG?01=#00H
        MOV      A,#0FH
        CLR      C
        SUBB     A,FLAG1?01
        JNZ      TSS1     ;#00H,P3.2为0
        LJMP     TSS20    ;#0FH,END 结束
TSS1:   MOV      R7,#33H  ;Read Rom功能指令
        LCALL    TSWRITE   ;把#33H传输到p17.
        MOV      DPTR,#ROM1991
        MOV      R5,#08H
        LCALL    TSREAD	     ;读取64位DS1991 ROM代码
        LCALL    TSRESET
        MOV      A,#0FH
        CLR      C
        SUBB     A,FLAG1?01
        JNZ      TSS2
        LJMP     TSS20

TSS2:   MOV	 R7,#0CCH  ;Skip ROM [CCH]允许主机直接访问存储器
        LCALL    TSWRITE
	MOV	 R7,#66H  ;Read Subkey [66H]:用于提取选中的子密钥区内的数据
        LCALL    TSWRITE
       	MOV	 R7,#10H   ;DS1991命令结构的第二个字节,选择第0区。
        LCALL    TSWRITE
        MOV	 R7,#0EFH   ;DS1991命令结构的第三个字节,为第二个字节的补码
        LCALL    TSWRITE
       MOV 	 DPTR,#ID1991
        MOV      R5,#08H  ;8个字节ID1991
        LCALL    TSREAD    ;读取8个字节ID1991
        ;传输8个字节的PASSWORD
        MOV	 R1,#08H
        MOV	 DPTR,#PASSWORD
TSS3:   MOVX	 A,@DPTR
	MOV	 R7,A
	LCALL    TSWRITE
 
        INC 	 DPTR
        DJNZ	 R1,TSS3
	MOV	 DPTR,#S_DATA
        MOV	 R5,#08H
        LCALL	 TSREAD   ;读取8个字节的S_DATA
        LCALL    TSRESET
TSS20:  SETB     EA
        RET      ;END PROCEDURE  ;此程序结束

/************************************************************/
;*****DALLAS 1-WIRE RESET SUBPROGRAM*****
TSRESET:
	SETB	P3.2
	NOP
        
       	CLR	P3.2
        ;MOV      R0,#240 ;392us
	MOV      R0,#120
        NOP
TSR1:   
	DJNZ     R0,TSR1
	
        SETB	P3.2
	;MOV      R0,#30 ;
	MOV      R0,#30
DD:    	;NOP
	DJNZ     R0,DD
	;MOV      R0,#100
	MOV      R0,#80
TSR2:   JNB      P3.2,TSR3
        DJNZ     R0,TSR2   ;等待p3.2=1, 218us
        LJMP     TSR4
TSR3:   MOV      FLAG1?01,#00H
        LJMP     TSR5
TSR4:   MOV      FLAG1?01,#0FH  ;通讯结束,复位失败
        LJMP     TSR7
TSR5:   MOV      R0,#120
	;MOV      R0,#240      ;延时392us
TSR6:   NOP
	DJNZ     R0,TSR6
TSR7:

	SETB	P3.2
        RET


;*****1-WIRE WRITE A BYTE  SUBPROGRAM*****

TSWRITE:
	MOV      A,R7
	;CPL	 A
        MOV      R6,#08H  ;传送8位
WST:
	;CLR	 P1.7
	SETB	P3.2
	MOV      R0,#13
        ;MOV	 R0,#24 ;延时设置,26us
TSW0:   DJNZ     R0,TSW0
TSW1:
	;SETB	 P1.7
	 CLR	P3.2
        ;MOV      R0,#04H  ;延时设置  4us
	MOV      R0,#04H 
	;MOV      R0,#04H
TSW2:   DJNZ     R0,TSW2
        RRC      A        ;通过标志位c实现传输
        ;MOV	 P1.7,C
	MOV	 P3.2,C
        MOV      R0,#33
	;MOV      R0,#60   ;延时设置  65us
TSW3:   DJNZ     R0,TSW3
        DJNZ     R6,WST
        RET


;*****FROM 1-WIRE READ R5 BYTES*****
/*************读64位数据****************************/
TSREAD:
TSRD1:  MOV      R6,#08H
TSRD2:  SETB	P3.2
	NOP
       MOV      R0,#09
	; MOV      R0,#09H
TSRD3:  DJNZ     R0,TSRD3
        CLR	P3.2
	MOV      R0,#02
	;MOV      R0,#4
TSRD4:  DJNZ     R0,TSRD4
         SETB	P3.2
        MOV      R0,#03H
	 ;MOV      R0,#09H
TSRD5:  DJNZ     R0,TSRD5
        MOV      C,P3.2
        RRC      A
        MOV      R0,#33
	;MOV      R0,#60
TSRD6:  DJNZ     R0,TSRD6
        DJNZ     R6,TSRD2
        MOVX      @DPTR,A
        INC      DPTR
        DJNZ     R5,TSRD1   ;传输R5个字节
        RET
END ;本文件结束

⌨️ 快捷键说明

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