プロが教える店舗&オフィスのセキュリティ対策術

組み込みアカデミー第1回 LEDを1個点灯のはずが2個点灯してしまいます。
対象は付録の「NE-R8C/25」です。動作確認プログラムのslos.hwsを実行するとLED1と2が交互・同時点灯を繰り返し、正常に動作しています。
ところが以下のプログラムをC:\WorkSpace\step01\step01\step01.a30として実行してもLEDが2個点灯してしまいます。
プログラム中 LED1点灯のところがMOV.B #11111110b,p2でもLED1と2同時に点灯してしまいます。
指定されたsfr_r825.incファイルはc:\WorkSpase\STEP01\STEP01以下にコピーしています。

.INCLUDE sfr_r825.inc ;SFR定義ファイルのインクルード
.SECTION PROGRAM,CODE ;コードセクション
.ORG 0009000h
Start:
MOV.B #11111111b,pd2 ;入出力ポートP2を出力ポートに設定
BCLR p2_0      ;LED1点灯 
BSET p2_1      ;LED2消灯
Loop:
JMP Loop
.SECTION FIXVECTOR,ROMDATA
.ORG 0FFFCh
Reset:
.LWORD Start|0FF000000h
.END

「組み込みアカデミー LEDを1個点灯のは」の質問画像

A 回答 (2件)

通りすがりで基板の内容も、それに関する記事の内容も知りませんが


デバッグモードで走らせることが出来るなら
BSET p2_1 まで走らせて停止させた時点で LED2 は消灯してるのでしょうか?
要は、ステップ動作で正常に働いて、連続(通常RUNモード)でLED2が消灯しないのであれば、仕様書のどこかにI/oポートアクセスに関する注意事項があるのではないでしょうか?
たまにあるのが 同一ポートのビット操作を連続して行う場合は間に遅延の為にNOP命令を挿入する 等がありますね!
がんばって下さい。

この回答への補足

デバッグ→ステップ と言うコマンドがありました。Loopの行が9ステップなのでそこまで走らせたらLEDは2個ついていました。
NOPもいれてみましたが状況は変わりません。

.INCLUDE sfr_r825.inc ;SFR定義ファイルのインクルード
.SECTION PROGRAM,CODE ;コードセクション
.ORG 0009000h
Start:
;MOV.B #00000000b,pd2 入出力ポートP2を入力ポートに設定
MOV.B #11111111b,pd2 ;入出力ポートP2を出力ポートに設定
BCLR p2_0;LED1点灯
NOP
BSET p2_1;LED1消灯
Loop:
JMP Loop
.SECTION FIXVECTOR,ROMDATA
.ORG 0FFFCh
Reset:
.LWORD Start|0FF000000h
.END

補足日時:2009/09/22 15:11
    • good
    • 0
この回答へのお礼

Kuro804さんへ
プログラムを消してルネサスの「High-performance Embedded Workshop」の「新規プロジェクトワークスペースの作成」からやり直しました。
原因はプロジェクトタイプがApplicationになっていたからでした。EmptyApplicationで作成し、ポートの設定を全て入力にしてみるとLEDが消灯しました!!次にLED1点灯プログラムを実行すると正常に動作しました。ありがとうございます。

お礼日時:2009/09/22 18:38

 ポートの設定を全て入力にしてみましょう。


 LEDが消灯しなければ、このプログラム自体が走っていないと判断できます。
 モニタか何か他のプログラムで出力に設定したのであり、あなたのプログラムで出力にしたのではないと判断出来る訳です。

>MOV.B #11111111b,pd2 ;入出力ポートP2を出力ポートに設定

この回答への補足

ricardo_さんへ
アドバイスどおりでした。
プログラムを消してルネサスの「High-performance Embedded Workshop」の「新規プロジェクトワークスペースの作成」からやり直しました。
原因はプロジェクトタイプがApplicationになっていたからでした。EmptyApplicationで作成し、ポートの設定を全て入力にしてみるとLEDが消灯しました!!次にLED1点灯プログラムを実行すると正常に動作しました。ありがとうございます。ROBO-ONEに興味を持ちC言語からはじめようとこのキットを入手しました。
教えてgooも初めて利用して補足とお礼の順番も逆で申し訳ありません。

補足日時:2009/09/22 18:19
    • good
    • 0
この回答へのお礼

アドバイスどおりポートの設定を入力にして、以後の命令はコメントにしてデバッグ→リセットして実行 をするとLEDは2個点灯しました。
おっしゃるとおりモニタか何かのプログラムで出力に設定されたとおもいます。 デバッグ→CPUのリセットをクリックしたらLEDは消灯します。
まだ原因がつかめません。

.INCLUDE sfr_r825.inc ;SFR定義ファイルのインクルード
.SECTION PROGRAM,CODE ;コードセクション
.ORG 0009000h
Start:
MOV.B #00000000b,pd2 ;ポートを入力に設定
;MOV.B #11111111b,pd2 ;入出力ポートP2を出力ポートに設定
;BCLR p2_0;LED1点灯
;BSET p2_1;LED1消灯
Loop:
JMP Loop
.SECTION FIXVECTOR,ROMDATA
.ORG 0FFFCh
Reset:
.LWORD Start|0FF000000h
.END

お礼日時:2009/09/22 14:42

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