![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
16F88を用いてLEDの点灯パターンを制御するプログラムを作ったのですが、思うように動作してくれません。
電源を入れたときはLEDはすべて消灯しており、スタートのためのスイッチを押すとすべてのLEDが3回点滅するはずなのですが、実際のところ、全てのLEDが点灯しっぱなしになってしまいます。
心当たりはコンフィギュレーションビットの設定が間違っている、PICの出力が間違っている(A/Dが正しく設定されていない)といったことを考えたのですが、結局解決には至りませんでした。
ほぼ同じプログラムを16F84Aにて作ったところ正常に作動したため、PICの移行に伴って不具合が生じてしまったのでしょうか。
どなたかお力をお貸しください。
プログラムはMPLAB v8.85 にて作成しており、コンパイラはHI-TECH ANSI C Compiler で、書き込みにはPICKIT2を用いています。
RB0~7にLEDが接続されており、RA0にスイッチが接続されています。
以下、ソースコードになります。
#define _LEGACY_HEADERS
#include <htc.h>
#define _XTAL_FREQ 20000000
__CONFIG ( HS & WDTDIS & PWRTDIS & UNPROTECT & MCLREN & BOREN & LVPDIS & DEBUGDIS & IESODIS & FCMDIS);
void kaeru(void){
////////////準備点灯3回//////////////
PORTB=0xFF;
__delay_ms(500);
PORTB=0x00;
__delay_ms(500);
PORTB=0xFF;
__delay_ms(500);
PORTB=0x00;
__delay_ms(500);
PORTB=0xFF;
__delay_ms(500);
PORTB=0x00;
__delay_ms(800);
////////////////////////////////////
//スペースの都合で省略しています。
}
void main(void)
{
ANSEL=0b00000000;//16F88のPORTAのA/D変換の無効化
OPTION=0x7F;//PORTBのプルアップ
PORTA=0x00;//初期設定
PORTB=0x00;//初期設定
TRISA=0x01;//RA0を入力
TRISB=0x00;//RB0~7を出力
if(RA0==1) kaeru();
}
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
whilie(1){
if(RA0==1){
PORTB=0xFF;
}else{
PORTB=0x00;
}
}
これで動かしてどうなりますか?
スイッチのオンオフでLEDがオンオフすればハードウエアはちゃんとしています。
シミュレータやデバッガーを使う方法も有ります。
MPLABのシミュレータでシミュレーションしてみてください。
これでちゃんと動くのであれば何かハードウエアがおかしいのです。
初期化されない変数やレジスタに依存する事でシミュレーションでOKなのに実際の動作でNGになる事が有ります。
もし動かないのであれば、PICKIT2をデバッガーとして動かしてチェックしてください。
デバッグモードで使用する時はRA5、RB6、RB7はデバッグ専用になるのでI/Oとして使用できません。
デバッグモードでは1命令ずつの実行や、ブレークポイントの設定、I/Oピンの状態の確認、出力ピンの操作などが出来ます。
No.1
- 回答日時:
RA0がゼロだと何もしないで終わっちゃいます。
if(RA0==1) kaeru(); を
次のように直しましょう。
while(1){ if(RA0==1) kaeru(); }
RA0には抵抗を入れてプルアップしておきましょう。
スイッチはRA0とグランドの間に入れます。
16F84Aで動いたのは、main()が終了した後にたまたまゼロ番地に戻った為でしょう。
この回答への補足
ご指摘ありがとうございます。
ご指摘通り、if(RA0==1) kaeru(); の部分を無限ループに入れ、RA0をプルアップしたのですが、
今度は電源を入れた瞬間からLEDがつきっぱなしになり、スイッチを押しても何の変化もありませんでした。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語 コードを書いたのですが上手く実行出来なかったです。どこが間違ってますか? 【作成したいもの】 1 2022/05/04 11:36
- その他(趣味・アウトドア・車) Arudino nanoが正常に動作しない原因 1 2022/10/30 18:29
- その他(プログラミング・Web制作) Arduino UNO のC言語 2 2023/04/18 19:42
- C言語・C++・C# C言語 ① 5秒間 1秒間隔で点滅を繰り返す ② 3秒間 0.5秒間隔で点滅を繰り返す ①→②→①→ 5 2022/05/03 23:37
- 工学 LED、CdS(受光素子)、ディジタル IC(組み合わせ回路,順序回路)、タイマーICの技術を組み合 1 2022/12/23 10:45
- 照明・ライト 懐中電灯は、スイッチを一回押すとランタン用のLEDが点いて、もう一回押すと懐中電灯用の別のLED電球 1 2023/04/05 20:18
- その他(法律) 自動車の点灯義務について 6 2023/02/24 15:01
- 車検・修理・メンテナンス 使用してないナンバー灯やバックランプはそのままでも車検に通りますか? 3 2022/07/23 11:45
- その他(教育・科学・学問) センサー(Cds)を用いたLEDの点灯回路で周囲が暗くなるとLEDが消灯する回路の動作説明ができる方 3 2022/11/20 18:22
- カスタマイズ(バイク) ウインカーをLEDに交換したら一箇所だけ点かない 4 2022/04/16 11:16
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
直流の+-を逆に繋ぐと
-
電磁接触器の接続方法
-
74HC192
-
16F88を用いてLEDの点灯パター...
-
アップダウンカウンタの回路図...
-
74HC161でカウンター作ってますが
-
電気回路 スイッチを入れて一...
-
コンデンサー間に挿入された誘...
-
電動アクチュエーターの結線に...
-
油圧で動く機械から常時音が出...
-
直流回路を開閉させる場合の火...
-
電子回路 ICのVccとGND
-
C-MOS ICの未使用ピンの処理に...
-
ペースメーカーの電池交換を拒...
-
AC100Vの扇風機の回転速度の調...
-
なんで直列回路は電流が同じで...
-
12Vのモーターの回転数を半減し...
-
発電機を2台直列に繋ぐとどうな...
-
出力電圧NOMの意味
-
私は、県営住宅に住んでいて、...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
直流の+-を逆に繋ぐと
-
電磁接触器の接続方法
-
4端子の押しボタンスイッチの接...
-
電気回路 スイッチを入れて一...
-
タイマーを回路に組み込みたい
-
PICのリセット端子のプルアップ...
-
C-MOS ICの未使用ピンの処理に...
-
工場扇が突然回らなくなりました
-
ホイートストンブリッジ
-
直流回路を開閉させる場合の火...
-
電子回路 ICのVccとGND
-
三端子レギュレーターで12Vから...
-
1次側(AC100V)と2次側(DC5...
-
ディジタル電子回路でJK-FF (74...
-
74HC161でカウンター作ってますが
-
アナログ電圧保持回路について
-
3相4線式の保護回路
-
水晶振動子と水晶発振器の違い
-
油圧で動く機械から常時音が出...
-
テレビリモコンの構造
おすすめ情報