こんにちは。伊藤ともうします。 先月から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/