藤原さん アドバイス本当にありがとうございました。 確かによくわかっていないので、問題が多いです。お恥ずかしい限りです。 >1.ベクターテーブルがないと動きませんが、きっとどこかに定義してある > のですよね .CPU 300HA ;CPUの指定 .SECTION VECT,CODE,LOCATE=H'000000 ;セクションの宣言 RES .DATA.L INIT ;ラベルINIT以降にプログラム領域を確保 いかがでしょうか。 >2.RAM 領域を .EQU で定義するのは止めましょう。(SW5) > .EQU でアドレスを定義するのは、データレジスタのように、本来的に > アドレスが固定されているものだけです(定数もありますが) > RAM の確保には、サイズに応じた .RES 擬似命令を使いましょう。 SW5: .RES.B 1 ;SW5の状態を記憶するRAMの番地 P2DR .EQU H'FFFFC3 ;ポート2の入力データレジスタを指定する番地 P5DR .EQU H'FFFFC6 ;ポート5の入力データレジスタを指定する番地 SW5:を変更してみました。P5DRに訂正しました。 レジスタのほうはこのままでもかまいませんか? >3.というわけで、コントロールレジスタのアドレスこそ、シンボルで定義しま > しょう > > MOV.B #H'00,R0L ;ポート2(SW-5に接続)を入力に設定するため > > MOV.B R0L,@H'FFFFC1 ;コントロールレジスタにH'00を書き込む > > MOV.B #H'FF,R0L ;ポート2をプルアップに設定するため > > MOV.B R0L,@H'FFFFD8 ;コントロールレジスタにH'FFを書き込む >4.SW_D5 は、SW5 のミスだとして、これではスイッチの状態は読めません。 > まあ動くかもしれませんが。 > SW5 の内容は、必ず「0」で、そのままですね。 > > S5CHK: MOV.B @P2DR,R0L ;SW5の状態をR0Lに読み込む > MOV.B @SW5,R0H ;SW_D5の内容をR0Hに読む > CMP.B R0H,R0L ;両者を比較する すみません、3と4がわかりませんでした。 よろしければもう少し教えていただけないでしょうか? >5.一見独立して見えるプログラムを、他のサブルーチンの一部にすることは > 間違いの元です。 > サブルーチン、AD のなかで、明示的に TIME00 を呼びましょう。 > いずれ、他のサブルーチンで 4ms のタイマが欲しくなり、TIME00 を呼ぶこ > とがあるでしょう。 > そうなってから、AD のサブルーチンの一部だと思って、時間を変えたりする > と、正体不明のバグに悩まされることになります。 JSR @TIME00 これでADのルーチンから飛ぶといいのでしょうか。 >6.お勧めは(デバッガのようなものがあると仮定して) > > 1)1チャンネルのAD変換を行うプログラムを作る。 > 1チャンネルのAD変換が終わったら、無限ループなどで停止させる > デバッガを併用して RAM の中身を見るなどして、AD変換の結果を > 確かめる。 > 2)それとは別に、シリアルで1バイト出力するだけのプログラムを作る。 > シリアルの出力結果をパソコン etc. で確認して、正しく出力がされ > ていることを確かめる > こういうステップを踏まないと、チェックすることが多すぎて、大変ですよ。 確かにご指摘のとおりです。いきなりやりすぎています。 時間がかかっても1つ1つ重ねていったほうがいいのでしょう。 ご指導ありがとうございます。 伊藤誠一 h8ito@xxxxxxxxxxx _________________________________________________________________ 大人気の会話ツール MSN メッセンジャーのダウンロードはこちら http://messenger.msn.co.jp/