En aquest exemple tindrem un programa que anirà incrementant (o decrementant) un valor del 0 al 15 i aquest valor es mostrarà en els LED. Prement el polsador podrem canviar el sentit (incrementar o decrementar. A l'inici de cada cicle de programa el valor i el sentit actuals es guardaran a la memòria EEPROM (adreces 0 i 1, respectivament), d'altra banda, en la inicialització del programa es llegiran aquests valors a la memòria EEPROM per tal que el programa pugui continuar a partir del punt on s'havia quedat.
A l'hora de provar el programa, podem fer-ho desconnectant l'alimentació i tornant-la a connectar o bé tornant a enviar el programa. En aquest segon cas, cal assegurar-se que la casella EEPROM del menú Memories to Program està desactivada ja que en cas contrari ens hi escriurà al damunt. Si ho provem desconnectant l'alimentació no cal prendre cap precaució especial.

En el següent programa hem marcat en color les línies que corresponen a la gestió de la memòria EEPROM, si les esborrem el programa també funcionarà però no recordarà on s'havia quedat.
#include <p16F690.inc> __config (_INTRC_OSC_NOCLKOUT&_WDT_OFF&_PWRTE_OFF&_MCLRE_OFF&_CP_OFF&_BOR_OFF&_IESO_OFF&_FCMEN_OFF)
cblock 0x20 Retard:3 ; Definim tres variables per controlar els retards Visualit ; I una variable on guardem el que mostraran els LED Sentit ; Si és 0 suma, si és 1 resta endc cblock 0x70 ; Zona de memòria de dades que no depèn del banc triat Adre ; Adreça de la memòria EEPROM en la que volem escriure Valor ; Valor que volem escriure a la memòria EEPROM endc
org 0 Inici bsf STATUS,RP0 ; Tria el banc 1 clrf TRISC ; Posa tots els bits del port C com a sortida bcf STATUS,RP0 ; Tria el banc 0 clrf Adre ; Posició on hi ha el valor a visualitzar call LecEE ; Llegim de la memòria EEPROM movf Valor,w ; Valor llegit movwf Visualit ; El guarda movlw 1 ; Posició on hi ha el sentit movwf Adre call LecEE ; Llegim de la memòria EEPROM movf Valor,w ; Valor llegit movwf Sentit ; El guarda Bucle ; Primer copiem el valor als LED movf Visualit,w ; Anem a guardar el valor a la memòria EEPROM movwf Valor clrf Adre ; El guardem a la posició 0 call EscEE ; Ho escriu movf Sentit,w ; Anem a guardar el sentit a la memòria EEPROM movwf Valor movlw 1 ; Posició on guardarem el sentit movwf Adre call EscEE ; Ho escriu movf Visualit,w ; Copia la variable Visualit sobre el registre W movwf PORTC ; Copia el valor de W al port C btfsc PORTA,3 ; Mirem l'estat del polsador goto NoCanvi ; Si no està premut, no canvia res movlw 1 ; Volem canviar el bit 0 xorwf Sentit,f ; Canviem el sentit de l'operació NoCanvi btfss PORTA,3 ; Mirem l'estat del polsador goto $-1 ; Esperem que es deixi anar el polsador movlw .5 ; Retard d'un segon movwf Retard+2 Ret decfsz Retard,f ; Decrementa la variable 1 ; si dona zero, no es fa la instrucció següent goto Ret ; Salta, excepte si el resultat ha estat zero decfsz Retard+1,f ; Decrementa la variable 2 goto Ret ; Salta, excepte si el resultat ha estat zero decfsz Retard+2,f ; Decrementa la variable 2 goto Ret ; Salta, excepte si el resultat ha estat zero ; Acabat el retard, canviem el valor de Visualit btfss Sentit,0 ; Mirem el sentit actual goto Suma decf Visualit,f ; Decrementa Visualit movlw .15 ; Prepara l'acumulador per si cal reiniciar la variable btfsc Visualit,7 ; Mira si hem decrementat un zero movwf Visualit ; Posa 15 a la variable Visualit goto Bucle ; Repetim-ho... Suma incf Visualit,f ; Incrementa Visualit btfsc Visualit,4 ; Mira si ja hem arribat al bit 4 clrf Visualit ; Si hi hem arribat, posa a zero la variable Visualit goto Bucle ; Repetim-ho...
; ; Llegeix la memòria EEPROM ; LecEE bsf STATUS,RP1 ; Tria el banc 2 movf Adre,w ; Adreça que volem llegir movwf EEADR ; Adreça EEPROM bsf STATUS,RP0 ; Tria el banc 3 bcf EECON1,EEPGD ; Accés a EEPROM bsf EECON1,RD ; Lectura bcf STATUS,RP0 ; Tria el banc 2 movf EEDAT,w ; Llegim, el valor està a W movwf Valor ; El guardem bcf STATUS,RP1 ; Tria el banc 0 return ; ; Escriu la memòria EEPROM ; EscEE bsf STATUS,RP1 ; Tria el banc 2 movf Valor,w ; Valor que volem guardar movwf EEDAT ; Guarda el valor de l'acumulador al registre EEDAT movf Adre,w ; Adreça on volem escriure movwf EEADR ; Adreça EEPROM bsf STATUS,RP0 ; Tria el banc 3 bcf EECON1,EEPGD ; Accés a EEPROM bsf EECON1,WREN ; Activa la possibilitat d'escriptura bcf INTCON,GIE ; Desactiva les interrupcions btfsc INTCON,GIE ; Comprova si el bit s'ha desactivat goto $-2 movlw 0x55 ; Valor necessari movwf EECON2 ; Escriu 55h movlw 0xAA ; Valor necessari movwf EECON2 ; Escriu AAh bsf EECON1,WR ; Inicia l'escriptura btfsc EECON1,WR ; Ha acabat l'escriptura? goto $-1 ; No, doncs esperem bsf INTCON,GIE ; Torna a activar les interrupcions bcf EECON1,WREN ; Desactiva la possibilitat d'escriptura bcf STATUS,RP0 bcf STATUS,RP1 ; Tria el banc 0 return end

Aquesta obra d'Oriol Boix està llicenciada sota una llicència no importada Reconeixement-NoComercial-SenseObraDerivada 3.0.