<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è)園

                  一種安全可靠的IC卡讀寫(xiě)器系統

                  文章出處:http://psychicreadingswithdeb.com 作者:不詳&nbsp;&nbsp; 人氣: 發(fā)表時(shí)間:2011年10月24日

                  [文章內容簡(jiǎn)介]:一種安全可靠的IC卡讀寫(xiě)器系統

                  摘 要 采用XICOR公司的X76F100作串行E2PROM,設計以MCS-51單片機為核心的IC卡讀寫(xiě)器系統??梢詫?shí)現查詢(xún)、安全存儲、修改密碼等功能。用戶(hù)還可以根據需要進(jìn)行功能擴充。


                  1 IC卡讀寫(xiě)器概述

                    人們日常生活中經(jīng)常接觸到磁卡和IC卡,它們是根據卡片上的信息載體的不同而劃分的??ㄆ捌渥x寫(xiě)器都屬于人機接口的輸入輸出設備。磁卡是在卡片上貼一條窄窄的磁帶來(lái)記錄信息的,它主要用于車(chē)船票 、信用卡、電話(huà)磁卡、旅館門(mén)鑰匙等。IC卡則為近幾年才出現的新型卡片,在卡片上嵌有IC(E2PROM,有的還有CPU)。由于它保存的信息比較可靠安全、可以高達幾萬(wàn)次的讀寫(xiě),所以大量應用于公交車(chē)票 、飯票 、保健卡、收費系統等。下面介紹一種以XICOR公司的X76F100為卡片的、用于存取款的IC卡讀寫(xiě)器方案。

                  2 硬件組成

                    圖1為IC卡及其讀寫(xiě)器硬件電路圖。其中讀寫(xiě)器由單片機、鍵盤(pán)、顯示、監控電路等部分組成。IC卡采用XICOR公司的X76F100Y。

                  圖1 IC卡讀寫(xiě)器系統電路圖

                  2.1 IC卡及卡座

                    X76F100為128×8位的保密串行FLASH E2PROM,其中讀密碼和寫(xiě)密碼分別為64位。圖2為其智能卡Smart Card封裝的引腳圖。把芯片封裝在一個(gè)卡片上,將卡片插入IC卡讀寫(xiě)器的卡座中,讀寫(xiě)器就可以對它進(jìn)行讀寫(xiě),實(shí)現加密、查詢(xún)、存款、取款等功能。
                    IC卡座有8個(gè)引腳,當X76F100Y插入時(shí),正好同這幾個(gè)引腳相連。另外還有兩個(gè)固定端,其中一個(gè)固定端同卡座上一個(gè)彈簧片相連,兩個(gè)觸點(diǎn)和簧片就相當于一個(gè)常閉開(kāi)關(guān)。當卡未插入時(shí),簧片閉合,P3.2腳保持低電平;當卡插入時(shí),簧片被頂開(kāi),P3.2腳變?yōu)楦唠娖?。當單片機檢測到P3.2腳變高,通過(guò)P1.3 使X76F100的RST引腳變高,使其復位。

                  2.2 單片機

                    單片機采用LG公司的GMS97C52。它有8K字節的ROM,256個(gè)字節的RAM以及32個(gè)I/O口,P1口與串行器件X25045和X76F100連接,P0、P2口用于鍵盤(pán)和顯示,P3口中P3.2用于檢測IC卡是否插入,其余7個(gè)口,可作其它功能擴充。
                   

                  圖2 X76F100Y引腳



                  2.3 監控電路

                    監控電路采用X25045芯片,它包括看門(mén)狗定時(shí)器、電壓監控電路和E2PROM存貯器。其功能是:上掉電時(shí)對GMS97C52產(chǎn)生RESET信號;看門(mén)狗對系統進(jìn)行監控,防止死機。

                  2.4 鍵盤(pán)電路

                    為了方便,鍵盤(pán)接口電路用I/O口實(shí)現,它為4×4結構,16個(gè)鍵。其中數字鍵11個(gè),功能鍵4個(gè),回車(chē)鍵1個(gè)?!?BR>

                  數字鍵:0、1、2、3、4、5、6、7、8、9、←(退格)。

                  功能鍵:查詢(xún)?、存儲+、取款-、改密碼* 。

                  查詢(xún)?:用戶(hù)通過(guò)讀密碼可以查詢(xún)卡中所存的款額。

                  存款+ :用戶(hù)通過(guò)寫(xiě)密碼可以將款存入卡中。

                  取款-:用戶(hù)通過(guò)寫(xiě)密碼可以從卡中取款。

                  改密碼*:分為修改讀密碼和寫(xiě)密碼。為方便起見(jiàn),令讀密碼和寫(xiě)密碼一

                  致,按此鍵將同時(shí)修改讀密碼和寫(xiě)密碼。

                  回車(chē)鍵:8位密碼或存取款數輸入完確認,以及新密碼輸入完確認。

                  2.5 顯示電路

                    顯示部份采用LED顯示器,也用I/O口實(shí)現。用于顯示系統狀態(tài)、輸入的密碼或所要存取的款額以及出錯信息等。
                    由于GMS97C52的驅動(dòng)電流有限,在P0、P2口加反向器SN74F04,增加驅動(dòng)能力。它的吸入電流為64mA,輸出電流為15mA,可以保證位選所需的吸入電流。

                  3 程序設計

                  3.1 主程序流程圖

                    主程序流程圖如圖3所示。
                    開(kāi)機后,系統處于待機狀態(tài),不斷查詢(xún)P3.2腳電平,當X76F100插入讀寫(xiě)器卡座時(shí),P3.2腳電平變高,單片機檢測到P3.2高電平信號時(shí),使P1.3腳電平變高,如果此時(shí)為低電平,X76F100復位,輸出32位固定的“同步復位響應”數據。然后循環(huán)掃描鍵盤(pán)顯示程序,進(jìn)行存款、取款、查詢(xún)或改密碼。一次操作完成后返回,然后不斷循環(huán)。

                  3.2 循環(huán)鍵盤(pán)顯示程序

                    循環(huán)掃描鍵盤(pán)顯示程序如圖4所示,它采用程控掃描方式。鍵盤(pán)實(shí)際操作的順序是:先按功能鍵,然后依次輸入8位(十進(jìn)制)密碼,按回車(chē)鍵確認。當存取款時(shí),隨后輸入所存取的款額;當修改密碼時(shí),隨后輸入8位新密碼,輸完后按回車(chē)鍵確認。若輸入密碼正確,顯示IC卡內存款的余額或改密碼成功信息(SUCCESS)。若密碼不正確,提示重新輸入,允許輸入密碼4次。
                    為了記錄操作中正在進(jìn)行的狀態(tài),在鍵盤(pán)程序中設置了多個(gè)指針。
                    (1)KEY 有否按鍵按下標志。00H表示無(wú)鍵按下,01H表示有鍵按下。此標志用于判斷按鍵是否已松開(kāi),防止誤操作。
                    (2)FUN為功能鍵指針,00H表示無(wú)功能鍵按下,01H表示存款(ADD),02H表示取款(SUB),03H表示查詢(xún)(IQUIRE),04H表示改密碼(CHANGE PASSWORD)。
                  (3)DIG為允許數字鍵輸入標志,00H表示不允許,01H表示允許。此標志主要是防止輸入多余的密碼,或輸入的款數超出限額。
                  ?。?) NUM表示輸入第幾個(gè)數字,00H表示無(wú)數字輸入,01H~08H表示輸入密碼,09H~10H表示輸入款數或新密碼,若NUM為11H,顯示出錯信息。

                  3.3 X76F100讀程序舉例

                  圖4 循環(huán)鍵盤(pán)顯示程序流程圖

                    X76F100為I2C總線(xiàn)E2PROM。SCL為時(shí)鐘輸入,SDA為雙向數據輸入輸出線(xiàn)。通過(guò)片輸入來(lái)控制對器件的訪(fǎng)問(wèn)。下面以頁(yè)寫(xiě)為例,先結合時(shí)序說(shuō)明X76F100的工作過(guò)程,然后給出程序。
                    頁(yè)寫(xiě)時(shí)序如圖5所示。在該系統中,GMS97C52為主機,X76F100為從機。首先主機向從機發(fā)一個(gè)START命令,產(chǎn)生開(kāi)始條件,然后發(fā)寫(xiě)命令字。當從機接到命令后,向主機發(fā)一個(gè)應答信號NACK。然后跟隨8字節密碼,隨后進(jìn)入一個(gè)寫(xiě)周期,寫(xiě)周期結束后進(jìn)行密碼應答輪詢(xún)ACK Polling。X76F100要求主機用專(zhuān)用的應答命令55H進(jìn)行應答輪詢(xún)。如果輸入的密碼正確,將返回一個(gè)“ACK”。如果密碼不正確,將返回“no-ACK”,重試計數器加1,返回到啟始位置,提示重新送入寫(xiě)命令字和8字節密碼。若密碼正確,主機接著(zhù)送入8個(gè)字節的數據,ACK響應成功后,主機發(fā)出STOP命令完成寫(xiě)操作。下面是用寫(xiě)密碼進(jìn)行頁(yè)寫(xiě)的程序。


                  圖5 頁(yè)寫(xiě)時(shí)序圖(需要密碼)

                  WRITE_USING_WRITE_PASS: ;用寫(xiě)密碼進(jìn)行寫(xiě)操作
                  ACALL     START
                  ;調開(kāi)始命令
                  MOV      A,#SECTOR_WR
                  ;調頁(yè)寫(xiě)命令
                  ACALL     OUTBYTE
                  ;調輸出字節命令
                  ACALL     NACK
                  ;X76F100發(fā)應答信號
                  ACALL     WR_WR_PASS 
                  ;調寫(xiě)密碼命令
                  ACALL     T10ms
                  ;10ms延時(shí)開(kāi)始寫(xiě)密碼周期
                  ACALL     ACK_POLLING
                  ;調密碼應答輪詢(xún)子程序
                  ACALL     WR_DATA
                  ;調頁(yè)寫(xiě)數據子程序
                  ACALL      STOP
                  ;調停止命令
                  ACALL     T10ms
                  ;延時(shí)10ms寫(xiě)密碼周期
                  RET
                   
                  WR_WR_PASS: ;將寫(xiě)密碼寫(xiě)入X76F100
                  MOV      R0,#WR_PASS7
                  ;將密碼首址送入R0
                  MOV      R1,#08H
                  ;寫(xiě)密碼為8個(gè)字節
                  WP:MOV      A,@R0  ;將R0中的數據送入A中
                  ACALL    OUTBYTE
                  ;輸出字節子程序
                  ACALL    NACK
                   
                  INC      R0
                   
                  DJNZ     R1,WP
                   
                  RET
                   
                  WR_DATA: ;將數據寫(xiě)到X76F100中
                  MOV     R0,#DATA0
                  ;將數據首地址送入R0
                  MOV     R1,#08H
                  ;一頁(yè)有8個(gè)數據
                  WB: MOV     A,@R0 ;將R0中數據送入A 
                  ACALL    OUTBYTE
                  ;調輸出字節子程序
                  ACALL    NACK
                  ;從機發(fā)應答信號
                  INC      R0
                  ;下一個(gè)字節
                  DJNZ     R1,WB 
                  ;循環(huán)直到R1為0
                  RET
                   
                  OUTBYTE: ;主機向X76F100發(fā)字節
                  MOV     R2,#08H
                  ;一個(gè)字節有8位
                  LOOPO: 
                  CLR      SCL_76
                   
                  RLC      A
                  ;移位
                  MOV     SDA_76,C
                  ;將進(jìn)位送入數據線(xiàn)
                  SETB     CL_76
                   
                  DJNZ     R2,LOOP
                  ;循環(huán)直到R2為0
                  RET
                   
                  START: 
                  SETB     SDA_76
                   ;開(kāi)始子程序
                  SETB     SCL_76
                   
                  CLR      SDA_76
                   
                  CLR      SCL_76
                   
                  RET
                   
                  STOP: 
                  CLR      SDA_76
                   ;停止子程序
                  SETB     SCL_76
                   
                  SETB     SDA_76 
                   
                  RET
                   
                  ACK_POLLING: ;密碼應答輪詢(xún)子程序
                  ACALL    START
                   
                  MOV     A,#55H
                  ;主機發(fā)固定應答命令
                  ACALL   OUTBYTE
                   
                  ACALL   NACK
                  ;調從機發(fā)應答信號
                  JC      PASS_ERROR
                  ;若有進(jìn)位則密碼錯誤
                  RET
                   
                  PASS_ERROR: ;密碼錯誤
                  ACALL   STOP
                   
                  RET 
                   
                  ACK: 
                  CLR    SDA_76
                  ;主機執行一個(gè)應答
                  ACALL  CLOCK 
                   
                  RET
                   
                  NACK: 
                  SETB   SDA_76
                  ;從機執行一個(gè)應答 
                  ACALL  CLOCK
                   
                  RET
                   
                  CLOCK: 
                  SETB  SCL_76
                  ;第9個(gè)脈沖
                  MOV  C,SDA-76
                  ;讀SDA狀態(tài)以判斷是否有應答
                  CLR   SCL_76
                   
                  RET 
                   
                  T10ms: 
                  MOV  R7,#064H
                  ;10ms延時(shí)
                  T10A: 
                  MOV  R6,#032H
                   
                  T10B: 
                  DJNZ  R6,T10B
                   
                  DJNZ  R7,T10A
                   
                  RET
                   

                    參 考 文 獻

                  1 詹樹(shù)仁主編. GMS90及GMS97系列單片機的工作原理及其應用. 武漢力源電子股
                   份有限公司,1998年   

                  2 趙依軍,胡戎. 單片機微機接口技術(shù). 人民郵電出版社,1989

                  3 盧存偉,錢(qián)捷. 微機原理及應用系統設計. 河海大學(xué)出版社,1992年

                  4 X76F100 DATA SHEET. XICOR公司

                  本文關(guān)鍵詞:一種安全可靠的IC卡讀寫(xiě)器系統
                  回到頂部
                  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>