?? x5045_new.asm
字號(hào):
;============================================================
CS_5045 EQU P3.3
SO_5045 EQU P3.7
SI_5045 EQU P1.2
SCK_5045 EQU P1.3
WP_5045 EQU P1.6
;------------------------------------------------------------
WX5045_DATA EQU 30H;寫(xiě)入數(shù)據(jù)的地址緩沖區(qū)
WX5045_ADDR EQU 31H;寫(xiě)人數(shù)據(jù)緩沖區(qū)
RX5045_DATA EQU 32H;讀出數(shù)據(jù)的地址緩沖區(qū)
RX5045_ADDR EQU 33H;讀出數(shù)據(jù)緩沖區(qū)
;------------------------------------------------------------
WREN_5045 EQU 00000110B;設(shè)置寫(xiě)使能鎖存器,允許寫(xiě)操作
WRDI_5045 EQU 00000100B;復(fù)位寫(xiě)使能鎖存器,禁止寫(xiě)操作
RDSR_5045 EQU 00000101B;讀狀態(tài)寄存器
WRSR_5045 EQU 00000001B;寫(xiě)狀態(tài)寄存器
STATUS_REG EQU 00000000B;設(shè)置DOG時(shí)間設(shè)置為1.4秒,無(wú)寫(xiě)保護(hù)
READ_5045 EQU 00000011B;把開(kāi)始于所選地址的存儲(chǔ)器中的數(shù)據(jù)讀出
WRITE_5045 EQU 00000010B;把數(shù)據(jù)寫(xiě)入開(kāi)始于所選地址的存儲(chǔ)器
; READ_5045, WRITE_5045 第三位為1的時(shí)候是下半頁(yè)
;-------------------------------------------------------------;
;看門(mén)狗定時(shí)器的預(yù)置時(shí)間是通過(guò)X25045的狀態(tài)寄存器的相應(yīng)位來(lái)設(shè)定的。
;如表2所示,X25045狀態(tài)寄存器共有6位有含義,其中WD1、WD0和看門(mén)狗電路有關(guān),
;其余位和EEPROM的工作設(shè)置有關(guān)。
; D7 D6 D5 D4 D3 D2 D1 D0
; X X WD1 WD0 BL1 BL0 WEL WIP
;表2 X25045狀態(tài)寄存器
;WD1=0,WD0=0,預(yù)置時(shí)間為1.4s。
;WD1=0,WD0=1,預(yù)置時(shí)間為0.6s。
;WD1=1,WD0=0,預(yù)置時(shí)間為0.2s。
;WD1=1,WD0=1,禁止看門(mén)狗工作。
;/第3位和第2位為BL1,BL0,是寫(xiě)保護(hù)設(shè)置位,
;00為無(wú)保護(hù),01為保護(hù)180-1FF,10為保護(hù)100-1FF,11為保護(hù)000-1FF.
;第1位為WEL, 當(dāng)他為1時(shí)代表已經(jīng)"寫(xiě)使能"設(shè)置了,現(xiàn)在可以寫(xiě)了,只讀位.
;第0位為WIP,當(dāng)他為1時(shí)代表正在進(jìn)行寫(xiě)操作,是只讀*/
;==============================================================
;==============================================================
ORG 0000H
AJMP MAIN
;==============================================================
;向X5045寫(xiě)入一字節(jié)數(shù)據(jù)
X5045_IN: MOV R7,#8
X5045_IN0:
;CLR SCK_5045
RLC A
MOV SI_5045,C
CLR SCK_5045
NOP
NOP
SETB SCK_5045
DJNZ R7,X5045_IN0
RET
;--------------------------------------------------------------
;READ ONE BYTE FROM X5045
X5045_OUT: MOV R7,#8
;CLR A
X5045_OUT0:;CLR C
SETB SCK_5045
CLR SCK_5045
MOV C,SO_5045
;SETB SCK_5045
RLC A
DJNZ R7,X5045_OUT0
RET
;--------------------------------------------------------------
;允許寫(xiě)操作
W_Enable: CLR SCK_5045
CLR CS_5045
MOV A,#WREN_5045
ACALL X5045_IN
CLR SCK_5045
SETB CS_5045
RET
;--------------------------------------------------------------
;復(fù)位時(shí)間位和數(shù)據(jù)保護(hù)位寫(xiě)入狀態(tài)寄存器
;---------------------------------------------------------------
WRSR_CMD: ACALL W_Enable ;允許寫(xiě)操作
CLR SCK_5045
CLR CS_5045
MOV A,#WRSR_5045;寫(xiě)狀態(tài)寄存器 命令
ACALL X5045_IN
MOV A,#STATUS_REG;設(shè)置看門(mén)狗
ACALL X5045_IN
CLR SCK_5045
SETB CS_5045
;--------------------------------------------------------------
Check_Write:;等待X25045結(jié)束內(nèi)部寫(xiě)周期
MOV R6,#100
WRSR_CMD0: ACALL RDSR_CMD
;*判斷是否WIP=0,即判斷是否寫(xiě)入過(guò)程已經(jīng)結(jié)束,若結(jié)束就跳出
JNB ACC.0,WRSR_CMDQ ;否則繼續(xù)等待直到達(dá)到最大記數(shù)值
ACALL RST_DOG
DJNZ R6,WRSR_CMD0
WRSR_CMDQ: RET
;--------------------------------------------------------------
;讀狀態(tài)寄存器
RDSR_CMD: CLR SCK_5045
CLR CS_5045
MOV A,#RDSR_5045;讀狀態(tài)寄存器 命令
ACALL X5045_IN
ACALL X5045_OUT
CLR SCK_5045
SETB CS_5045
RET
;--------------------------------------------------------------
;喂狗程序
RST_DOG: SETB P3.3 ;*** 在TEACHER WU的板上需加上這三句,因其有X5045
NOP ;*** X5045復(fù)位功能,產(chǎn)生復(fù)位,使程序從頭走,
CLR P3.3
RET
;---------------------------------------------------------------
;向X5045 寫(xiě)入一個(gè)相應(yīng)地址的一個(gè)數(shù)據(jù)
;地址在:WX5045_ADDR
;數(shù)據(jù):WX5045_DATA
;----------------------------------------------------------------
Write_X5045:ACALL W_Enable
CLR SCK_5045
CLR CS_5045
MOV A,#Write_5045;寫(xiě)入數(shù)據(jù)的命令
ACALL X5045_IN
MOV A,WX5045_ADDR;寫(xiě)入地址
ACALL X5045_IN
MOV A,WX5045_DATA;寫(xiě)入數(shù)據(jù)
ACALL X5045_IN
CLR SCK_5045
SETB CS_5045
ACALL Check_Write
RET
;------------------------------------------------------------------
;從X5045讀出一個(gè)相應(yīng)地址的一個(gè)數(shù)據(jù)
;地址:RX5045_ADDR
;數(shù)據(jù):RX5045_DATA
;------------------------------------------------------------------
Read_X5045:CLR CS_5045
CLR SCK_5045
MOV A,#READ_5045
ACALL X5045_IN
MOV A,RX5045_ADDR
ACALL X5045_IN
ACALL X5045_OUT
MOV RX5045_DATA,A
SETB CS_5045
RET
;-------------------------------------------------------------------
DELAY: MOV R6,#0
DELAY0: MOV R7,#0
DJNZ R7,$
DJNZ R6,DELAY0
RET
;==============================================================
MAIN: MOV SP,#07H
MOV WX5045_ADDR,#1
MOV WX5045_DATA,#55H
ACALL Write_X5045
MOV WX5045_ADDR,#3
MOV WX5045_DATA,#51H
ACALL Write_X5045
;-----------------
MOV RX5045_ADDR,#1
ACALL Read_X5045
CJNE A,#55H,MAINL
CLR P1.7
ACALL DELAY
MOV RX5045_ADDR,#3
ACALL Read_X5045
CJNE A,#51H,MAINL
CLR P1.6
;MOV WX5045_ADDR,#2
;ACALL Read_X5045
;CJNE A,#51h,MAINL
;CLR P1.5
MAINL: SETB P3.3 ;*** 在TEACHER WU的板上需加上這三句,因其有X5045
NOP ;*** X5045復(fù)位功能,產(chǎn)生復(fù)位,使程序從頭走,
CLR P3.3
SJMP MAINL
;==============================================================
END
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -