[H8-ML(1725)] Re: [H8-ML(1723)] Re: AD変換スキャンモード
From: "伊藤 誠一" <itobcm@xxxxxxxxxxx>
Date: 2002年04月12日(金)12時03分23秒
藤原さん
アドバイス本当にありがとうございました。
確かによくわかっていないので、問題が多いです。お恥ずかしい限りです。

>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/

スレッド概略
[表示中](起点)
 └[1728(1)]


投稿順に移動
[←前の記事へ(P)]
[→次の記事へ(N)]


リスト表示へ
[このスレッド(T)]
[本記事の前後(L)]