例題2.4 BLINKER


LEDを点滅させてみましょう.
;         BLINKER.SRC          (c)yas@E-SYS Lab.
;**********************************
;*        LED点滅プログラム       *
;**********************************
;------CPUの指定-------
        .CPU      300HA
;
;----シンボルの定義------
P5DR    .EQU      H'FFFFCA                  ;ポート5データレジスタ
LED1    .BEQU     0,P5DR                    ;ポート5のbit0をLED1で表す
;
        .SECTION  ROM,CODE,LOCATE=H'000100  ;セクションの宣言
;
;-----I/Oの初期設定----
INIT:   MOV.L     #H'FFFF10,ER7             ;スタックポインタの設定
        MOV.B     #H'FF,R0L                 ;ポート5を出力に設定するため
        MOV.B     R0L,@H'FFFFC8             ;ポート5DDRにH'FFを書き込む
;
;----MAINルーチン-----
;これよりメインです.
;サブルーチンがわからない場合は前回を参照してください.
;このプログラムの流れは,
;LED点灯→1秒待つ→LED消灯→1秒待つ→LEDONラベルへ飛ぶ→…(繰り返し)
;となります.
LEDON:  BSET      LED1                      ;LED1を点灯する
        JSR       @TIME00                   ;1秒間待つ
LEDOFF: BCLR      LED1                      ;LED1を消灯する
        JSR       @TIME00                   ;1秒間待つ
LOOP:   JMP       @(_____)                  ;LEDONに飛ぶ
;
;----タイマサブルーチン------
;約1秒間のタイマ
TIME00: MOV.L     #H'280000,ER6             ;ER6にH'280000を書き込み
TIME01: SUB.L     #1,ER6                    ;1ずつ減算
        BNE       (______)                  ;0になるまで減算を繰り返す
        RTS                                 ;元のルーチンに戻る
;
        .END

課題 2.4の説明

  • 6行目:CPUの指定をしています.
  • 9〜10行目:シンボルの定義をしています.ポート5データレジスタをP5DR,P5DRのbit0をLED1と表しました.
  • 12行目:セクションの宣言をしています.
  • 15〜17行目:初期設定,スタックポインタの設定.ポート5を出力に設定しています.P5DDRに制御コードを書き込みます.付録からP5DDRの番地はH'FFFFC8であることが分かりますから,その番地に,入力ビットに設定する出力ビットに設定したいもで1を書き込みます.
  • 25〜29行目:LED1に0をビットクリアしLED1を点灯します,1秒待ちLED1を消灯します.そして,1秒待ちLEDONにジャンプします.
  • 33〜36行目:WAITのサブルーチンです.H'280000から値を1ずつ引いていき,ゼロになるまでこの作業を繰り返します.この作業で約1秒間WAITとなり,値がゼロになったらメインルーチンに戻ります.

 


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