dポイントプレゼントキャンペーン実施中!

H8/3664でパルス幅を測定しようと思っています。
秋月の超音波距離計のT7の信号を取り込んでいます。
距離を測る前にパルスの立ち上がりと立下りがちゃんと拾えてるか調べようと思い、下記のようなプログラム(mainループのみですが)を作りました。
・・・・
PUP:  BTST  #1,@PDR8 ;P81にパルス;立上がりか?
     BEQ RED1
      JMP @PUP
RED1: BSET #3,@PDR5  ;P53にLED-1,ON
     BTST #1,@PDR8 ;立下りか?
     BNE RED2
    JMP @RED1
RED2: BCLR #3,@PDR5 ;RED-1 OFF
     BSET #4,@PDR5 ;RED-2 ON
    JMP @RED2
    .END
 しかし、スイッチを入れるとRED-1はつくのですが、RED-1が消えRED-2がつくまでに5秒くらいかかります。最後は命令どうりになっているのでバグではないと思うのですが・・・なぜタイムラグがあるのかわかりません。
 オシロスコープでマイコンに取り込む直前の信号を見たのですが、きれいな信号で問題なさそうです。
 タイムラグがある原因を教えてください。どうかよろしくお願いします。

A 回答 (1件)

いきなりアセンブラか...とおもったのはおいといて、


BTSTで判定しているわけですが、立ち上がり/立ち下がりを
みているわけではなく、ONかOFFかをみているだけですよね

PUP :
BTST
BEQ RED1
BCLR ==>LED1off
JMP @PUP
RED1:
BCLR ==> LED1on
JMP @PUP

でよさそうなもんですね。
で結論なのですが、ただしく動いているんじゃないでしょうか。
ただ、超音波なので、ON/OFFが非常に頻繁に繰り返されて
いるはずで、LEDの消灯の目視による確認ができないだけでは
ないですか?
オシロがあるなら、入力(P81)とLED出力(P53)を観測すれば
動作の確認はできるとおもいます。
オシロがないとすれば、まず、超音波ではなく、SWなどをつけて
ON/OFFさせ、それに応じた処理が正しくできているかどうか
を確認するなどの方法をとるべきでしょうね。
いずれにせよ、何事も一歩づつすすめることが肝要だとおもいます。

この回答への補足

 丁寧な回答ありがとうございます。返答が遅くなって申し訳ありません。
(旅行で・・・) 
いろいろやってみたのですが、SWではできました。
ですが、ONのときLEDを点灯させ、OFFになったとき、別のLEDを点灯させようとしているのですが、一瞬でOFFのLEDがつくと思うんですけどそれが数秒たってつきます。
 パルスの電圧を測ったら6.2Vあってそれが原因なのでしょうか?
 最終的にはある距離になったらLEDが点灯するようにしたいです。(インプットキャプチャで一回やってみましたがうまくいかず)
 初心者の質問で申し訳ありません。わかれば教えてください。

補足日時:2007/12/27 22:08
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!