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

📄 mag_bar.asm

📁 磁卡阅读程序,包括一轨,二轨,二三轨,一二三轨
💻 ASM
📖 第 1 页 / 共 2 页
字号:
;**page 1
		ORG	0H
		AJMP	B0030
		ORG	3H
		LJMP	B0A15		;INT0
		ORG	0BH	
		AJMP	B0442		;INT 10
		ORG	13H
		AJMP	B033E		;INT1
		ORG	23H
		AJMP	B05D6		;SIO
		ORG	2BH
		AJMP	B0555		;INT T2
;*******************************************************************
;*    MAIN PROGRAM
;*******************************************************************
		ORG	30H
B0030:		MOV	PSW,#00
		MOV	R0,#FFH		;Clear internal RAM 0-ffh
B0035:  	MOV	@R0,#00
		DJNZ	R0,B0035
		MOV	A,#00
		MOV	DPTR,#0000
B003E:		MOVX	@DPTR,A		;Clear ext_RAM 0000h-00ffh
		INC	DPTR
		DJNZ	R0,B003E
		MOV	A,#BCH
		MOV	DPTR,#0700H	;Set ext_RAM 0700H-07FFH:BCh
B0047:  	MOVX	@DPTR,A
		INC	DPTR
		DJNZ	R0,B0047
		AJMP	B004D
;
B004D:		MOV	P1,#FFH
		MOV	P3,#FFH
		MOV 	A,#05		;0101
		MOV	DPTR,#4000H	;light up RED_LED
		MOVX	@DPTR,A
		MOV	SP,#D2H		;Stack area form D2h to FFh
		MOV	TCON,#05H	;Setup INT0 and INT1 to eage_toggle mode
;SIO working_mode:1 sync_communication mode and enable receive
;1 start_bit,8 data bit,1 stop bit
		MOV	SCON,#50H
		MOV	PCON,#00
		MOV	IEC,#27H	;enable T2 INT0 TO and INT1 interrupt
		CLR	EA
		LCALL	B061D		;read switch
;/CLD signal exist then wait for finishing to read magnetic card
B006D:  	JNB	P1.4,B006D
		MOV	A,#01
		MOV	DPTR,#4000H
		MOVX	@DPTR,A
		MOV	A,#FFH
		LCALL	B0AE4		;delay
		MOV	A,#05
		MOV	DPTR,#4000H
		MOVX	@DPTR,A
		AJMP	B01DE		;go to initnal
;
;decide to going on magnetic card or stripe code or CCD after initinalizng

;**page 2
B0083:		JB	25H.3,B0091	;CCD jion?Yes,then jump
        	SETB	EX0			;
        	JB	24H.1,B0099
        					;??????????
        	LJMP	B07AD		;process scanner
B0091:  	JB	P1.6,B0099
		CLR	P1.7
		LJMP	B06F4		;process CCD
B0099:  	JB	P1.4,B0083 
;
;porcess magnetic card
		CLR	EX0
		CLR	ES
		CLR	EA
		MOV	TMOD,#26H	;T1 AND T0 auto_conastant mode but T0 is counter
		MOV	TH0,#FFH
		MOV	TL0,#FFH
		MOV	PSW,#00		;use register 0:R0=66H R2=36H
		MOV	00H,#66H
		MOV	R2,#36H
		CLR	A			;clear int RAM 30H-66H
B00B4:  	MOV	@R0,A
		DEC	R0
		DJNZ	R2,B00B4
		MOV	00H,#30H	;register 0:R0 R2
		MOV	02H,#01
		MOV	18H,#76H	;register 3:R0 R2
		MOV	1AH,#01
		MOV	10H,#8FH	;register 1:R0 R2
		MOV	12H,#01
		MOV	B,#00
		MOV	TCON,#05	;INT0 AND INT1 eage_toggle mode
		MOV	IEC,#A6H	;enable T2INT1 AND T0 interrupt
		SETB	TR0			;T0 counter starting to work
		MOV	A,#04		;red_led turn off
		MOV	DPTR,#4000H
		MOVX	@DPTR,A
