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

📄 rdblock1.asm

📁 这是一个TEMIC卡的读卡源程序
💻 ASM
📖 第 1 页 / 共 2 页
字号:
;**********************************************
;********    读头系列之 RDBLOCK1     源程序 ***
;********    版本 : V1.00               ******
;            技术特点:1.ABA/BAR输出
;                    :2.读取TEMIC系列卡片
;                       BLOCK1 ,8位ASC码
;                    :3.晶振采用6MHZ
;********    编写人:马一兵              ******
;********    编写日期:2001年11月2日     ******
;**********************************************

org 0000h
	ljmp test     ;主程序入口
;.........................................
ORG  000BH            ;定时器中断入口
        lJMP T0INT
;..........................................
ORG  001BH            ;定时器中断入口
        lJMP T1INT
;..........................................

;..........................................
;            用户自定义寄存器区           ;
;..........................................
DATA_ADD EQU 30H      ;第一区数据的首地址
;DATA_ADD EQU 34H      ;第二区数据的首地址
;DATA_ADD EQU 38H      ;第三区数据的首地址
;DATA_ADD EQU 3CH      ;第四区数据的首地址
;DATA_ADD EQU 40H      ;第五区数据的首地址
;DATA_ADD EQU 44H      ;第六区数据的首地址
;DATA_ADD EQU 48H      ;第七区数据的首地址

bz      equ 58h       ;重复判断标志寄存器
HEADNUM EQU 59H       ;9个连续1判断,等同于17个跳变
readck  equ 60h
T0TIME  EQU 61H
block   equ 62h
count   equ 63h

;..........................................


;..........................................
;           主程序开始                    ;
;..........................................

test:   mov sp,#68h
        mov tmod ,#11h

TEST0:  mov bz,#00h
        mov readck,#0h
        setb p1.6


        mov th1,#00h
        mov tl1,#01h
        SETB TR1
        SETB ET1
        SETB EA

        mov block,#1
;        mov block,#2
;        mov block,#3
;        mov block,#4
;        mov block,#5
;        mov block,#6
;        mov block,#7

        ACALL READ
        nop
        nop
        mov a,readck
        CJNE a,#0,TESTPD
        NOP
        AJMP TEST0
        nop
TESTPD: cjne a,#88h,test0
        nop
     ;   JnB P1.2,TESTB
        nop
        clr p1.6
TESTM:  LCALL OUTPUTM
        NOP
        setb p1.5
        setb p1.4
      ;  LCALL DELAY
      ;  LCALL DELAY
      ;  LCALL DELAY
      ;  LCALL DELAY
        setb p1.6
        NOP
        NOP
        AJMP TEST01
TESTB:  LCALL OUTPUTB
TEST01: NOP
        NOP
        NOP
        NOP
        NOP
TEST2:  ACALL DELAY
        AJMP TEST0
        RET


;**********************************************************************
;      READ FUNCTION
;**********************************************************************
READ:   MOV A,#00H
        mov count,#0
READD:  ;CLR 00H
        MOV R5,#00H
        MOV R6,block     ;#07H
        MOV B,R6
        MOV A,#20H
        MUL AB
        MOV R2,A
        MOV B,R6
        MOV A,#04H
        MUL AB
        MOV R4,A
        MOV R3,#00H
        MOV R0,#30H
LOOPR:  MOV @R0,#00H
        INC R0
        DJNZ R4,LOOPR
        MOV R0,#30H
        MOV R1,#00H




MAIN:

MAIN000: CLR  TR0
        MOV TH0,#00H
        MOV TL0,#00H




MAINL:  JB  P1.1, MAINL
        JB  P1.1, MAINL
        JB  P1.1, MAINL
        JB  P1.1, MAINL
        JB  P1.1, MAINL
        MOV R1,#00H
        NOP
        NOP
        NOP
        NOP
        NOP
        NOP
        NOP
        NOP
        NOP
        NOP
        NOP
        NOP
        NOP
        NOP
        NOP
MAIN0:  MOV A,#00H
        MOV C,P1.1
        RLC A
        MOV R7,A
        XRL A,R1
        JNZ  MAINM
        NOP
        NOP
        NOP
        NOP
        NOP
        NOP
        NOP
        ljmp MAIN0
