[H8-ML(1722)] AD変換スキャンモード
From: "伊藤 誠一" <h8ito@xxxxxxxxxxx>
Date: 2002年04月11日(木)15時19分32秒
こんにちは。伊藤ともうします。
先月からAKI-H8を手にしている初心者です。
どうぞよろしくお願いいたします。

AD変換のスキャンモードを使って
4チャネルのAD変換を行いたいと思っています。
H8ビギナーズガイドを参考にさせていただいて途中まで作ってみたのですが、
特にデータの格納の仕方がわかりませんでした。
そのほか間違っている部分などお気づきの点がありましたら、
それもどんどんご指摘ください。
開発環境はAKI-H8セットです。
Cのコンパイラ(秋月ではない)もあります。
(まだ使っていないのですが。)

**********************************************************************

;---------------------- シンボルの定義 -----------------------------

SW5	.EQU	H'FFEF10	;SW5の状態を記憶するRAMの番地
P2DR	.EQU	H'FFFFC3	;ポート2の入力データレジスタを指定する番地
P2DR	.EQU	H'FFFFC6	;ポート5の入力データレジスタを指定する番地

ADCSR	.EQU	H'FFFFE8	;A/Dコントロール/ステータスレジスタの番地
ADST	.BEQU	5,ADCSR	;ADCSRのbit5、変換開始/停止を選択
ADIE	.BEQU	6,ADCSR	;ADCSRのbit6、AD変換終了割り込みの発生許可・禁止
ADF	.BEQU	7,ADCSR	;ADCSRのbit7、変換終了を示すフラグ
ADDRAH	.EQU	H'FFFFE0	;0CHのA/D変換結果を入れる上位8bitレジスタの番地
ADDRAL	.EQU	H'FFFFE1	;0CHのA/D変換結果を入れる下位8bitレジスタの番地
ADDRBH	.EQU	H'FFFFE2	;1CHのA/D変換結果を入れる上位8bitレジスタの番地
ADDRBL	.EQU	H'FFFFE3	;1CHのA/D変換結果を入れる下位8bitレジスタの番地
ADDRCH	.EQU	H'FFFFE4	;2CHのA/D変換結果を入れる上位8bitレジスタの番地
ADDRCL	.EQU	H'FFFFE5	;2CHのA/D変換結果を入れる下位8bitレジスタの番地
ADDRDH	.EQU	H'FFFFE6	;3CHのA/D変換結果を入れる上位8bitレジスタの番地
ADDRDL	.EQU	H'FFFFE7	;3CHのA/D変換結果を入れる下位8bitレジスタの番地

	.SECTION ROM,CODE,LOCATE=H'000100	;コードセクションの宣言

;--------------------------I/Oの初期設定--------------------------------	

INIT:	MOV.L	#H'FFF10,ER7	;スタックポインタの設定

	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を書き込む

	MOV.B	#H'00,R0L	     ;ポート7を入力に設定するため
	MOV.B	R0L,@H'FFFFC6	;コントロールレジスタにH'00を書き込む

	MOV.B	#H'13,R0L	     ;A/Dコンバータを動作状態にするため
	MOV.B	R0L,@ADCSR	;ADCSRにH'5Fを書き込む

;-----------------------------MAINルーチン---------------------
	MOV.B	#0,R0L		;SW5のRAM領域をクリヤする
	MOV.B	R0L,@SW5	
S5CHK:	MOV.B	@P2DR,R0L	     ;SW5の状態をR0Lに読み込む
	MOV.B	@SW_D5,R0H	;SW_D5の内容をR0Hに読む
	CMP.B	R0H,R0L		;両者を比較する
	BEQ	S5CHK		;同じならS5CHKにジャンプ
	JSR	@AD		;変化があればADサブルーチンへ
	JMP	@S5CHK		;
;--------------------------MAINルーチン終わり---------------

;---------------------------A/D----------------------------------
AD:	JSR	@TIME10		;WAIT
	BSET	ADST		;A/D変換開始
ADEND:	BTST	ADF		;A/D変換終了?
	BEQ	ADEND		;終了していなければADENDへ
	MOV.L	#0,ER1		;変換結果を入れるレジスタER1をクリヤ
	MOV.B	@ADDRAH,R1H	;変換値の上位8ビットをR1の上位へ
	MOV.B	@ADDRAL,R1L	;変換値の下位2ビットをR1の下位へ
	BCLR	ADF		;変換終了フラグをクリヤ

;----------------------------------------電圧値変換--------------------
	MOV.W	#4883,R0	     ;A/D変換値に4883を掛け5V/10bit・FSに正規化する
	MULXU.W	R0,ER1		;5V/FS対応のディジタル値がER1へ

;-----タイマ-----

TIME00:	MOV.L	#H'1900,ER6	;4mS TIMER
TIME01:	SUB.L	#1,ER6
	BNE	TIME01
	RTS

TIME10:	MOV.L	#H'80,ER6	     ;80uS TIMER
TIME11:	SUB.L	#1,ER6
	BNE	TIME11
	RTS

	.END	

*****************************************************************

SW-5を動かしたときにAD変換をはじめて4チャネル終わったら
ADI割り込みを発生させるプログラムにしたいと思って作りました。
最終的には
4チャネルのAD変換->4つのデータをシリアルで送信->そのほかの処理
を続けるようにしたいと思っています。
長くなりましたがよろしくお願いいたします。

伊藤誠一
h8ito@xxxxxxxxxxx









_________________________________________________________________
大人気の会話ツール MSN メッセンジャーのダウンロードはこちら 
http://messenger.msn.co.jp/

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


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


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