B00DB:  	JNB	P1.4,B00DB	;waiting for read magnetic card to finish
		CLR	IEC.5		;ET2
		CLR	ET0
		CLR	EX1
		CLR	EX0
;
;magnetic card read finish and get 1st 2nd 3rd data to send to computer
;get 1st data to send to computer
		JNB	24H.7,B0126
		MOV	PSW,#00
		CLR	21H.1
		SETB	24H.3
		MOV	R0,#2FH
		MOV	R2,#80H
		ACALL	B035D
		JNB	21H.1,B00FC
		LJMP	B0110
B00FC:  	ACALL	B03FE
		JNB	21H.1,B0110
		JNB	20H.6,B0107
		JNB	20H.4,B0110
B0107:  	CLR	21H.1

;**page 3
		ACALL	B036D
		JNB	21H.1,B00FC
		AJMP	B0110
B0110:		JNB	21H.1,B0118
		SETB	24H.4
		LJMP	B0126
B0118:		CLR	20H.6
		MOV	A,R3
		MOV	R2,A
		MOV	A,R1
		MOV	R0,A
		SETB	22H.3
		ACALL	B0576
		CLR	21H.3
		CLR	21H.0
;
;get 2nd data to computer
B0126:		JNB	20H.0,B0168
		SETB	21H.0
		MOV	PSW,#18H
		SETB	20H.2
		CLR	21H.1
		CLR	24H.3
		MOV	R0,#75H
		MOV	R2,#80H
		ACALL	B0250
		JNB	21H.1,B0140
		LJMP	B0152
B0140:		ACALL	B02F1
		JNB	21H.1,B0152
		JNB	20H.6,B014B
		JNB	20H.4,B0152
B014B		CLR	21H.1
		ACALL	B0260
		JNB	21H.1,B0140
B0152		JNB	21H.1,B015A
		SETB	24H.4
		LJMP	B0168
B015A		CLR	20H.6
		MOV	A,R3
		MOV	R2,A
		MOV	A,R1
		MOV	R0,A
		SETB	22H.3
		ACALL	B0576
		CLR	21H.3
		CLR	21H.0
;
;get 3rd data to send to computer
B0168:		JNB	22H.0,B01AC
		SETB	21H.2
		MOV	PSW,#10H
		SETB	20H.2
		CLR	21H.1
		CLR	24H.3
		CLR	21H.0
		MOV	R0,#8EH
		MOV	R2,#80H
		ACALL	B0461
		
;**page 4
		JNB	21H.1,B0184
		LJMP	B0196
B0184:  	ACALL	B050E
		JNB	21H.1,B0196
		JNB	20H.6,B018F
		JNB	20H.4,B0196
B018F:  	CLR	21H.1
		ACALL	B0471
		JNB	21H.1,B0184
B0196:		JNB	21H.1,B019E
		SETB	24H.4
		LJMP	B01AC
B019E:		CLR	20H.6
		MOV	A,R3
		MOV	R2,A
		MOV	A,R1
		MOV	R0,A
		SETB	22H.3
		ACALL	B0576
		CLR	21H.3
		CLR	21H.0
;
;
B01AC:		JNB	22H.3,B01D3
B01AF:		LCALL	B05BB		;send end caracter:CR or ETX
:beep short
		JNB	24H.4,B01BA
		MOV	A,#00		;beep sound
		LJMP	B01BC
B01BA:		MOV	A,#00
B01BC:		MOV	DPTR,#4000H
		MOVX	@DPTR,A
		CLR	EA
		MOV	A,#AFH
		LCALL	B0AE4		;delay
		MOV	A,#04
		MOV	DPTR,#4000H
		MOVX	@DPTR,A		;beep no sound
