何度も体当たりしてギブアップしました。

いろいろコンパイラを吟味しましたが、ちゃんとお金を払って使う、格安のコンパイラを見つけました。
ソースブーストのピカントC 6.0日本語版コンパイラです。千石電商の2階に売っています。2Kライセンスで1,200円、ドキュメントが1,050円です。サンプルソースもいろいろあり、なんといってもデバイスの制限がありません。2K以上使いたい方は4Kライセンス3,800円もあります。制限なしが9,800円です。1,200円なら失敗しても後悔しないかも。

  
ソースブーストCコンパイラで 16F648A のLCDに挑戦。
紆余曲折がありましたが、まずは、サンプルプログラムをそのまま使ってみましょう。
サンプルソースは、普通にインストールした場合下記のフォルダにあります。
C:\Program Files\SourceBoost\plugin_examples\lcd
lcd4bit.c
これって、16F84Aのサンプルのようです。しかも素でビルドすると、シミュレータで動作させるもののようです。
というわけで、37行目あたりを
// comment out when running on actual hardware - different delays used
//#define RUN_UNDER_SIM
本物のH/Wで動かすには、#define RUN_UNDER_SIMをコメントにしてください。

あと、main()の中ですが、114行あたりに
#ifdef RUN_UNDER_SIM
#else
delay_s( 1 ); // power up delay
#endif
cmcon=0x07;
I/Oポートをデジタルの設定にします。
この状態でターゲットデバイスを16F648Aにしてビルドします。
あとは秋月ライターで書き込みますが、こんな感じの設定です。
     
これで、めでたく16F648AでLCDが動作します。このプログラムはテストプロなので、
数秒間隔で、すべての機能を実行してくれます。
さて、オリジナルのプログラムに挑戦です。
lcd_driver.h をインクルードするらしいです。(なに気、どこに書いてあるかわかりませんが)
それと、利用するポートの設定が必要です。
4ビットモードで使うとして、PB4は、DATA BIT4でPB5がBIT5、6,7にします。
問題のRSやR/W、Eは、PORT1、2、0にします。
定義の記述は下記の通り
後は、オリジナルプログラムです。(漢字のスペースが入ってますのでご注意を)
下記のコメントには16F628がターゲットとなっていますが、648で動作させています。
#include <system.h>
#define LCD_ARGS 2, /* Interface type: mode 0 = 8bit, 1 = 4bit(low nibble), 2 = 4bit(upper nibble) */ \
         1, /* Use busy signal: 1 = use busy, 0 = use time delays */\
   PORTB, TRISB, /* Data port and data port tris register */ \
   PORTA, TRISA, /* Control port and control port tris register */ \
         1, /* Bit number of control port is connected to RS */ \
         2, /* Bit number of control port is connected to RW */ \
         0 /* Bit number of control port is connected to Enable */

#include <lcd_driver.h> // include the LCD template code//Target PIC16F628 configuration word
#pragma DATA _CONFIG, _PWRTE_OFF & _WDT_OFF & _HS_OSC & _CP_OFF

//Set clock frequency
#pragma CLOCK_FREQ 20000000

void main( void )
{
   //Configure port A
   trisa = 0x00;
   //Configure port B
   trisb = 0x00;

   //Initialize port A
   porta = 0x00;
   //Initialize port B
   portb = 0x00;

   cmcon = 7; //disable comparators 16F84 では不要

   lcd_setup();

   lprintf( "Kitaura Jiro" );


//Endless loop
   while( 1 );
}

プログラムとは呼べないようなクソソースですが、ソースブーストのコンパイラを買ったのが先週の日曜です。
試行錯誤の連続でした。これに、入力のスイッチを一個つけてみたいです。
ということで、また、数時間たちました。かなり切れそうになりましたがっ!

PA3にスイッチをつけ、PB0にLEDを付けました。
#include <system.h>
#define LCD_ARGS 2, /* Interface type: mode 0 = 8bit, 1 = 4bit(low nibble), 2 = 4bit(upper nibble) */ \
        1, /* Use busy signal: 1 = use busy, 0 = use time delays */\
   PORTB, TRISB, /* Data port and data port tris register */ \
   PORTA, TRISA, /* Control port and control port tris register */ \
        1, /* Bit number of control port is connected to RS */ \
        2, /* Bit number of control port is connected to RW */ \
        0 /* Bit number of control port is connected to Enable */

#include <lcd_driver.h> // include the LCD template code//Target PIC16F628 configuration word
#pragma DATA _CONFIG, _PWRTE_OFF & _WDT_OFF & _HS_OSC & _CP_OFF

//Set clock frequency
#pragma CLOCK_FREQ 20000000

void main( void )
{
   //Configure port A PA3:input
   trisa = 0x08;
   //Configure port B
   trisb = 0x00;

   //Initialize port A
   porta = 0x00;
   //Initialize port B
   portb = 0x00;

   cmcon = 7; //disable comparators

   lcd_setup();

   lprintf( "Kitaura Jiro" );


   //Endless loop
   while( 1 )
   {
      portb.0=porta.3;
   }
}
う〜ん。どうにか、考えていることが、出来始めました。すごい!(なさけないかも)