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

📄 id file.asm

📁 ID卡读卡器读程序 RED_LED EQU P1.0 GREEN_LED EQU P1.1 BEEP EQU P1.2 蜂鸣器
💻 ASM
字号:
;ID卡读卡器读程序
RED_LED         EQU       P1.0
GREEN_LED       EQU       P1.1
BEEP            EQU       P1.2      ;蜂鸣器

  org 0000h
  ljmp main
  org 0003h
  reti
  org 000bh
  ljmp ok1
  org 0013h
  reti
  org 001bh
  reti
  org 0023h
  reti
  org 0100h


main:   clr  p1.0
        setb p1.1
        clr  p1.2
        mov sp,#60h
        mov tmod,#01h
                             ;数据存储区30H~3AH清0。
        MOV A,#00H
        MOV R1,#30H
        MOV R3,#11
ZERO:   MOV @R1,A
        INC R1
        DJNZ R3,ZERO
        acall ptop
          

ptop:
        mov tl0,#55h            ;512us定时
        mov th0,#1dh
        setb tr0
        setb et0
        setb ea
        ret
ok1:   
        mov    r2,#01h
        mov    r7,#09h               ;起始信息流计数器,9个'1' 
  dd:   mov tl0,#55h                ;512us定时
        mov th0,#1dh
        lcall  loop
        djnz   r7,dd
        setb   beep
        lcall  yanshi
        nop
        lcall  yanshi
        clr    beep
        SJMP   REAL_DA
loop:   jb     p1.6,ok1            ;等待一个稳定的低电平
        reti
wrong:  ljmp   ok1                    ;如果时间小于半个周期。重新开始
REAL_DA:MOV    R2,#00H
        MOV    R7,#11                 ;还有11行数据。
        MOV    R0,#30H                ;数据起址。
ONEBYT :MOV    R3,#05                 ;每5为数据存在一个字节,
        MOV    R4,#00H                ;便于检查校验位。
YIWEI:  MOV    TH0,#00H
        MOV    TL0,#00H
        SETB   TR0
BUBIAN: MOV    A,R2
        JZ     HIGH1                   ;R2为0表示当前是低电平,应等待高电平
LOW1:   JB     P1.6,LOW1               ;R2=1,等待稳定的低电平(下跳沿)

BIAN:   MOV    R2,#00H                ;当前电平为低电平。
                                      ;等到翻转,计算时间。
READ:   MOV    A,TH0
        CLR    C
        SUBB   A,#01H
        JNZ    BUBIAN
;A=01H表示是全周期翻转,为数据翻转。
;A=00H表示是空翻转。
;将数据存入当前数据字节最低位。
;R2=00H,数据为”1”,R2=01H,数据为”0”
        CLR   TR0
        MOV   A,@R0
        RL    A
        INC   A
        CLR   C
        SUBB  A,R2
        MOV   @R0,A
        DJNZ  R3,YIWEI
        INC   R0                      ;满5位,地址加1。
        DJNZ  R7,ONEBYT
                                      ;开始检查校验位。并将校验位从数据中去除。
        MOV   R2,#10
        MOV   R0,#30H
        MOV   R1,#60H                 ;卡号的存储起址。
FIX:    MOV   A,@R0
        RRC   A                       ;校验位移入C。
        MOV   @R1,A
        MOV   10H,C
        ANL   C,/P
        MOV   11H,C
        MOV   C,P
        ANL   C,/10H
        ORL   C,11H
        JC    WRONG                   ;校验出错。
        INC   R0
        INC   R1
        DJNZ  R2,FIX
                                      ;行校验完成,进行列校验。
        MOV   R2,#09
        MOV   R1,#60H
        CLR   A
        MOV   A,3AH                   ;列校验字节送入A。
        RR    A
        MOV   3AH,A
        MOV   A,@R1
CHECK:  INC   R1
        XRL   A,@R1
        DJNZ  R2,CHECK
        CLR   C
        SUBB  A,3AH
        JNZ   WRONG
;将每个字节中的4位有效数据取出,
;每两个字节压缩成一个字节。
        MOV   R0,#60H
        MOV   R1,#60H
        MOV   R2,#05H
COLLAT: MOV   A,@R0
        SWAP  A
        INC   R0
        ORL   A,@R0
        MOV   @R1,A
        INC   R1
        INC   R0
        DJNZ  R2,COLLAT
        clr   p1.1
        RET
HIGH1:  JNB   P1.6,HIGH1
        MOV   R2,#01H                  ;当前电平为高电平。
        SJMP  READ
yanshi: mov r3,#255
    d1: mov r4,#255
    d2: djnz r4,d2
        djnz r3,d1
        ret

end

⌨️ 快捷键说明

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