?? 93c46.asm
字號(hào):
CS_93C46 BIT P1.0
SK_93C46 BIT P1.1
DI_93C46 BIT P1.2
DO_93C46 BIT P1.3
BIT_CNT DATA 10H ;移位次數(shù)
BIT_SEND DATA 11H ;發(fā)送Bit數(shù)
DATSEND DATA 12H ;待發(fā)送數(shù)據(jù)緩存
ORG 0000H
LJMP MAIN
ORG 0030H
MAIN: MOV R7,#0
MOV R6,#0
LCALL ERAL ;把芯片的內(nèi)容全部擦除
MOV R7,#10H ;讀進(jìn)10H的內(nèi)容查看
LCALL READ
MOV A,R5
MOV P0,A ;顯示R5的值
MOV A,R6
MOV P2,A ;顯示R6的值
NOP ;在這里設(shè)置斷點(diǎn),查看讀入內(nèi)容應(yīng)為R6=0FFH和R5=0FFH
;SJMP $
MOV R7,#10H ;把1234H寫(xiě)到10H中
MOV R6,#12H
MOV R5,#34H
LCALL WRITE
MOV R6,#00H
MOV R5,#00H ;改變R5、R6的值,以變和后面比較
MOV R7,#10H ;讀進(jìn)10H的內(nèi)容查? ;sjMP $
LCALL READ
MOV A,R5
MOV P0,A ;顯示R5的值
MOV A,R6
MOV P2,A ;顯示R6的值
NOP ;在這里設(shè)置斷點(diǎn),查看讀入內(nèi)容應(yīng)為R6=12H和R5=34H
;SJMP $
MOV R7,#10H ;把10H內(nèi)容擦除
LCALL ERASE
MOV R7,#10H ;讀進(jìn)10H的內(nèi)容查看
LCALL READ
MOV A,R5
MOV P0,A ;顯示R5的值
MOV A,R6
MOV P2,A ;顯示R6的值
NOP ;在這里設(shè)置斷點(diǎn),查看讀入內(nèi)容應(yīng)為R6=0FFH和R5=0FFH
;SJMP $
MOV R6,#56H ;把5678H寫(xiě)到全部?jī)?nèi)存中
MOV R5,#78H
LCALL WRAL
MOV R6,#00H
MOV R5,#00H ;改變R5、R6的值,以變和后面比較
MOV R7,#10H ;讀進(jìn)10H的內(nèi)容查看
LCALL READ
MOV A,R5
MOV P0,A ;顯示R5的值
MOV A,R6
MOV P2,A ;顯示R6的值
NOP ;在這里設(shè)置斷點(diǎn),查看讀入內(nèi)容應(yīng)為R6=56H和R5=78H
SJMP $
;******************************************************************
;名稱(chēng):讀指令(READ指令)
;功能:把93C46中R7所指向的內(nèi)存的資料讀到R6(H),R5(L)
;******************************************************************
READ:
LCALL START_93C46
MOV DATSEND,#06H ;發(fā)送讀操作指令
MOV BIT_SEND,#03H
LCALL SEND_DATA
MOV DATSEND,R7 ;發(fā)送寫(xiě)入地址
MOV BIT_SEND,#06H
LCALL SEND_DATA
SETB DO_93C46 ;準(zhǔn)備讀入資料
MOV BIT_CNT,#16
READ1:
SETB SK_93C46 ;產(chǎn)生一個(gè)時(shí)鐘信號(hào)
SETB SK_93C46
CLR SK_93C46
CLR SK_93C46
NOP
MOV C,DO_93C46 ;讀取DO的信息
MOV A,R5 ;移位保存
RLC A
MOV R5,A
MOV A,R6
RLC A
MOV R6,A
DJNZ BIT_CNT,READ1
LCALL STOP_93C46
RET
;******************************************************************
;名稱(chēng):寫(xiě)指令(WRITE指令)
;功能:把R6(H),R5(L)的資料寫(xiě)到93C46中R7所指向的內(nèi)存中
;******************************************************************
WRITE:
LCALL WEN_93C46
LCALL START_93C46
MOV DATSEND,#05H ;發(fā)送寫(xiě)入操作指令
MOV BIT_SEND,#03H
LCALL SEND_DATA
MOV DATSEND,R7 ;發(fā)送寫(xiě)入地址
MOV BIT_SEND,#06H
LCALL SEND_DATA
MOV DATSEND,R6 ;發(fā)送寫(xiě)入資料
MOV BIT_SEND,#08H
LCALL SEND_DATA
MOV DATSEND,R5
MOV BIT_SEND,#08H
LCALL SEND_DATA
LCALL STOP_93C46
LCALL WDS_93C46
RET
;******************************************************************
;名稱(chēng):寫(xiě)全部(WRAL指令)
;功能:把R6(H),R5(L)的資料寫(xiě)到93C46的全部?jī)?nèi)存中
;******************************************************************
WRAL:
LCALL WEN_93C46
LCALL START_93C46
MOV DATSEND,#11H ;發(fā)送寫(xiě)全部操作指令
MOV BIT_SEND,#05H
LCALL SEND_DATA
MOV DATSEND,#00H
MOV BIT_SEND,#04H
LCALL SEND_DATA
MOV DATSEND,R6 ;發(fā)送寫(xiě)全部資料(高位)
MOV BIT_SEND,#08H
LCALL SEND_DATA
MOV DATSEND,R5 ;發(fā)送寫(xiě)全部資料(低位)
MOV BIT_SEND,#08H
LCALL SEND_DATA
LCALL STOP_93C46
LCALL WDS_93C46
RET
;******************************************************************
;名稱(chēng):START_93C46
;功能:片選93C46做好讀/寫(xiě)資料的準(zhǔn)備
;******************************************************************
START_93C46:
SETB DO_93C46
SETB DI_93C46
CLR SK_93C46
SETB CS_93C46
JNB DO_93C46,$ ;查詢(xún)器件是否繁忙
SETB SK_93C46
CLR SK_93C46
CLR CS_93C46
CLR SK_93C46
CLR DI_93C46
SETB CS_93C46
RET
;******************************************************************
;名稱(chēng):STOP_93C46
;功能:停止對(duì)93C46操作
;******************************************************************
STOP_93C46:
CLR SK_93C46
CLR DI_93C46
CLR CS_93C46
SETB DO_93C46
RET
;******************************************************************
;名稱(chēng):WEN_93C46(EWEN指令)
;功能:93C46寫(xiě)允許
;******************************************************************
WEN_93C46:
LCALL START_93C46
MOV DATSEND,#04H ;發(fā)送開(kāi)始位和寫(xiě)允許操作碼,共3位
MOV BIT_SEND,#03H
LCALL SEND_DATA ;調(diào)用發(fā)送子程序
MOV DATSEND,#30H ;發(fā)送6位的指令操作碼
MOV BIT_SEND,#06H
LCALL SEND_DATA
LCALL STOP_93C46
RET
;******************************************************************
;名稱(chēng):WDS_93C46(EWDS指令)
;功能:93C46寫(xiě)禁止
;******************************************************************
WDS_93C46:
LCALL START_93C46
MOV DATSEND,#04H ;發(fā)送開(kāi)始位和寫(xiě)禁止操作碼,共3位
MOV BIT_SEND,#03H
LCALL SEND_DATA ;調(diào)用發(fā)送子程序
MOV DATSEND,#00H ;發(fā)送6位的指令操作碼
MOV BIT_SEND,#06H
LCALL SEND_DATA
LCALL STOP_93C46
RET
;******************************************************************
;名稱(chēng):ERASE(ERASE指令)
;功能:擦除93C46中R7所指向的地址的內(nèi)容
;******************************************************************
ERASE:
LCALL WEN_93C46
LCALL START_93C46
MOV DATSEND,#07H ;發(fā)送擦除指令
MOV BIT_SEND,#03H
LCALL SEND_DATA
MOV DATSEND,R7
MOV BIT_SEND,#06H
LCALL SEND_DATA
LCALL STOP_93C46
LCALL WDS_93C46
RET
;******************************************************************
;名稱(chēng):ERAL(ERAL指令)
;功能:擦除93C46所有內(nèi)容
;******************************************************************
ERAL:
LCALL WEN_93C46
LCALL START_93C46
MOV DATSEND,#04H ;發(fā)送全部擦除指令
MOV BIT_SEND,#03H
LCALL SEND_DATA
MOV DATSEND,#20H
MOV BIT_SEND,#06H
LCALL SEND_DATA
LCALL STOP_93C46
LCALL WDS_93C46
RET
;******************************************************************
;名稱(chēng):SEND_DATA
;功能:資料發(fā)送子程序,把待發(fā)送資料DATSEND的低BIT_SEND位送到DI上
;******************************************************************
SEND_DATA:
;因?yàn)闉榱耸钩绦蛉菀鬃x懂,前面把要發(fā)送的內(nèi)容
;直接送給DATSEND,而現(xiàn)在就要把DATSEND中無(wú)用
;的位去掉,把要發(fā)送的內(nèi)容移到最高位來(lái)
MOV BIT_CNT,BIT_SEND
MOV A,#08H ;計(jì)算要移位的個(gè)數(shù)
CLR C
SUBB A,BIT_CNT
MOV BIT_CNT,A
JZ SEND_DATA2 ;如果發(fā)送的位數(shù)為8位,則不用移位,跳轉(zhuǎn)
MOV A,DATSEND ;把要送出資料的移到DATSEND的最高位
SEND_DATA1:
RL A
DJNZ BIT_CNT,SEND_DATA1
JMP SEND_DATA3
SEND_DATA2:
MOV A,DATSEND ;把要送出的8位資料DATSEND傳給A
;(只有8位資料都要送出時(shí)才執(zhí)行這條指令)
SEND_DATA3:
MOV BIT_CNT,BIT_SEND
SEND_DATA4:
RLC A ;移位元送出BIT_SEND位資料
JC SEND_DATA5
CLR DI_93C46 ;發(fā)送0碼
JMP SEND_DATA6
SEND_DATA5:
SETB DI_93C46 ;發(fā)送1碼
NOP
NOP
SEND_DATA6:
SETB SK_93C46 ;產(chǎn)生移位元時(shí)鐘信號(hào)
CLR SK_93C46
DJNZ BIT_CNT,SEND_DATA4
RET
END
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -