Buying PICkit-2
Learn about PIC12F629
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
;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
Quick Links
Legal Stuff
Social Media