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.
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:
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
Quick Links
Legal Stuff
Social Media