続PIC10F322 フラッシュメモリの操作
続PIC10F322 フラッシュプログラムメモリの操作
PIC10F322のフラッシュ書き込みには、ページ書き込み用のラッチが使えます。
ラッチ書き込みに対応するように前回のコードを再検討しました。
以下のコードでラッチ書き込みにも対応します。プログラムコードは1ワード増加します。
wr_e: ;フラッシュメモリーのバルク消去
bsf PMCON1,FREE
wr_l: ;データラッチへの書き込み
bsf PMCON1,LWLO
wr_w: ;フラッシュメモリーの書き込み
bsf PMCON1,WREN
movlw 0x55
movwf PMCON2
movlw 0xaa
movwf PMCON2
bsf PMCON1,WR
rd: ;フラッシュメモリーの読み出し
bsf PMCON1,RD
nop
nop
clrf PMCON1
return
上記サブルーチンを使用する前提条件として、PMCON1のbit6~bit0が事前にクリアされている必要がありますが、リセットでPMCON1のbit6~bit0がクリアされるのと、このサブルーチンを使用すると読み出し・書き込み・消去に関わらずPMCON1が必ずクリアされますので、PMCON1を意図的に書き換えない限り問題なく使用可能です。
このルーチンを使用したフラッシュプログラムメモリのデモプログラム
アドレス0x0050~0x008Fのデータをアドレス0x0010~0x004Fに書き換える
◎起動1回目

◎起動2回目

