例題3.2 音を出すプログラム


音を出すプログラムを使って,音を出してみましょう.スピーカーのコードはマザーボードのピンフレームCN1の2番と16番に接続します.
;              BEEP.SRC       (c)yas@E-SYS Lab.

;**********************************
;*      BEEP音発生プログラム  *
;**********************************
;
;------CPUの指定-------
        .CPU    300HA
;

;----シンボルの定義------
;今回はポートBのみを使います.

PBDR    .EQU    H'FFFFD6       ;ポートBデータレジスタ
        .SECTION       ROM,CODE,LOCATE=H'000100       ;セクションの宣言

;-----I/Oの初期設定----
;ポートBを出力に設定しています.ポートBのデータディレクションレジスタに書き込んでいます

INIT:   MOV.L   #H'FFFF10,ER7  ;スタックポインタの設定
        MOV.B   #H'FF,R0L      ;ポートBを出力に設定するため
        MOV.B   R0L,@H'FFFFD4  ;ポートBDDRにH'FFを書き込む

;----MAINルーチン-----
;このプログラムの流れは,
;1:R0Lに00000001を書き込む
;2:R0Lの中身をポートBに出力する
;3:待機する
;4:R0Lの1bit目を反転する
;5: 2:へと飛ぶ(ループ)となります.
;待機する時間の長さにより音程が変わります.

        MOV.B   #B'00000001,R0L ;R0Lに1を書き込む
START:  MOV.B   R0L,(____)     ;R0Lの内容をポートBに出力する
        JSR     @TIME00 ;待機
        (___)   #0,R0L         ;R0Lのbit0を反転する
        JMP     @START         ;STARTにジャンプする 

;----タイマサブルーチン------
TIME00: MOV.W   #H'1000,R6     ;タイマ
TIME01: SUB.W   #1,R6          ;ER6にH'1000を書き込み1ずつ減算
        BNE     TIME01         ;0になるまで減算を繰り返す
        (___)                  ;元のルーチンに戻る
                  

.END
 

課題 3.2の説明

  • 7行目 :CPUの指定をしています.
  • 10行目:シンボルの定義.H'FFFFD6と書く代わりにシンボルとしてPBDRと定義します.
  • 12行目:セクションの宣言.
  • 15〜17行目:初期設定,スタックポインタの設定.ポートBを出力に設定しています.PBDDRに制御コードを書き込みます.付録からPBDDRの番地はH'FFFFD4であることが分かります.出力ビットに設定したいので,その番地に1を書き込みます.
  • 20〜24行目:メインルーチン.音を出力.PBDR(ポートBDR)のbit0をBNOTで反転させています.0なら1にセットし,1なら0にクリアします.STARTへ無限ループになっているので,電源を切ったりしない限り,この動作を続けます.
  • 27〜30行目:WAITのサブルーチンです.H'200000から値を1ずつ引いていき,ゼロになるまでこの作業を繰り返します.この作業で約1秒間WAITとなり,値がゼロになったらメインルーチンに戻ります.

BNOT

指定された1bitを反転します.0なら1に,1なら0にします.

Ex) BNOT LED1    ;LED1を反転します.

 


[山口研究室] <back | index | next >