PIC16F877です。
[環境]
MPLAB IDE 6.6
CCS 3.15
WinXP sp3
送受信ピンは専用ピンに割り当て、内蔵USARTを使ってRS232C通信しています。
PICから相手機器にコマンド発行し、相手から応答データが帰ってきていますが、
kbhit()を確認してもHighになってくれません。
PIC入力ピンをオシロで当たって波形も確認済み、また信号ラインをシリアルモニタで
受信データラインを横取りして確認してもデータは正常に読み取れていますので、データは
正常だと思います。
同じような経験をお待ちの方はおられませんか?
よろしくご教授、お願いします。
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
経験則ですが, PICは独特の内部アーキテクチャになっていますので, 不慣れな頃は勘違いによる設定ミスが私自身意外とありました.
IDEとの親和性において, コンパイラのバグは特殊条件において確認できているものもありますが, 基本動作において問題が発生するレベルのものはあるとは思えません.
文面から設定値等の詳細が分かりませんが, 少なくとも"Highになってくれません"ということから原因は以下の2点に絞れるのではないでしょうか.
(1)I/Oモジュール部の出力(トライステート等)がEnableとなっておりLowに引いてしまっている.(出力設定値を確認できれば進展があるかも)
(2)USART入力がEnableとなっていない
データシートでPORT I/Oの仕様を図で確認するのも必須ですが, 慣れてないと多少難しいかもしれません.
ファンクションを実装する前に, USART動作確認用のプロジェクトを作成しデフォルト起動時の状態からUSARTのみ動作させる動作確認を行うのが近道だと思います.
私ならまずささっとアセンブラでプロジェクトを作成して動作確認し, デバイス動作を含むハードの面に問題はないコトを切り分けすると思います.
877であればネット上にアセンブラのサンプルなどゴロゴロ転がっていますしさほど手間ではないかと.
今頂いている情報ではここらが限界ぽいです.
他に試せることと言ったらレジスタ設定をBIT命令をBYTE命令に置き換えて試すことくらいでしょうか.どうにもお困りでしたら, ソースを晒した方が早そうですね.
ありがとうございます。
日程の事もあり少々あせっている所もありました。
ご指摘の通り、原因の切り分けから、一つ一つ潰していこうと思います。
No.1
- 回答日時:
入力信号に問題は無さそうですので, PIC場合I/Oマルチファンクションに伴う設定ミスか, ボーレート設定のミスのどちらかだと思います.
データシートを見てみましたが, 他のPICの石と比べてレジスタ設定において躓く点は少なそうです.
SPENが1である事と該当ポートの出力が切ってあればデータ入力できそうです.
TRISC[7]は"1"になっていますでしょうか?(デフォルト入力のはず)
ありがとうございます。
ご指摘の箇所、いずれも、確認しましたが問題ないようでした。
PICで今回ほど複雑なもの(たかが知れてますが)を作るのは初めてでして。。
コンパイラバグの問題、リソースの問題なども考えた方が良いのか、等とも思っております。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# TCP/IP通信時のサーバーからの受信 2 2022/11/23 09:11
- Outlook(アウトルック) 未読ならば受信トレイから削除する 2 2023/02/12 19:21
- ガラケー・PHS 携帯電話の居場所信号の発信タイミング 3 2022/07/27 14:39
- その他(プログラミング・Web制作) COBOL数値転記をCOPY句内での仕様 6 2022/06/15 18:48
- 格安スマホ・SIMフリースマホ 楽天回線エリアなのかパートナーエリアなのか 2 2023/01/14 00:56
- Visual Basic(VBA) 【VBA】Excelの特定範囲のセルを画像で保存したい 2 2023/01/25 13:06
- Android(アンドロイド) iPhoneには、なぜ僕が合計3台持ちしているGalaxy A22やXperiaXZ1、arrows 4 2022/07/12 18:42
- 工学 高度な演習を行う「ロジック半導体」。そして、データの記憶を行う「メモリ半導体」、電気信号を制御する「 4 2023/01/10 07:04
- iCloud iPhone端末変更時のLINE引継ぎ 4 2023/07/09 15:07
- ネットワーク OSI参照モデルの各層の役割がわかりません。 3 2023/04/21 21:12
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
PLCとPCの通信
-
電子工作での高速通信
-
TCNTとTIFRの意味
-
PCからシリアル通信で外部ハー...
-
プログラミングとコンピュータ...
-
Macターミナルで実行中のプログ...
-
C言語で、メモリを解放しないで...
-
緯度、経度の 10進法と 60進法...
-
Excelでのセル内容の高速消去方法
-
指定したフォルダーを最前面表...
-
Socket通信の0バイト受信について
-
このレジの並び方は間違ってま...
-
c言語のサイコロを100回振って...
-
バックグラウンドのプロセスの...
-
スレッドの監視方法について
-
VC++2005で、CString型に16進...
-
ファイルマッピング関数で失敗
-
Excel VBA での処理時間計測結...
-
VC++スレッドの正しい終了のさ...
-
エクセルVBAの自動変換機能?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
PLCとPCの通信
-
組み込みマイコンでのソフトウ...
-
レジスタマップって何ですか?
-
PICマイコンのCLRWDT動作について
-
シリアル通信でのデータ取りこぼし
-
マイコンからSDカード内のテキ...
-
機械語のレジスタペアについて
-
H8S2368マイコンのTCSR_1レジス...
-
マイクロ秒で精度が出るタイマー
-
SH7144でパルス幅を測定したい。
-
フラッシュメモリへの書き込み
-
RTCで取得した値をLCDに表示したい
-
システムコールを使わずに画面...
-
グラフィックLCD SG12...
-
2つのアナログ信号が一致して...
-
カーブフィットを行うプログラ...
-
TCNTとTIFRの意味
-
printf文で変数のアドレスを表...
-
printfで0x600000番地の次の0x6...
-
PICマイコンでプログラム!パソ...
おすすめ情報