<ソースコード>
LIST P=PIC10F322
#INCLUDE <P10F322.inc>
#ifdef W_TBL
__CONFIG _FOSC_INTOSC & _BOREN_OFF & _WDTE_OFF & _PWRTE_ON & _MCLRE_OFF & _CP_OFF & _LVP_OFF & _LPBOR_OFF & _BORV_HI & _WRT_OFF
#endif
; #DEFINE W_TBL ;ブートローダー本体を一緒にコンパイルする
; 注意)W_TBLを定義すると、TinyPicBootloader+ では書き込めません
#DEFINE TX 2 ;RS-232C データ出力用ビット
#DEFINE RX 3 ;RS-232C データ入力用ビット
#DEFINE Direct_RX ;RS-232C直結方式、コメントアウトで反転方式
#DEFINE Direct_TX ;RS-232C直結方式、コメントアウトで反転方式
;
;***************************************************************************************
;*
;* 注意(重要)
;*
;* 本デモプログラムではPIC10F322のフラッシュメモリーの書き換えを行いますが、
;* TinyPicBootloader+でプログラム転送した後も通信機能を使用します。
;* ご使用時は、JMP_TXおよびJMP_RX のショートピンをTinyPicBootloader+
;* の状態から差し替えないでください。
;*
;* このソースでW_TBLを定義してコンパイルするとスタンドアローンで作動する
;* プログラムを作成することができます。
;*
;* ご使用にはTREATERMやハイパーターミナルなどのターミナルソフトが必要です。
;* 通信条件: ボーレート9600、8ビット、1ストップビット、ノーパリティ
;*
;***************************************************************************************
;
; ********************************************************************
; Define General Purpose Registers (64 bytes maximum ; 40h-7Fh)
; Bank 0 Only
; RS-232C使用時 :40h-7Dh
; RS-232C未使用時 :40h-7Fh
; ********************************************************************
count equ 0x40 ;データ転送用カウンター
adr equ 0x41 ;アドレス一時保存
cn equ 0x7E ;RS-232Cワークレジスタ
rxd equ 0x7F ;RS-232C送受信データ
; ********************************************************************
; ブートローダー中の予約変数、サブルーチン領域
; ********************************************************************
bwait equ 0x01DC ;100usのウエイト(CALL文込み/W=0x09,Carry=1,Zero=1で戻る)
bwait2 equ 0x01DD ; 50usのウエイト(CALL文込み/W=0x09,Carry=1,Zero=1で戻る)
rs1rx equ 0x01F4 ;1文字受信サブルーチン
r1rx11 equ 0x01F6 ;1文字受信サブルーチン(スタートビット検出後)
rs1tx equ 0x01D0 ;1文字送信サブルーチン
CRLF equ 0x01CD ;改行コード送出
LF equ 0x01C ;改行コード送出
wr_e equ 0x01C0 ;フラッシュプログラムメモリーブロック消去(16ワード)
wr_l equ 0x01C1 ;フラッシュプログラムメモリーラッチ書き込み
wr_w equ 0x01C2 ;フラッシュプログラムメモリー書き込み
rd equ 0x01C8 ;フラッシュプログラムメモリー読み出し
; ********************************************************************
PUTC equ rs1tx ;1文字送信サブルーチン
GETC equ rs1rx ;1文字受信サブルーチン
;/////////////////////////////////////////////////////////////////
;
; プログラムコード
;
;/////////////////////////////////////////////////////////////////
#ifdef W_TBL
org 0x0000
;**************************************************************************
;
; ブートローダー本体を一緒にコンパイルする場合、
; この4行中にブートローダーへのジャンプを記述する
;
;**************************************************************************
goto TINYBLD
nop
nop
nop
org 0x019C
;**************************************************************************
;
; ブートローダー本体を一緒にコンパイルする場合、
; ユーザープログラムが存在しない場合、ブートローダーへのジャンプを記述する
; ユーザープログラムが存在する場合、ユーザープログラムへのジャンプを記述する
;
;**************************************************************************
goto INIT
nop
nop
nop
#else
org 0x0000
;**************************************************************************
;
; ブートローダー本体を一緒にコンパイルしない場合、
; 以下4行中にユーザープログラムへのジャンプを記述する
; この4行はブートローダーで書き込む際に0x019C~0x019Fに移動する
;
;**************************************************************************
goto INIT
nop
nop
nop
#endif
org 0x0004
;**********************************************************
;
; ここからユーザープログラムを記述する(0x0004~0x019B)
;
;**********************************************************
ORG 0x0010 ;
mes_b MOVLW 0x82 ;こ
CALL PUTC ;
MOVLW 0xB1 ;
CALL PUTC ;
MOVLW 0x82 ;れ
CALL PUTC ;
MOVLW 0xEA ;
CALL PUTC ;
MOVLW 0x82 ;は
CALL PUTC ;
MOVLW 0xCD ;
CALL PUTC ;
MOVLW 0x8F ;書
CALL PUTC ;
MOVLW 0x91 ;
CALL PUTC ;
MOVLW 0x82 ;き
CALL PUTC ;
MOVLW 0xAB ;
CALL PUTC ;
MOVLW 0x8A ;換
CALL PUTC ;
MOVLW 0xB7 ;
CALL PUTC ;
MOVLW 0x82 ;え
CALL PUTC ;
MOVLW 0xA6 ;
CALL PUTC ;
MOVLW 0x91 ;前
CALL PUTC ;
MOVLW 0x4F ;
CALL PUTC ;
MOVLW 0x82 ;の
CALL PUTC ;
MOVLW 0xCC ;
CALL PUTC ;
MOVLW 0x83 ;デ
CALL PUTC ;
MOVLW 0x66 ;
CALL PUTC ;
MOVLW 0x81 ;ー
CALL PUTC ;
MOVLW 0x5B ;
CALL PUTC ;
MOVLW 0x83 ;タ
CALL PUTC ;
MOVLW 0x5E ;
CALL PUTC ;
MOVLW 0x82 ;で
CALL PUTC ;
MOVLW 0xC5 ;
CALL PUTC ;
MOVLW 0x82 ;す
CALL PUTC ;
MOVLW 0xB7 ;
CALL PUTC ;
MOVLW 0x81 ;。
CALL PUTC ;
MOVLW 0x42 ;
CALL PUTC ;
CALL CRLF ;
GOTO CRLF ;
ORG 0x0050 ;
mes_a MOVLW 0x8F ;書
CALL PUTC ;
MOVLW 0x91 ;
CALL PUTC ;
MOVLW 0x82 ;き
CALL PUTC ;
MOVLW 0xAB ;
CALL PUTC ;
MOVLW 0x8A ;換
CALL PUTC ;
MOVLW 0xB7 ;
CALL PUTC ;
MOVLW 0x82 ;え
CALL PUTC ;
MOVLW 0xA6 ;
CALL PUTC ;
MOVLW 0x82 ;は
CALL PUTC ;
MOVLW 0xCD ;
CALL PUTC ;
MOVLW 0x8F ;上
CALL PUTC ;
MOVLW 0xE3 ;
CALL PUTC ;
MOVLW 0x8E ;手
CALL PUTC ;
MOVLW 0xE8 ;
CALL PUTC ;
MOVLW 0x82 ;く
CALL PUTC ;
MOVLW 0xAD ;
CALL PUTC ;
MOVLW 0x82 ;い
CALL PUTC ;
MOVLW 0xA2 ;
CALL PUTC ;
MOVLW 0x82 ;き
CALL PUTC ;
MOVLW 0xAB ;
CALL PUTC ;
MOVLW 0x82 ;ま
CALL PUTC ;
MOVLW 0xDC ;
CALL PUTC ;
MOVLW 0x82 ;し
CALL PUTC ;
MOVLW 0xB5 ;
CALL PUTC ;
MOVLW 0x82 ;た
CALL PUTC ;
MOVLW 0xBD ;
CALL PUTC ;
MOVLW 0x82 ;か
CALL PUTC ;
MOVLW 0xA9 ;
CALL PUTC ;
MOVLW 0x81 ;?
CALL PUTC ;
MOVLW 0x48 ;
CALL PUTC ;
CALL CRLF ;
GOTO CRLF ;
ORG 0x0090 ;
INIT ;初期化
; CLRF ANSELA ;デジタルポートに設定(ブートローダーで設定済み)
; BCF TRISA,TX ;TXポート設定(ブートローダーで設定済み)
CALL CRLF ;改行
CALL CRLF ;改行
MES1 ;最初に書き込まれているメッセージを出力
CALL mes_b ;
;
KEYIN ;キー入力待ち
MOVLW "H" ;H
CALL PUTC ;
MOVLW "i" ;i
CALL PUTC ;
MOVLW "t" ;t
CALL PUTC ;
MOVLW " " ;空白
CALL PUTC ;
MOVLW "A" ;A
CALL PUTC ;
MOVLW "n" ;n
CALL PUTC ;
MOVLW "y" ;y
CALL PUTC ;
MOVLW " " ;空白
CALL PUTC ;
MOVLW "K" ;K
CALL PUTC ;
MOVLW "e" ;e
CALL PUTC ;
MOVLW "y" ;y
CALL PUTC ;
MOVLW "!" ;!
CALL PUTC ;
CALL GETC ;
CALL CRLF ;
CALL CRLF ;
ERASE ;clear[0x10,0x4f]
MOVLW 0x04 ;count=4
MOVWF count ;
CLRF PMADRH ;PMADRH=0
CLRF PMADRL ;PMADRL=0
ELOOP
MOVLW 0x10 ;PMADRL=PMADRL+10
ADDWF PMADRL ;
CALL wr_e ;ページ消去
DECFSZ count,F ;count=count-1
GOTO ELOOP ;loop
COPY ;copy[0x50,0x8f] to [0x10,0x4f]
MOVLW 0x04 ;count=4
MOVWF count ;
MOVLW 0x10 ;adr=0x10
CLOOP
MOVWF adr ;read data
MOVF adr,W ;
ADDLW 0x40 ;
MOVWF PMADRL ;
CALL rd ;
MOVF adr,W ;copy data
MOVWF PMADRL ;
CALL wr_l ;
MOVLW 0x01 ;W=adr+1
ADDWF adr,W ;
SKPDC ;DC=1?
GOTO CLOOP ;loop
CALL wr_w ;write PAGE
INCF adr,W ;W=adr+1
DECFSZ count,F ;count=count-1,count=0?
GOTO CLOOP ;loop
MES2 ;書き換えられたメッセージを出力
CALL mes_b ;
GOTO $ ;停止
;///////////////////////////////////////////////////////////////////////////////
;
; ブートローダー本体
; [クロック8MHz(内部)、ボーレート9600、8ビット、1ストップビット、ノーパリティ]
;
;///////////////////////////////////////////////////////////////////////////////
;
org 0x01A0
TINYBLD
#ifdef W_TBL
DW 0x21E2,0x3CC1,0x1D03,0x29F3,0x3011,0x21D0,0x304B,0x21D0
DW 0x01FA,0x21E4,0x00A1,0x21E4,0x00A0,0x21E4,0x21E4,0x00A2
DW 0x21E4,0x00A3,0x21C1,0x3001,0x07A0,0x1C83,0x29AE,0x21E4
DW 0x1D03,0x29BE,0x03A0,0x21C0,0x21C2,0x29A6,0x304E,0x29A7
DW 0x1624,0x16A4,0x1524,0x3055,0x00A5,0x30AA,0x00A5,0x14A4
DW 0x1424,0x0000,0x0000,0x01A4,0x0008,0x300D,0x21D0,0x300A
#ifdef Direct_TX
#if (TX==0)
DW 0x00FF,0x300A,0x00FE,0x1003,0x1803,0x1005,0x1C03,0x1405
DW 0x21DC,0x0CFF,0x0BFE,0x29D4,0x21DD,0x30E8,0x3E01,0x1D03
DW 0x29DE,0x3409,0x0188,0x1006,0x3005,0x00FB,0x01FC,0x01FD
#endif
#if (TX==1)
DW 0x00FF,0x300A,0x00FE,0x1003,0x1803,0x1085,0x1C03,0x1485
DW 0x21DC,0x0CFF,0x0BFE,0x29D4,0x21DD,0x30E8,0x3E01,0x1D03
DW 0x29DE,0x3409,0x0188,0x1086,0x3005,0x00FB,0x01FC,0x01FD
#endif
#if (TX==2)
DW 0x00FF,0x300A,0x00FE,0x1003,0x1803,0x1105,0x1C03,0x1505
DW 0x21DC,0x0CFF,0x0BFE,0x29D4,0x21DD,0x30E8,0x3E01,0x1D03
DW 0x29DE,0x3409,0x0188,0x1106,0x3005,0x00FB,0x01FC,0x01FD
#endif
#else
#if (TX==0)
DW 0x00FF,0x300A,0x00FE,0x1003,0x1803,0x1405,0x1C03,0x1005
DW 0x21DC,0x0CFF,0x0BFE,0x29D4,0x21DD,0x30E8,0x3E01,0x1D03
DW 0x29DE,0x3409,0x0188,0x1006,0x3005,0x00FB,0x01FC,0x01FD
#endif
#if (TX==1)
DW 0x00FF,0x300A,0x00FE,0x1003,0x1803,0x1485,0x1C03,0x1085
DW 0x21DC,0x0CFF,0x0BFE,0x29D4,0x21DD,0x30E8,0x3E01,0x1D03
DW 0x29DE,0x3409,0x0188,0x1086,0x3005,0x00FB,0x01FC,0x01FD
#endif
#if (TX==2)
DW 0x00FF,0x300A,0x00FE,0x1003,0x1803,0x1505,0x1C03,0x1105
DW 0x21DC,0x0CFF,0x0BFE,0x29D4,0x21DD,0x30E8,0x3E01,0x1D03
DW 0x29DE,0x3409,0x0188,0x1106,0x3005,0x00FB,0x01FC,0x01FD
#endif
#endif
#ifdef Direct_RX
#if (RX==0)
DW 0x1C05,0x29ED,0x21F6,0x07FA,0x0008,0x0BFD,0x29E8,0x0BFC
DW 0x29E7,0x0BFB,0x29E6,0x299C,0x1C05,0x29F4,0x21DD,0x00FE
DW 0x0CFF,0x21DC,0x1805,0x1003,0x0BFE,0x29F8,0x087F,0x0008
#endif
#if (RX==1)
DW 0x1C85,0x29ED,0x21F6,0x07FA,0x0008,0x0BFD,0x29E8,0x0BFC
DW 0x29E7,0x0BFB,0x29E6,0x299C,0x1C85,0x29F4,0x21DD,0x00FE
DW 0x0CFF,0x21DC,0x1885,0x1003,0x0BFE,0x29F8,0x087F,0x0008
#endif
#if (RX==2)
DW 0x1D05,0x29ED,0x21F6,0x07FA,0x0008,0x0BFD,0x29E8,0x0BFC
DW 0x29E7,0x0BFB,0x29E6,0x299C,0x1D05,0x29F4,0x21DD,0x00FE
DW 0x0CFF,0x21DC,0x1905,0x1003,0x0BFE,0x29F8,0x087F,0x0008
#endif
#if (RX==3)
DW 0x1D85,0x29ED,0x21F6,0x07FA,0x0008,0x0BFD,0x29E8,0x0BFC
DW 0x29E7,0x0BFB,0x29E6,0x299C,0x1D85,0x29F4,0x21DD,0x00FE
DW 0x0CFF,0x21DC,0x1985,0x1003,0x0BFE,0x29F8,0x087F,0x0008
#endif
#else
#if (RX==0)
DW 0x1805,0x29ED,0x21F6,0x07FA,0x0008,0x0BFD,0x29E8,0x0BFC
DW 0x29E7,0x0BFB,0x29E6,0x299C,0x1805,0x29F4,0x21DD,0x00FE
DW 0x0CFF,0x21DC,0x1C05,0x1003,0x0BFE,0x29F8,0x087F,0x0008
#endif
#if (RX==1)
DW 0x1885,0x29ED,0x21F6,0x07FA,0x0008,0x0BFD,0x29E8,0x0BFC
DW 0x29E7,0x0BFB,0x29E6,0x299C,0x1885,0x29F4,0x21DD,0x00FE
DW 0x0CFF,0x21DC,0x1C85,0x1003,0x0BFE,0x29F8,0x087F,0x0008
#endif
#if (RX==2)
DW 0x1905,0x29ED,0x21F6,0x07FA,0x0008,0x0BFD,0x29E8,0x0BFC
DW 0x29E7,0x0BFB,0x29E6,0x299C,0x1905,0x29F4,0x21DD,0x00FE
DW 0x0CFF,0x21DC,0x1D05,0x1003,0x0BFE,0x29F8,0x087F,0x0008
#endif
#if (RX==3)
DW 0x1985,0x29ED,0x21F6,0x07FA,0x0008,0x0BFD,0x29E8,0x0BFC
DW 0x29E7,0x0BFB,0x29E6,0x299C,0x1985,0x29F4,0x21DD,0x00FE
DW 0x0CFF,0x21DC,0x1D85,0x1003,0x0BFE,0x29F8,0x087F,0x0008
#endif
#endif
#endif
;
END
<HEXファイル>
:020000040000FA
:08000000902800000000000040
:100020008230D021B130D0218230D021EA30D021AD
:100030008230D021CD30D0218F30D0219130D021CD
:100040008230D021AB30D0218A30D021B730D021BE
:100050008230D021A630D0219130D0214F30D02114
:100060008230D021CC30D0218330D0216630D021D5
:100070008130D0215B30D0218330D0215E30D0213F
:100080008230D021C530D0218230D021B730D0216C
:0C0090008130D0214230D021CD21CD297B
:1000A0008F30D0219130D0218230D021AB30D0217F
:1000B0008A30D021B730D0218230D021A630D02153
:1000C0008230D021CD30D0218F30D021E330D021EB
:1000D0008E30D021E830D0218230D021AD30D021F7
:1000E0008230D021A230D0218230D021AB30D0213B
:1000F0008230D021DC30D0218230D021B530D021E7
:100100008230D021BD30D0218230D021A930D02101
:0C0110008130D0214830D021CD21CD29F4
:10012000CD21CD2110204830D0216930D02174302C
:10013000D0212030D0214130D0216E30D0217930F3
:10014000D0212030D0214B30D0216530D0217930E2
:10015000D0212130D021F421CD21CD210430C00087
:10016000A101A0011030A007C021C00BB2280430AB
:10017000C0001030C1004108403EA000C821410825
:10018000A000C12101304107831CBA28C221410AC5
:08019000C00BBA281020CB2897
:00000001FF
PIC10F322のフラッシュ書き込みには、ページ書き込み用のラッチが使えます。
ラッチ書き込みに対応するように前回のコードを再検討しました。
以下のコードでラッチ書き込みにも対応します。プログラムコードは1ワード増加します。
wr_e: ;フラッシュメモリーのバルク消去
bsf PMCON1,FREE
wr_l: ;データラッチへの書き込み
bsf PMCON1,LWLO
wr_w: ;フラッシュメモリーの書き込み
bsf PMCON1,WREN
movlw 0x55
movwf PMCON2
movlw 0xaa
movwf PMCON2
bsf PMCON1,WR
rd: ;フラッシュメモリーの読み出し
bsf PMCON1,RD
nop
nop
clrf PMCON1
return
上記サブルーチンを使用する前提条件として、PMCON1のbit6~bit0が事前にクリアされている必要がありますが、リセットでPMCON1のbit6~bit0がクリアされるのと、このサブルーチンを使用すると読み出し・書き込み・消去に関わらずPMCON1が必ずクリアされますので、PMCON1を意図的に書き換えない限り問題なく使用可能です。
このルーチンを使用したフラッシュプログラムメモリのデモプログラム
アドレス0x0050~0x008Fのデータをアドレス0x0010~0x004Fに書き換える
◎起動1回目

