フリーのCコンパイラで16F88を動かそう
http://www.welcome.mech.nagasaki-u.ac.jp/gs400e/pic_sdcc/sdcc_start.htm
のページを参考にして、SDCCのコンパイル環境を作ってみました。
//PICの定義ファイルをインクルード
#include <pic/pic16f88.h>
//PICの書き込み設定
int at 0x2007 __config = _WDT_OFF & _PWRTE_OFF & _CP_OFF & _LVP_OFF & _BODEN_OFF;
void main(void)
{
long i;
OSCCON = 0x70; //PIC16F88を8MHzの内部クロックで動作させる。
TRISA = 0xfe; //AポートのRA0のみ出力、他を入力に設定
while( 1 ) //無限ループ
{
for( i = 0 ; i < 55555 ; i ++ ); //約0.5秒待つ
PORTA = 1; //RA0をHighで出力
for( i = 0 ; i < 55555 ; i ++ ); //約0.5秒待つ
PORTA = 0; //RA0をLowで出力
}
}
こんな感じです。16F88のソースです。

うまくコンパイルでき、hexファイルも出来上がっています。
そこで、ノンノさんに教わったHPから以下のようなソースをゲットして
コンパイルすると、
#define __16f628a
#include "pic/pic16f628a.h"
#include "tsmtypes.h"
// Set the __CONFIG word:
// I usually set it to _EXTCLK_OSC&_WDT_OFF&_LVP_OFF&_DATA_CP_OFF&_PWRTE_ON
Uint16 at 0x2007
__CONFIG = _WDT_OFF & _LVP_OFF & _DATA_CP_OFF & _PWRTE_ON;
static unsigned char count;
static void main(void)
{
#ifdef __16f628a // Only compile this section for PIC16f628a
CMCON = 0x07; /*
* Disable comparators. NEEDED FOR NORMAL PORTA
* BEHAVIOR ON PIC16f628a!
*/
#endif
TRISB = 0x00; // Set port B as all outputs
TRISA = 0x00; // Set port A as all outputs
count = 0x00; // Start counting at 0
while(1) // Infinite loop
{
PORTA = count; // Display count on PORTA
PORTB = count; // Display count on PORTB
count ++; // Increment count
}
}

まず、_EXTCLK_OSC がエラーになったので、さしあたりConfigから削除してみました。
コンパイルで、エラーが出ています。hexファイルは出来ていません。
idata.o が必要なのでしょうか?なに?えっ?
|