GOTO $+1 ; WAIT 2 US
GOTO $+1 ; WAIT 2 US
BCF PORTB,CLK ; CLOCK LOW
DECFSZ CNT1,F ; LOOP COUNTER
GOTO SENDC2
BCF PORTB,DIO ; AVOID CONTENTION WITH READ
RETLW 0
;------------------------------------------------------------------------------
;
; FUNCTION : EEWRITE ()
;
; DESCRIPTION : WRITE 16 BIT VALUE TO EEPROM
;
; NOTE : THIS ROUTINE MUST BE IN THE LOWER HALF OF THE PAGE
;
;------------------------------------------------------------------------------
EEWRITE
; ******* EEPROM WRITE ENABLE ******************
WRITE0 MOV LW 30H ; WRITE ENABLE COMMAND
MOV WF OUTBYT
CALL SENDC ; SEND COMMAND TO EEPROM
BCF PORTB,CS ; END COMMAND, DESELECT
; ******** WRITE 16-BIT WORD TO EEPROM *********
WRITE1 MOV FW ADDRESS ; GET EEPROM ADDRESS
MOV WF OUTBYT
BSF OUTBYT,6 ; WRITE COMMAND
CALL SENDC ; SEND COMMAND TO EEPROM
MOV LW 16D ; 16 DATA BITS
MOV WF CNT1
WRITE2
BTFSS TMP1,7 ; TEST MSB OF 16 BIT WORD
BCF PORTB,DIO ; SET DATA BIT
BTFSC TMP1,7 ; ... ELSE
BSF PORTB,DIO ; CLEAR DATA BIT
GOTO $+1 ; WAIT 2 US
RLF TMP2,F ; SHIFT LO BYTE
BSF PORTB,CLK ; CLOCK HIGH
GOTO $+1 ; WAIT 2 US
RLF TMP1,F ; SHIFT HI BYTE
BCF PORTB,CLK ; CLOCK LOW
DECFSZ CNT1,F
GOTO WRITE2 ; LOOP COUNTER
WAITACK
BCF PORTB,CS ; END OF WRITE COMMAND, DESELECT
MOV LW RDCFG
TRIS PORTB ; DIO = INPUT
BSF PORTB,CS ; CS HIGH TO WAIT FOR ACK
WRITE5
BTFSC PORTB,DIO ; CHECK FOR ACK
GOTO WRITE6 ; WDT RESET ON NO ACK
GOTO WRITE5
WRITE6 BCF PORTB,CS ; END OF ACK
; ******* EEPROM WRITE DISABLE ****************
上一页 [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] 下一页
本文关键字:源程序 PIC单片机,单片机-工控设备 - PIC单片机