MAINM:  MOV B,R7
        MOV R1,B
        MOV TH0,#00H
        MOV TL0,#07H
        SETB  TR0
        NOP
        NOP
        NOP
        NOP
        NOP
MAIN1:  MOV A,#00H
        MOV C,P1.1
        RLC A
        MOV R7,A
        XRL A,R1
        JNZ MAIN2
        NOP
        NOP
        NOP
        NOP
        NOP
        NOP
        NOP
        ljmp MAIN1
MAIN2:  MOV B,R7
        MOV R1,B
        CLR TR0
        CLR C
        MOV A,#0AFH
        SUBB A,TL0
        JC RIGHT
        ljmp MAIN
RIGHT:  MOV TH0,#00H
        MOV TL0,#07H
        SETB TR0
MAIN5:  MOV A,#00H
        MOV C,P1.1
        RLC A
        MOV R7,A
        XRL A,R1
        JNZ MAIN6
        NOP
        NOP
        NOP
        NOP
        NOP
        NOP
        NOP
        ljmp  MAIN5
MAIN6:  MOV B,R7
        MOV R1,B
        CLR TR0
        CLR C
        MOV A,#5FH
        SUBB A,TL0
        JNC RIGHT2
        ljmp MAIN
RIGHT2: MOV TH0 ,#00H
        MOV TL0,#07H
        SETB TR0
MAIN7:  MOV A,#00H
        MOV C,P1.1
        RLC A
        MOV R7,A
        XRL A,R1
        JNZ MAIN8
        NOP
        NOP
        NOP
        NOP
        NOP
        NOP
        NOP
        ljmp MAIN7
MAIN8:  CLR TR0
        MOV R5,TL0
        MOV B,R7
        MOV R1,B
        CLR C
        MOV A,#5FH
        SUBB A,TL0
        JC MAIN9
        ljmp MAIN
MAIN9:  MOV TH0,#00H
        MOV TL0,#10H
        SETB TR0
        CLR C
        MOV A,#96H
        SUBB A,R5
   ;     MOV 63H,R1
        JC READ2
   ;     ljmp MAIN
READ1:  MOV A,#00H
        MOV C,P1.1
        RLC A
        MOV R7,A
        XRL A,R1
        JNZ READ11
        NOP
        NOP
        NOP
        NOP
        NOP
        NOP
        ljmp READ1
READ11: MOV B,R7
        MOV R1,B
        CLR TR0
        CLR C
        MOV A,#5FH
        SUBB A,TL0
        JNC READ2
        ljmp ERRORR
READ2:  MOV A,@R0
        CJNE R1,#01H,READ5
        CLR C
        ljmp READ6
READ5:  SETB C
READ6:  RLC A
        MOV @R0,A
        INC R3
        CJNE R3,#08H,READ7
        MOV R3,#00H
        INC R0
READ7:  DJNZ R2,READ8

        sjmp rdcmp





READ8:  MOV TH0,#00H
        MOV TL0,#10H
        SETB TR0

READ3:  MOV A,#00H
        MOV C,P1.1
        RLC A
        MOV R7,A
        XRL A,R1
        JNZ READ4
        NOP
        NOP
        NOP
        NOP
        NOP
        NOP
        NOP
        ljmp READ3
READ4:  CLR TR0
        MOV B,R7
        MOV R1,B
        CLR  C
        MOV A,#5FH
        SUBB A,TL0
        JC READ2
        MOV TH0,00H
        MOV TL0,#07H
        SETB TR0
        ljmp READ1
ERRORR: ljmp READD



;...........................................
;比较两次结果是否一样
;.....................................
rdcmp:  mov a,count
        cjne a,#0,double2

double: mov r0,#DATA_ADD                 ;只读第一区,BLOCK1(存在30H--33H)
        mov r1,#20h
        mov r2,#00h

double1:mov a,@r0
        mov @r1,a
        inc r0
        inc r1
        inc r2
        cjne r2,#8h,double1

        mov count,#0ffh

        ljmp readd

double2:mov r0,#DATA_ADD
        mov r1,#20h
        mov r2,#00h


double3:  cjne r2,#08h,double4
        ljmp dok
