;********************************************************************* ; * ; Tutorial 5 EEPROM Persistant Store * ; * ;********************************************************************* ;* TARGET PIC16F877 ;********************************************************************* ; ;********************************************************************* ;* @version 0.1, 27 September 2001 ;* @author James Caska ;********************************************************************* list p=16F877 #include DATA_EE_ADDR EQU .112 ;Place in Shared Register Space DATA_EE_DATA EQU .113 ORG .0 GOTO INIT ORG .4 INTERRUPTHANDLER BCF STATUS, RP1 ; BCF STATUS, RP0 ; Bank 0 ;Get Next Data Sample _/-\_ BSF PORTE,0 ;Move to the next data NOP BCF PORTE,0 BCF PIR2,EEIF ;Clear the EEPROM interrupt flag RETFIE ;========================================== ;Autogenerated configuration code PIC16F877 ;Config Wiz V0.1, www.virtualbreadboard.com ;========================================== ;======EEPROM.WRITE EEPROM.WRITE.SLEEP BSF STATUS, RP1 ; BCF STATUS, RP0 ; Bank 2 MOVF DATA_EE_ADDR,W ; MOVWF EEADR ; Data Memory Address to write MOVF DATA_EE_DATA,W ; MOVWF EEDATA ; Data Memory Value to write BSF STATUS, RP0 ; Bank 3 BCF EECON1, EEPGD ; Point to DATA memory BSF EECON1, WREN ; Enable writes BCF INTCON, GIE ; Disable Interrupts MOVLW 0x55 ; ;Required Sequence MOVWF EECON2 ; Write 55h MOVLW 0xAA ; MOVWF EECON2 ; Write AAh BSF EECON1, WR ; Set WR bit to begin write SLEEP ; Wait for interrupt to signal write complete BCF EECON1, WREN ; Disable writes BCF STATUS, RP1 ; BCF STATUS, RP0 ; Bank 0 RETURN ;========================================== ;Autogenerated configuration code PIC16F877 ;Config Wiz V0.1, www.virtualbreadboard.com ;========================================== ;======EEPROM.WRITE EEPROM.WRITE.WAIT BSF STATUS, RP1 ; BCF STATUS, RP0 ; Bank 2 MOVF DATA_EE_ADDR,W ; MOVWF EEADR ; Data Memory Address to write MOVF DATA_EE_DATA,W ; MOVWF EEDATA ; Data Memory Value to write BSF STATUS, RP0 ; Bank 3 BCF EECON1, EEPGD ; Point to DATA memory BSF EECON1, WREN ; Enable writes MOVLW 0x55 ; ;Required Sequence MOVWF EECON2 ; Write 55h MOVLW 0xAA ; MOVWF EECON2 ; Write AAh BSF EECON1, WR ; Set WR bit to begin write ;======!!!MUST CLEAR THE EEIF FLAG IN INTERRUPT HANDLER IF USING INTERRUPTS EEPROM.WRITE.WAIT.LOOP BSF STATUS, RP1 ; BSF STATUS, RP0 ; Bank 3 BTFSC EECON1, WR ; Wait until this bit is clear indicating a successful write GOTO EEPROM.WRITE.WAIT.LOOP BCF STATUS, RP1 ; BCF STATUS, RP0 ; Bank 0 RETURN ;========================================== ;Autogenerated configuration code PIC16F877 ;Config Wiz V0.1, www.virtualbreadboard.com ;========================================== ;======EEPROM.WRITE EEPROM.READ BSF STATUS, RP1 ; BCF STATUS, RP0 ;Bank 2 MOVF DATA_EE_ADDR,W ; MOVWF EEADR ;Data Memory Address to read BSF STATUS, RP0 ;Bank 3 BCF EECON1, EEPGD ;Point to DATA memory BSF EECON1, RD ;EEPROM Read BCF STATUS, RP0 ;Bank 2 MOVF EEDATA, W ;W = EEDATA BCF STATUS, RP1 ; BCF STATUS, RP0 ;Bank 0 RETURN WriteEEPROMWithWait ;========================================== ;Autogenerated configuration code PIC16F877 ;Config Wiz V0.1, www.virtualbreadboard.com ;========================================== ;======EEPROM.WRITE ;======Enable Interrupt on EEPROM Write BCF PIR2, EEIF ;Clear the Interrupt Flag BSF STATUS, RP0 ;Access Bank1 BSF PIE2, EEIE ;Enable the EEPROM interrupt BCF STATUS, RP0 ;Restore Bank0 BSF INTCON,PEIE ;Enable Peripheral Interrupts BSF INTCON,GIE ;Enable Interrupts MOVF PORTB,W MOVWF DATA_EE_DATA CALL EEPROM.WRITE.WAIT ;Disable the EEPROM Interrupts ;========================================== ;Autogenerated configuration code PIC16F877 ;Config Wiz V0.1, www.virtualbreadboard.com ;========================================== ;======EEPROM.WRITE ;======Enable Interrupt on EEPROM Write BSF STATUS, RP0 ;Access Bank1 BCF PIE2, EEIE ;Enable the EEPROM interrupt BCF STATUS, RP0 ;Restore Bank0 BCF INTCON,PEIE ;Disable Peripheral Interrupts BCF INTCON,GIE ;Disable Interrupts RETURN WriteEEPROMWithSleep MOVF PORTB,W MOVWF DATA_EE_DATA CALL EEPROM.WRITE.SLEEP RETURN INIT ;========================================== ;Autogenerated configuration code PIC16F877 ;Config Wiz V0.1, www.virtualbreadboard.com ;========================================== ;======Begin PORT Configuration BSF STATUS, RP0 ;PORT TRIS Registers are on page 1 ;======PORT B MOVLW .255 ;PORTB Configuration Bits MOVWF TRISB ;======PORT C MOVLW .0 ;PORTC Configuration Bits MOVWF TRISC ;======PORT D MOVLW .0 ;PORTD Configuration Bits MOVWF TRISD ;======PORT E CLRF PORTE MOVLW .6 ;PORTE Configuration Bits MOVWF TRISE BCF STATUS, RP0 ;Restore Page0 MAIN MOVLW .255 MOVWF DATA_EE_ADDR MAIN.LOOP CALL WriteEEPROMWithSleep CALL EEPROM.READ MOVWF PORTC CALL WriteEEPROMWithWait CALL EEPROM.READ MOVWF PORTD DECFSZ DATA_EE_ADDR,F GOTO MAIN.LOOP GOTO MAIN END