#ifndef _pgmmem_inc_ #define _pgmmem_inc_ messg "include 'pgmmem.inc'" LIST ; Title : access Program Memory ; By : komi ; Last update : 2005.08.18 ; Version : 0.3 NOLIST ; ; Program Memoryへの書き込みはデバイスによって大きく異なる. ; とりあえず PIC16F819を想定. ; ; ; 書き込みの関数版まで. ;---------------------------------------------------------------------------- ; 解説 ;---------------------------------------------------------------------------- ; 使用例 ; PGMMEM_set_address_V2 H'0000' ; PGMMEM_erase ; PGMMEM_write_data_V2V2V2V2 H'0000', H'0001', H'0002', H'0003' ; PGMMEM_write_data_V2V2V2V2 H'0004', H'0005', H'0006', H'0007' ; PGMMEM_write_data_V2V2V2V2 H'0008', H'0009', H'000a', H'000b' ; PGMMEM_write_data_V2V2V2V2 H'000c', H'000d', H'000e', H'000f' ; PGMMEM_write_data_V2V2V2V2 H'0010', H'0011', H'0012', H'0013' ; PGMMEM_write_data_V2V2V2V2 H'0014', H'0015', H'0016', H'0017' ; PGMMEM_write_data_V2V2V2V2 H'0018', H'0019', H'001a', H'001b' ; PGMMEM_write_data_V2V2V2V2 H'001c', H'001d', H'001e', H'001f' ; PGMMEM_write_data_V2V2V2V2 H'0020', H'0021', H'0022', H'0023' ; PGMMEM_write_data_V2V2V2V2 H'0024', H'0025', H'0026', H'0027' ; PGMMEM_write_data_V2V2V2V2 H'0028', H'0029', H'002a', H'002b' ; PGMMEM_write_data_V2V2V2V2 H'002c', H'002d', H'002e', H'002f' ; ; 0x0000番地から順に書き込むサンプル. ; イレースしているのが 32word 分なので, H'0020'以降は書き込まれない. ; ;---------------------------------------------------------------------------- ;------------------------------------------------------------------ ; Program Memory アドレスセット ;======================================================== macro PGMMEM_set_address_V2 MACRO addrV2 banksel EEADRH MOVLW HIGH(addrV2) MOVWF EEADRH MOVLW LOW(addrV2) MOVWF EEADR ENDM ;........................................................ PGMMEM_set_address_U2 MACRO addrU2 banksel addrU2 MOVF (addrU2+1), W banksel EEADRH MOVWF EEADRH banksel addrU2 MOVWF (addrU2+0), W banksel EEADR MOVWF EEADR ENDM ;======================================================== ;------------------------------------------------------------------ ; Program Memory 読み出し ;======================================================== macro U2_PGMMEM_read_data MACRO dataU2 banksel EECON1 BSF EECON1, EEPGD BSF EECON1, RD NOP NOP banksel EEDATA MOVF EEDATA, W banksel dataU2 MOVWF (dataU2+1) banksel EEDATA MOVF EEDATH, W banksel dataU2 MOVWF (dataU2+0) ENDM ;........................................................ W_PGMMEM_read_data MACRO banksel EECON1 BSF EECON1, EEPGD BSF EECON1, RD NOP NOP banksel EEDATA MOVF EEDATA, W ENDM ;======================================================== ;------------------------------------------------------------------ ; Program Memory 消去 PGMMEM_erase MACRO banksel EECON1 BSF EECON1, EEPGD BSF EECON1, WREN BSF EECON1, FREE BCF INTCON, GIE MOVLW H'55' MOVWF EECON2 MOVLW H'aa' MOVWF EECON2 BSF EECON1, WR NOP NOP BCF EECON1, FREE BCF EECON1, WREN BSF INTCON, GIE ENDM ;------------------------------------------------------------------ ; Progmram Memory 書き込み _PGMMEM_write_data_seq_ MACRO banksel EEDATH MOVWF EEDATH banksel EECON1 MOVLW H'55' MOVWF EECON2 MOVLW H'aa' MOVWF EECON2 BSF EECON1, WR NOP NOP banksel EEADR INCF EEADR, F ENDM #ifdef use_function ;======================================================== function PGMMEM_write_data_U2U2U2U2 MACRO data1, data2, data3, data4 banksel EECON1 BSF EECON1, EEPGD BSF EECON1, WREN banksel data1 MOVF (data1+1), W banksel EEDATA MOVWF EEDATA banksel data1 MOVF (data1+0), W pagesel PGMMEM_write_data_f CALL PGMMEM_write_data_f banksel data2 MOVF (data2+1), W banksel EEDATA MOVWF EEDATA banksel data2 MOVF (data2+0), W pagesel PGMMEM_write_data_f CALL PGMMEM_write_data_f banksel data3 MOVF (data3+1), W banksel EEDATA MOVWF EEDATA banksel data3 MOVF (data3+0), W pagesel PGMMEM_write_data_f CALL PGMMEM_write_data_f banksel data4 MOVF (data4+1), W banksel EEDATA MOVWF EEDATA banksel data4 MOVF (data1+0), W pagesel PGMMEM_write_data_f CALL PGMMEM_write_data_f banksel EECON1 BCF EECON1, WREN BSF INTCON, GIE ENDM ;........................................................ PGMMEM_write_data_V2V2V2V2 MACRO data1, data2, data3, data4 banksel EECON1 BSF EECON1, EEPGD BSF EECON1, WREN banksel EEDATA MOVLW LOW(data1) MOVWF EEDATA MOVLW HIGH(data1) pagesel PGMMEM_write_data_f CALL PGMMEM_write_data_f banksel EEDATA MOVLW LOW(data2) MOVWF EEDATA MOVLW HIGH(data2) pagesel PGMMEM_write_data_f CALL PGMMEM_write_data_f banksel EEDATA MOVLW LOW(data3) MOVWF EEDATA MOVLW HIGH(data3) pagesel PGMMEM_write_data_f CALL PGMMEM_write_data_f banksel EEDATA MOVLW LOW(data4) MOVWF EEDATA MOVLW HIGH(data4) pagesel PGMMEM_write_data_f CALL PGMMEM_write_data_f banksel EECON1 BCF EECON1, WREN BSF INTCON, GIE ENDM #endif ;======================================================== ;------------------------------------------------------------------ #ifdef use_function tPGMMEM_code CODE ;------------------------------------------------------------------ FUNCTIONS PGMMEM_write_data_f _PGMMEM_write_data_seq_ RETURN ;------------------------------------------------------------------ #endif ;---------------------------------------------------------------------------- LIST #endif