📄 rdblock1.asm
字号:
;**********************************************
;******** 读头系列之 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 + -