これまでに使ってみた言語について、独断と偏見によるまとめを行います。
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クリック(投票を)お願いします ⇒
見たのは初めてのような気がします。
↑のURLでいくつか使用例を書いています。
Swordfish Compilerは傑作だと思います。
時間があればご覧下さい。