B01CD:		JNB	P1.6,B01CD
		LJMP	B01DE
;
;error occur and green_led light up and red_led turn off
B01D3:		MOV	A,#06H
		MOV	DPTR,#4000H
		MOVX	@DPTR,A
		MOV	A,#AFH
		LCALL	B0AE4
;
;reinitinalize and restart entry after all process finishing to ready for next operation
B01DE:		CLR	EA
		MOV	PSW,#00		;use register group 0
		PUSH	25H			;save switch status
		PUSH	0FH
		MOV	R0,#D1H		;clear int_ram:00h-d1h
B01E9:		MOV	@R0,#00
		DJNZ	R0,B01E9
		MOV	R0,#40H
		MOV	A,#00
		MOV	DPTR,#0000	;clear ext_ram:0000h-003fh

;**page 5
B01F4:		MOVX	@DPTR,A
		INC	DPTR
		DJNZ	R0,B01F4
		MOV	A,#BCH
		MOV	DPTR,#0700H	;set ext_ram:0700h-07ffh to 0BCH
B01FD:		MOVX	@DPTR,A
		INC	DPTR
		DJNZ	R0,B01FD
		MOV	00,#30H		;register 0:R0 and R2
		MOV	02H,#01
		MOV	18H,#76H		;register 2:R0 and R2
		MOV	1AH,#01
		MOV	10H,#8FH		;register 3:R0 and R2
		MOV	12H,#01 
		MOV	B,#00
		POP	OFH			;restore switch status
		POP	25H
		ANL	25H,#FEH
		JNB	P1.6,B0228
		SETB	P1.7
		MOV	A,#05
		MOV	DPTR,#4000H
		MOVX	@DPTR,A
B0228:		MOV	TCON,#05H	;eage toggle mode
		MOV	IEC,#00
		MOV	TH0,#00
		MOV 	TL0,#00
		MOV	0CDH,#FFH	;TH2
		MOV	0CCH,#FFH	;TL2
;T1 auto_constant 8 bit timer(band rate genertor),TO 16 bit timer
		MOV	TMOD,#21H
		MOV 	0C8H,#0BH	;T2CON:T2 16 bit timer
		LCALL	B061D		;read switch
		JB	25H.3,B024C	;25H.3(sw8):receive scanner?
		SETB	EX0			;=0(off) receive
		SETB	EA
		AJMP	B0083
B024C:		CLR	EX0			;=1(on) no receive
		AJMP	B0083
;*******************************************************************
;*    MAGNETIC CARD 2ND TRACK DATA ADJUST SUBROUTINE
;*******************************************************************
B0250:
;This program check data in buffer so as to declare to normal slide or
;inversely slide card.exit:20h.4=1 inversely slide,R1 and R3 start_a
;address for reretive data.21h.1=1 erro sign
		SETB	20H.7
		CLR	20H.4
B0254:		ACALL	B027F
B0256:		CJNE	A,#0BH,B0260
		CLR	20H.7
		ACALL	B027F
		CJNE	A,#1FH,B027C
B0260:		SETB	20H.3
		SETB	20H.7
		ACALL	B027F
		JNB	20H.6,B0256
		CLR	20H.6
		JB	20H.4,B0278		

;**page 6
		CLR	20H.3
		SETB	20H.4
		SETB	22H.2
		MOV	R2,#01
		AJMP	B0254
B0278:		CLR	20H.3
		SETB	21H.1
B027C:		CLR	20H.7
		RET
;
;
B027F:
;The program has two function:1-normal and inversely scan,2-get data
;Cntrlbit:20h.3=1 use 9bit scan sign,20h.4=1 inversely scan sign,25h.4
;=1 overflow buffer sign,20h.7=1 require to save scan address,21h.1=1
;error sign,25h.2=1 get data sign,25h.5=1 end(1FH) sign,22h.2=0/1 use 
;to inversely-scan,control data search.25h.0=1 send shift key sign
		JB	20H.6,B02A1
		JNB	20H.3,B028A
		CLR	A
		MOV	R4,#09H
		AJMP	B028D
