[SPIの実験2]でのプログラムが上手く動作しない

〔ブラウザーの戻るを使用して戻って下さい〕


《質問》

SPIのマスターからスレーブへ1秒毎でデータ0x30〜0x7aまでを送信しているが、
受信したデータは0x30のままで変化しない。
for のループは回っている様である。
---------------------------------------------------------------------
     while(1) {
          // LCDに表示しやすい用にキャラクター文字を送っています。
          for (i = 0x30 ; i < 0x7b ; i++) {
	          SSP1BUF = (char)i ;
               __delay_ms(1000) ;  // 1秒毎に送る
          }
     }
---------------------------------------------------------------------
[SPIの実験2]の記事はこちら

《解析》

質問者の実験構成
MAPLB IDE 8.83
HI-TECH C Lite mode(Lite Mode) V9.83
PIC:マスター、スレーブ共に16F1823
プログラマー不明

解析の実験構成
(質問者の作成されたプログラムを送ってもらい解析しました)
MAPLB IDE 8.63
HI-TECH C Lite mode(Lite Mode) V9.80
PIC:マスターに12F1822、スレーブに16F1827
PICkit3にて書き込み

実験1回目
正常に動作

実験2回目
MAPLB IDE 8.83
HI-TECH C Lite mode(Lite Mode) V9.83
をダウンロードして別のマシーンで書き込み実験したら0x30のまま変化しない。
コンパイラーを疑う

実験3回目
MAPLB IDE 8.63
HI-TECH C Lite mode(Lite Mode) V9.83
やっぱり0x30のまま変化しない。
さらにコンパイラーをますます疑う

質問者にコンパイラーをV9.80にする様に指示をした。
返答はV9.80でも動作しない。

実験1回目と2回目を良く見比べたら、コンパイル方法が若干異なるのを発見

図1
 1回目は実験プログラムで使用しないのでリンクはされないのだが、
 左の様にサブライブラリ(skMonitorLCD.c)が追加されている。
 これはリンクされないがコンパイルはされる。
 これを外して(Remove)コンパイル後実験4回目を行う。
 動作せず、0x30のまま変化しない。
 コンパイラーのバージョン(少なくともV9.80以降)は関係なさそう。


IDEの「View」→「ProgramMemory」ウインドウを表示させそこの[Symbolic]アセンブラコードを
動作したパターンと動作しないパターンで見比べる
動作したパターンでは、skMonitorLCD.cのデータがPICのメモリデータ領域に登録されているだけで
後は同じにしか見えない!

《結果》

上の解析した結果から下記の様にすれば動作する事が判明した。
---------------------------------------------------------------------
#include <pic.h>
#include <htc.h>               // delay用

#define _XTAL_FREQ 4000000     // delay用に必要(クロック4MHzを指定)

が記述されています、これを

#include <pic.h>
#include <htc.h>               // delay用

#define _XTAL_FREQ 4000000     // delay用に必要(クロック4MHzを指定)

const char omajinai[] = "ugoke" ; // 動作する為のおまじないです
---------------------------------------------------------------------
とconst char omajinai[] = "ugoke" ;の行を追加します。

《原因》

上記のomajinai変数のデータはPICのプログラムデータ領域の先頭に書き込まれるだけと思いますが
なぜこれで動作するのかよく分かりません。
なんとなくコンパイラーの不具合っぽくもなくもないのですが....
或いはPICのF1シリーズの不具合か(他にPICを持っていないのでその辺は調査不明ですがぁ)....
でもぉ、他にSPIのレジスターの使い方とか有ったりしてぇ.....
謎です。




【きむ茶工房ガレージハウス】
Copyright (C) 2006-2012 Shigehiro Kimura All Rights Reserved.