#ifndef _eeprom_inc_ #define _eeprom_inc_ ; Title : access internal EEPROM ; By : komi ; Last update : 2005.07.04 ; Version : 0.2 ;---------------------------------------------------------------------------- ; 解説 ;---------------------------------------------------------------------------- ; ; ■EEPROM アドレスセット ; ・定義1 ; EEPROM_set_address_V1 addr ; 引数 ; addr これからアクセスするアドレス(00-FFH)を定数で指定. ; 使用例 ; EEPROM_set_address_V1 H'12' ; ; ・定義2 ; EEPROM_set_address_U1 addrU1 ; 引数 ; addrU1 アドレスが入っているRAMアドレス. ; 使用例 ; DATA ; var1 RES 1 ; CODE ; EEPROM_set_address_U1 var1 ; ; ・定義3 ; EEPROM_set_address_W ; 引数 なし ; Wregにアクセスするアドレスをセットしておく. ; 使用例 ; MOVLW H'12' ; EEPROM_set_address_W ; ;---------------------------------------------------------------------------- ; ; ■EEPROM データ読み出し ; ・定義 ; W_EEPROM_read_data ; 引数 なし ; 事前にEEPROM_set_adderssにて読み出しアドレスを指定しておく. ; 戻り値 ; Wregに読み出したデータ値がセットされる. ; 使用例 ; EEPROM_set_addressV1 H'01' ; W_EEPROM_read_data ; ;---------------------------------------------------------------------------- ; ; ■EEPROM データ書き込み ; 割込禁止時間(6cyc) ; 完了待ちなしバージョンあり(マクロ名に'_nw'を付ける) ; ; ・定義1 ; EEPROM_write_data_V1 dataV1 ; 引数 ; dataV1 書き込むデータ(00-FFH)を定数で指定. ; 使用例 ; EEPROM_write_data_V1 H'10' ; ; ・定義2 ; EEPROM_write_data_U1 dataU1 ; 引数 ; dataU1 書き込むデータが入っているRAMアドレスで指定. ; 使用例 ; DATA ; var1 RES 1 ; CODE ; EEPROM_write_data_U1 var1 ; ; ・定義3 ; EEPROM_write_data_W ; 引数 なし ; Wregに書き込むデータをセットしておく. ; 使用例 ; MOVLW H'12' ; EEPROM_write_data_W ; ;---------------------------------------------------------------------------- ;------------------------------------------------------------------ ; EEPROM アドレスセット ;======================================================== core _EEPROM_set_address_core_ MACRO banksel EEADR MOVWF EEADR banksel EECON1 BCF EECON1, EEPGD ENDM #ifdef use_function ;======================================================== function EEPROM_set_address_V1 MACRO addrV1 MOVLW addrV1 pagesel EEPROM_set_address_f CALL EEPROM_set_address_f ENDM ;........................................................ EEPROM_set_address_U1 MACRO addrU1 banksel addrU1 MOVF addrU1, W pagesel EEPROM_set_address_f CALL EEPROM_set_address_f ENDM ;........................................................ EEPROM_set_address_W MACRO pagesel EEPROM_set_address_f CALL EEPROM_set_address_f ENDM #else ;======================================================== macro EEPROM_set_address_V1 MACRO addrV1 MOVLW addrV1 _EEPROM_set_address_core_ ENDM ;........................................................ EEPROM_set_address_U1 MACRO addrU1 banksel addrU1 MOVF addrU1, F _EEPROM_set_address_core_ ENDM ;........................................................ EEPROM_set_address_W MACRO _EEPROM_set_address_core_ ENDM #endif ;======================================================== ;------------------------------------------------------------------ ; EEPROM read ;======================================================== core _EEPROM_read_data_core_ MACRO banksel EECON1 BSF EECON1, RD banksel EEDATA MOVF EEDATA, W ENDM #ifdef use_function ;======================================================== function W_EEPROM_read_data MACRO pagesel EEPROM_read_data_f CALL EEPROM_read_data_f ENDM #else ;======================================================== macro W_EEPROM_read_data MACRO _EEPROM_read_data_core_ ENDM #endif ;======================================================== ;------------------------------------------------------------------ ; EEPROM write ;======================================================== core _EEPROM_write_data_core_ MACRO banksel EEDATA MOVWF EEDATA banksel EECON1 BSF EECON1, WREN BCF INTCON, GIE MOVLW H'55' MOVWF EECON2 MOVLW H'aa' MOVWF EECON2 BSF EECON1, WR BSF INTCON, GIE BCF EECON1, WREN ENDM _EEPROM_write_data_core_wait_ MACRO BTFSC EECON1, WR GOTO $-1 ENDM #ifdef use_function ;======================================================== function EEPROM_write_data_V1 MACRO dataV1 MOVLW dataV1 pagesel EEPROM_write_data_f CALL EEPROM_write_data_f ENDM ;........................................................ EEPROM_write_data_U1 MACRO dataU1 banksel dataU1 MOVF dataU1, W pagesel EEPROM_write_data_f CALL EEPROM_write_data_f ENDM ;........................................................ EEPROM_write_data_W MACRO pagesel EEPROM_write_data_f CALL EEPROM_write_data_f ENDM ;........................................................ EEPROM_write_data_V1_nw MACRO dataV1 MOVLW dataV1 pagesel EEPROM_write_data_f_w CALL EEPROM_write_data_f_w ENDM ;........................................................ EEPROM_write_data_U1_nw MACRO dataU1 banksel dataU1 MOVF dataU1, W pagesel EEPROM_write_data_f_w CALL EEPROM_write_data_f_w ENDM ;........................................................ EEPROM_write_data_W_nw MACRO pagesel EEPROM_write_data_f_w CALL EEPROM_write_data_f_w ENDM #else ;======================================================== macro EEPROM_write_data_V1 MACRO dataV1 MOVLW dataV1 _EEPROM_write_data_core_ _EEPROM_write_data_core_wait_ ENDM ;........................................................ EEPROM_write_data_U1 MACRO dataU1 banksel dataU1 MOVF dataU1, W _EEPROM_write_data_core_ _EEPROM_write_data_core_wait_ ENDM ;........................................................ EEPROM_write_data_W MACRO _EEPROM_write_data_core_ _EEPROM_write_data_core_wait_ ENDM ;........................................................ EEPROM_write_data_V1_nw MACRO dataV1 MOVLW dataV1 _EEPROM_write_data_core_ ENDM ;........................................................ EEPROM_write_data_U1_nw MACRO dataU1 banksel dataU1 MOVF dataU1, W _EEPROM_write_data_core_ ENDM ;........................................................ EEPROM_write_data_W_nw MACRO _EEPROM_write_data_core_ ENDM #endif ;======================================================== ;------------------------------------------------------------------ #ifdef use_function tEEPROM_code CODE ;------------------------------------------------------------------ FUNCTIONS EEPROM_set_address_f _EEPROM_set_address_core_ RETURN ;------------------------------------------------------------------ EEPROM_read_data_f _EEPROM_read_data_core_ RETURN ;------------------------------------------------------------------ EEPROM_write_data_f _EEPROM_write_data_core_ _EEPROM_write_data_core_wait_ RETURN ;------------------------------------------------------------------ EEPROM_write_data_f_nw _EEPROM_write_data_core_ RETURN ;------------------------------------------------------------------ #endif ;---------------------------------------------------------------------------- #endif