<紙>さんLOG

「パソコンヲタクの雑記帳」
 PC/Linux系/物理・化学で遊んでいます。
思いついたことを綴っています。

PIC(14)言語比較

2008年07月04日 | PIC・マイコン
                                                 日記@BlogRanking
これまでに使ってみた言語について、独断と偏見によるまとめを行います。

1.対象PIC、 2.有償/無償、 3.標準LIb、 4.寸評 でまとめる。
最後に入門用プログラム「0.5秒毎のLED点滅」ソースを示す。(順不同)

mikro BASIC
1.16F、18F 両用。
2.有償。Demo 版は 2kW まで。(18F では、3.5kB 位で引っ掛かった。)
3.標準Lib 多い。Forum にも数多くある。
4.オブジェクトサイズは大きい。特に LCD Lib。
 入門者向けには、適していると思う。16F でも 18F でも。
 サブルーチンの前方参照は不可。

Great Cow BASIC
1.16F、18F 両用。
2.フリーソフト。open source
3.標準Lib 少々あり。Forum にもある。
4.バグが多い。割込のサポートが弱い。データ型は2Bまで。
 宣言なしで変数が使えるのは、デバッグに時間が掛かる。
 熟知していれば、16F 用フリーBASIC としては良いと思う。
 18F では、使えないかも。
 サブルーチンの前方参照は可能。

Swordfish BASIC
1.18F 専用。
2.有償。SE(Special Edition) 版は、RAM 256B 以下が制限。
3.標準Lib 多い。Forum にも数多くある。
4.オブジェクトサイズは最適だと思う。
 USBは使えないが、18F 用ならほぼフリーで使える。
 サブルーチンの前方参照は不可。

SDCC
1.16F、18F 両用。(18F では、リンカでエラーとなった後使っていない)
2.フリーソフト。open source
3.標準Lib なし。ネットで探す。
4.オブジェクトサイズは特に大きい。特に BANKSEL が多すぎる。
 16F 用のC言語なら、mikroC demo 版で良いのではないか?
 (<紙>は使っていないが。)
 サブルーチンの前方参照にはプロトタイプ定義が必要。

C18
1.18F 専用。
2.有償。60 日間はフリー。以降は最適化なしになるだけ。
3.標準Lib 多い。Forum にも数多くある。
4.標準Lib は使いづらい。オブジェクトサイズは大きい。
 USBも含め、ほぼフリーで使える。さすが本家本元。
 サブルーチンの前方参照にはプロトタイプ定義が必要。

<紙>的には、
 16F --> mikro BASIC   & Great Cow BASIC
 18F --> Swordfish BASIC & C18     かな。

以下に、ソースを列挙する。
(段付けのために、先頭に2B空白がある)
(コメントの日本語がエラーに成るものがあるかもしれない)
(config 定義は正しくないかもしれない)

---------------- <mikro BASIC> ------------------------
' chip(16F877A)、clock(20MHz)、config は IDE で設定する。
program LED_Blink
main:
 TRISC.0 = 0 ' output
 PORTC.0 = 1 ' on
 while true
  PORTC.0 = 1 - PORTC.0 ' toggle
  delay_ms(500)
 wend
end.

---------------- <Great Cow BASIC> --------------------
#chip 16F877A, 20 ' MHz
#option bootloader
#config HS_OSC, WDT_OFF
Dim xx As Byte ' As Byte は省略可。この文自体が省略可。
TRISC.0 = 0 ' output
PORTC.0 = 1 ' on
do
 xx = PORTC.0 ' toggle
 PORTC.0 = 1 - xx '
 wait 50 10ms
loop

---------------- <Swordfish BASIC> --------------------
Device = 18F2550
Clock = 24 ' MHz
Config
  PLLDIV=5, CPUDIV=OSC3_PLL4, FOSC=HSPLL_HS, WDT=OFF
TRISC.0 = 0 ' output
PORTC.0 = 1 ' on
While true
 Toggle(PORTC.0) ' toggle
 DelayMS(500)
Wend

---------------- <SDCC> -------------------------------
#include <sdcc-lib.h>
#include <pic16f877a.h>
int at 0x2007 __config = _HS_OSC & _PWRTE_ON;
int ms, mcnt;
TRISC.0 = 0; // output
PORTC.0 = 1; // on
void main() {
 while (1) {
  PORTC ^= (1<<0); // toggle
  ms = 500;
  while ( ms -- )
   for ( mcnt = 0; 330 > mcnt; mcnt ++ );
 }       // 330 が正しく 1mS かどうかは怪しい
}

---------------- <C18> -----------------------------
#include <p18cxxx.h> // PIC18F2550
#pragma config PLLDIV = 5
/*
    その他 20MHz -> 24MHz
*/
#include <delays.h>
#define LED0 PORTCbits.RC0 // LED 定義
#pragma code
void main(){
 TRISCbits.TRISC0=0; // output
 LED0 = 1; // on
 while (1){
  if ( LED0 ) LED0=0; else LED0=1;
  Delay10KTCYx(150); /* Delay 250mS */
  Delay10KTCYx(150);
 }
}

お手数をおかけします。2クリック(投票を)お願いします ⇒ 日記@BlogRanking

最新の画像もっと見る

1 コメント

コメント日が  古い順  |   新しい順
Swordfish Compilerを使っています (senshu)
2008-07-12 08:13:34
日本のサイトで私以外でSwordfish Compilerを紹介しているページを
見たのは初めてのような気がします。

↑のURLでいくつか使用例を書いています。

Swordfish Compilerは傑作だと思います。

時間があればご覧下さい。
返信する

コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。