Lichunfu,你的程序我改动如下,怎么还是不行,莫非是硬件有问题???
SCK BIT P2.0 ;X5045时钟
SDI BIT P1.7 ;X5045串行数据输入线
CS50 BIT P2.2 ;X5045片选信号, "0"有效
SDO BIT P2.1 ;X5045串行数据输出线
;X5045 命令定义
WREN EQU 06H ;写使能命令(置位写使能锁存器)
WRDI EQU 04H ;写保护命令(复位写使能锁存器)
RDSR EQU 05H ;读状态寄存器命令
WRSR EQU 01H ;写状态寄存器命令
READD EQU 03H ;读数据命令(其中D3为数据地址A8)
WRITED EQU 02H ;写数据命令(其中D3为数据地址A8)
;*******************************************************************
ORG 00H
LJMP MAIN
MAIN:
NOP
LCALL WRSRWDT
LCALL WRDROM
LCALL RDDROM
LCALL CLRWDT
LJMP MAIN
;*****************************************************************
;X5045 WatchDog应用程序集
;===================================================================
;功能:向X5045串行输出8Bit数据
;入口参数:A=数据
;出口参数:(无)
;影响资源:A、R6
;占用堆栈:2
;===================================================================
SDO8B:
MOV R6, #08H
SDO8B0:
CLR SCK
RLC A
MOV SDI, C
SETB SCK
DJNZ R6, SDO8B0
RET
;===================================================================
;功能:从X5045串行读出8Bit数据
;入口参数:(无)
;出口参数:A=数据
;影响资源:A、R6
;占用堆栈:2
;===================================================================
SDI8B:
SETB SCK
MOV R6, #8
SDI8B0:
SETB SDO
CLR SCK
NOP
MOV C, SDO
RLC A
SETB SCK
DJNZ R6, SDI8B0
RET
;===================================================================
;功能:检查WIP标志,只到WIP标志无效时退出
;入口参数:(无)
;出口参数:(无)
;影响资源:A、R6、R7
;占用堆栈:4
;===================================================================
CHKWIP:
MOV R7, #200 ;设置最大循环次数
CHKWIP0:
CLR SCK
CLR CS50
MOV A, #RDSR
CALL SDO8B
CALL SDI8B
SETB CS50
SETB SCK
JNB ACC.0, CHKWIP1
DJNZ R7, CHKWIP0
CHKWIP1:
RET
;===================================================================
;功能:写X5045控制字节
;入口参数:ROMData=控制字节
;出口参数:(无)
;影响资源:A、R6、R7
;占用堆栈:8
;===================================================================
WRSRWDT:
CLR SCK
CLR CS50
MOV A, #WREN
CALL SDO8B
SETB CS50
NOP
CLR CS50
MOV A, #WRSR
CALL SDO8B
MOV A, #00
CALL SDO8B
SETB CS50
SETB SCK
CALL CHKWIP
RET
;===================================================================
;功能:向X5045写入一字节数据
;入口参数:ROMData=数据、DPTR=数据存储地址
;出口参数:(无)
;影响资源:A、PSW、R6、R7
;占用堆栈:8
;===================================================================
WRDROM:
CLR SCK
CLR CS50
MOV A,#WREN
CALL SDO8B ;允许写
SETB CS50
NOP
CLR CS50 ;激活写操作
MOV A, DPH
RRC A
MOV A, #WRITED
MOV ACC.3, C ;插入地址第8位
CALL SDO8B
MOV A, DPL
CALL SDO8B ;写入存储地址
MOV A,#00
CALL SDO8B ;写入数据
SETB CS50 ;结束写操作
SETB SCK
CALL CHKWIP
RET
;===================================================================
;功能:从X5045读出一字节数据
;入口参数:DPTR=数据存储地址
;出口参数:A=数据
;影响资源:A、PSW、R6
;占用堆栈:4
;===================================================================
RDDROM:
MOV A, DPH
RRC A
CLR SCK
CLR CS50
MOV A, #READD
MOV ACC.3, C
CALL SDO8B ;送读数据命令和第8位地址
MOV A, DPL
CALL SDO8B ;送数据低8位地址
CALL SDI8B ;读取数据
SETB CS50
SETB SCK
RET
;===================================================================
;功能:清除WatchDog定时器
;入口参数:(无)
;出口参数:(无)
;影响资源:A、DPTR、PSW、R6
;占用堆栈:4
;===================================================================
CLRWDT:
CLR CS50
NOP
SETB CS50
RET
END
发表时间:2003年7月22日16:56:08