◎起動2回目

<ソースコード>
LIST P=PIC10F322
#INCLUDE <P10F322.inc>
#ifdef W_TBL
__CONFIG _FOSC_INTOSC & _BOREN_OFF & _WDTE_OFF & _PWRTE_ON & _MCLRE_OFF & _CP_OFF & _LVP_OFF & _LPBOR_OFF & _BORV_HI & _WRT_OFF
#endif
; #DEFINE W_TBL ;ブートローダー本体を一緒にコンパイルする
; 注意)W_TBLを定義すると、TinyPicBootloader+ では書き込めません
#DEFINE TX 2 ;RS-232C データ出力用ビット
#DEFINE RX 3 ;RS-232C データ入力用ビット
#DEFINE Direct_RX ;RS-232C直結方式、コメントアウトで反転方式
#DEFINE Direct_TX ;RS-232C直結方式、コメントアウトで反転方式
;
;***************************************************************************************
;*
;* 注意(重要)
;*
;* 本デモプログラムではPIC10F322のフラッシュメモリーの書き換えを行いますが、
;* TinyPicBootloader+でプログラム転送した後も通信機能を使用します。
;* ご使用時は、JMP_TXおよびJMP_RX のショートピンをTinyPicBootloader+
;* の状態から差し替えないでください。
;*
;* このソースでW_TBLを定義してコンパイルするとスタンドアローンで作動する
;* プログラムを作成することができます。
;*
;* ご使用にはTREATERMやハイパーターミナルなどのターミナルソフトが必要です。
;* 通信条件: ボーレート9600、8ビット、1ストップビット、ノーパリティ
;*
;***************************************************************************************
;
; ********************************************************************
; Define General Purpose Registers (64 bytes maximum ; 40h-7Fh)
; Bank 0 Only
; RS-232C使用時 :40h-7Dh
; RS-232C未使用時 :40h-7Fh
; ********************************************************************
count equ 0x40 ;データ転送用カウンター
adr equ 0x41 ;アドレス一時保存
cn equ 0x7E ;RS-232Cワークレジスタ
rxd equ 0x7F ;RS-232C送受信データ
; ********************************************************************
; ブートローダー中の予約変数、サブルーチン領域
; ********************************************************************
bwait equ 0x01DC ;100usのウエイト(CALL文込み/W=0x09,Carry=1,Zero=1で戻る)
bwait2 equ 0x01DD ; 50usのウエイト(CALL文込み/W=0x09,Carry=1,Zero=1で戻る)
rs1rx equ 0x01F4 ;1文字受信サブルーチン
r1rx11 equ 0x01F6 ;1文字受信サブルーチン(スタートビット検出後)
rs1tx equ 0x01D0 ;1文字送信サブルーチン
CRLF equ 0x01CD ;改行コード送出
LF equ 0x01C ;改行コード送出
wr_e equ 0x01C0 ;フラッシュプログラムメモリーブロック消去(16ワード)
wr_l equ 0x01C1 ;フラッシュプログラムメモリーラッチ書き込み
wr_w equ 0x01C2 ;フラッシュプログラムメモリー書き込み
rd equ 0x01C8 ;フラッシュプログラムメモリー読み出し
; ********************************************************************
PUTC equ rs1tx ;1文字送信サブルーチン
GETC equ rs1rx ;1文字受信サブルーチン
;/////////////////////////////////////////////////////////////////
;
; プログラムコード
;
;/////////////////////////////////////////////////////////////////
#ifdef W_TBL
org 0x0000
;**************************************************************************
;
; ブートローダー本体を一緒にコンパイルする場合、
; この4行中にブートローダーへのジャンプを記述する
;
;**************************************************************************
goto TINYBLD
nop
nop
nop
org 0x019C
;**************************************************************************
;
; ブートローダー本体を一緒にコンパイルする場合、
; ユーザープログラムが存在しない場合、ブートローダーへのジャンプを記述する
; ユーザープログラムが存在する場合、ユーザープログラムへのジャンプを記述する
;
;**************************************************************************
goto INIT
nop
nop
nop
#else
org 0x0000
;**************************************************************************
;
; ブートローダー本体を一緒にコンパイルしない場合、
; 以下4行中にユーザープログラムへのジャンプを記述する
; この4行はブートローダーで書き込む際に0x019C~0x019Fに移動する
;
;**************************************************************************
goto INIT
nop
nop
nop
#endif
org 0x0004
;**********************************************************
;
; ここからユーザープログラムを記述する(0x0004~0x019B)
;
;**********************************************************
ORG 0x0010 ;
mes_b MOVLW 0x82 ;こ
CALL PUTC ;
MOVLW 0xB1 ;
CALL PUTC ;
MOVLW 0x82 ;れ
CALL PUTC ;
MOVLW 0xEA ;
CALL PUTC ;
MOVLW 0x82 ;は
CALL PUTC ;
MOVLW 0xCD ;
CALL PUTC ;
MOVLW 0x8F ;書
CALL PUTC ;
MOVLW 0x91 ;
CALL PUTC ;
MOVLW 0x82 ;き
CALL PUTC ;
MOVLW 0xAB ;
CALL PUTC ;
MOVLW 0x8A ;換
CALL PUTC ;
MOVLW 0xB7 ;
CALL PUTC ;
MOVLW 0x82 ;え
CALL PUTC ;
MOVLW 0xA6 ;
CALL PUTC ;
MOVLW 0x91 ;前
CALL PUTC ;
MOVLW 0x4F ;
CALL PUTC ;
MOVLW 0x82 ;の
CALL PUTC ;
MOVLW 0xCC ;
CALL PUTC ;
MOVLW 0x83 ;デ
CALL PUTC ;
MOVLW 0x66 ;
CALL PUTC ;
MOVLW 0x81 ;ー
CALL PUTC ;
MOVLW 0x5B ;
CALL PUTC ;
MOVLW 0x83 ;タ
CALL PUTC ;
MOVLW 0x5E ;
CALL PUTC ;
MOVLW 0x82 ;で
CALL PUTC ;
MOVLW 0xC5 ;
CALL PUTC ;
MOVLW 0x82 ;す
CALL PUTC ;
MOVLW 0xB7 ;
CALL PUTC ;
MOVLW 0x81 ;。
CALL PUTC ;
MOVLW 0x42 ;
CALL PUTC ;
CALL CRLF ;
GOTO CRLF ;
ORG 0x0050 ;
mes_a MOVLW 0x8F ;書
CALL PUTC ;
MOVLW 0x91 ;
CALL PUTC ;
MOVLW 0x82 ;き
CALL PUTC ;
MOVLW 0xAB ;
CALL PUTC ;
MOVLW 0x8A ;換
CALL PUTC ;
MOVLW 0xB7 ;
CALL PUTC ;
MOVLW 0x82 ;え
CALL PUTC ;
MOVLW 0xA6 ;
CALL PUTC ;
MOVLW 0x82 ;は
CALL PUTC ;
MOVLW 0xCD ;
CALL PUTC ;
MOVLW 0x8F ;上
CALL PUTC ;
MOVLW 0xE3 ;
CALL PUTC ;
MOVLW 0x8E ;手
CALL PUTC ;
MOVLW 0xE8 ;
CALL PUTC ;
MOVLW 0x82 ;く
CALL PUTC ;
MOVLW 0xAD ;
CALL PUTC ;
MOVLW 0x82 ;い
CALL PUTC ;
MOVLW 0xA2 ;
CALL PUTC ;
MOVLW 0x82 ;き
CALL PUTC ;
MOVLW 0xAB ;
CALL PUTC ;
MOVLW 0x82 ;ま
CALL PUTC ;
MOVLW 0xDC ;
CALL PUTC ;
MOVLW 0x82 ;し
CALL PUTC ;
MOVLW 0xB5 ;
CALL PUTC ;
MOVLW 0x82 ;た
CALL PUTC ;
MOVLW 0xBD ;
CALL PUTC ;
MOVLW 0x82 ;か
CALL PUTC ;
MOVLW 0xA9 ;
CALL PUTC ;
MOVLW 0x81 ;?
CALL PUTC ;
MOVLW 0x48 ;
CALL PUTC ;
CALL CRLF ;
GOTO CRLF ;
ORG 0x0090 ;
INIT ;初期化
; CLRF ANSELA ;デジタルポートに設定(ブートローダーで設定済み)
; BCF TRISA,TX ;TXポート設定(ブートローダーで設定済み)
CALL CRLF ;改行
CALL CRLF ;改行
MES1 ;最初に書き込まれているメッセージを出力
CALL mes_b ;
;
KEYIN ;キー入力待ち
MOVLW "H" ;H
CALL PUTC ;
MOVLW "i" ;i
CALL PUTC ;
MOVLW "t" ;t
CALL PUTC ;
MOVLW " " ;空白
CALL PUTC ;
MOVLW "A" ;A
CALL PUTC ;
MOVLW "n" ;n
CALL PUTC ;
MOVLW "y" ;y
CALL PUTC ;
MOVLW " " ;空白
CALL PUTC ;
MOVLW "K" ;K
CALL PUTC ;
MOVLW "e" ;e
CALL PUTC ;
MOVLW "y" ;y
CALL PUTC ;
MOVLW "!" ;!
CALL PUTC ;
CALL GETC ;
CALL CRLF ;
CALL CRLF ;
ERASE ;clear[0x10,0x4f]
MOVLW 0x04 ;count=4
MOVWF count ;
CLRF PMADRH ;PMADRH=0
CLRF PMADRL ;PMADRL=0
ELOOP
MOVLW 0x10 ;PMADRL=PMADRL+10
ADDWF PMADRL ;
CALL wr_e ;ページ消去
DECFSZ count,F ;count=count-1
GOTO ELOOP ;loop
COPY ;copy[0x50,0x8f] to [0x10,0x4f]
MOVLW 0x04 ;count=4
MOVWF count ;
MOVLW 0x10 ;adr=0x10
CLOOP
MOVWF adr ;read data
MOVF adr,W ;
ADDLW 0x40 ;
MOVWF PMADRL ;
CALL rd ;
MOVF adr,W ;copy data
MOVWF PMADRL ;
CALL wr_l ;
MOVLW 0x01 ;W=adr+1
ADDWF adr,W ;
SKPDC ;DC=1?
GOTO CLOOP ;loop
CALL wr_w ;write PAGE
INCF adr,W ;W=adr+1
DECFSZ count,F ;count=count-1,count=0?
GOTO CLOOP ;loop
MES2 ;書き換えられたメッセージを出力
CALL mes_b ;
GOTO $ ;停止
;///////////////////////////////////////////////////////////////////////////////
;
; ブートローダー本体
; [クロック8MHz(内部)、ボーレート9600、8ビット、1ストップビット、ノーパリティ]
;
;///////////////////////////////////////////////////////////////////////////////
;
org 0x01A0
TINYBLD
#ifdef W_TBL
DW 0x21E2,0x3CC1,0x1D03,0x29F3,0x3011,0x21D0,0x304B,0x21D0
DW 0x01FA,0x21E4,0x00A1,0x21E4,0x00A0,0x21E4,0x21E4,0x00A2
DW 0x21E4,0x00A3,0x21C1,0x3001,0x07A0,0x1C83,0x29AE,0x21E4
DW 0x1D03,0x29BE,0x03A0,0x21C0,0x21C2,0x29A6,0x304E,0x29A7
DW 0x1624,0x16A4,0x1524,0x3055,0x00A5,0x30AA,0x00A5,0x14A4
DW 0x1424,0x0000,0x0000,0x01A4,0x0008,0x300D,0x21D0,0x300A
#ifdef Direct_TX
#if (TX==0)
DW 0x00FF,0x300A,0x00FE,0x1003,0x1803,0x1005,0x1C03,0x1405
DW 0x21DC,0x0CFF,0x0BFE,0x29D4,0x21DD,0x30E8,0x3E01,0x1D03
DW 0x29DE,0x3409,0x0188,0x1006,0x3005,0x00FB,0x01FC,0x01FD
#endif
#if (TX==1)
DW 0x00FF,0x300A,0x00FE,0x1003,0x1803,0x1085,0x1C03,0x1485
DW 0x21DC,0x0CFF,0x0BFE,0x29D4,0x21DD,0x30E8,0x3E01,0x1D03
DW 0x29DE,0x3409,0x0188,0x1086,0x3005,0x00FB,0x01FC,0x01FD
#endif
#if (TX==2)
DW 0x00FF,0x300A,0x00FE,0x1003,0x1803,0x1105,0x1C03,0x1505
DW 0x21DC,0x0CFF,0x0BFE,0x29D4,0x21DD,0x30E8,0x3E01,0x1D03
DW 0x29DE,0x3409,0x0188,0x1106,0x3005,0x00FB,0x01FC,0x01FD
#endif
#else
#if (TX==0)
DW 0x00FF,0x300A,0x00FE,0x1003,0x1803,0x1405,0x1C03,0x1005
DW 0x21DC,0x0CFF,0x0BFE,0x29D4,0x21DD,0x30E8,0x3E01,0x1D03
DW 0x29DE,0x3409,0x0188,0x1006,0x3005,0x00FB,0x01FC,0x01FD
#endif
#if (TX==1)
DW 0x00FF,0x300A,0x00FE,0x1003,0x1803,0x1485,0x1C03,0x1085
DW 0x21DC,0x0CFF,0x0BFE,0x29D4,0x21DD,0x30E8,0x3E01,0x1D03
DW 0x29DE,0x3409,0x0188,0x1086,0x3005,0x00FB,0x01FC,0x01FD
#endif
#if (TX==2)
DW 0x00FF,0x300A,0x00FE,0x1003,0x1803,0x1505,0x1C03,0x1105
DW 0x21DC,0x0CFF,0x0BFE,0x29D4,0x21DD,0x30E8,0x3E01,0x1D03
DW 0x29DE,0x3409,0x0188,0x1106,0x3005,0x00FB,0x01FC,0x01FD
#endif
#endif
#ifdef Direct_RX
#if (RX==0)
DW 0x1C05,0x29ED,0x21F6,0x07FA,0x0008,0x0BFD,0x29E8,0x0BFC
DW 0x29E7,0x0BFB,0x29E6,0x299C,0x1C05,0x29F4,0x21DD,0x00FE
DW 0x0CFF,0x21DC,0x1805,0x1003,0x0BFE,0x29F8,0x087F,0x0008
#endif
#if (RX==1)
DW 0x1C85,0x29ED,0x21F6,0x07FA,0x0008,0x0BFD,0x29E8,0x0BFC
DW 0x29E7,0x0BFB,0x29E6,0x299C,0x1C85,0x29F4,0x21DD,0x00FE
DW 0x0CFF,0x21DC,0x1885,0x1003,0x0BFE,0x29F8,0x087F,0x0008
#endif
#if (RX==2)
DW 0x1D05,0x29ED,0x21F6,0x07FA,0x0008,0x0BFD,0x29E8,0x0BFC
DW 0x29E7,0x0BFB,0x29E6,0x299C,0x1D05,0x29F4,0x21DD,0x00FE
DW 0x0CFF,0x21DC,0x1905,0x1003,0x0BFE,0x29F8,0x087F,0x0008
#endif
#if (RX==3)
DW 0x1D85,0x29ED,0x21F6,0x07FA,0x0008,0x0BFD,0x29E8,0x0BFC
DW 0x29E7,0x0BFB,0x29E6,0x299C,0x1D85,0x29F4,0x21DD,0x00FE
DW 0x0CFF,0x21DC,0x1985,0x1003,0x0BFE,0x29F8,0x087F,0x0008
#endif
#else
#if (RX==0)
DW 0x1805,0x29ED,0x21F6,0x07FA,0x0008,0x0BFD,0x29E8,0x0BFC
DW 0x29E7,0x0BFB,0x29E6,0x299C,0x1805,0x29F4,0x21DD,0x00FE
DW 0x0CFF,0x21DC,0x1C05,0x1003,0x0BFE,0x29F8,0x087F,0x0008
#endif
#if (RX==1)
DW 0x1885,0x29ED,0x21F6,0x07FA,0x0008,0x0BFD,0x29E8,0x0BFC
DW 0x29E7,0x0BFB,0x29E6,0x299C,0x1885,0x29F4,0x21DD,0x00FE
DW 0x0CFF,0x21DC,0x1C85,0x1003,0x0BFE,0x29F8,0x087F,0x0008
#endif
#if (RX==2)
DW 0x1905,0x29ED,0x21F6,0x07FA,0x0008,0x0BFD,0x29E8,0x0BFC
DW 0x29E7,0x0BFB,0x29E6,0x299C,0x1905,0x29F4,0x21DD,0x00FE
DW 0x0CFF,0x21DC,0x1D05,0x1003,0x0BFE,0x29F8,0x087F,0x0008
#endif
#if (RX==3)
DW 0x1985,0x29ED,0x21F6,0x07FA,0x0008,0x0BFD,0x29E8,0x0BFC
DW 0x29E7,0x0BFB,0x29E6,0x299C,0x1985,0x29F4,0x21DD,0x00FE
DW 0x0CFF,0x21DC,0x1D85,0x1003,0x0BFE,0x29F8,0x087F,0x0008
#endif
#endif
#endif
;
END
<HEXファイル>
:020000040000FA
:08000000902800000000000040
:100020008230D021B130D0218230D021EA30D021AD
:100030008230D021CD30D0218F30D0219130D021CD
:100040008230D021AB30D0218A30D021B730D021BE
:100050008230D021A630D0219130D0214F30D02114
:100060008230D021CC30D0218330D0216630D021D5
:100070008130D0215B30D0218330D0215E30D0213F
:100080008230D021C530D0218230D021B730D0216C
:0C0090008130D0214230D021CD21CD297B
:1000A0008F30D0219130D0218230D021AB30D0217F
:1000B0008A30D021B730D0218230D021A630D02153
:1000C0008230D021CD30D0218F30D021E330D021EB
:1000D0008E30D021E830D0218230D021AD30D021F7
:1000E0008230D021A230D0218230D021AB30D0213B
:1000F0008230D021DC30D0218230D021B530D021E7
:100100008230D021BD30D0218230D021A930D02101
:0C0110008130D0214830D021CD21CD29F4
:10012000CD21CD2110204830D0216930D02174302C
:10013000D0212030D0214130D0216E30D0217930F3
:10014000D0212030D0214B30D0216530D0217930E2
:10015000D0212130D021F421CD21CD210430C00087
:10016000A101A0011030A007C021C00BB2280430AB
:10017000C0001030C1004108403EA000C821410825
:10018000A000C12101304107831CBA28C221410AC5
:08019000C00BBA281020CB2897
:00000001FF
- ご質問などはこちらからどうぞ
- ページ更新情報
- 最近嬉しかったこと
- 1kワードのTINYBASIC STM32L010F4
- やってくれたな!!店長よ
- 東大版TINYBASIC (STM32)
- 1kワードのTINYBASIC STM32版 その2
- 1kワードのTINYBASIC STM32版 その1
- 1kワードのTINYBASIC その8
- 1kワードのTINYBASIC その7
- 1kワードのTINYBASIC その6
- 1kワードのTINYBASIC その5
- 1kワードのTINYBASIC その4
- 1kワードのTINYBASIC その3
- 1kワードのTINYBASIC その2
- 1kワードのTINYBASIC その1
- 電大版TINYBASIC for PIC ミニマムお試し版5
- 電大版TINYBASIC for PIC ミニマムお試し版4
- 電大版TINYBASIC for PIC ミニマムお試し版3
- 電大版TINYBASIC for PIC ミニマムお試し版2
- 電大版TINYBASIC for PIC ミニマムお試し版
- PICで電大版TINYBASIC 実装編その5
- PICで電大版TINYBASIC 実装編その4
- PICで電大版TINYBASIC 実装編その3
- PICで電大版TINYBASIC 実装編その2
- PICで電大版TINYBASIC 実装編その1
- PICで電大版TINYBASIC 準備編その2
- PICで電大版TINYBASIC 準備編その1
- PIC18F24K42をPICKIT2で焼くTIPS その2
- PIC18F24K42をPICKIT2で焼くTIPS
- PIC16F18313ブートローダー書き込み器の製作
- PIC16F18857をPICKIT2で焼くその2
- PIC16F18857をPICKIT2で焼く
- PIC16F18313をPICKIT2で焼くその2
- PIC16F18313をPICKIT2で焼く
- PIC16F5XX USBIO
- HVT-BT200の予約制御
- 再考 PIC16F57 USBIO
- PIC16F5X USBIO
- 続12 8ピンPICでUSB PIC16F18313 HID-シリアルアダプター
- ucontrol.com.arに接続できない
- 続続 LPC1114 USBブートローダー
- 続PIC10F200 電子サイコロ
- PIC10F200 電子サイコロ
- LPC1114 8ch簡易ロジックアナライザー USB版
- 続 LPC1114 USBブートローダー
- LPC1114 8ch簡易ロジックアナライザー
- LPC1114 USBブートローダー
- LPC1114でUSB
- 続LPC810でUSB
- LPC810でUSB
- USB_NCO
- USB出力の周波数カウンター
- HIDアダプターについてのまとめ その2
- HIDアダプターについてのまとめ
- 極小ブートローダー まとめ
- 極小ブートローダー ATTiny 其の2
- 極小ブートローダー PIC10F322 其の6
- 極小ブートローダー PIC10F322 其の5
- 極小ブートローダー PIC10F322 其の4
- 極小ブートローダー PIC10F322 其の3
- 極小ブートローダー ATTiny13A
- 極小ブートローダー PIC10F322 其の2
- 極小ブートローダー PIC10F322
- 続11 8ピンPICでUSB PIC16F57_USBIO (その3)
- 続10 8ピンPICでUSB PIC16F505_USBIO (その2)
- 続9 8ピンPICでUSB PIC16F57_USBIO (その2)
- 続8 8ピンPICでUSB PIC16F505_USBIO
- 続7 8ピンPICでUSB PIC16F57_USBIO
- 続6 8ピンPICでUSB PIC16F570_USBIO
- 続5 8ピンPICでUSB PIC12F615_USBIO
- 続4 8ピンPICでUSB 16FUSBの改良版
- 続続続8ピンPICでUSB -30MHz+ソフトシリアル-
- 続続8ピンPICでUSB -16FUSBを30MHzで動かす-
- 続8ピンPICでUSB -ターミナルソフトからの操作-
- 8ピンPICでUSB -16FUSBの移植-
- 番外 MSP430 タイニーブートローダー
- 番外 C8051 タイニーブートローダー
- 続続続 Tiny AVR/PIC Bootloader+
- 続続 Tiny AVR/PIC Bootloader+
- 続 Tiny AVR/PIC Bootloader+
- Tiny AVR/PIC Bootloader+
- 番外 続ATTINY13A OSCCAL の簡易校正
- 番外 ATTINY13A OSCCAL の簡易校正
- 番外 続ATTINY13A ソフトシリアル
- 番外 ATTINY13A ソフトシリアル
- 番外 続Arduinoからタイニーブートローダーを使用する
- 番外 Arduinoからタイニーブートローダーを使用する
- 番外 LPC1114FN28/102 アセンブラサンプル
- 番外 LPC810 タイニーブートローダーの自己書き換え
- 番外 LPC810 EEPROM エミュレーション
- 番外 LPC810 タイニーブートローダー
- 番外 LPC810でアセンブラ
- 続続続PIC10F322 ソフトシリアル一考察
- 続続PIC10F322 ソフトシリアル一考察
- 続PIC10F322 ソフトシリアル一考察
- PIC10F322 ソフトシリアル一考察
- 84ワードのPICブートローダー
- 続PIC10F322 Ring-DDS
- Tinybldの自己更新プログラム
- プログラム領域をROMのように使う
- PIC10F322 256ビットプログラム発振器
- PIC18F EEPROM エミュレーション Jタイプ
- PIC18F EEPROM エミュレーション
- PIC16F EEPROM エミュレーション
- PIC10F322専用 周波数カウンター
- PIC18F Jタイプ ブートローダー
- PICの制約を取り除く
- 番外 ATTINY2313A用ブートローダー
- 続番外 ATTINY13A用ブートローダー
- 番外 ATTINY13A用ブートローダー
- 続PIC10F322 フラッシュメモリの操作
- PIC10F322 フラッシュメモリの操作
- PIC10F322 PIC_WAIT
- ビット列の並び替え その2
- ビット列の並び替え その1
- 故障した温水便座を使えるようにする
- PIC10F322 RA3を出力ポートとして使用
- PIC10F322 周波数カウンタ Part2
- PIC10F322 AN592準拠 周波数カウンタ
- PIC10F322 Ring-DDS
- microchipのAN592に関する一考察
- PIC10F322 3-ch リモコンライン切り替え器
- PIC10F322 4-SW リモコン送信器
- PIC10F322 二相発振器
- PIC_DELAY
- 続PIC_WAIT
- PIC_WAIT
- ご質問などはこちらからどうぞ
- ページ更新情報
- 最近嬉しかったこと
- 1kワードのTINYBASIC STM32L010F4
- やってくれたな!!店長よ
- 東大版TINYBASIC (STM32)
- 1kワードのTINYBASIC STM32版 その2
- 1kワードのTINYBASIC STM32版 その1
- 1kワードのTINYBASIC その8
- 1kワードのTINYBASIC その7
- 1kワードのTINYBASIC その6
- 1kワードのTINYBASIC その5
- 1kワードのTINYBASIC その4
- 1kワードのTINYBASIC その3
- 1kワードのTINYBASIC その2
- 1kワードのTINYBASIC その1
- 電大版TINYBASIC for PIC ミニマムお試し版5
- 電大版TINYBASIC for PIC ミニマムお試し版4
- 電大版TINYBASIC for PIC ミニマムお試し版3
- 電大版TINYBASIC for PIC ミニマムお試し版2
- 電大版TINYBASIC for PIC ミニマムお試し版
- PICで電大版TINYBASIC 実装編その5
- PICで電大版TINYBASIC 実装編その4
- PICで電大版TINYBASIC 実装編その3
- PICで電大版TINYBASIC 実装編その2
- PICで電大版TINYBASIC 実装編その1
- PICで電大版TINYBASIC 準備編その2
- PICで電大版TINYBASIC 準備編その1
- PIC18F24K42をPICKIT2で焼くTIPS その2
- PIC18F24K42をPICKIT2で焼くTIPS
- PIC16F18313ブートローダー書き込み器の製作
- PIC16F18857をPICKIT2で焼くその2
- PIC16F18857をPICKIT2で焼く
- PIC16F18313をPICKIT2で焼くその2
- PIC16F18313をPICKIT2で焼く
- PIC16F5XX USBIO
- HVT-BT200の予約制御
- 再考 PIC16F57 USBIO
- PIC16F5X USBIO
- 続12 8ピンPICでUSB PIC16F18313 HID-シリアルアダプター
- ucontrol.com.arに接続できない
- 続続 LPC1114 USBブートローダー
- 続PIC10F200 電子サイコロ
- PIC10F200 電子サイコロ
- LPC1114 8ch簡易ロジックアナライザー USB版
- 続 LPC1114 USBブートローダー
- LPC1114 8ch簡易ロジックアナライザー
- LPC1114 USBブートローダー
- LPC1114でUSB
- 続LPC810でUSB
- LPC810でUSB
- USB_NCO
- USB出力の周波数カウンター
- HIDアダプターについてのまとめ その2
- HIDアダプターについてのまとめ
- 極小ブートローダー まとめ
- 極小ブートローダー ATTiny 其の2
- 極小ブートローダー PIC10F322 其の6
- 極小ブートローダー PIC10F322 其の5
- 極小ブートローダー PIC10F322 其の4
- 極小ブートローダー PIC10F322 其の3
- 極小ブートローダー ATTiny13A
- 極小ブートローダー PIC10F322 其の2
- 極小ブートローダー PIC10F322
- 続11 8ピンPICでUSB PIC16F57_USBIO (その3)
- 続10 8ピンPICでUSB PIC16F505_USBIO (その2)
- 続9 8ピンPICでUSB PIC16F57_USBIO (その2)
- 続8 8ピンPICでUSB PIC16F505_USBIO
- 続7 8ピンPICでUSB PIC16F57_USBIO
- 続6 8ピンPICでUSB PIC16F570_USBIO
- 続5 8ピンPICでUSB PIC12F615_USBIO
- 続4 8ピンPICでUSB 16FUSBの改良版
- 続続続8ピンPICでUSB -30MHz+ソフトシリアル-
- 続続8ピンPICでUSB -16FUSBを30MHzで動かす-
- 続8ピンPICでUSB -ターミナルソフトからの操作-
- 8ピンPICでUSB -16FUSBの移植-
- 番外 MSP430 タイニーブートローダー
- 番外 C8051 タイニーブートローダー
- 続続続 Tiny AVR/PIC Bootloader+
- 続続 Tiny AVR/PIC Bootloader+
- 続 Tiny AVR/PIC Bootloader+
- Tiny AVR/PIC Bootloader+
- 番外 続ATTINY13A OSCCAL の簡易校正
- 番外 ATTINY13A OSCCAL の簡易校正
- 番外 続ATTINY13A ソフトシリアル
- 番外 ATTINY13A ソフトシリアル
- 番外 続Arduinoからタイニーブートローダーを使用する
- 番外 Arduinoからタイニーブートローダーを使用する
- 番外 LPC1114FN28/102 アセンブラサンプル
- 番外 LPC810 タイニーブートローダーの自己書き換え
- 番外 LPC810 EEPROM エミュレーション
- 番外 LPC810 タイニーブートローダー
- 番外 LPC810でアセンブラ
- 続続続PIC10F322 ソフトシリアル一考察
- 続続PIC10F322 ソフトシリアル一考察
- 続PIC10F322 ソフトシリアル一考察
- PIC10F322 ソフトシリアル一考察
- 84ワードのPICブートローダー
- 続PIC10F322 Ring-DDS
- Tinybldの自己更新プログラム
- プログラム領域をROMのように使う
- PIC10F322 256ビットプログラム発振器
- PIC18F EEPROM エミュレーション Jタイプ
- PIC18F EEPROM エミュレーション
- PIC16F EEPROM エミュレーション
- PIC10F322専用 周波数カウンター
- PIC18F Jタイプ ブートローダー
- PICの制約を取り除く
- 番外 ATTINY2313A用ブートローダー
- 続番外 ATTINY13A用ブートローダー
- 番外 ATTINY13A用ブートローダー
- 続PIC10F322 フラッシュメモリの操作
- PIC10F322 フラッシュメモリの操作
- PIC10F322 PIC_WAIT
- ビット列の並び替え その2
- ビット列の並び替え その1
- 故障した温水便座を使えるようにする
- PIC10F322 RA3を出力ポートとして使用
- PIC10F322 周波数カウンタ Part2
- PIC10F322 AN592準拠 周波数カウンタ
- PIC10F322 Ring-DDS
- microchipのAN592に関する一考察
- PIC10F322 3-ch リモコンライン切り替え器
- PIC10F322 4-SW リモコン送信器
- PIC10F322 二相発振器
- PIC_DELAY
- 続PIC_WAIT
- PIC_WAIT