歡迎您訪問鄭州興邦電子股份有限公司官方網站!
    阿里巴巴誠信通企業
    全國咨詢熱線:40000-63966
    興邦電子,中國水控機第一品牌

    聯系興邦電子

    全國咨詢熱線:40000-63966

    售后:0371-55132951/55132952

    工廠:河南省 鄭州市 高新區蓮花街電子電器產業園

    ID卡讀卡器源程序

    文章出處:http://www.xujuanpiju.com 作者:謝中業   人氣: 發表時間:2011年10月24日

    [文章內容簡介]:ID卡讀卡器源程序

    ;程序說明:本程序為讀寫器程序。
    ;下面將本程序所用變量及含義定義如下:
    ;定義SBUF(N)為串行通訊的緩沖區。
    ;定義CBUF(N)為讀卡卡號的緩沖區。
    ;

    ;通訊緩沖區定義
    BEGIN_FLAG EQU 20H
    END_FLAG EQU 21H
    NUM_ADD EQU 22H
    JISHU EQU 23H
    CARD_FLAG EQU 24H

    FIRST_HAND EQU 25H ;第一次握手標志,為FF為有握手,為00表示無。
    SECOND_HAND EQU 26H ;第二次握手標志,為FF為有握手,為00表示無。
    COMMAND_FLAG EQU 27H ;命令標志,表示什么命令。
    S_DATA EQU P3.2
    RESET_K4 EQU P1.7
    RED_LED EQU P1.6
    GREEN_LED EQU P1.5
    BEEP EQU P1.4


    SBUF1 EQU 40H
    SBUF2 EQU 41H
    SBUF3 EQU 42H
    SBUF4 EQU 43H
    SBUF5 EQU 44H
    SBUF6 EQU 45H
    SBUF7 EQU 46H
    SBUF8 EQU 47H
    SBUF9 EQU 48H
    SBUF10 EQU 49H
    SBUF11 EQU 4AH
    SBUF12 EQU 4BH
    SBUF13 EQU 4CH
    SBUF14 EQU 4DH
    SBUF15 EQU 4EH
    SBUF16 EQU 4FH



    ;讀卡緩沖區定義
    CBUF1 EQU 50H
    CBUF2 EQU 51H
    CBUF3 EQU 52H
    CBUF4 EQU 53H
    CBUF5 EQU 54H
    CBUF6 EQU 55H
    CBUF7 EQU 56H
    CBUF8 EQU 57H
    CBUF9 EQU 58H
    CBUF10 EQU 59H
    CBUF11 EQU 5AH
    CBUF12 EQU 5BH
    CBUF13 EQU 5CH
    CBUF14 EQU 5DH
    CBUF15 EQU 5EH
    CBUF16 EQU 5FH

    ;----------------
    ORG 0000H
    LJMP START
    ORG 0003H ;INT0入口地址
    LJMP INT_0
    ORG 000BH ;T0入口地址
    LJMP TIME0
    ORG 0013H ;INT1入口地址
    LJMP START
    ORG 001BH ;T1入口地址
    LJMP START
    ORG 0023H ;串行中斷S入口地址
    LJMP SERIAL

    START:
    CLR BEEP
    lcall dh150ms
    SETB RED_LED
    mov p1,#0ffh
    MOV SP,#05FH ;設置堆棧為高64字節
    CLR EA ;關閉所有中斷
    MOV PCON,#00H ;電源控制寄存器設初值
    MOV TCON, #00H ;定時寄存器設初值
    MOV TMOD,#21H ;定時方式寄存器設初值
    MOV TH1,#0FDH ;設置波特率:9600bps
    MOV TL1,#0FDH
    MOV TH0,#0FFH
    MOV TL0,#0FFH
    MOV SCON,#0F0H ;設置串行中斷工作在方式2狀態。當SM2=1時,只接收地址信息,
    MOV NUM_ADD,#31H
    MOV IE,#0F3H
    SETB ES
    SETB EA
    SETB ET0
    SETB ET1
    SETB TR0
    MOV IP, #03H
    SETB SM2
    SETB BEEP
    CLR GREEN_LED
    MOV JISHU,#50H ;為緩沖區設置初始值。
    MOV CARD_FLAG,#00H ;無卡標志置0。
    LCALL DH150MS
    CLR EX0
    MOV IE,#00H
    SETB TR1
    SETB ET0
    ; CLR ET0
    SETB ES
    SETB EA
    MAIN:
    LCALL DH70MS
    ; LCALL READ_CARD
    ; LCALL DH70MS
    ; LCALL TIME0
    LJMP MAIN



     

    ; JB S_DATA,MAIN ;有卡,S_DATA變低。
    ; AJMP MAIN
    ; LCALL GET_CHAR ;讀一字節卡數據。
    READ_CARD:
    LCALL RESET ;對MTP-K4進行復位。
    LCALL CLEAR ;首先對讀卡空間和卡標志初始化.
    SETB EX0
    LCALL DH70MS ;等待70MS從INT0接收數據
    CLR EX0
    MOV A,50H
    CJNE A,#02,NO_BEGIN ;如果接收到02,表示有開始位
    MOV A,5CH
    CJNE A,#03,NO_END ;如果接收到03,表示有結束位
    MOV CARD_FLAG,#0FFH ;標志有卡。

    MOV JISHU,#50H
    LJMP READ_END

    NO_BEGIN:
    MOV CARD_FLAG,#00H
    MOV JISHU,#50H
    ; LCALL CLEAR ;首先對讀卡空間和卡標志初始化.
    LJMP READ_END
    NO_END:
    MOV CARD_FLAG,#00H
    MOV JISHU,#50H
    ; LCALL CLEAR ;首先對讀卡空間和卡標志初始化.
    LJMP READ_END
    READ_END:
    RET

    ;--------------------------
    CLEAR:
    MOV R1,#5CH
    CLR_1: MOV A,#0FFH
    MOV @R1,A
    DEC R1
    MOV A,R1
    CJNE A,#49H,CLR_1
    RET
    ;======================================
    ;得到字節子程序
    GET_CARD_CHAR:
    PUSH 01H;R1入棧
    PUSH 02H;R2入棧
    ; JB S_DATA,$
    LCALL DH10US
    LCALL DH10US
    MOV R2,#08
    LOOP:
    LCALL DH104US
    MOV C,S_DATA
    RRC A
    DJNZ R2,LOOP
    ; LCALL DH104US
    POP 02H
    POP 01H
    RET
    ;=====================================
    ;中斷讀卡程序
    INT_0:
    PUSH ACC
    LCALL GET_CARD_CHAR ;讀一字節卡數據在A中。
    MOV R0,JISHU
    MOV @R0,A
    INC R0
    MOV JISHU,R0
    POP ACC

    ; CLR BEEP ;蜂鳴器發聲
    ; SETB GREEN_LED ;綠色LED發光。
    ; LCALL DH150MS
    ; CLR GREEN_LED
    ; SETB BEEP
    ; CLR RESET_K4 ;對MTP-K4進行復位操作。
    ; SETB RESET_K4


    RETI
    ;======================================
    ;串口得到字符程序,所得字符在A中,并清除串行中斷。
    COM_GET_CHAR:
    MOV A,SBUF
    CLR RI
    RET
    ;------------------------
    ;串口發送字符程序,所發字符在A中,并等待發送完成。
    COM_SEND_CHAR:
    MOV SBUF,A
    JNB TI,$
    CLR TI
    RET
    ;-------------------------
    COM_CARD:
     
    RET

    SOUND_1:
    CLR BEEP
    LCALL DH70MS
    SETB BEEP
    LCALL DH70MS
    RET
    ;======================================
    ;串行中斷子程序
    SERIAL:
    ; SETB GREEN_LED
    CLR RI
    PUSH ACC
    MOV A,SBUF
    CJNE A,#00,COMMAND_01;指令為與讀寫器連接
    MOV A,#00H
    LCALL COM_SEND_CHAR
    POP ACC
    RETI
    COMMAND_01:
    CJNE A,#01,COMMAND_02;指令為讀模塊版本號。
    MOV A,#56H
    LCALL COM_SEND_CHAR
    MOV A,#31H
    LCALL COM_SEND_CHAR
    MOV A,#2EH
    LCALL COM_SEND_CHAR
    MOV A,#30H
    LCALL COM_SEND_CHAR
    MOV A,#32H
    LCALL COM_SEND_CHAR
    POP ACC
    CLR GREEN_LED
    RETI
    COMMAND_02:
    CJNE A,#02H,COMMAND_03
    LCALL READ_CARD
    MOV A,CARD_FLAG
    CJNE A,#0FFH,COMMAND_02_ERR
    MOV A,51H
    LCALL COM_SEND_CHAR
    MOV A,52H
    LCALL COM_SEND_CHAR
    MOV A,53H
    LCALL COM_SEND_CHAR
    MOV A,54H
    LCALL COM_SEND_CHAR
    MOV A,55H
    LCALL COM_SEND_CHAR
    MOV A,56H
    LCALL COM_SEND_CHAR
    MOV A,57H
    LCALL COM_SEND_CHAR
    MOV A,58H
    LCALL COM_SEND_CHAR
    MOV A,59H
    LCALL COM_SEND_CHAR
    MOV A,5AH
    LCALL COM_SEND_CHAR
    MOV A,5BH
    LCALL COM_SEND_CHAR
    POP ACC
    RETI
    COMMAND_02_ERR:
    MOV A,#02H
    LCALL COM_SEND_CHAR
    POP ACC
    RETI
    COMMAND_03:
    CJNE A,#03H,COMMAND_11
    POP ACC
    RETI
    COMMAND_11:
    CJNE A,#011H,COMMAND_12
    MOV A,#011H
    LCALL COM_SEND_CHAR
    LCALL SOUND_1
    POP ACC
    RETI
    COMMAND_12:
    CJNE A,#012H,COMMAND_13
    MOV A,#012H
    LCALL COM_SEND_CHAR
    LCALL SOUND_1
    LCALL SOUND_1
    POP ACC
    RETI
    COMMAND_13:
    CJNE A,#013H,COMMAND_21
    MOV A,#013H
    LCALL COM_SEND_CHAR
    LCALL SOUND_1
    LCALL SOUND_1
    LCALL SOUND_1
    POP ACC
    RETI
    COMMAND_21:
    CJNE A,#0B1H,COMMAND_22
    MOV A,#0B1H
    LCALL COM_SEND_CHAR
    SETB GREEN_LED
    LCALL DH70MS
    CLR GREEN_LED
    POP ACC
    RETI
    COMMAND_22:
    POP ACC
    RETI


    ;SERIAL:
    ; PUSH ACC
    ; LCALL COM_GET_CHAR
    ; CJNE A,#23H,NO_FIRST_HAND;如果等于23H為第一次握手信號,否則不是。
    ; MOV A,#45H
    ; LCALL COM_SEND_CHAR
    ; MOV FIRST_HAND,#0FFH;第一次握手標志,成功。
    ; MOV COMMAND_FLAG,#00H;清除命令標志。
    ; LJMP SER_END
    ;NO_FIRST_HAND:
    ; CJNE A,#0AAH,NO_READ_ID;AA為取ID卡號命令。
    ; MOV COMMAND_FLAG,#0AAH
    ; MOV A,#67H
    ; LCALL COM_SEND_CHAR
    ; LJMP SER_END
    ;NO_READ_ID:
    ; CJNE A,#89H,NO_SECOND_HAND
    ; MOV A,COMMAND_FLAG
    ; CJNE A,#0AAH,NEXT_COMMAND;如果為AA指令,發送卡號。并清除指令。
    ; LCALL COM_SEND_ID
    ;
    ;NEXT_COMMAND:
    ; MOV COMMAND_FLAG,#00H ;命令出錯,清除所有標志。
    ; MOV FIRST_HAND,#00H
    ; MOV SECOND_HAND,#00H
    ; LJMP SER_END

    ;SER_END:
    ; POP ACC
    ; RETI
    ;=======================================
    RESET:
    CLR RESET_K4
    ; NOP
    SETB RESET_K4
    RET

    ;=======================================
    DH104US:
    MOV R1,#47
    DJNZ R1,$
    RET

    DH10US:
    MOV R1,#04
    DJNZ R1,$
    RET
    ;------------------
    DH70MS:
    MOV R1,#09FH
    D10: MOV R2,#0FFH
    DJNZ R2,$
    DJNZ R1,D10
    RET
    ;------------------

    DH150MS:
    MOV R1,#0FFH
    DH2: MOV R2,#0FFH
    DJNZ R2,$
    DJNZ R1,DH2
    RET
    ;-----------------------
    ;未用
    TIME0:
    CPL RED_LED
    ; PUSH ACC
    ; MOV A,CARD_FLAG
    ; CJNE A,#00H,LED_L
    ; CLR GREEN_LED
    ; setb beep
    ; POP ACC
    ; RETI
    ;LED_L: SETB GREEN_LED
    ; clr beep
    ; POP ACC
    RETI



    END

    本文關鍵詞:ID卡讀卡器源程序
    回到頂部