お世話になります。PICについて質問があります。ボタンを押せば、PORTBのLEDに対する出力が変わるという物ですが、意図したようになりません。PORTに対する設定は間違っていないと思うのですが、チャタリングを考慮したプログラムになっており、上手く条件分岐してくれません。条件というのは、PORTAに入力があれば、25ms待機して再度PORTAを見に行きます。そのときにもPORTAに入力があれば、変数に格納した数値を一つずつ減らしていき、そのときに0であればPORTBを設定したとおりに出力するというものです。以下がソースですが、ここがおかしいということだけでも教えてくださると助かります。よろしくお願いします。
list p=16f628a
#include<p16f628a.inc>
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _INTRC_OSC_NOCLKOUT & _MCLRE_OFF & _LVP_OFF
SWI equ 0x21
SWI2 equ 0x22
CNT1 EQU 0x20
CNT2 EQU 0x21
ORG 0x000
goto main
ORG 0x004
main
bcf STATUS,RP0
bcf STATUS,RP1
clrf INTCON
clrf PORTA
movlw 0x07
movwf CMCON
bsf STATUS,RP0
bsf PCON,OSCF
clrf TRISB
movlw 0x03
movwf TRISA
bcf STATUS,RP0
clrf PORTA
clrf PORTB
clrf SWI
main_loop
btfss PORTA,1
goto flase_wait_routine
goto trues_wait_routine
flase_wait_routine
goto main_loop
trues_wait_routine
call DLY_25
btfss PORTA,1
goto main_loop
incf SWI,f
movf SWI,W
movwf SWI2
decfsz SWI2,f
goto a_loop_1
bsf PORTB,0
bcf PORTB,1
bcf PORTB,2
bcf PORTB,3
goto main_loop
a_loop_1
decfsz SWI2,f
goto a_loop_2
bcf PORTB,0
bsf PORTB,1
bcf PORTB,2
bcf PORTB,3
goto main_loop
a_loop_2
decfsz SWI2,f
goto a_loop_3
bcf PORTB,0
bcf PORTB,1
bsf PORTB,2
bcf PORTB,3
goto main_loop
a_loop_3
decfsz SWI2,f
goto a_loop_4
bcf PORTB,0
bcf PORTB,1
bcf PORTB,2
bsf PORTB,3
clrf SWI
goto main_loop
a_loop_4
goto main_loop
;Delay Routine
DLY_25 ; 25ms
movlw d'25'
movwf CNT1
DLP1;1ms
movlw d'20'
movwf CNT2
DLP2
nop
nop
decfsz CNT2,f
goto DLP2
decfsz CNT1,f
goto DLP1
return
END
No.1ベストアンサー
- 回答日時:
もう解決しているかもしれませんが、一応回答させていただきます。
SWI equ 0x21
SWI2 equ 0x22
CNT1 EQU 0x20
CNT2 EQU 0x21
で
SWI と CNT2 が同じファイルレジスタになっています。
RA1が入力されてSWI がカウントアップしても、DLY25で CNT2 が0になるので、
いっこうにSWIの数字がかわらず、思ったような動作をしないのではないでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) Arduino UNO のC言語 2 2023/04/18 19:42
- C言語・C++・C# 至急教えてください。プログラミングの問題です。 最初に正の整数nの入力を受け付け、次に分数の分子と分 1 2022/07/19 17:03
- Java java 次の機能を有するメソッドを自クラスに作成し、実装したいです。 機能 名前判定機能 →名前が 3 2022/06/16 16:08
- C言語・C++・C# 至急教えてください。プログラミングの問題です。 malloc関数を使ってください!お願いします! 最 1 2022/07/21 09:28
- C言語・C++・C# 至急お願いします。プログラミングの問題です。 最初に正の整数nの入力を受け付け、次に分数の分子と分母 3 2022/07/19 17:09
- その他(プログラミング・Web制作) 十進BASICでの再帰についての質問です。 2 2022/11/18 09:17
- ノートパソコン ノートパソコンの互換バッテリーを探しているのですが、見つかりません。そこそこ出回っているタイプだと思 6 2022/05/15 13:07
- Java java 飾子を付けること(public static・・・) ・コンソールへの出力処理はmainメ 2 2022/06/16 19:34
- Java javaの質問です 次の機能を有するメソッド4つを自クラスに作成し、実装したいです 【機能】 足し算 1 2022/06/15 17:49
- C言語・C++・C# 至急教えてください!プログラミングの問題です。 割られる整数と割る整数を受け取って、商と余りを出力す 3 2022/07/05 10:23
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
プログラミングについての質問...
-
任意の数から人の数までの素数...
-
プレゼント交換プログラム
-
C言語 累乗の計算
-
エラーの意味は? Lvalue req...
-
VBAでダブルコーテーション入り...
-
C言語 exitの使い方
-
フォームを開くときに、コンボ...
-
エクセルへのデータの貼付時に...
-
配列の値を置換するにはどうす...
-
VisualStudio2022でC言語プログ...
-
Excel-vba 文字列と変数を...
-
EXCEL/VBA 変数の値をクリップ...
-
初心者が簡単なPowerShellスク...
-
VBAで配列のNULL判定
-
C言語 列挙型(enum型)変数について
-
processing エラーで、 "cannot...
-
excelの、ある数式内の{}の意...
-
Nullってどういう意味ですか?
-
テキストボックスの値を変数に...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
プログラミングについての質問...
-
平均、最大値、最小値を表示す...
-
c言語 プログラミング 等比数列...
-
C言語の問題 1 つの文字をキー...
-
素数を判定するプログラム
-
素数を判定するプログラム
-
if文を条件演算子に書き換えに...
-
C言語初心者です。次の問題で質...
-
C言語 exitの使い方
-
VBAでダブルコーテーション入り...
-
フォームを開くときに、コンボ...
-
エラーの意味は? Lvalue req...
-
Excel-vba 文字列と変数を...
-
excelの、ある数式内の{}の意...
-
VisualStudio2022でC言語プログ...
-
数字の位ごとの値を表示するプ...
-
C言語 列挙型(enum型)変数について
-
EXCEL/VBA 変数の値をクリップ...
-
配列の値を置換するにはどうす...
-
整数xxxが大き過ぎますというエ...
おすすめ情報