?? mag_bar.asm
字號:
;**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 + -