INCLUDE "P16C716.EQU" ;RAM通用寄存器定义 LP1 EQU 29H ;循环次数计数器1(用于DS1302) LP2 EQU 2AH ;循环次数计数器2(也用于X25045) BUFF EQU 2CH COUNT EQU 2DH ;计数变化量(用于X25045) COUNTBUF EQU 2EH ;计数变化量缓存器 WRXBUF EQU 2FH ;存储写入数据缓存器 RDXBUF EQU 30H ADDRESS1 EQU 31H ;写地址暂存器 ADDRESS2 EQU 32H ;读地址暂存器 ADDH EQU 50H ;第八位地址保护(用于X25045) RXDATA EQU 6AH ;存储读出数据(2 OR 3 BYTE)[51H--53H] WXDATA EQU 6BH ;存储写入数据(2 OR 3 BYTE)[54H--56H] ;标志和标志位定义 SI EQU 1 ;A口位定义(X25045) CS EQU 2 SO EQU 3 SCK EQU 4 INIT BSF STATUS,RP0 MOVLW 0X08 MOVWF TRISA ;RA3 input BCF STATUS,RP0 CLRF ADCON0 ;禁止AD转换 BSF PORTA,CS BSF PORTA,SO BCF PORTA,SI BCF PORTA,SCK CALL WREN_CMD CALL WRSR_CMD CALL WREN_CMD CLRF WRXBUF BCF STATUS,C CALL BYTE_WRITEX CLRF WRXBUF BCF STATUS,C CALL BYTE_READX CALL RST_DOG GOTO OVER WREN_CMD ;WRITE ENABLE SUBPROGRAM BSF PORTA,CS NOP BCF PORTA,SCK NOP BCF PORTA,CS MOVLW 0X06 MOVWF WRXBUF ;WRITE WREN CALL WRBX BCF PORTA,SCK BSF PORTA,CS NOP NOP RETURN WRSR_CMD ;WRITE STATUS BSF PORTA,CS NOP BCF PORTA,SCK NOP BCF PORTA,CS MOVLW 0X01 MOVWF WRXBUF ;WRITE WRSR CALL WRBX MOVLW 0X00 ;无块保护 MOVWF WRXBUF ;看门狗超时周期1.4s CALL WRBX BCF PORTA,SCK BSF PORTA,CS NOP NOP CALL WIP_CHK RETURN RDSR_CMD ;READ STATUS BSF PORTA,CS NOP BCF PORTA,SCK NOP BCF PORTA,CS MOVLW 0X05 MOVWF WRXBUF CALL WRBX CALL RDBX BCF PORTA,SCK BSF PORTA,CS NOP NOP RETURN BYTE_WRITEX ;WRITE 1 BYTE INTO X25045 BSF PORTA,CS NOP BCF PORTA,SCK NOP BCF PORTA,CS RLF WRXBUF RLF WRXBUF RLF WRXBUF RLF WRXBUF MOVLW 0X02 IORWF WRXBUF ;SEND HIGH ADDRESS CALL WRBX MOVLW 0X55 MOVWF WRXBUF CALL WRBX ;SEND LOW 8 ADDRESS 55H MOVLW 0X05 ;SEND DATA MOVWF WRXBUF CALL WRBX BCF PORTA,SCK BSF PORTA,CS NOP NOP CALL WIP_CHK RETURN BYTE_READX ;READ 1 BYTE FROM E2PROM ,ADDRESS2=A0~A7, C=A8 BSF PORTA,CS NOP BCF PORTA,SCK NOP BCF PORTA,CS RLF WRXBUF RLF WRXBUF RLF WRXBUF RLF WRXBUF ;SEND HIGH ADDRESS MOVLW 0X03 IORWF WRXBUF CALL WRBX MOVLW 0X55 MOVWF WRXBUF CALL WRBX ;SEND LOW 8 ADDRESS CALL RDBX MOVF RDXBUF,0 MOVWF RXDATA BCF PORTA,SCK BSF PORTA,CS NOP NOP RETURN WRBX ;WRITE 1 BYTE FROM WRXBUF TO X25045 NOP MOVLW 0X08 MOVWF LP1 WRBX1 BCF PORTA,SCK BTFSS WRXBUF,7 BCF PORTA,SI BTFSC WRXBUF,7 BSF PORTA,SI BSF PORTA,SCK RLF WRXBUF,1 DECFSZ LP1,1 GOTO WRBX1 RETURN RDBX ;READ 1 BYTE FROM X25045 TO RDXBUF MOVLW 0X08 MOVWF LP2 RDBX1 BSF PORTA,SCK NOP BCF STATUS,C BCF PORTA,SCK BTFSC PORTA,SO BSF STATUS,C RLF RDXBUF,1 DECFSZ LP2,1 GOTO RDBX1 RETURN WIP_CHK ;等待X25045结束内部写周期 MOVLW 0X99 MOVWF TIMER WIP_CHK1 CALL RDSR_CMD BTFSC RDXBUF,0 GOTO WIP_CHK2 GOTO WIP_CHK3 WIP_CHK2 DECFSZ TIMER,1 GOTO WIP_CHK1 WIP_CHK3 RETURN RST_DOG ;复位看门狗定时器子程序 BCF PORTA,CS BSF PORTA,CS RETURN OVER END