double4:mov a,@r0
        mov b,@r1
        cjne a,b,derr
        inc r0
        inc r1
        inc r2

        ljmp double3
derr:   ljmp read
dok:    NOP




;..........................................
;判断一秒内是否是同一张卡
;........................................

cmp:
       ; inc bz
        mov r0,#DATA_ADD
        mov r1,#28h
        mov r2,#00h


cmp1 :   cjne r2,#08h,cmp2
         ajmp simple
cmp2 :   mov a,@r0
         mov b,@r1
         cjne a,b,cmpok
         inc r0
         inc r1
         inc r2

         ajmp cmp1

simple: mov a,bz
        SUBB A,#02H
        JC BACKREAD
        AJMP CMPOK

 backread:mov bz,#00h
          MOV TH1,#0
          MOV TL1,#0
          ajmp read

cmpok:   mov bz,#00h
         CLR TR1                                 ;读完卡,停止T1


copy:   mov r0,#DATA_ADD
        mov r1,#28h
        mov r2,#00h

copy1:  mov a,@r0
        mov @r1,a
        inc r0
        inc r1
        inc r2
        cjne r2,#08h,copy1

copy2:   nop









        mov readck,#88h
        RET






;   DELAY
DELAY:  MOV R0,#30H
DELAY00: MOV R1,#30H
DELAY11: NOP
        NOP
        NOP
        NOP
        NOP
        NOP
        NOP
        NOP
        DJNZ R1,DELAY11
        DJNZ R0,DELAY00
        RET

;....................................
;          输出磁卡信息
;....................................
outputm:
            mov r0,#DATA_ADD
            mov a,@r0
wck0:       cjne a,#0,wck1
            inc r0
            mov a,@r0
            cjne r0,#DATA_ADD+4,wck0
            ajmp outputm2
wck1:


            MOV TH0,#0FfH
            MOV TL0,#18H
          ;  MOV T0TIME ,#77H
            SETB  TR0
            SETB ET0
            SETB EA

            SETB P1.4

            MOV 10H,#0
            MOV 11H,#0
            MOV 12H,#0
            MOV 13H,#0
            MOV 14H,#0




            mov r0,#DATA_ADD
            mov r1,#10h
            mov r2,#00h
            mov r3,#00h
            MOV A,@R0
            MOV R4,A
            MOV R5,#00H
            MOV R6,#01H
            mov R7,#11101011B


            MOV R1,#10H

OUTPUTM1:   NOP
            nop
            cjne r2,#0BBh,outputm1
            CLR EA


outputm2:   RET


;................................................
;定时器中断
;.........................................

T0INT:      nop
            mov a,readck
            cjne a,#88h, t0out0

            MOV TH0,#0FfH
            MOV TL0,#18H

            CPL P1.4
            JB P1.4,T0HEAD         ;CLOCK高电平在前,DATA在后
            NOP

 t0out0:
            AJMP T0OUT


 T0HEAD:    CJNE R2,#0H,T0fenhao
            setb p1.5               ; ";" 同步字符,120ms
            inc r3
           ; cjne r3,#1,t0cp0
           ; clr p1.6
 t0cp0:     nop
            cjne r3,#22,t0HEAD0
            NOP
            MOV R3,#00H
            mov r2,#11h
 T0HEAD0:   ajmp t0out

t0fenhao:   cjne r2,#11h,t0data
            nop


fenhao0:    mov a,r7
            jb acc.0,fenhao1
            setb p1.5
            INC R1
            ajmp fenhao2
fenhao1:    clr p1.5

            MOV A,R1
            MOV A,@R1
            CPL A
            ANL A,#00000001B
            MOV @R1,A
            INC R1

fenhao2:    inc r5
            MOV A,R7
            rr a
            mov r7,a

            cjne r5,#05h,fenhao3
            mov r5,#0
            mov r2,#55h
            MOV R1,#10H


FENHAO3:    ajmp t0out


 T0DATA:    CJNE R2,#55H,T0DATA1
            NOP
           ; nop
            ;nop
            CJNE R5,#00H,T0INT0
            MOV A,@R0
            SWAP A
            MOV R4,A

⌨️ 快捷键说明

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