?? untitled document.htm
字號:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0065)http://www.flyring.com.cn/chinese/UploadFiles/200442161059449.htm -->
<HTML><HEAD><TITLE>Untitled Document</TITLE>
<META content="text/html; charset=gb2312" http-equiv=Content-Type>
<META content="MSHTML 5.00.2920.0" name=GENERATOR></HEAD>
<BODY background="" bgColor=#ffffff text=#000000>
<DIV align=center>
<P><BR><FONT color=#0000ff><B>關(guān)于非接觸式IC智能(射頻)卡及其讀寫設(shè)備內(nèi)核技術(shù)的研究與應(yīng)用開發(fā)(連載9) <BR><BR>作者:
上海華東磁記錄電子公司 張敏 <BR></B><BR><B><BR></B></FONT></P>
<TABLE border=1 borderColor=#ff9900 width="80%">
<TBODY>
<TR>
<TD align=left height=3601 vAlign=top>
<P><BR><BR></P>
<P>3. 對MCM200(SB201)“Select”(選卡片) 指令的匯編語言應(yīng)用程序的設(shè)計(jì)<BR>功能:調(diào)用該匯編語言子程序,將執(zhí)行MCM
“Select”(選卡片) 指令操作。如果卡片讀寫器的天線之有效工作距離內(nèi)有多張重疊的Mifare 1
非接觸式IC射頻卡,則該指令在程序員成功完成“AntiCollision”操作之后,將幫助程序員正式選擇其中指定的一張卡片進(jìn)行操作(包括密碼存取,密碼認(rèn)證,卡片上指定扇區(qū)的讀寫,等等。)“Select”(選卡片)
指令操作將讀取卡片的SIZE字節(jié)。<BR>程序說明:<BR>1.)在以下的匯編語言程序中,用到了一些其他的子程序(和上述的“Request
std和Request all”指令操作中的相同),分別為:<BR>D500US:
(與上述功能相同);<BR>H_SEND_TO_BUF01:(與上述功能相同);<BR>H_SEND_TO_BUF23:(與上述功能相同);<BR>SEND_TO_BUF01:(與上述功能相同);<BR>SEND_TO_BUF23:(與上述功能相同);<BR>DISPLAY:(與上述功能相同);<BR>H_DISPLAY:(與上述功能相同);<BR>等等。<BR>2.)在以下的匯編語言程序中,讀者可能會碰到一些寄存器變量,或其他應(yīng)用子程序,這些可能是用于主控程序或是調(diào)試而用。特加以說明。
</P>
<P>程序清單如下:<BR>;====================MCM SELECT
OPERATION=====================<BR>select:<BR> ;SETB PSW.3<BR> ;SETB
PSW.4<BR> MOV A,#0CH<BR> MOV R0,#01H<BR> MOVX @R0,A
;STACON() = 0CH<BR> MOV A,#0F0H<BR> MOV R0,#02H<BR> MOVX
@R0,A ;ENABLE() = F0H<BR> MOV A,#38H<BR> MOV
R0,#03H<BR> MOVX @R0,A ;BCNTS() = 38H =56 D<BR> MOV
A,#08H<BR> MOV R0,#04H<BR> MOVX @R0,A ;BCNTR() = 08H
<--RECEIVE ONE BYTE:SIZEBYTE<BR> MOV A,#93H<BR> MOV
R0,#00H<BR> MOVX @R0,A ;DATA() = 93H -->SELECT INSTRACTION
CODE<BR> MOV A,#70H<BR> MOV R0,#00H<BR> MOVX @R0,A
;IMPORTANT:
DATA()=70H--BITCOUNT=70Hbits<BR>;-----------------------------------------------------------------------<BR> MOV
R7,#04H ;R7 IS A COUNTER,FOR WRITING 04H BYTES TO DATA<BR> MOV
B,#00H<BR> MOV R0,#00H<BR> MOV R1,#40H ;THE FIRST ADDRESS OF
SNR. 40H---43H<BR>SELECT_WRT_LOOP:<BR> MOV A,@R1<BR> MOVX
@R0,A<BR> XRL B,A<BR> INC R1<BR> DJNZ R7,
SELECT_WRT_LOOP<BR> MOV A,B<BR> MOVX @R0,A ;SEND THE 5th
CHK_SUM_VALUE<BR> MOV A,#0AH<BR> MOV R0,#06H<BR> MOVX @R0,A
;TOC() = 0AH<BR>SEL_RD_STACON_AGAIN:<BR> MOV R0,#01H<BR> MOVX
A,@R0 ;READ STACON() ==> A<BR> MOV B,A<BR> JNB ACC.7,
SEL_RD_STACON_AGAIN ;IF DV=1? IF NOT,REPEAT READ <BR> MOV
B,A<BR>;------------- NOW DV=1, DATA VALID
----------------------<BR> MOV A,#00H<BR> MOV R0,#06H<BR> MOVX
@R0,A ;TOC() = 00H<BR>;------------- NOW JUDGE ANY DATA ERRORS
--------------------<BR> MOV A,B<BR> JB ACC.6, SEL_TE_ERR ;TE
ERR<BR> JB ACC.5, SEL_PE_ERR ;PE ERR<BR> JB ACC.3, SEL_BE_ERR ;BE
ERR<BR> JB ACC.4, SEL_CE_ERR ;CE ERR<BR>;------------- NOW NO
ERRORS,READING CARD SIZE -----------------<BR> MOV R0,#00H<BR> MOVX
A, @R0 ;READ SIZE: DATA() ==> A<BR> MOV 44H,A ;STORE SIZE
IN 44H<BR> ACALL SEND_TO_BUF01 ;SEND SIZE TO DISP_BUF_LOW<BR> SETB
P2.6 ;OK LAMP NOW WORKING P2.3<BR> ACALL SPK_ON ;if ok then
spk on</P>
<P> MOV B,#00H ;SELECT OPERATION'S OK RETURN_VALUE=00H<BR> MOV
A,B ;READY FOR DISSPLAY IN DISP_BUF_HIGH(23)<BR> LJMP
SEL_OK_EXIT ;IF OK, EXIT SELECT OPERATION<BR>;-------------------ERRORS
PROCESS------------------------------- <BR>SEL_TE_ERR:<BR> MOV
B,#01H <BR> LJMP SEL_ERR_EXIT<BR>SEL_PE_ERR:<BR> MOV
B,#05H <BR> LJMP SEL_ERR_EXIT<BR>SEL_CE_ERR:<BR> MOV
B,#02H <BR> LJMP SEL_ERR_EXIT<BR>SEL_BE_ERR:<BR> MOV
R7,#0AH<BR> ACALL D500US<BR> MOV B,#0BH<BR> LJMP
SEL_ERR_EXIT<BR>;----------------------EXIT------------------------<BR>SEL_ERR_EXIT:<BR> MOV
A,B<BR>SEL_OK_EXIT:<BR> ACALL SEND_TO_BUF23 ;SEND ERR_RETURN_VALE TO
DISP_BUF_HIGH<BR> RET<BR>;------------------------ End of MCM
AntiCollision Operation -----------------</P>
<P><BR>通過以上對MCM的幾個(gè)指令的軟件設(shè)計(jì),讀者應(yīng)該能有較大的信心,將MCM其他的一些指令也能設(shè)計(jì)成功。以供主控程序隨時(shí)調(diào)用。</P>
<P>(二). 對MCM200(SB201)組成的DEMO電路的主控應(yīng)用程序設(shè)計(jì)和開發(fā)</P>
<P>1. 硬件電路請參照所附的DEMO電路圖紙</P>
<P>2. 軟件清單如下</P>
<P>程序清單如下:<BR>;====================================================================<BR>; WRITTEN
BY ROCKY,
OCT'1999<BR>;====================================================================<BR> ORG
0000H<BR>start:<BR> LJMP MAIN<BR> NOP<BR>
NOP<BR>;--------------------------<BR> ;ORG 001BH<BR> ;LJMP
0500H<BR>;--------------------------<BR> ORG 0080H<BR>MAIN:<BR> MOV
SP,#0E1H<BR> NOP<BR> CLR EA ;CLOSE CPU
INT<BR> CLR P2.5 ;RESET MCM (-RST=0)<BR> SETB P2.4
;RESET MCM (-CS =1)<BR> NOP<BR> ACALL INIT_DISP_BUF <BR> ACALL
DISPLAY<BR> ACALL H_DISPLAY<BR> NOP<BR> CLR P2.6 ;CLOSE OK
LAMP <BR> setb p2.0 ;disenable KB function<BR> mov
p1,#11110000b ;init P1 port:P1.0~~P1.3-->out
(line)<BR> ; P1.4~~P1.7-->in (colum)<BR> SETB
P2.5 ;RESET MCM (-RST=1)<BR> CLR P2.4 ;SELECT MCM
(-CS=0)<BR> ACALL D500MS<BR> MOV A,#80H ;SOFTWARE_RESET
MCM<BR> MOV R0,#01H<BR> MOVX @R0,A<BR> ACALL D500MS<BR> ACALL
SPK_ON ;SPEAK ON<BR> ;MOV 21H,#01H ;THE
kb_TEST_CHAR<BR>KB_LOOKING:<BR> LCALL KB_SCAN<BR> ACALL
DISPLAY<BR> ACALL H_DISPLAY<BR> CLR P2.6 ;CLOSE OK
LAMP P2.3<BR> AJMP KB_LOOKING<BR>KB_ALL_EXIT:<BR> MOV R2,#00H
;SET RQT_STD<BR> SETB P2.5 ;RESET: MCM ON (-RST=1) P1.4<BR>
CLR P2.4 ;SELECT MCM ON
(-CS=0) P1.5<BR>;------------------------------------<BR>REPEAT:<BR> SETB
P2.5 ;RESET: MCM ON (-RST=1)P1.4<BR> CLR P2.4 ;SELECT MCM ON
(-CS=0)
P1.5<BR>;==================================================<BR> ACALL
REQUEST ;MCM REQUEST
OPERATION<BR>;==================================================<BR> ACALL
DISPLAY<BR> ACALL H_DISPLAY<BR> ACALL D500MS<BR> CLR
P2.6 ;CLEAR OKLAMP P2.3<BR> ACALL INIT_DISP_BUF<BR> ACALL
DISPLAY<BR> ACALL
H_DISPLAY<BR>;=========================================================<BR> ACALL
ANTICOLLISION ;MCM ANTICOLLISION
OPERATION<BR>;=========================================================<BR> ACALL
DISPLAY<BR> ACALL H_DISPLAY<BR> ACALL D500MS<BR> CLR
P2.6 ;CLEAR OKLAMP P2.3<BR> ACALL INIT_DISP_BUF<BR> ACALL
DISPLAY<BR> ACALL
H_DISPLAY<BR>;=========================================================<BR> ACALL
SELECT ;MCM SELECT
OPERATION<BR>;=========================================================<BR> ACALL
DISPLAY<BR> ACALL H_DISPLAY<BR> ACALL D500MS<BR> CLR
P2.6 ;CLEAR OKLAMP P2.3<BR> ACALL INIT_DISP_BUF<BR> ACALL
DISPLAY<BR> ACALL H_DISPLAY<BR> <BR>;+++++++++++++++++++++ set
up register/ram for load_key()++++++++++++++++++<BR> mov 7FH,#0ABH
<BR> MOV 7EH, #00H ;(7EH) = 00H-->SELECT
KEYSET0 (KS1=0;KS0=0)<BR> MOV 7DH,#02H ;(7DH): 1)SELECT KEYA or
KEYB<BR> ; 2)SELECT sector_ADDRESS :0-15<BR> MOV
7CH,#60H ;(7CH) = 47H-->TKey(1) FIRST
ADDRESS<BR>;=========================================================<BR> ACALL
LOAD_KEY ;MCM LOAD_KEY
OPERATION<BR>;=========================================================<BR>(待續(xù))<BR><BR><BR>來源:
《金卡工程》2000.10 <BR><BR></P>
<P></P>
<P> <BR></P>
<P align=right></P>
<P align=right></P>
<P align=right></P>
<P align=right><A href="file:///E|/index/index.htm">返回首頁</A>
</P></TD></TR></TBODY></TABLE><B></B></DIV></BODY></HTML>
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -