版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
PAGEPAGE5目錄前言…………2系統(tǒng)原理框圖4一系統(tǒng)原理框圖的繪制………4二原理圖………6硬件部分介紹………………7一AT89C51單片機(jī)簡(jiǎn)介………7二RS232串行接口……………9三SLE4442簡(jiǎn)介………………11四IC卡座……………………11五外圍電路………13軟件部分……17一工作過(guò)程、流程圖…………17二用C51實(shí)現(xiàn)的讀/寫(xiě)主程序19三上位PC機(jī)通信接口軟件……26總結(jié)……………..28一總結(jié)……………28二參考文獻(xiàn)………28前言IC卡是一個(gè)正蓬勃發(fā)展的邊緣產(chǎn)業(yè),一個(gè)與我們的生活正越來(lái)越密切的產(chǎn)業(yè)。在普及因特網(wǎng)和計(jì)算機(jī)的大潮涌來(lái)時(shí),IC卡扮演著越來(lái)越重要的角色。IC卡讀寫(xiě)設(shè)備大致可分為兩大類:一類為專用讀寫(xiě)設(shè)備或稱脫機(jī)讀寫(xiě)器。其特點(diǎn)是:充分利用IC卡存儲(chǔ)量大,可以獨(dú)立存儲(chǔ)和工作,不需要和主機(jī)相連就可完成數(shù)據(jù)讀寫(xiě)的優(yōu)點(diǎn),可與應(yīng)用設(shè)備結(jié)合或單獨(dú)工作。例如:IC卡電表,水表,ATM機(jī),商場(chǎng)收款機(jī)。另一類為通用讀寫(xiě)設(shè)備,或稱聯(lián)機(jī)讀寫(xiě)器,是帶有單片機(jī)和存儲(chǔ)器的設(shè)備,通過(guò)并行或串行口與PC機(jī)或應(yīng)用系統(tǒng)網(wǎng)絡(luò)相連接。在運(yùn)行不同軟件時(shí)可以讀寫(xiě)不同種類的IC卡,組成不同的應(yīng)用系統(tǒng)。如果配備開(kāi)發(fā)系統(tǒng)軟件,可對(duì)IC卡做初始規(guī)劃,數(shù)據(jù)加密和初始寫(xiě)入,從而構(gòu)成IC卡應(yīng)用開(kāi)發(fā)制作環(huán)境。在本設(shè)計(jì)中,我們討論通用開(kāi)發(fā)系統(tǒng)——基于ATM89C51單片機(jī)的IC卡讀/寫(xiě)器的設(shè)計(jì)。
IC卡讀/寫(xiě)設(shè)備由IC卡卡座,單片機(jī),數(shù)據(jù)存儲(chǔ)器RAM,程序存儲(chǔ)器EEPROM,接口電路和外圍設(shè)備等組成。
IC卡讀/寫(xiě)器各部分結(jié)構(gòu)與功能簡(jiǎn)單介紹如下:
1.IC卡卡座
IC卡卡座是連接IC卡與讀寫(xiě)器的。其功能包括對(duì)IC卡供電,提供讀寫(xiě)信號(hào)和傳送數(shù)據(jù)。要求提供方便的插拔方式和可靠的接觸,并帶有帶電插拔,過(guò)流保護(hù),插卡檢測(cè)等能力。IC卡和插座的結(jié)構(gòu)尺寸必須符合國(guó)際標(biāo)準(zhǔn)化組織(ISO)7816的標(biāo)準(zhǔn)。對(duì)觸點(diǎn)數(shù)目、位置、信號(hào)名稱和功能都有明確規(guī)定,以保證兼容性。
2.單片機(jī)和存儲(chǔ)器
讀寫(xiě)器中配備單片機(jī)和ROM,RAM存儲(chǔ)器,構(gòu)成微機(jī)系統(tǒng),單片機(jī)運(yùn)行ROM中固化的軟件,執(zhí)行與IC卡和上位PC機(jī)的通信規(guī)程。控制對(duì)IC卡的讀寫(xiě),完成IC卡與主機(jī)間數(shù)據(jù)的格式轉(zhuǎn)換。為減輕單片機(jī)負(fù)擔(dān),提高讀寫(xiě)速度,常配置有硬件密文轉(zhuǎn)換和單元。3.接口電路和外圍設(shè)備二原理圖:第二章硬件部分介紹一AT89C51單片機(jī)簡(jiǎn)介
AT89C51是一種帶4K字節(jié)閃爍可編程可擦除只讀存儲(chǔ)器(FPEROM—FalshProgrammableandErasableReadOnlyMemory)的低電壓,高性能CMOS8位微處理器,俗稱單片機(jī)。AT89c51是一種帶2K字節(jié)閃爍可編程可擦除只讀存儲(chǔ)器的單片機(jī)。單片機(jī)的可擦除只讀存儲(chǔ)器可以反復(fù)擦除100次。該器件采用ATMEL高密度非易失存儲(chǔ)器制造技術(shù)制造,與工業(yè)標(biāo)準(zhǔn)的MCS-51指令集和輸出管腳相兼容。由于將多功能8位CPU和閃爍存儲(chǔ)器組合在單個(gè)芯片中,ATMEL的AT89C51是一種高效微控制器,AT89C51是它的一種精簡(jiǎn)版本。AT89C511.主要特性:
·與MCS-51兼容
·4K字節(jié)可編程閃爍存儲(chǔ)器
壽命:1000寫(xiě)/擦循環(huán)
數(shù)據(jù)保留時(shí)間:10年
·全靜態(tài)工作:0Hz-24Hz
·三級(jí)程序存儲(chǔ)器鎖定
·128*8位內(nèi)部RAM
·32可編程I/O線
·兩個(gè)16位定時(shí)器/計(jì)數(shù)器
·5個(gè)中斷源
·可編程串行通道
·低功耗的閑置和掉電模式
·片內(nèi)振蕩器和時(shí)鐘電路2.管腳說(shuō)明:
VCC:供電電壓。
GND:接地。
P0口:P0口為一個(gè)8位漏級(jí)開(kāi)路雙向I/O口,每腳可吸收8TTL門(mén)電流。當(dāng)P1口的管腳第一次寫(xiě)1時(shí),被定義為高阻輸入。P0能夠用于外部程序數(shù)據(jù)存儲(chǔ)器,它可以被定義為數(shù)據(jù)/地址的第八位。在FIASH編程時(shí),P0口作為原碼輸入口,當(dāng)FIASH進(jìn)行校驗(yàn)時(shí),P0輸出原碼,此時(shí)P0外部必須被拉高。
P1口:P1口是一個(gè)內(nèi)部提供上拉電阻的8位雙向I/O口,P1口緩沖器能接收輸出4TTL門(mén)電流。P1口管腳寫(xiě)入1后,被內(nèi)部上拉為高,可用作輸入,P1口被外部下拉為低電平時(shí),將輸出電流,這是由于內(nèi)部上拉的緣故。在FLASH編程和校驗(yàn)時(shí),P1口作為第八位地址接收。
P2口:P2口為一個(gè)內(nèi)部上拉電阻的8位雙向I/O口,P2口緩沖器可接收,輸出4個(gè)TTL門(mén)電流,當(dāng)P2口被寫(xiě)“1”時(shí),其管腳被內(nèi)部上拉電阻拉高,且作為輸入。并因此作為輸入時(shí),P2口的管腳被外部拉低,將輸出電流。這是由于內(nèi)部上拉的緣故。P2口當(dāng)用于外部程序存儲(chǔ)器或16位地址外部數(shù)據(jù)存儲(chǔ)器進(jìn)行存取時(shí),P2口輸出地址的高八位。在給出地址“1”時(shí),它利用內(nèi)部上拉優(yōu)勢(shì),當(dāng)對(duì)外部八位地址數(shù)據(jù)存儲(chǔ)器進(jìn)行讀寫(xiě)時(shí),P2口輸出其特殊功能寄存器的內(nèi)容。P2口在FLASH編程和校驗(yàn)時(shí)接收高八位地址信號(hào)和控制信號(hào)。
P3口:P3口管腳是8個(gè)帶內(nèi)部上拉電阻的雙向I/O口,可接收輸出4個(gè)TTL門(mén)電流。當(dāng)P3口寫(xiě)入“1”后,它們被內(nèi)部上拉為高電平,并用作輸入。作為輸入,由于外部下拉為低電平,P3口將輸出電流(ILL)這是由于上拉的緣故。
P3口也可作為AT89C51的一些特殊功能口,如下表所示:
口管腳備選功能
P3.0RXD(串行輸入口)
P3.1TXD(串行輸出口)
P3.2/INT0(外部中斷0)
P3.3/INT1(外部中斷1)
P3.4T0(記時(shí)器0外部輸入)
P3.5T1(記時(shí)器1外部輸入)
P3.6/WR(外部數(shù)據(jù)存儲(chǔ)器寫(xiě)選通)
P3.7/RD(外部數(shù)據(jù)存儲(chǔ)器讀選通)
P3口同時(shí)為閃爍編程和編程校驗(yàn)接收一些控制信號(hào)。
RST:復(fù)位輸入。當(dāng)振蕩器復(fù)位器件時(shí),要保持RST腳兩個(gè)機(jī)器周期的高電平時(shí)間。
ALE/PROG:當(dāng)訪問(wèn)外部存儲(chǔ)器時(shí),地址鎖存允許的輸出電平用于鎖存地址的地位字節(jié)。在FLASH編程期間,此引腳用于輸入編程脈沖。在平時(shí),ALE端以不變的頻率周期輸出正脈沖信號(hào),此頻率為振蕩器頻率的1/6。因此它可用作對(duì)外部輸出的脈沖或用于定時(shí)目的。然而要注意的是:每當(dāng)用作外部數(shù)據(jù)存儲(chǔ)器時(shí),將跳過(guò)一個(gè)ALE脈沖。如想禁止ALE的輸出可在SFR8EH地址上置0。此時(shí),ALE只有在執(zhí)行MOVX,MOVC指令是ALE才起作用。另外,該引腳被略微拉高。如果微處理器在外部執(zhí)行狀態(tài)ALE禁止,置位無(wú)效。
/PSEN:外部程序存儲(chǔ)器的選通信號(hào)。在由外部程序存儲(chǔ)器取指期間,每個(gè)機(jī)器周期兩次/PSEN有效。但在訪問(wèn)外部數(shù)據(jù)存儲(chǔ)器時(shí),這兩次有效的/PSEN信號(hào)將不出現(xiàn)。
/EA/VPP:當(dāng)/EA保持低電平時(shí),則在此期間外部程序存儲(chǔ)器(0000H-FFFFH),不管是否有內(nèi)部程序存儲(chǔ)器。注意加密方式1時(shí),/EA將內(nèi)部鎖定為RESET;當(dāng)/EA端保持高電平時(shí),此間內(nèi)部程序存儲(chǔ)器。在FLASH編程期間,此引腳也用于施加12V編程電源(VPP)。
XTAL1:反向振蕩放大器的輸入及內(nèi)部時(shí)鐘工作電路的輸入。
XTAL2:來(lái)自反向振蕩器的輸出。3.振蕩器特性:
XTAL1和XTAL2分別為反向放大器的輸入和輸出。該反向放大器可以配置為片內(nèi)振蕩器。石晶振蕩和陶瓷振蕩均可采用。如采用外部時(shí)鐘源驅(qū)動(dòng)器件,XTAL2應(yīng)不接。有余輸入至內(nèi)部時(shí)鐘信號(hào)要通過(guò)一個(gè)二分頻觸發(fā)器,因此對(duì)外部時(shí)鐘信號(hào)的脈寬無(wú)任何要求,但必須保證脈沖的高低電平要求的寬度。4.芯片擦除:
整個(gè)PEROM陣列和三個(gè)鎖定位的電擦除可通過(guò)正確的控制信號(hào)組合,并保持ALE管腳處于低電平10ms來(lái)完成。在芯片擦操作中,代碼陣列全被寫(xiě)“1”且在任何非空存儲(chǔ)字節(jié)被重復(fù)編程以前,該操作必須被執(zhí)行。
此外,AT89C51設(shè)有穩(wěn)態(tài)邏輯,可以在低到零頻率的條件下靜態(tài)邏輯,支持兩種軟件可選的掉電模式。在閑置模式下,CPU停止工作。但RAM,定時(shí)器,計(jì)數(shù)器,串口和中斷系統(tǒng)仍在工作。在掉電模式下,保存RAM的內(nèi)容并且凍結(jié)振蕩器,禁止所用其他芯片功能,直到下一個(gè)硬件復(fù)位為止。二RS232串行接口EIA-RS-232C是由美國(guó)電子工業(yè)協(xié)會(huì)EIA制訂的一種串行物理接口標(biāo)準(zhǔn)。RS-232C采用負(fù)邏輯,-5~-15V為邏輯1,+5~+15V為邏輯0。而TTL電平的“1”和“0”的特征電壓分別為2.4V和0.4V,用RS-232C總線進(jìn)行串行通信需外接電路實(shí)現(xiàn)電平轉(zhuǎn)換。在發(fā)送端需用驅(qū)動(dòng)電路將TTL電平轉(zhuǎn)換成RS-232C電平,在接收端用接收電路將RS-232C電路轉(zhuǎn)換為T(mén)TL電平。本設(shè)計(jì)是用的TI公司的RS-232C收發(fā)器MAX232,可用單一+5V電源供電實(shí)現(xiàn)電平轉(zhuǎn)換。RS-232C在設(shè)計(jì)中主要永遠(yuǎn)用于PC機(jī)與IC卡讀/寫(xiě)器之間的通框圖如下RS-232C芯片的引腳結(jié)構(gòu)如圖5所示:圖5圖5中的C1、C2、C3、C4及V+、V—是電源變換電路部分。在實(shí)際應(yīng)用中,器件對(duì)電源噪音很敏感。因此,VCC必須要對(duì)地加去耦電容,其值為0.1μF。電容C1、C2、C3及C4取同樣的數(shù)值的鉭電解電容,用以提高抗干擾能力,在連接時(shí)必須盡量靠近器件。MAX232的13、14管腳為串行異步通信發(fā)送及接受引腳。三SLE4442卡簡(jiǎn)介
SLE4442卡內(nèi)部有一個(gè)256
8bit
EEPROM,不可逆的4個(gè)寫(xiě)保護(hù)字節(jié),具備密碼保護(hù)功能,可以隨時(shí)讀取主存儲(chǔ)器內(nèi)容;在校驗(yàn)成功后,可讀保護(hù)存儲(chǔ)器、讀寫(xiě)安全存儲(chǔ)器和寫(xiě)主存儲(chǔ)器。
SLE4442有一個(gè)密碼邏輯,用以控制對(duì)存儲(chǔ)器的讀寫(xiě)。為此,SLE4442包含一個(gè)4字節(jié)加密存儲(chǔ)區(qū),該存儲(chǔ)區(qū)有一個(gè)錯(cuò)誤計(jì)數(shù)器EC(0-2位)和三個(gè)字節(jié)的參考數(shù)據(jù),這三個(gè)字節(jié)作為一個(gè)整體,稱為可編程密碼(PSV)。整個(gè)數(shù)據(jù)區(qū)除了參考數(shù)據(jù),其它的數(shù)據(jù)都能被讀取,在校驗(yàn)數(shù)據(jù)與內(nèi)部參考數(shù)據(jù)比較正確后才能進(jìn)行讀寫(xiě)操作,連續(xù)三次比較錯(cuò)誤后,錯(cuò)位計(jì)數(shù)器將阻止任何比較嘗試,從而也消除了任何擦寫(xiě)操作。四IC卡座IC卡座引腳如圖6所示,其中引腳SW1、SW2為微動(dòng)開(kāi)關(guān)在無(wú)IC卡狀態(tài)時(shí),處與斷開(kāi)狀態(tài);有卡插入時(shí),IC卡卡座上的微動(dòng)開(kāi)關(guān)閉合。因此,此開(kāi)關(guān)往往是用來(lái)判斷是否插IC卡的傳感器件。其引腳VCC:工作電壓;SCL(CLK):串行時(shí)鐘;GND:接地;SDA(I/O):串行數(shù)據(jù)(輸入/輸出);SW1、SW2:微動(dòng)開(kāi)關(guān)本設(shè)計(jì)中與邏輯有關(guān)的引出端先只有2條:SCL和SDA。所有的地址、數(shù)據(jù)及讀/寫(xiě)控制命令等信號(hào)均從SDA端輸入/輸出。為了區(qū)分線上的數(shù)據(jù)、地址、操作命令以及各種狀態(tài)的“開(kāi)始”與“結(jié)束”,卡片內(nèi)設(shè)計(jì)就多個(gè)邏輯控制單元。其中,啟動(dòng)與停止邏輯單元產(chǎn)生控制讀/寫(xiě)操作的“開(kāi)始”與“停止”標(biāo)志信號(hào)。“開(kāi)始”狀態(tài):當(dāng)SCL處于高電平時(shí),SDA從高電平轉(zhuǎn)向低電平,即產(chǎn)生“開(kāi)始”標(biāo)志信號(hào)?!巴V埂睜顟B(tài):當(dāng)SCL處于高電平時(shí),SDA從低電平轉(zhuǎn)向高電平,即產(chǎn)生一個(gè)“停止”標(biāo)志信號(hào),如圖6所示:圖6讀/寫(xiě)的啟動(dòng)與停止時(shí)序SDA和SCL通常各自通過(guò)一個(gè)電阻拉到高電平,當(dāng)SCL為高電平時(shí),對(duì)應(yīng)的SDA上的數(shù)據(jù)有宵;而當(dāng)SCL為低電平時(shí),允許SDA上的數(shù)據(jù)變化。數(shù)據(jù)輸入/輸出應(yīng)答邏輯單元產(chǎn)生數(shù)據(jù)輸入/輸出操作應(yīng)答信號(hào)。操作時(shí)所有的地址和數(shù)據(jù)字均一8位碼串行輸入/輸出于卡片??ㄆ瑳](méi)收到一個(gè)8位碼長(zhǎng)的地址或數(shù)據(jù)后都以置SDA線為低電平方式“確認(rèn)”應(yīng)答信號(hào),其波形如圖7所示圖7五外圍電路(1)狀態(tài)燈IC卡的上電一般是可知的,即對(duì)IC卡讀/寫(xiě)時(shí),須給IC卡上電(送電源),因此,IC卡的上電控制比較簡(jiǎn)單。由于IC卡讀/寫(xiě)電流很小,一般為幾個(gè)A,因此其實(shí)現(xiàn)可按照?qǐng)D8所示。由單片機(jī)89C51的P14信號(hào)通過(guò)小功率三極管9012控制系統(tǒng)的+5V電源切入IC卡座。當(dāng)IC卡上電后,發(fā)光二極管L2被點(diǎn)亮,起讀/寫(xiě)指示作用。每次對(duì)IC卡讀/寫(xiě)完成后。即及時(shí)先電,以減少插拔時(shí)帶電的可能性,要保證IC卡能任意插拔(有可能處于帶電狀態(tài)),不致IC卡損壞,必須使IC卡拔電過(guò)程處于斷電的狀態(tài)。要做到這點(diǎn),必須保證IC卡的下電迅速及時(shí)圖8(2)蜂鳴器一般所指的蜂鳴器是以壓電陶瓷為主要元件的。壓電陶瓷是一類有將壓力與電流相互轉(zhuǎn)換能力的特殊陶瓷。這種能力緣于其特殊的晶體結(jié)構(gòu)。當(dāng)壓電陶瓷在一定方向上受到一個(gè)壓力使其晶體結(jié)構(gòu)發(fā)生形變時(shí),它就會(huì)在內(nèi)部產(chǎn)生一個(gè)電流,并且電流的變化與壓力的變化密切相關(guān)。反之亦然。所以利用這一特性,在壓電陶瓷上通過(guò)一定頻率的電流,就會(huì)引起壓電陶瓷微小形變,這一形變帶動(dòng)空氣發(fā)生振動(dòng),如果頻率適當(dāng),就可以被人耳所聽(tīng)見(jiàn),也就是產(chǎn)生了蜂鳴聲。本設(shè)計(jì)當(dāng)中蜂鳴起的做用是IC卡與單片機(jī)是否連接。將IC卡插進(jìn)卡座時(shí),IC卡座與單片機(jī)之間的連接無(wú)誤是蜂鳴器會(huì)響。在取出IC卡,即IC卡與單片機(jī)斷開(kāi)連接,蜂鳴器也要響。具體連接圖如圖9所示:圖9(3)電源電路U1=220V,U2=8V,Uc1=1.2U2=9.6V,UO=5V功率穩(wěn)壓電源由電源變壓器、整流電路、濾波電路和穩(wěn)壓電路四個(gè)部分組成,如圖10所示+電源+整流+濾波+穩(wěn)壓+u1u2u3uIU0_變壓器_電路_電路_電路_u1u2u3uIU00t0t0t0t0t圖10穩(wěn)壓電源的組成框圖及整流與穩(wěn)壓過(guò)程(1).電源變壓器電源變壓器的作用是將來(lái)自電網(wǎng)的220V交流電壓u1變換為整流電路所需要的交流電壓u2。電源變壓器的效率為:其中:是變壓器副邊的功率,是變壓器原邊的功率。(2).整流和濾波電路在穩(wěn)壓電源中一般用四個(gè)二極管組成橋式整流電路,整流電路的作用是將交流電壓u2變換成脈動(dòng)的直流電壓u3。濾波電路一般由電容組成,其作用是把脈動(dòng)直流電壓u3中的大部分紋波加以濾除,以得到較平滑的直流電壓UI。UI與交流電壓u2的有效值U2的關(guān)系為:在整流電路中,每只二極管所承受的最大反向電壓為:流過(guò)每只二極管的平均電流為:其中:R為整流濾波電路的負(fù)載電阻,它為電容C提供放電通路,放電時(shí)間常數(shù)RC應(yīng)滿足:其中:T=20ms是50Hz交流電壓的周期。(3)穩(wěn)壓電路由于輸入電壓u1發(fā)生波動(dòng)、負(fù)載和溫度發(fā)生變化時(shí),濾波電路輸出的直流電壓UI會(huì)隨著變化。因此,為了維持輸出電壓UI穩(wěn)定不變,還需加一級(jí)穩(wěn)壓電路。穩(wěn)壓電路的作用是當(dāng)外界因素(電網(wǎng)電壓、負(fù)載、環(huán)境溫度)發(fā)生變化時(shí),能使輸出直流電壓不受影響,而維持穩(wěn)定的輸出。穩(wěn)壓電路一般采用集成穩(wěn)壓器和一些外圍元件所組成。采用集成穩(wěn)壓器設(shè)計(jì)的穩(wěn)壓電源具有性能穩(wěn)定、結(jié)構(gòu)簡(jiǎn)單等優(yōu)點(diǎn)。集成穩(wěn)壓器的類型很多,在小功率穩(wěn)壓電源中,普遍使用的是三端穩(wěn)壓器。按輸出電壓類型可分為固定式和可調(diào)式,此外又可分為正電壓輸出或負(fù)電壓輸出兩種類型。固定電壓輸出穩(wěn)壓器常見(jiàn)的有CW78(LM78)系列三端固定式正電壓輸出集成穩(wěn)壓器;CW79(LM79)系列三端固定式負(fù)電壓輸出集成穩(wěn)壓器。三端是指穩(wěn)壓電路只有輸入、輸出和接地三個(gè)接地端子。型號(hào)中最后兩位數(shù)字表示輸出電壓的穩(wěn)定值,有5V、6V、9V、15V、18V和24V。穩(wěn)壓器使用時(shí),要求輸入電壓UI與輸出電壓UO的電壓差UI–UO≥2V。穩(wěn)壓器的靜態(tài)電流Io=8mA。當(dāng)UO=5~18V時(shí),UI的最大值UIMAX=35V;當(dāng)UO=18~24V時(shí),UI的最大值UIMAX=40V。第三章軟件部分一.工作過(guò)程軟件結(jié)構(gòu)設(shè)計(jì)及其分析讀/寫(xiě)器軟件結(jié)構(gòu)讀/寫(xiě)器的讀/寫(xiě)操作由上位PC機(jī)進(jìn)行控制,通過(guò)串行通信的命令字節(jié)來(lái)實(shí)現(xiàn)。集體規(guī)定我誒:如握手信號(hào)為0AAH,則讀卡;如握手信號(hào)為0BBH,則寫(xiě)卡。讀/寫(xiě)器的主程序框圖如圖11所示。其中,在讀/寫(xiě)卡開(kāi)始時(shí),設(shè)置讀寫(xiě)卡標(biāo)志;在通信開(kāi)始時(shí),設(shè)置通信標(biāo)志。避免數(shù)據(jù)不全或錯(cuò)誤數(shù)據(jù)讀入或?qū)懭?。另外,所以的IC卡數(shù)據(jù)是先存放在IC卡的讀緩沖區(qū)和寫(xiě)緩沖區(qū)的?!坝锌ú迦敕瘛笔怯眠^(guò)判斷P33引腳的高低電平來(lái)實(shí)現(xiàn)的。為了保證讀卡的可靠性,必須進(jìn)行軟件“去抖”處理。一旦有卡插入,則設(shè)置讀/寫(xiě)卡標(biāo)志(有卡);在通信時(shí),設(shè)置正在通信標(biāo)志。目的是我為了避免帶電插卡。本系統(tǒng)中關(guān)鍵的軟復(fù)位是通過(guò)在外中斷INT0服務(wù)函數(shù)中設(shè)置軟復(fù)位標(biāo)志、在主函數(shù)中強(qiáng)制跳轉(zhuǎn)到函數(shù)首實(shí)現(xiàn)的。圖11主程序流程圖拔卡處理是通過(guò)設(shè)置成高優(yōu)先級(jí)的下降沿觸發(fā)的INT0中斷來(lái)實(shí)現(xiàn)的。其程序如圖12所示:圖12拔卡處理中斷子程序串行通信才用3線制軟握手方式(2)軟件系統(tǒng)分析為保證IC卡讀/寫(xiě)過(guò)程準(zhǔn)確可靠,除要保證讀/寫(xiě)函數(shù)嚴(yán)格按照IC卡的讀/寫(xiě)時(shí)序外,還須采用“重讀”和“復(fù)讀”措施。即讀IC卡是,采用讀2次的方式,如2次相符,則數(shù)據(jù)有效,否則再進(jìn)行第3次讀,寫(xiě)IC卡時(shí),先將數(shù)據(jù)寫(xiě)入,再回讀比較,否則重寫(xiě)一次,以免偶然的寫(xiě)失導(dǎo)致得出IC卡失效的錯(cuò)誤結(jié)論。如何使上、下位機(jī)均不死機(jī)或能簡(jiǎn)單恢復(fù)正常工作呢?對(duì)于作為下位機(jī)的IC卡讀/寫(xiě)器,利用IC卡能隨意插拔,再結(jié)合IC卡的拔卡處理是一個(gè)高級(jí)中斷的特點(diǎn),將IC卡的拔卡中斷程序設(shè)計(jì)成2個(gè)分支:(1)非IC卡讀/寫(xiě)且非與上位機(jī)通信狀態(tài);(2)在與上位機(jī)通信或正在對(duì)IC卡讀/寫(xiě)狀態(tài)。第1種情況下,中斷子程序是簡(jiǎn)單的鞍鼻卡BEEP告警后,直接中斷返回;第2種情況,則會(huì)引起系統(tǒng)工作時(shí)常甚至死機(jī),在恢復(fù)中斷環(huán)境后,用強(qiáng)制跳轉(zhuǎn)指令強(qiáng)制從主程序開(kāi)始執(zhí)行,達(dá)到復(fù)位的效果。程序框圖如圖12所示。為確保串行通信的可靠性,應(yīng)著重從上、下位機(jī)通信軟件的以下問(wèn)題入手——合理選擇通信波特率。由于上、下位機(jī)通信的數(shù)據(jù)量很小(最多為IC卡的容量),因此通信波特率可選低一些,如2400;但要高度重視下位機(jī)(即IC卡讀/寫(xiě)器)的波特率參數(shù)整頂問(wèn)題。對(duì)于51系統(tǒng)CPU,尤其要注意電源管理寄存器中SMOD位的設(shè)置。以2400波特率為例,當(dāng)SMOD=0時(shí),波特率參數(shù)為0F9H,實(shí)際波特率為2232,此時(shí)波特率相對(duì)誤差是7%;而當(dāng)SMOD=1時(shí),波特率參數(shù)為0F3H,實(shí)際波特率為2401,此時(shí)波特率相對(duì)誤差是0.16%,滿足正常通信所規(guī)定的波特率相對(duì)誤差小于5%的要求。二用C51實(shí)現(xiàn)的讀/寫(xiě)主程序#include<reg51.h>#include<absacc.h>#defineucharunsignedchar#defineuintunsignedint/*IC卡信號(hào)輸入/輸出*/Sbitscl=P17;Sbitsda=P16;/*I/O口定義*/SbitICOUT=P32;SbitICIN=P33;SbitCOMM=P34;SbitBELL=P35;SbitPWR=P14;/*波特率選擇*/SbitBACD=P12;/*24c01~24c16讀/寫(xiě)驅(qū)動(dòng)程序*/Sbita0=ACC-0;Sbita1=ACC-1;Sbita2=ACC-2;Sbita3=ACC-3;Sbita4=ACC-4;Sbita5=ACC-5;Sbita6=ACC-6;Sbita7=ACC-7;/*讀/寫(xiě)數(shù)據(jù)緩沖區(qū),24C01最多為128B*/Ucharbuf[16];Ucharflag;/*標(biāo)志定義*/SbitIC_WR=flag-0;SbitONCOMM=flag-1;SbitRST=flag-2;Voidstart_ic(void){Sda=1;Scl=1;Delay(2);Sda=0;Delay(6);}Voidstop_ic(void){Sda=0;Scl=1;Delay(6);Sda=1;Delay(6);Scl=0;Sda=0;}Voidack_ic(void){Sda=0;Delay(3);Scl=1;Delay(3);Scl=0;Sda=1;}/*讀字節(jié)函數(shù),無(wú)應(yīng)答信號(hào)*/Unsignedcharrd24(void){sda=1;scl=1;a7=sda;scl=0;Scl=1;a6=sda;scl=0;Scl=1;a5=sda;scl=0;Scl=1;a4=sda;scl=0;Scl=1;a3=sda;scl=0;Scl=1;a2=sda;scl=0;Scl=1;a1=sda;scl=0;Scl=1;a0=sda;scl=0;Sda=1;scl=1;scl=o;`Return(ACC);}/*寫(xiě)字節(jié)函數(shù)*/Voidwd24(unsignedchardd){ACC=dd;Sda=a7;scl=1;scl=0;Sda=a6;scl=1;scl=0;Sda=a5;scl=1;scl=0;Sda=a4;scl=1;scl=0;Sda=a3;scl=1;scl=0;Sda=a2;scl=1;scl=0;Sda=a1;scl=1;scl=0;Sda=a0;scl=1;scl=0;Sda=1;scl=1;While(sda==1);SCL=0;}/*隨機(jī)地址地字節(jié)函數(shù),address為預(yù)讀單元地址*/Ucharread_buter(ucharaddress){Ucharx;Start_ic();Wd24(0a0);Wd24(address);Start_ic();Wd24(0a1);X=rd24();Stop_ic();Return(x);}/*從指定地址開(kāi)始順序讀塊地址數(shù)據(jù),數(shù)據(jù)存入全局緩沖區(qū)中buf,n為數(shù)據(jù)字節(jié)數(shù)*/Ucharread_bytes(ucharaddress,ucharn){Uchara,y;For(y=0;y<n;y++){a=read_byter(address,y);buf[y]=a;}}/**//*字節(jié)寫(xiě)入模式寫(xiě)函數(shù),其中address為單元地址,dd為數(shù)據(jù)*/Voidwrite_byte(ucharaddress,uchardd){Start_ic();Wd24(0a0);Wd24(address);Wd24(dd);Stop_ic();}/*串行通信子程序*//*波特率2400,8位數(shù)據(jù)位,1位停止位,無(wú)校驗(yàn)位*//*先用握手字節(jié)y,然后發(fā)送x個(gè)數(shù)據(jù)*//*待發(fā)送數(shù)據(jù)在trdata緩沖區(qū)中*/Voidcomm.(ucharx,uchary){Uchari,a;Uintj;While(1){TI;while(RI==0);RI=0;A=SBUF;If(a!=y)goto[1];For(j=0;i<x;i++);{SBUFtrdata[i];While(TI==1);TI=0;}For(j=0;j<12500;j++);}}/*主程序初始化函數(shù)*/Voidinit(void){RSR=0; PWR=1;IC_WR=0;ONCOMM=0;EX0=1;TMOD=0x20;SCON=0x50;TH1=0xf3;TL1=0xf3;If(BAUI)==0{PCON=0x08;}Else{PCON=0x00;}TR1=1;EA=1;}/*將數(shù)據(jù)緩沖區(qū)16B發(fā)往上位機(jī)*//*波特率2400,8位數(shù)據(jù)位,1位停止位,無(wú)校驗(yàn)為2*//*待發(fā)送數(shù)據(jù)在buf緩沖區(qū)*/Voidtransfer(void){Uchari;Uintj;For(i=0;i<16;i++){SBUF=buf[i];While(TI==0);TI=0;FCR=0;j<1000;j++);}}/*接收16B存入緩沖區(qū)*//*波特率2400,8位數(shù)據(jù)位,1位停止位,無(wú)校驗(yàn)位*//*緩沖區(qū)為buf*/Voidteceive(void){UcharI,a;For(i=0;i<16;i++){while(RI==0);RI=0;A=SBUF;Buf[i]=a;}}/*將緩沖區(qū)的n字節(jié)寫(xiě)入IC卡address開(kāi)始的區(qū)域*/Voidwrite_ic(ucharaddress,ucharn){Ucharx,y;For(y=0;y<n;y++){While_byte(address[y],buf[y]);Delay(10);}}/*拔卡中斷程序,主要完成IC卡下電及讀/寫(xiě)復(fù)位*/Voidint_0(void)interrupt0using1{While(!ICOUT);Delay(10);If(!ICOUT){If(IC_WRONCOMM){PWR=1;BELL=0;Delay(10);BELL=1;RST==1;}}}/*延時(shí)函數(shù),延時(shí)ms數(shù)由N決定,但不同的系統(tǒng)需要調(diào)整相應(yīng)參數(shù)*/Voiddelay(ucharn){Uchari,j,k;For(k=o;k<n;k++)For(i=0;i<100;i++)For(j=0;j<255;j++);}Voidmain(void){Uchara;Fuwei:init();While(!ICIN);Delay(10);While(!ICIN);IC_WR=1;/*開(kāi)始讀IC卡16B并存入緩沖區(qū)*/PWR=0;Read_bytes(0,16);PWR=1;/*等待與上機(jī)位建立通信聯(lián)系*/ONCOMM=1;While(RI==0);RI=0;A=SBUF;Switch(a){case0xaa:SBUF=0xaa;While(!TI);TI=0;Transfer();Break;Case0xbb:SBUF=0xbb;While(!TI);TI=O; Receive(); PWR=0; Write_ic(0,16); PWR=1; Break;Default: SBUF=0xcc; While(!TI); TI=0;}ONCOMM=0;While(!RST);Gotofuwei;}采用fanklincC51編譯的命令如下:>C51IC.C>L51IC.OBJ三上位PC機(jī)通信接口軟件在Windows9x的串行通信實(shí)現(xiàn)一般有3種方式:利用Windows9x的API接口函數(shù)。對(duì)于RAD開(kāi)發(fā)系統(tǒng)(如VB),可利用ActiveX串行通信控件。利用DLL動(dòng)態(tài)鏈接庫(kù),直接操作串行端口。上述3種方式各有特點(diǎn)。這里討論采用第3種方式實(shí)現(xiàn)的串行通信接口,具有應(yīng)用靈活的特點(diǎn)。下面給出基于Delphi4.0的串行通信DLL程序:LibraryMycomdll;UseSysUtils;Classes;ConstCOM1:=$3f8;COM2:=$2f8;VarCOM:Word;{DLL中全局變量}ProcedureOutb(ConstBeginAsmMOVDX,PortMOVAL,DbyteOUTDXEnd;End;FunctionInb(ConstBeginAsmMOVDX,PortMOVAL,DbyteOUTDXEnd;End;FunctionInb(ConstBeginAsmMOVDX,PortINAL,DXMOV@ResulltEnd;End;{串行口初始化,COM1,COM2可選,波特率2400,4800可選}ProcedureCommInit(ConsstVarBAUDL,BAUDH:Byte;BeginIfPort=1thenCOM:=COM1;ElseCOM:=COM2;IfBAUD=’2400’thenBeginBAUDL:=$30;BAUDH:=$00;End;ElseBeginBAUDL:=$18;BAUDH:=$00;End;Outb(COM+3,$80);Outb(COM,BAUDL);Outb(COM+1,BAUDH);Outb(COM+3,$03);End;{發(fā)送一字節(jié)}ProcedureSendByte(ConstDbyte:Byte);Stdcall;VarStatus:Byte;BeginRepestStatus:=Inb(COM+5);Until((Statusand$20)=$20);Outb(COM,Dbyte);
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 3D生物打印縫合材料的神經(jīng)修復(fù)應(yīng)用
- 初中音樂(lè)創(chuàng)作教學(xué)中的音樂(lè)創(chuàng)作與音樂(lè)教育評(píng)價(jià)研究教學(xué)研究課題報(bào)告
- 2025年徐州幼兒師范高等??茖W(xué)校公開(kāi)招聘高層次人才6人備考題庫(kù)含答案詳解
- 2025年中國(guó)科學(xué)技術(shù)大學(xué)基本建設(shè)處勞務(wù)派遣崗位招聘?jìng)淇碱}庫(kù)附答案詳解
- 2025年開(kāi)遠(yuǎn)市教體系統(tǒng)事業(yè)單位校園公開(kāi)招聘23人備考題庫(kù)及答案詳解參考
- 智能研修模式在STEM教育中的應(yīng)用研究:以問(wèn)題解決為驅(qū)動(dòng)教學(xué)研究課題報(bào)告
- 大學(xué)法學(xué)合同條款解釋中的法律解釋方法研究教學(xué)研究課題報(bào)告
- 圖文商務(wù)風(fēng)銷售部總結(jié)述職匯報(bào)模板
- 2025年重慶量子學(xué)校招聘?jìng)淇碱}庫(kù)有答案詳解
- 華能內(nèi)蒙古東部能源有限公司2026年度招聘高校畢業(yè)生備考題庫(kù)附答案詳解
- 化肥賣合同范本
- 2025年大學(xué)本科三年級(jí)(建筑環(huán)境與能源應(yīng)用工程)暖通空調(diào)設(shè)計(jì)測(cè)試題及答案
- 6第六章 項(xiàng)目管理架構(gòu)
- 2025年全新中醫(yī)藥學(xué)概論試題與答案
- 2026云上(貴州)數(shù)據(jù)開(kāi)發(fā)有限公司第一次社會(huì)招聘18人考試筆試備考題庫(kù)及答案解析
- 2025秋小學(xué)湘科版(新教材)科學(xué)三年級(jí)上冊(cè)知識(shí)點(diǎn)及期末測(cè)試卷及答案
- 裝修工賠償協(xié)議書(shū)
- 2025重慶兩江新區(qū)公安機(jī)關(guān)輔警招聘56人備考題庫(kù)含答案詳解(完整版)
- 國(guó)開(kāi)電大可編程控制器應(yīng)用課程實(shí)驗(yàn)參考答案
- 化工有限公司年產(chǎn)4000噸-N-N-二甲基苯胺項(xiàng)目安全預(yù)評(píng)價(jià)報(bào)告
- 法制進(jìn)校園安全伴我行主題班會(huì)ppt
評(píng)論
0/150
提交評(píng)論