としぶぅ~の「工作部屋」...毎日少しのお勉強

趣味・関心事を書いていこうと思います。

PIC16F88を動かす。。。その30(シリアル通信をPCとやってみる3)

2012-10-21 21:25:46 | PIC16F88

こんばんわ

としぶぅ~です。

 

夜はだいぶん涼しいですね。。。。窓開けてると少し寒いです。

 

今日は昨日の続きを時間見てやってみました。

昨日問題なっていた、なにも出力できないくなる件。。。わかりました。

受信の割り込みフラグが立ちっぱなしで。。。ずっと割り込みが入りっぱなしになっていた。。。

RCIFをクリアしたらとたんに動き出した。。。。ミスです^^;

上記を修正して、シリアルのところはともかく。。。。どうも時分割の部分が動いていない??

ような動きなので少し確認。

まず1msごとに割り込みかかっているか??

割り込み来るたびに”H”→”L”→”H”→・・・とポートをぱたぱたやらせて確認。。。

一応、1周期2ms・・・・1msごとに出力を反転させているので、ちゃんと動いているようです。

で、おかしいなと思っているのが4msごとに切り替わるはずの処理が。。。

埋め込んでもまともに動いてくれない。。。なぜ。。。

if(tmr_4ms_up == 1){

if(test_bit(PORTB,0)){    ←ここにDEBUG処理を埋め込む
clear_bit(PORTB,0);
}else{
set_bit(PORTB,0);

tmr_4ms_up = 0;

switch(tmr_cnt_up){
case 0: ad_4ms(); //処理1 ADを実施(20120920追加)
       break;
case 1: disp_ad3(); //処理2 ADを実施(20120920追加)
       break;
case 2: tx1byte(0x4F);  //処理3     ←ここの処理が飛ばされる
      tx1byte(0x4B);
           break;
case 3:                       //処理4
         break;
case 4:                      //処理5
           break;
}
}

上記の位置にさっきと同じポートをパタパタさせる処理を入れてみる。

4msごとにぱたぱたしているので、問題ない。

動作は問題ないようなので、上記の処理が入るたびに止まるようにブレイクポイントをいれて、

止まったときのカウント値:tmr_cnt_upを確認していく。。。

どうも、”2”だけ飛ばされてしまう。。。。

なぜか???

何度やっても同じ。

悩んでいたが。。。。わかりました。

これはLcdの表示に時間がかかりすぎていて、2カウント分消費してしまうため、飛ばされている・・

なんだか。。。。^^;

このLCDを使用するときは気を付けないといけません。

表示のための時間がかかりすぎます。

とりあえず、”2”の位置をはずして埋め込めば動作することがわかりました。

こんな感じ。。。なんか通信はできているようです。

しかし、やはり文字化けの嵐です。

 

これも追跡です。。。

かなり時間かけてやりました。

とりあえず出力波形を見る限りボーレートも、意図したデータも出力されているように見えます。

他になにか忘れているものあるのだろうか・・・・・わからん^^;

出力データは”4Fh”(”O”)、ボーレートは38.4Kbps。。。。問題ないように見える。。。

何が問題なんだろうか。。。。謎です。

 

まだまだつづく・・・・シリアル・・・・^^;

 

ま、とりあえず今日はこの辺で。。。。

おやすみなさい(^o^)/