2010年11月19日金曜日

ブートローダーで書き込むプログラムの作成-PIC18F2550


/*
概要:ブートローダーを使ったプログラムで書き込むためのプログラム
マイコン:PIC18F2550

ファイル名:LED001.c

RC0:LED
*/
#include <p18f2550.h>
#include <delays.h>

// リセットベクタ  
#pragma code reset_vector=0x1000

extern void _startup(void);
void remapped_reset(void) { _asm goto _startup _endasm}

#pragma code

void main(void) {
  TRISCbits.TRISC0=0;   // RC0 is output (LED)
  
  while(1) {
    PORTCbits.RC0=1;   // RC0=ON 
    Delay10KTCYx(250);
    PORTCbits.RC0=0;   // RC0=ON 
    Delay10KTCYx(250); 
  }
}

LED001.c ファイルの他にrm18f2550 - HID Bootload.lkr ファイルを用意する必要があります。
rm18f2550 - HID Bootload.lkr ファイルはrm18f4550 - HID Bootload.lkr のコードを修正して、
ファイル名を変更したものです。
変更箇所は一か所です。
FILES p18f4550.lib

FILES p18f2550.lib

PIC18F2550-LED.zip
ダウンロード

コンフィギュレーションは ブートローダが制御しているのでプログラムで指定する事はできませんん。
作成するプログラムは0x1000から記述する必要があります。

割り込み制御について、PICは割り込みが発生すると0x0008または0x0018にある割り込みベクタへプログラムカウンタを移動させます。
この領域はブートローダが制御する領域なので、この領域を使用したプログラムを作成することはできません。
割り込みが発生すると、ブートローダは0x1008または0x1018にジャンプする命令を実行します。
作成するプログラムでは、割り込みの制御を0x1008と0x1018に記述しておく必要があります。

// リセットベクタ
#pragma code 0x1000

// エントリポイント
void main() {
 // 任意の処理
}

// 高優先割り込みベクタ
#pragma code ih_vect = 0x1008
void ih_vect_method() {
 _asm
  GOTO ISR_HIGH
 _endasm
}

// 低優先割り込みベクタ
#pragma code il_vect = 0x1018
void il_vect_method() {
 _asm
  GOTO ISR_LOW
 _endasm
}

#pragma code
#pragma interrupt ISR_HIGH
#pragma interruptlow ISR_LOW save = WREG,BSR,STATUS

0 件のコメント:

コメントを投稿