急救!帮忙看看DS1302的程序读不出数据?????读出的实时时钟总是为FF……
T_CLK Bit P1.2 ;实时时钟时钟线引脚
T_IO Bit P1.3 ;实时时钟数据线引脚
T_RST Bit P3.7 ;实时时钟复位线引脚
BUFF_IN EQU 20H
BUFF_OUT EQU 30H
ORG 0000H
JMP START
;**********************************************************
START: MOV R0,#BUFF_IN ;2006-8-16-11-59-55
MOV @R0,#55H
INC R0
MOV @R0,#59H
INC R0
MOV @R0,#11H
INC R0
MOV @R0,#16H
INC R0
MOV @R0,#03H
INC R0
MOV @R0,#08H
INC R0
MOV @R0,#06H
Set1302:
CLR T_RST
CLR T_CLK
SETB T_RST
MOV B,#8EH ;控制寄存器
LCALL RTInputByte
MOV B,#00H ;写操作前WP=0
LCALL RTInputByte
SETB T_CLK
CLR T_RST
MOV R0, #BUFF_IN;
MOV R7, #7 ;秒 分 时 日 月 星期 年
MOV R1, #80H ;秒写地址
S13021: CLR T_RST
CLR T_CLK
SETB T_RST
MOV B,R1 ;写秒 分 时 日 月 星期 年 地址
LCALL RTInputByte
MOV A,@R0 ;写秒数据
MOV B,A
LCALL RTInputByte
INC R0
INC R1
INC R1
SETB T_CLK
CLR T_RST
DJNZ R7,S13021
CLR T_RST
CLR T_CLK
SETB T_RST
MOV B, #8EH ;控制寄存器
LCALL RTInputByte
MOV B, #80H ;控制,WP=1,写保护
LCALL RTInputByte
SETB T_CLK
CLR T_RST
CLR P3.5 ;继电器
MOV R3,#20
CALL DELAY
SETB P3.5
Get1302:
MOV R0,#BUFF_OUT;
MOV R7,#7
MOV R1,#81H ;秒地址
G13021: CLR T_RST
CLR T_CLK
SETB T_RST
MOV B,R1 ;秒 分 时 日 月 星期 年 地址
LCALL RTInputByte
LCALL RTOutputByte
MOV @R0,A ;秒
INC R0
INC R1
INC R1
SETB T_CLK
CLR T_RST
DJNZ R7, G13021
JMP START
;**********************************************************
;功 能:写1302一字节 (内部子程序)
;**********************************************************
RTInputByte:
MOV R4,#8
Inbit1: MOV A,B
RRC A
MOV B,A
MOV T_IO,C
SETB T_CLK
NOP
CLR T_CLK
DJNZ R4, Inbit1
RET
;**********************************************************
;功 能:读1302一字节 (内部子程序)
;**********************************************************
RTOutputByte:
MOV R4,#8
Outbit1: MOV C,T_IO
RRC A
SETB T_CLK
NOP
CLR T_CLK
DJNZ R4,Outbit1
RET
DELAY: MOV R1,#0
DL1: MOV R2,#0
DL2: DJNZ R2,DL2
DJNZ R1,DL1
DJNZ R3,DELAY
RET
END
发表时间:2006年8月18日9:16:27