单片机89c2051程序2!

到永远
; ********************************************************************
MAX_POLL EQU 0FFH
WREN_INST EQU 06H ; WRITE enable latch instruction
WRDI_INST EQU 04H ; WRITE disable lattch instruction
WRSR_INST EQU 01H ; WRITE STATUS REGISTER INSTRUCTION
RDSR_INST EQU 05H ; READ STATUS REGISTER INSTRUCTION
WRITE_INST EQU 02H ; WRITE MEMORY INSTRUCTION
READ_INST EQU 03H ; READ MEMORY instruction
STATUS_REG EQU 00H ; STATUS REGISTER
STATUS_REG_P EQU 08H ; STATUS REGISTER
;----------------------------------------------------------
S_WRSR: ; EN WRITE 000 1FFH
LCALL WREN_CMD
MOV B,#STATUS_REG
LCALL WRSR_CMD ; WATCH_DOG IS 1.4 S
RET
WREN_CMD: CLR CS_W
MOV A,#WREN_INST
LCALL OUTBYT
SETB CS_W
RET
WRSR_CMD: CLR CS_W
MOV A,#WRSR_INST
LCALL OUTBYT
MOV A,B ; XX WD1 WD0 BL1 BL0 WEL WIP
; 00H XX 0 0 0 0 0 0
LCALL OUTBYT
SETB CS_W
LCALL WIP_POLL
RET
RDSR_CMD: CLR CS_W
MOV A,#RDSR_INST
LCALL OUTBYT
LCALL INBYT
SETB CS_W
RET
;________________________________________________________
WRITE_E2PROM:
MOV R0,#KEY_BUF ; RAM_ADDRS
PAGE_WRITE:
LCALL WREN_CMD
CLR CS_W
MOV A,#WRITE_INST
CLR C
MOV ACC.3,C
LCALL OUTBYT
MOV A,R5 ; EEPROM_ADDRS_L
LCALL OUTBYT
MOV LING,#02H
PAGE_WRITE1:
MOV A,@R0 ; RAM_ADDRES
LCALL OUTBYT
INC R0
DJNZ LING,PAGE_WRITE1
SETB CS_W
LCALL WIP_POLL
RET
;----------------------------------------------------------
SEQU_READ_2: MOV LING,#02H
MOV R0,#KEY_BUF
READ_SEROM: CLR CS_W
MOV A,#READ_INST
CLR C
MOV ACC.3,C ; C IS H_ADDRS
LCALL OUTBYT
MOV A,R5 ; R5 IS E2 N_ADDRS
LCALL OUTBYT
SEQU_READ1: LCALL INBYT ; R3 IS DATA LENGTH
MOV @R0,A
INC R0
DJNZ LING,SEQU_READ1
SETB CS_W
RET
; ---------------------------------------------------------
; ---------------------------------------------------------
WIP_POLL:
MOV LING,#MAX_POLL
WIP_POLL1: LCALL RDSR_CMD
JNB ACC.0,WIP_POLL2
DJNZ LING,WIP_POLL1
WIP_POLL2: RET
OUTBYT: ; WRITE E2
MOV R2,#08H
OUTBYT1: RLC A
MOV SIN,C
NOP
SETB SCLK
NOP
NOP
CLR SCLK
DJNZ R2,OUTBYT1
CLR SIN
RET
INBYT: MOV R2,#08H
INBYT1: MOV C,SOUT
SETB SCLK
NOP
NOP
CLR SCLK
NOP
RLC A
DJNZ R2,INBYT1
RET
S_WRSR_P: ; EN WRITE 000 0FFH
LCALL WREN_CMD
MOV B,#STATUS_REG_P
LCALL WRSR_CMD ; P_100H-1FFH, WDOG IS 1.4 S
RET
; ************************************************************************
; ************************************************************************
; PCF8583P READ\WRITE PROGRAM
; _________________________________________________________
READ_8583:
MOV R7,#06H ; LONE
MOV R5,#1 ; 8583P ADDRS
MOV R1,#CLK_RAM-2 ; 1DH=0.1S RAM ADDRS,1CH=S,1B=M,1AH=H
RD85: ACALL STAA ; START
MOV A,#0A2H ; READ COMMAND
ACALL WRR8
ACALL CACK ;
JB F0,RD85 ; 0F0H =1 BUSY
MOV A,R5
ACALL WRR8 ; 8583P ADDRS
ACALL CACK
JB F0,RD85
ACALL STAA
MOV A,#0A3H ;
ACALL WRR8
ACALL CACK
JB F0,RD85
RDDA: ACALL RDD8 ; READ__8_BIT
MOV @R1,A ; RAM ADDRS
DJNZ R7,ACAK
ACALL NACK
ACALL STOP
RET
ACAK: ACALL MACK ;
DEC R1
AJMP RDDA
; _________________________________________________________
WRITE_8583:
MOV R7,#6 ; LONGETH
MOV R5,#1 ; 8583_ADDRS
MOV R1,#CLK_RAM-2 ; RAM_ADDRS
WR85: ACALL STAA
MOV A,#0A2H
ACALL WRR8
ACALL CACK
JB F0,WR85
MOV A,R5
ACALL WRR8
ACALL CACK
JB F0,WR85
WRDA: MOV A,@R1
ACALL WRR8
ACALL CACK
JB F0,WRDA
DEC R1
DJNZ R7,WRDA
ACALL STOP
RET
STAA: SETB SDA8
NOP
SETB CLK8
NOP
NOP
CLR SDA8
NOP
NOP
CLR CLK8
NOP
NOP
RET
STOP: CLR SDA8
NOP
SETB CLK8
NOP
NOP
SETB SDA8
NOP
NOP
CLR CLK8
NOP
NOP
RET
MACK: CLR SDA8
NOP
SETB CLK8
NOP
NOP
CLR CLK8
NOP
SETB SDA8
NOP
NOP
RET
NACK: SETB SDA8
NOP
SETB CLK8
NOP
NOP
CLR CLK8
NOP
CLR SDA8
NOP
NOP
RET
CACK: SETB SDA8
NOP
SETB CLK8
CLR F0
NOP
JNB SDA8,CEND
SETB F0
CEND: CLR CLK8
NOP
RET
WRR8: MOV R6,#8
WLP0: RLC A
JC WLP1
CLR SDA8
NOP
SETB CLK8
NOP
NOP
CLR CLK8
NOP
SJMP WLP2
WLP1: SETB SDA8
NOP
SETB CLK8
NOP
NOP
CLR CLK8
NOP
CLR SDA8
NOP
WLP2: DJNZ R6,WLP0
RET
RDD8: MOV R6,#8
RLP0: SETB SDA8
NOP
SETB CLK8
NOP
MOV C,SDA8
RLC A
CLR CLK8
NOP
DJNZ R6,RLP0
NOP
RET
; ************************************************************************
LIB: DB 3FH,06H,5BH,4FH,66H,6DH ; 0,1,2,3,4,5
DB 7DH,27H,7FH,6FH,77H,40H ; 6,7,8,9,A,'-_'
DB 09H,49H,38H,00H ;
END

今番良晤,豪兴非浅,他日网络相逢,再当把酒言欢.咱们就此别过!