---自作MPGワイヤレス化 (11)---

 外部セラロックを使わないで、内部PLLを使って、32Mhzで
 動作させるために、16F1827に16F88のプログラムを移
 植しました。
 今回、移植するのに、丸々3日ほどかかりました。はまっ
 てしまったのは、二つでした。
 一つ目は、大いなる勘違いで、
     for( ; ; )
 の使い方を誤ってました。そのため、A相、B相のパルスが
 正しく発生できませんでした。16F88で作った時は、パルス
 の発生を前後の余裕をもってしていたので、その余裕が、
 ロジックの誤りを吸収してくれたようです。初期値1~5まで、
 5回のループを作りたいのに、
   for(i=0;i<5;i++)
 のような記述をしてました。これでは、0~4までの5回の
 ループになってしまいます。正しくは、
   for(i=1;i<=5;i++)
 でした。
 もう一つは、原因がよく分からないのですが、クロックを早く
 すると、PORTが思った動作をしてくれなくなるようで、
 PORTレジスタとLATレジスタ
 
 と
 PICとMikroC
 
 に記事がありました。
 早速、LATレジスタを使って組み直すと、見事動きました。
 動いたプログラムです。ゴミが沢山残ってます。
  main.c
 特に、メインの処理では、switch分とif分が混在してます。
 原因をあれこれ探るためにやった名残です。
 もしかして、このように、PICは癖があるのかもしれませんね。
 AVR等は、どうなんでしょうか。
**************************
*           追記           *
**************************

 もしやと思い、諸兄の記事を参考に、ポートのビット操作
 の間に’nop’を一ついれて動かして見ました。
 あれほどなやんだのが嘘のように、通常の書き込みで、
 LATレジスタを使わないで、動きました。
   ’nop’をいれたプログラムです。
     main.c
 やはり、諸兄はすごい。