以前PIC16F84Aで問題なく動作しているプログラムを
初期設定を変えて(これでいいのか?も疑問)16F628Aで動かそうとしていますが
サブルーチンに入り「タイマー」のルーチンから抜け出せないみたいです。
BILD ALL ではエラーは出ません。
割込みは正常に動作します。
どこがいけないのでしょうか?
よろしくお願いいたします。
プログラムはこちらです。
;-------------------------------------------------------------------------
; 初期設定
list P=pic16f628a
include "p16f628a.inc"
__CONFIG _HS_OSC & _CP_OFF & _WDT_OFF & _PWRTE_ON & _BODEN_ON & _LVP_OFF & _MCLRE_OFF
ORG 0
GOTO MAIN
;-----------------------------------------------------------------------
; 割り込み処理
ORG 4 ;割り込みアドレス
CLRW
CLRF PORTB ;ポートBクリア
GOTO MAIN
;-----------------------------------------------------------------------
; メインプログラム
MAIN BCF STATUS,RP0
MOVLW B'00000111'
MOVWF CMCON
BSF INTCON,INTE ;割りこみ許可?
BSF STATUS,RP0 ;ポートAを全て入力に設定
MOVWF TRISA
MOVLW H'01' ;ポートBは0(ゼロ)以外は出力に設定
MOVWF TRISB
MOVLW 90H ;INT割り込み許可
MOVWF INTCON
BCF STATUS,RP0 ;ポートBをクリア
CLRF PORTB
CLRW
;----------------------------------------------------------------------
; スイッチ入力チエック
LOOP BTFSS PORTA,0 ;オープンSWがONか?
GOTO OPEN ;ONだったら OPENへ
GOTO LOOP
;-----------------------------------------------------------------------
; オープン動作
OPEN MOVLW 010H ;ポートB4番に5V出力(リレーON)
MOVWF PORTB
MOVLW D'250' ;動作時間 '250'設定
MOVWF 0EH ;アドレス0EHに250を入力
CALL LOOP3 ;サブルーチンLOOP3を呼び出す
GOTO MAIN ;サブルーチンが終わったら MAIN に戻れ
;------------------------------------------------------------------------
;-----------------------------------------------------------------------
; サブルーチン(タイマー)
TIMER1 MOVLW D'220'
MOVWF 0CH
LOOP1 NOP
DECFSZ 0CH,1
GOTO LOOP1
RETURN
TIMER2 MOVLW D'100' ;アドレス0DHに100を入力
MOVWF 0DH
LOOP2 NOP
CALL TIMER1 ;TIMER1を呼び出し(行く)
DECFSZ 0DH,1 ;アドレス0DH から1を引き算する
GOTO LOOP2 ;結果が"0"でなかったら LOOP2に戻ってまた引き算
RETURN ;引き算の結果が"0"になったら「CALL」した「次に(下)」へ戻る
LOOP3 NOP ;何もしない
CALL TIMER2 ;TIMER2を呼び出す(行く)
DECFSZ 0EH,1
GOTO LOOP3
RETURN
END END
No.2
- 回答日時:
ソースの「丸投げ」はいけませんね!
少なくとも、「シミュレータ」があるわけですから、「何のためのシミュレータ?」ってことになります。
>LOOP1 NOP
DECFSZ 0CH,1
GOTO LOOP1
このような組み方はあまり望ましくありません。ループは必ずぬけられるようにしておかなければ、あなたのように悩まされることになります。
この内容で「シミュレータ」をつかってつきとめることができないのならば、どのようなプログラムもデバッギングできません。
仮にループが100回だろうと1000回だろうとわからなければ1つづつステップして調べていけば必ず原因がわかります。
ソフトウェアでカウンタがゼロになるチェックが甘すぎるのと、ソフトウエェアでダミーループに頼りすぎているプログラミンであるにもかかわらず「割込み」を使用しているので余計に混乱しているのではないでしょうか?
16F84Aで正常に動いたから・・・でほとんどプログラミング内容の検証はしてない・・・ということが大元の原因であることは想像つきますんで。
いい機会ですので、1つづつステップ実行でよく動作を確認されてください。「他人にデバッグさせる」」ようなマネはしないように!
No.1ベストアンサー
- 回答日時:
SFRの中でEEPROM関係のレジスタのバンクが違いますが、
EEPROMは使っていますか?
シュミレーションはやってみましたでしょうか。
16f628を使い始めた頃、これで随分と助けられたものですから、
あまり、一言にはならなかったみたいですね。
早々のお答え有難うございます。
EEPROMは使用しておりません。
シュミレーションは「あっち・こっち」LED出力してチエックしましたが
その結果「ループ」の中から抜け出せないようなのが分かりました。
16F84Aでは問題なくループから抜けて、次の入力待ちになります。
不思議で仕方ありません。
お答え有難うございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【再々投稿】VBAのプログラムで動作しなくて困っています 8 2022/10/14 09:06
- C言語・C++・C# 至急教えてください!プログラミングの問題です。 割られる整数と割る整数を受け取って、商と余りを出力す 3 2022/07/05 10:23
- Java javaの質問です 次の機能を有するメソッド4つを自クラスに作成し、実装したいです 【機能】 足し算 1 2022/06/15 17:49
- Java java 飾子を付けること(public static・・・) ・コンソールへの出力処理はmainメ 2 2022/06/16 19:34
- Java java 次の機能を有するメソッドを自クラスに作成し、実装したいです。 機能 名前判定機能 →名前が 3 2022/06/16 16:08
- その他(プログラミング・Web制作) FORTRAN77の配列(除算) 2 2023/02/01 14:34
- Visual Basic(VBA) Excelで下記のようにマクロを作ったところ、一回目は実行できたのですが、二回目以降「実行時エラー1 1 2022/03/25 08:08
- C言語・C++・C# C++のcinの動作 5 2023/02/26 00:13
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- C言語・C++・C# C言語 3 2022/10/04 15:07
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
スーパーのレジで並んでいたら...
-
マイコン C言語 割り込み処理...
-
C-Builder OnChangeをマスク
-
USJでの割り込み
-
(H8マイコン)タイマ割込で変更...
-
AKI-H8/3048Fでのタイマ割り込み
-
PIC(MOVFで何故、STATUS Zフラ...
-
【組込み】割り込み中のstatic...
-
picのタイマ1発振開始時間に関...
-
PCの割り込み処理とはなんでし...
-
【H8-3052F】タイマ割り込み
-
Macターミナルで実行中のプログ...
-
緯度、経度の 10進法と 60進法...
-
家電製品の電力周波数を変える機械
-
大容量のメモリ確保をスワップ...
-
Mac 乗数の入力方法
-
【C言語 数独】 C言語で9×9の数...
-
符号付きにすべきか、符号なし...
-
Excel-VBAのmsgBox()の不思議
-
VBA
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
CPUの処理量を減らすコーデ...
-
pic 複数の割り込み関数 切り分...
-
【組込み】割り込み中のstatic...
-
USJでの割り込み
-
CPU負荷率の安全な上限と計...
-
ウォッチドッグタイマ(WDT)の...
-
電車乗車時、並んでいるのに割...
-
USB機器からのデータ受信による...
-
一定時間操作がなかったら、と...
-
Amazonfireタブレットにわから...
-
マイコン C言語 割り込み処理...
-
PICマイコンでエンコーダパルス...
-
電車で待機列の割り込みについ...
-
駅のトイレでナイチンに邪魔さ...
-
実行した後、どうしてもフリー...
-
電車のドアの前での並び方
-
V.B.6 多重Call用スプール作成...
-
H8マイコンでの割り込み(シリ...
-
VB.net 割り込みの禁止
-
割り込みについて
おすすめ情報