2012-10-07

メモリー制限のないHI-TECH C で12F629を使う

いままでPICはmikroBASICを使っていましたが、ちょっと凝ったプログラムを組むと2kの壁にぶつかり思うようにできていませんでした。
そこで、無償のMAPLABで使える無償でメモリー制限の無いHI-TECH C とC18を使ってみるもとにしました。

CONFIGとか初期設定がPIC毎に重要になってくるので、覚書としてブログに投稿しています。

まずは手持ちのPICを 12F629を試してみることにしました。
Googleで検索して調べながらしましたが、どうもHI-TECH CのバージョンによりCONFIGビットの書き方が違うようでかなり悩みました。検索すると古いバージョンのサンプルが多いようです。

__CONFIG(UNPROTECT & MCLRDIS & BORDIS & PWRTEN & WDTDIS & INTIO) ;
このパターンは古いバージョンとなり、ソースの先頭に
#define _LEGACY_HEADERS
が必要になります、このおまじないをつければ、古いバージョンのソースが使えます。

ここでつかったサンプルソースは新しいバージョンのCONFIGです。
#define _LEGACY_HEADERSは必要ないのでコメントにしています。

ソースは以下の通りです。

 
// test001.c
//#define _LEGACY_HEADERS
 
#include "pic.h"
#include  // Required to interface with delay routines
 
#ifndef _XTAL_FREQ  
// Unless already defined assume 4MHz system frequency  
// This definition is required to calibrate __delay_us() and __delay_ms()  
#define _XTAL_FREQ 4000000
#endif


 
__CONFIG(CP_OFF & BOREN_OFF & MCLRE_OFF & PWRTE_OFF & WDTE_OFF & FOSC_INTRCIO); //Idoling current 0.06uA
 
void main(void){
  int i;
 
  GPIO=0;
  CMCON = 0b00000111;
  TRISIO = 0b00000000;
  //ANSEL = 0x00;  

  while(1){
    for (i=0;i<5 p="p">      GPIO=0b00111111;
      __delay_ms(30);
      GPIO=0b00000000;
      __delay_ms(70);
    }
     __delay_ms(50);
 
    for (i=0;i<2 nbsp="nbsp" p="p">      GPIO=0b00111111;
      __delay_ms(30);
      GPIO=0b00000000;
      __delay_ms(170);
    }
  __delay_ms(500);
 }

}