HomeArticlesProjectsBlogContact
Articles
EEPROM Speed
Colin Mitchell
Colin Mitchell
October 17, 2010
Make sure to subscribe to our newsletter and be the first to know the news.

See more projects using PIC micros:
Elektor,EPE,Silicon Chip
Pick-A-PIC.”
See also LED FX for storing data in EEPROM

With this program you will learn how to write to EEPROM and read EEPROM.

The program accesses EEPROM location 127 (the chip has 128 EEPROM locations - 127 is the second from the top location) and writes “4.” The program then reads the location and outputs a HIGH to the piezo.
The program then writes “0” in location 127 then reads the location and outputs this value to put a LOW to the piezo.
The program loops and thus toggles the piezo to produce a tone.

INSTRUCTIONS FOR USE

Load the program into a PIC12F629 and connect a piezo between pin 5 and 0v. It will produce a tone to show the program is working and the EEPROM is being accessed.
The operation of writing to EEPROM takes time and this creates the low frequency for the tone.

The PROGRAMThis program is part of a course in PIC Programming Course.
The course consists of building these projects and modifying the programs to learn the art of programming PIC microcontrollers.
Most of the projects are very simple however they cover many different routines and enable you to build up your knowledge.
This program accesses EEPROM and shows the code needed to perform this function.
If you want to modify the program you will need a programmer, a board to hold the 8 pin chip during programming and an adapter to connect between the programmer and PC board.
These are covered in our article ”Pick-A-PIC.”

Here are the files you will need for “burning” your chip and/or modifying the program:

  • EEPROM.asm
  • EEPROM.txt
  • EEPROM.hex

The following program is for viewing. It may contain spaces or hidden characters that will not compile correctly to produce a .hex file. Use the .hex file above to burn your chip or the .asm file to modify the program.

;*******************************
;**EEPROM Write.asm**
;13-10-2010
;*******************************
;How fast is EEPROM write?  Use this program to listen to the
;frequency produced with 2 EEPROM reads and writes in each cycle.
;4 is placed in EEPROM location then read and sent to piezo.
;then 0 is placed in EEPROM, then read and sent to piezo to create a tone.
;Our PIC12F629 produced a frequency of 133Hz
;
;*******************************
;
;       --+------------ +5v
;     |
;         |
;         |Vdd ---v---
;         +---|1   Gnd|-------------+
;             |       |             |
;          ---|GP5 GP0|--           |
;             |       |             |
;            -|GP4 GP1|--       |
;             |       |     |  |    |
;           --|GP3 GP2|-----|\[\]|----+
;             -------       |  |    |
;            PIC12F629      piezo   |
;                                   |
;                                   |
;    -------------------------------+-- 0v
;

    list      p=12F629
    radix     dec
    include "p12f629.inc"

    errorlevel -302 ; Don't complain about BANK 1 Registers

    __CONFIG    _MCLRE_OFF & _CP_OFF
        & _WDT_OFF & _INTRC_OSC_NOCLKOUT  ;Internal osc.

;_MCLRE_OFF  - master clear must be off for gp3 to be  input pin

;****************************************************************
; variables - names and files
;****************************************************************


temp1       equ 20h ;

;****************************************************************
;Equates
;****************************************************************
status      equ 0x03
rp1           equ   0x06
rp0           equ   0x05
GPIO            equ     0x05


status        equ   03h
option_reg  equ     81h


    ; bits on GPIO

pin7          equ   0         ;GP0
pin6          equ   1         ;GP1
pin5          equ   2         ;GP2  Piezo between pin5 and 0v rail
pin4          equ   3         ;GP3
pin3          equ   4         ;GP4
pin2          equ   5         ;GP5


        ;bits

rp0         equ 5         ;bit 5 of the status register



;****************************************************************
;Beginning of program
;****************************************************************
org         0x00
            nop
            nop
            nop
            nop
            nop
SetUp         bsf       status, rp0     ;Bank 1
            movlw     b'11111000'     ;Set TRIS  GP2 out
              movwf   TRISIO
              bcf       status, rp0   ;bank 0
              movlw   07h           ;turn off Comparator ports
            movwf   CMCON           ;must be placed in bank 0
            clrf      GPIO            ;Clear GPIO of junk
            goto      Main



;****************************************************************
;* Sub Routines             *
;****************************************************************

     ;read takes the value 0 or 4 from EEPROM location 127 and puts it in w

read
            movlw     .127
            bsf     status,rp0
            movwf     EEADR
            bsf     EECON1,0      ;starts EEPROM read operation with result in EEDATA
            movf      EEDATA,w      ;move read data into w
            bcf     status,rp0
            movwf     temp1         ;temp1 has value 0 or 4 to activate piezo on GP2
            retlw     00



write
            bsf     status,rp0     ;select bank1
            movwf     EEDATA
            bcf     status,rp0     ;select bank0
            movlw     .127
            bsf     status,rp0     ;select bank1
            movwf     EEADR
            bsf     eecon1,wren    ;enable write.
            movlw     55h              ;55h is an unlock code
            movwf     eecon2             ;along with aah to prevent
            movlw     0aah             ;glitches writing to EEPROM.
            movwf     eecon2
            bsf     eecon1,wr        ;write begins
            bcf     status,rp0     ;select bank0
writeA      btfss     pir1,eeif      ;wait for write to complete
            goto      writeA
            bcf     pir1,eeif
            bsf     status,rp0     ;select bank1
            bcf     eecon1,wren    ;disable other writes
            bcf     status,rp0     ;select bank0
            retlw     00


;****************************************************************
;* Main                             *
;****************************************************************

Main          movlw   b'00000100'
            call      write
            call      read
            movf      temp1,w
            movwf     gpio
            movlw     b'00000000'
            call      write
            call      read
            movf      temp1,w
            movwf     gpio
            goto      Main


;****************************************************************
;*EEPROM                            *
;****************************************************************

              org   2100h

    END

Colin Mitchell

Colin Mitchell

Expertise

electronics
writing
PIC-Chips

Social Media

instagramtwitterwebsite

Related Posts

TODO
Transistor Test
© 2021, All Rights Reserved.

Quick Links

Advertise with usAbout UsContact Us

Social Media