;******************************* ;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. ;0 is placed in EEPROM location then read and sent to piezo. ;then 4 is placed in EEPROM, then read and sent to piezo to create tone. ;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 ; Dont 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 storing result 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 * ;**************************************************************** org 2100h END