2010年11月19日金曜日

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


  1. /* 
  2. 概要:ブートローダーを使ったプログラムで書き込むためのプログラム 
  3. マイコン:PIC18F2550 
  4.  
  5. ファイル名:LED001.c 
  6.  
  7. RC0:LED 
  8. */  
  9. #include <p18f2550.h>  
  10. #include <delays.h>  
  11.   
  12. // リセットベクタ    
  13. #pragma code reset_vector=0x1000  
  14.   
  15. extern void _startup(void);  
  16. void remapped_reset(void) { _asm goto _startup _endasm}  
  17.   
  18. #pragma code  
  19.   
  20. void main(void) {  
  21.   TRISCbits.TRISC0=0;   // RC0 is output (LED)  
  22.     
  23.   while(1) {  
  24.     PORTCbits.RC0=1;   // RC0=ON   
  25.     Delay10KTCYx(250);  
  26.     PORTCbits.RC0=0;   // RC0=ON   
  27.     Delay10KTCYx(250);   
  28.   }  
  29. }  

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に記述しておく必要があります。

  1. // リセットベクタ  
  2. #pragma code 0x1000  
  3.   
  4. // エントリポイント  
  5. void main() {  
  6.  // 任意の処理  
  7. }  
  8.   
  9. // 高優先割り込みベクタ  
  10. #pragma code ih_vect = 0x1008  
  11. void ih_vect_method() {  
  12.  _asm  
  13.   GOTO ISR_HIGH  
  14.  _endasm  
  15. }  
  16.   
  17. // 低優先割り込みベクタ  
  18. #pragma code il_vect = 0x1018  
  19. void il_vect_method() {  
  20.  _asm  
  21.   GOTO ISR_LOW  
  22.  _endasm  
  23. }  
  24.   
  25. #pragma code  
  26. #pragma interrupt ISR_HIGH  
  27. #pragma interruptlow ISR_LOW save = WREG,BSR,STATUS  

0 件のコメント:

コメントを投稿