B028A:		MOV 	R4,#05
		CLR 	A
B028D:		JNB	20H.7,B0295
		MOV	A,R2
		MOV	R3,A
		MOV	A,R0
		MOV	R1,A
		CLR 	A
B0295:		JB	20H.4,B02C7
		XCH	A,R2
		RL	A
		CJNE	A,#01,B02A4
		INC	R0
		CJNE	R0,#8FH,B02A4
B02A1:		SETB	20H.6
		RET
B02A4:		XCH	A,R2
		PUSH	ACC
		MOV	A,@R0
		ANL	A,R2
		JZ	B02B1
		POP	ACC
		SETB	ACC.5
		AJMP	B02B3
B02B1:		POP	ACC
B02B3:		RR	A
		JB	20H.3,B02D2
		JNB	22H.2,B02BE
		JZ	B028A
		CLR	22H.2
B02BE:		DJNZ	R4,B0295
		JNB	21H.3,B02C6
		LJMP	B02E5
B02C6:		RET
B02C7:		XCH	A,R2
		RR	A
		CJNE	A,#80H,B02A4	
                          
;**page 7
		DEC	R0
		CJNE	R0,#75H,B02A4
		AJMP	B02A1
B02D2:		XCH	A,R4
		JZ	B02DC
		XCH	A,R4
		JZ	B02DA
		AJMP	B027F
B02DA:		DJNZ	R4,B028D
B02DC:		XCH	A,R4
		JZ	B028D
		CLR	20H.3
		MOV	R4,#04
		AJMP	B0295
B02E5:		CJNE	A,#1FH,B02EA
		SETB	21H.6
B02EA:		ANL	A,#0FH
		ORL	A,#30H
		MOV	0DH,A
		RET
;
;
B02F1:
;the program check data format and even/odd parity.20h.1=1 1fh_sign
;20h.2=1 no know
		MOV	A,R3
		MOV	R2,A
		MOV	A,R1
		MOV	R0,A
		ACALL	B027F
		JB	20H.6,B033B
		JB	20H.2,B02FD
B02FD:		CJNE	A,#0BH,B033B
		CLR	20H.1
		MOV	05H,#00
B0305:		JNB	P,B033B
		PUSH	ACC
		XRL	A,05
		MOV	05,A
		JB	20H.1,B032A
		POP	ACC
		CJNE	A,#1FH,B0318
		SETB	20H.1
B0318:		ACALL	B027F
		JNB	20H.6,B0305
		JNB	20H.1,B033B
		JNB	20H.4,B033B
		XCH	A,R2
B0324:		CLR	C
		RRC	A
		DJNZ	R4,B0324
		AJMP	B0305
B032A:		POP	ACC
		ANL	05H,#3FH
		JNB	20H.2,B0335
		ANL	05H,#0FH
B0335:		MOV	A,05H
		CJNE	A,#00,B033B
		RET
		
;**page 8
B033B:		SETB	21H.1
		RET
;
;
B033E:		PUSH	PSW		;2ND TRACK INTERRUPT SEVICE SUBROUTINE
		MOV	PSW,#18H
		XCH	A,@R0
		JB	P1.0,B034A
		SETB	20H.0	;20H.0=1 valid-data das checked in card
		ADD	A,R2
B034A:		XCH	A,@R0
		JNB	20H.0,B035A
		XCH	A,R2
		RL	A
		XCH	A,R2
		CJNE	R2,#01H,B035A
		INC	R0
		CJNE	R0,#8FH,B035A
		CLR	EX1
B035A:		POP	PSW
		RETI
;*******************************************************************
;*    MAGNETIC CARD 1ST TRACK DATA ADJUST SUBROUTINE

⌨️ 快捷键说明

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