<strike id="tpvd9"><dfn id="tpvd9"></dfn></strike>

        <em id="tpvd9"></em>

          <address id="tpvd9"></address>
            <dfn id="tpvd9"><sub id="tpvd9"></sub></dfn>

            <thead id="tpvd9"><noframes id="tpvd9">
            <ruby id="tpvd9"></ruby>

                  <thead id="tpvd9"></thead>
                  歡迎您訪(fǎng)問(wèn)鄭州興邦電子股份有限公司官方網(wǎng)站!
                  阿里巴巴誠信通企業(yè)
                  全國咨詢(xún)熱線(xiàn):40000-63966
                  興邦電子,中國水控機第一品牌

                  聯(lián)系興邦電子

                  全國咨詢(xún)熱線(xiàn):40000-63966

                  售后:0371-55132951/55132952

                  工廠(chǎng):河南省 鄭州市 高新區蓮花街電子電器產(chǎn)業(yè)園

                  關(guān)于非接觸式IC智能(射頻)卡及其讀寫(xiě)設備內核技術(shù)的研究與應用開(kāi)發(fā)(連載8)

                  文章出處:http://psychicreadingswithdeb.com 作者:張敏&nbsp;&nbsp; 人氣: 發(fā)表時(shí)間:2011年11月01日

                  [文章內容簡(jiǎn)介]:關(guān)于非接觸式IC智能(射頻)卡及其讀寫(xiě)設備內核技術(shù)的研究與應用開(kāi)發(fā)(連載8)

                  一). 對MCM200(SB201)操作指令的程序設計和開(kāi)發(fā)
                    對MCM指令的說(shuō)明:
                    MCU對MCM的控制是以MCU發(fā)出MCM的指令來(lái)達到的。MCU對MCM的控制事實(shí)上也就是對 Mifare 1 非接觸式IC射頻卡的控制。
                    MCM的指令主要有這樣一些:Request std, Request all,  Anticollision, Select, Load_key, Authentication(Auth_1a,Auth_1b), Read, Write, Increment, Decrement, Restore, Transfer, Halt 等等。其中比較重要的是前8條指令,以及Halt 停機指令等。因為它們可以完成MCU對Mifare 1 非接觸式IC射頻卡的很多應用場(chǎng)合的控制。例如 門(mén)禁控制系統(Door Access System),高速公路不停車(chē)收費系統,停車(chē)場(chǎng)收費管理系統,公交/地鐵非接觸式IC智能射頻卡的“刷卡”讀寫(xiě)器(收費管理系統),機關(guān)/企業(yè)內部考勤管理系統,醫療保險管理系統,出租車(chē)收費管理系統,銀行服務(wù)“一卡通”等等。
                    MCU對MCM的某一指令操作不是簡(jiǎn)單的一條指令所能完成的,必須有一個(gè)程序的序列來(lái)完成,其中有對MCM硬件內核寄存器的設置以及匯編語(yǔ)言軟件上的判斷和設置。例如對卡片進(jìn)行讀(READ)操作,則程序員必須對MCM內部的BCNTR寄存器,BCNTS寄存器,TOC寄存器,STACON寄存器等進(jìn)行設置,同時(shí)還必須對地址進(jìn)行設置,對每一個(gè)狀態(tài)進(jìn)行判別等等,對最終讀得的數據還必須進(jìn)行校驗等等。就連一條最簡(jiǎn)單的停機(Halt)指令也必須首先對MCM內部的諸多寄存器進(jìn)行設置,等等。不同的指令將設置不同的MCM內部寄存器以及應有不同的匯編語(yǔ)言程序序列。
                    1.對MCM200(SB201)“Request std”和“ Request all”指令的匯編語(yǔ)言應用程序的設計
                    功能:調用該匯編語(yǔ)言子程序,將執行MCM “Request std”或“ Request all”指令操作,讀取Mifare 1 非接觸式IC射頻卡的TAGTYPE字節,建立與卡片的第一步必不可少的通信聯(lián)系。

                  程序說(shuō)明:
                    1.在以下的匯編語(yǔ)言程序中,如果要調用該MCM指令操作,則應首先設置MCU的R2的值: R2=”00H”  執行Request std操作;
                  R2=”01H”  執行Request all操作;
                    在該指令程序中用到了一些其他的子程序分別為:
                  D500US: 為500us的延時(shí)子程序;
                  H_SEND_TO_BUF01:
                    DEMO電路中,將A寄存器中的數據送顯示電路中的高四位中的第0,1位,以準備顯示,地址為34H,35H;
                  H_SEND_TO_BUF23:
                    DEMO電路中,將A寄存器中的數據送顯示電路中的高四位中的第2,3位,以準備顯示,地址為32H,33H;
                  SEND_TO_BUF01:
                    DEMO電路中,將A寄存器中的數據送顯示電路中的低四位中的第0,1位,以準備顯示,地址為39H,3AH;
                  SEND_TO_BUF23:
                    DEMO電路中,將A寄存器中的數據送顯示電路中的低四位中的第2,3位,以準備顯示,地址為37H,38H;
                  DISPLAY:
                    DEMO電路中,顯示8位數據中的低4位數據值。即將存儲在37H至3AH顯示內存中的低四位數據顯示在LED上。
                  H_DISPLAY:
                    DEMO電路中,顯示8位數據中的高4位數據值。即將存儲在31H至34H顯示內存中的高四位數據顯示在LED上。

                  2.在以下的匯編語(yǔ)言程序中,讀者可能會(huì )碰到一些寄存器變量,或其他應用子程序,這些可能是用于主控程序或是調試而用。特加以說(shuō)明。

                    程序清單如下:
                  ;======================== MCM REQUEST OPERATION ===================
                  request:
                  REPEAT_RQT:
                  _1_STACON:           ;設置MCM中的STACON寄存器為 : 0CH
                      MOV A,#0CH       ;設置A寄存器 = 0CH
                      MOV R0,#01H       ;STACON 寄存器地址為01H
                      MOVX @R0,A       ;將A寄存器內容送入STACON寄存器中
                  _2_BAUDRATE: ;設置MCM中的BAUDRATE寄存器為:0EH
                      MOV A,#0EH
                      MOV R0,#05H
                      MOVX @R0,A
                  _3_ENABLE:            ;設置MCM中的ENABLE寄存器為:0C0H
                      MOV A,#0C0H
                      MOV R0,#02H
                      MOVX @R0,A
                  _4_MODE:  ;設置MCM中的MODE寄存器為:0C6H
                      MOV A,#0D6H ;(如果采用SB201,則MODE寄存器應為:0D6H)
                      MOV R0,#07H
                      MOVX @R0,A
                  _5_STACON_AGAIN:
                      MOV A,#0CH
                      MOV R0,#01H
                      MOVX @R0,A
                  _6_RCODE:
                      MOV A,#02H
                      MOV R0,#0EH
                      MOVX @R0,A
                  _7_BCNTS:
                      MOV A,#07H
                      MOV R0,#03H
                      MOVX @R0,A
                  _8_BCNTR:
                      MOV A,#10H
                      MOV R0,#04H
                      MOVX @R0,A
                  ;----------------------------------------------------------------    
                  JUDG_RQT_STD_OR_ALL:    ??;根據R2值, 判斷是執行Request std操作
                      MOV A,R2        ??;還是Request all操作
                      XRL A,#01H
                      JNZ RQT_STD
                  ;----------------------------------------------------------------    
                  RQT_ALL:
                      MOV A,#52H
                      AJMP _11_RQT_MCM
                  RQT_STD:
                      MOV A,#26H
                  _11_RQT_MCM:
                      MOV R0,#00H
                      MOVX @R0,A
                  _12_TOC:
                      MOV A, #0AH
                      MOV R0,#06H
                      MOVX @R0,A       ;TOC = 0AH
                  ;----------------------------------------------------------------    
                  RD_STACON: 
                      MOV R0,#01H
                      MOVX A,@R0       ;READ STACON()
                  ;================================================================
                  JUDG_DV_BIT:
                      JNB ACC.7,RD_STACON   ; RD_STACON
                  ;================================================================
                      mov r7,a        ;protect A = stacon()
                  ;================================================================
                      MOV A, #00H
                      MOV R0,#06H
                      MOVX @R0,A       ;TOC=00H
                  ;================================================================
                      mov a,r7        ;return stacon() value to A
                  ;=================       ;for BE and TE error-flag
                      ACALL H_SEND_TO_BUF23  ;DISPLAY R7XX ---> R7 = STACON()
                  ;================================================================
                  _13_JUDG_ERR:
                      JB ACC.6,TE_ERR     ; TE_ERR
                      JB ACC.3,BE_ERR     ; BE_ERR
                  ;================================================================
                      MOV R0,#00H       ;READ_TAGTYPE_0
                      MOVX A,@R0

                      MOV 45H,A
                      ACALL SEND_TO_BUF01   ;SEND TAGTYPE 0 TO DISP_BUF_LOW
                  ;----------------------------------------------------------------    
                      mov r0,#00h
                      MOVX A,@R0       ;READ_TAGTYPE_1

                      MOV 46H,A
                      ACALL SEND_TO_BUF23   ;SEND TAGETYPE 1 TO DISP_BUF_HIGH
                  ;----------------------------------------------------------------    
                      MOV B,#00H       ;00H is OK flag
                  ;================================================================
                      mov a,b
                      ACALL H_SEND_TO_BUF01  ;XXBB
                  ;================================================================
                      SETB P2.6        ;OK LAMP NOW WORKING
                      mov a,#00h
                      ACALL SPK_ON      ;if ok then spk on
                      LJMP request_exit    ;exit and RET
                  ;----------------------------------------------------------------    
                  TE_ERR: MOV B,#01        ;TE error flag is 01H
                      MOV R6,B            

                      LJMP RQT_EXIT
                  ;----------------------------------------------------------------    
                  BE_ERR: MOV R7,#0AH       ;READY TO DELAY 500us
                      ACALL D500US   ;延時(shí)500us
                      MOV B,#0BH       ;BE error flag is 0BH    

                      ; MOV A,#88H
                      ; ACALL SEND_TO_BUF01
                      ; ACALL SEND_TO_BUF23
                  ;----------------------------------------------------------------    
                  RQT_EXIT:
                      LJMP REPEAT_RQT
                  ;----------------------------------------------------------------    
                  request_exit:
                      RET
                  ;==================End of MCM Request Operation =======================

                  2. 對MCM200(SB201)“AntiCollision”(防卡片重疊) 指令的匯編語(yǔ)言應用程序的設計
                  功能:調用該匯編語(yǔ)言子程序,將執行MCM “AntiCollision”(防卡片重疊) 指令操作。如果卡片讀寫(xiě)器的天線(xiàn)之有效工作距離內有多張重疊的Mifare 1 非接觸式IC射頻卡,則該指令將幫助程序員選擇其中指定的一張卡片進(jìn)行操作?!癆ntiCollision”(防卡片重疊) 指令操作將讀取卡片的系列號(SERIAL NUMBER)字節。
                  程序說(shuō)明:
                  1.)在以下的匯編語(yǔ)言程序中,用到了一些其他的子程序(和上述的“Request std和Request all”指令操作中的相同),分別為:
                  D500US: 為500us的延時(shí)子程序;
                  H_SEND_TO_BUF01:(同上)
                  H_SEND_TO_BUF23:(同上)
                  SEND_TO_BUF01:(同上)
                  SEND_TO_BUF23:(同上)
                  DISPLAY:(同上)
                  H_DISPLAY:(同上)
                  2.)在以下的匯編語(yǔ)言程序中,讀者可能會(huì )碰到一些寄存器變量,或其他應用子程序,這些可能是用于主控程序或是調試而用。特加以說(shuō)明。等等。
                  3.)在本匯編語(yǔ)言子程序中,校驗,計算卡片序列號的方法采用了相鄰兩個(gè)字節相互異或,得出的結果與下一個(gè)字節再異或這樣一種方法。前四個(gè)字節異或的結果與第5個(gè)字節應該相同,即與第5個(gè)字節異或的結果應為“00H”,否則MCU讀到的卡片的序列號有錯。因此對于我們來(lái)說(shuō),卡片的序列號前四個(gè)字節是有意義的,第5個(gè)字節僅僅用于校驗之用。并無(wú)實(shí)際意義。我們通常所說(shuō)的序列號指的是前4個(gè)字節。并不包括第5個(gè)字節。這五個(gè)字節被存儲在卡片的第0扇區的第0塊中,由卡片的生產(chǎn)商制定,固化,不得更改,且在世面上流通的Mifare 1 S50系列的非接觸式IC射頻卡中,每一張卡片的序列號都不相同,都是唯一的。
                  例如,某一張卡片的序列號為:007e0a42H,則計算異或方法如下:
                  00h異或7eh:(第一和第二字節異或)
                  0000 0000
                  0111 1110
                          ---------------------------
                  第一次異或結果為: 0111 1110      為7eh;
                  將7eh與0ah相異或:  0111 1110
                  0000 1010
                         -------------------------------
                  第二次異或結果為:   0111 0100     為74h;
                  將74h與42h相異或:  0111 0100
                              0100 0010
                          -------------------------------
                  第三次異或結果為:   0011 0110     為36h;
                  這樣前四個(gè)字節得到的異或結果為36H,如果讀到的卡片上的序列號的第5個(gè)字節為36H,則證明此次得到的卡片的序列號是有效的。如果讀到的卡片上的序列號的第5個(gè)字節不為36H,則證明此次得到的卡片的序列號是無(wú)效的。
                  第四次異或為:  將第三次異或結果36h與第5個(gè)字節相異或,如果第5個(gè)字節讀到的值為36H,則:
                  將36h與36h相異或:  0011 0110
                              0011 0110
                          -------------------------------
                  第四次異或結果為:   0000 0000     為00h
                  這樣四次異或結果為00H,表明MCU讀取的卡片序列號是有效的。具體的程序如下,請讀者仔細分析,定能理解上述關(guān)于卡片序列號的校驗方法。

                  程序清單如下:
                  ;======================== MCM ANTICOLLISION OPERTION ====================
                  anticollision:

                  ANTI_REPEAT:
                      MOV A, #10H
                      MOV R0,#03H
                      MOVX @R0,A   ;BCNTS = 10H
                      MOV A, #0CH
                      SETB ACC.0   ;AC = 1
                      MOV R0,#01H
                      MOVX @R0,A   
                      MOV R7,#02H   ;DELAY 1000US
                      ACALL D500US
                      MOV A, #93H
                      MOV R0,#00H
                      MOVX @R0,A   ;DATA = 93H (ANTICOLLISION OPERATION CODE)
                      MOV A, #20H
                      MOV R0,#00H
                      MOVX @R0,A   ;DATA = 20H
                      MOV A, #28H
                      MOV R0,#04H
                      MOVX @R0,A   ;BCNTR = 28H    
                      MOV A, #0AH
                      MOV R0,#06H
                      MOVX @R0,A   ;TOC = 0AH
                  ANTI_RD_STACON:
                      MOV R0,#01H
                      MOVX A,@R0   ;READ: STACON ==> A
                      JNB ACC.7,ANTI_RD_STACON    ;IF DV = 1? NO,IT WILL READ AGAIN
                  ;--------------------- NOW DV=1, JUDG OTHER FLAGS---------------------
                      MOV A, #00H
                      MOV R0,#06H
                      MOVX @R0,A   ;TOC = 00H
                      JB ACC.6, ANTI_TE_ERR      ;TE ERR
                      JB ACC.3, ANTI_BE_ERR      ;BE ERR
                  ;----------------NOW NO ERRORS OCCUR,CAN READ SNR ----------------
                      MOV R7,#04H   ;R7 IS A COUNTER,FOR READING 4-BYTE SERIAL NUMBER
                      MOV B,#00H
                      MOV R1,#40H
                      MOV R0,#00H
                  ANTI_LOOP:
                      MOVX A,@R0   
                      MOV @R1,A    ;STORE SNR(1)--(4) IN 40H,41H,42H,43H
                      XRL B,A     ;CACULATE
                      INC R1
                      DJNZ R7,ANTI_LOOP
                      MOVX A,@R0   ;READ 5th CHK_SUM_VALUE
                      XRL A,B     ;CACULATE
                      JNZ ANTI_CHK_ERR_EXIT ;If Z=0? If Not,CHK_SUM_VALUE ERROR
                  ;------------------------- NOW THE SNR IS VALID ----------------------------
                  _OK:
                  ;MOV B,#00H       ;IF SNR OK,THEN (B) = 00H <----RETURN_VALUE

                      MOV R1,#40H       ;(40H) ==> SNR(1)
                      MOV A,@R1
                      ACALL SEND_TO_BUF01  ;SEND SNR(1) TO DISP_BUF_LOW
                      INC R1         ;(41H) ==> SNR(2)
                      MOV A,@R1
                      ACALL SEND_TO_BUF23  ;SEND SNR(2) TO DISP_BUF_HIGH
                      INC R1         ;(42H) ==> SNR(3)
                      MOV A,@R1
                      ACALL H_SEND_TO_BUF01  ;SEND SNR(3) TO H_DISP_BUF_LOW
                      INC R1         ;(43H) ==> SNR(4)
                      MOV A,@R1
                      ACALL H_SEND_TO_BUF23  ;SEND SNR(4) TO H_DISP_BUF_HIGH

                      SETB P2.6       ;OK LAMP NOW WORKING P2.3
                      ACALL SPK_ON      ;if ok then spk on
                      MOV B,#00H       ;IF SNR OK,THEN (B) = 00H <----RETURN_VALUE
                      AJMP ANTI_OK_EXIT
                  ;----------------------ERROR PROCESS-------------------------------
                  ANTI_TE_ERR:
                      MOV B,#01H       ;IF TE_ERR, THEN (B) = 01H
                      AJMP ANTI_ERR_EXIT
                  ANTI_BE_ERR:
                      MOV B,#0AH       ;IF BE_ERR, THEN (B) = 01H
                      AJMP ANTI_ERR_EXIT
                  ;------------------------------ exit process -----------------------------
                  ANTI_CHK_ERR_EXIT:
                      MOV B,#08H
                      MOV A,B
                      ;ACALL H_SEND_TO_BUF23   ;SEND RETURN_ERR_VALUE TO DISP_BUF_HIGH
                  ANTI_ERR_EXIT:
                  ANTI_OK_EXIT:
                      RET
                  ;-------------------- End of MCM AntiCollision Operation -----------------

                  本文關(guān)鍵詞:關(guān)于非接觸式IC智能射頻卡及其讀寫(xiě)設備內,于非接觸式IC智能射頻卡及其讀寫(xiě)設備內核,非接觸式IC智能射頻卡及其讀寫(xiě)設備內核技,接觸式IC智能射頻卡及其讀寫(xiě)設備內核技術(shù),觸式IC智能射頻卡及其讀寫(xiě)設備內核技術(shù)的,式IC智能射頻卡及其讀寫(xiě)設備內核技術(shù)的研,IC智能射頻卡及其讀寫(xiě)設備內核技術(shù)的研究,C智能射頻卡及其讀寫(xiě)設備內核技術(shù)的研究與,智能射頻卡及其讀寫(xiě)設備內核技術(shù)的研究與應,能射頻卡及其讀寫(xiě)設備內核技術(shù)的研究與應用,射頻卡及其讀寫(xiě)設備內核技術(shù)的研究與應用開(kāi),頻卡及其讀寫(xiě)設備內核技術(shù)的研究與應用開(kāi)發(fā),卡
                  回到頂部
                  99久热只有精品视频在线17_精品一区二区三区自拍图片_最新国产v亚洲_久久综合九色综合久
                  <strike id="tpvd9"><dfn id="tpvd9"></dfn></strike>

                        <em id="tpvd9"></em>

                          <address id="tpvd9"></address>
                            <dfn id="tpvd9"><sub id="tpvd9"></sub></dfn>

                            <thead id="tpvd9"><noframes id="tpvd9">
                            <ruby id="tpvd9"></ruby>

                                  <thead id="tpvd9"></thead>