EEPROM Write

P1   P2   P3
Home


Buying PICkit-2
Learn about PIC12F629
PIC12F629 Data Sheet (.pdf  4,926KB)
Instruction Set for PIC12F629
blank12F629.asm template
Notepad2.zip     Notepad2.exe 
PIC12F629.asm  Chip as a "D" flip flop
Library of Sub-routines "Cut and Paste
"
Library of routines:   A-E   E-P    P-Z 
 

This program will produce a tone from the piezo of approx 130Hz to show how fast the EEPROM can be accessed.
However the EEPROM only has a life of 1,000,000 cycles and if the project is activated for a period of time, EEPROM location 127 will fail after about 1 hour. That's why we have selected the last location in EEPROM, as it will rarely be used for anything else.


Here is the code:
EEPROMWrite.asm
EEPROMWrite.hex 

13/3/10

EEPROM Write for PIC12F509

;EEPROMwrite.asm
;How fast is EEPROM write?  Use this program to listen to the 
;frequency that is produced with 2 EEPROM writes in each cycle. 
;Our PIC12F629 produced a frequency of 133Hz
;  11-3-2010 
;*******************************
;
;       --+------------ +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 during assembly

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

;_MCLRE_OFF  - master clear must be off for gp3 to work as 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 pin 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. Result stored in EEDATA
	movf	EEDATA,w     ;move read data into w
	bcf	status,rp0				
	movwf	temp1	     ;temp1 has the 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 		;unlock codes
	movwf	eecon2
	movlw	0aah
	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'		
M1	call	write
	call	read
	movf	temp1,w
	movwf	gpio
	movlw	b'00000000'		
	call	write
	call	read
	movf	temp1,w
	movwf	gpio
	goto	Main		
	
				
;***************************************************************
;*EEPROM     location 127 will be used by the program 
;****************************************************************
							
	org		2100h			
					
							
	end