例題2.2 LEDを2つ点灯するプログラム


LEDを1つ点灯できた人は2つ点灯させてみましょう.(___)の部分を穴埋めしてプログラムを完成させて下さい. LEDはポート5のbit0とbit1に接続されています.
;        LEDON2.SRC  (c)yas@E-SYS Lab.
;******************************************
;*       LEDを2つ点灯するプログラム       *
;******************************************
;
;------CPUの指定-------
;
        .CPU      300HA
;
;----シンボルの定義------
;ここではそのアドレスに名前を付けるショートカット作業を行っています.
;今回は前回と同様にポート5のbit1にもLED2と名前をつけます.

P5DR    .EQU      H'FFFFCA                  ;ポート5データレジスタ
LED1    .BEQU     0,P5DR                    ;ポート5のbit0をLED1で表す
LED2    .BEQU     (_),P5DR                  ;ポート5のbit1をLED2で表す
;
        .SECTION  ROM,CODE,LOCATE=H'000100  ;セクションの宣言
;
;-----I/Oの初期設定----
;ここではH8の持っているポートを何にどのように使用するかを設定します.
;今回マザーボード右下についているLEDのみを出力として使うので,
;ポート5を出力に設定しています.
INIT:   MOV.L     #H'FFFF10,ER7             ;スタックポインタの設定
        MOV.B     #H'FF,R0L                 ;ポート5を出力に設定するため
        MOV.B     R0L,@H'FFFFC8             ;ポート5DDRにH'FFを書き込む
;
;----MAINルーチン-----
;これより先がプログラムのメインとなる場所です.
;今回はLEDを2つ点灯するプログラムです.
;
;流れの説明
;まず,LED1とLED2を点灯する.
;次にLOOPラベルのところへジャンプする.(無限ループ)
;
LEDON:  BSET      LED1                      ;LED1を点灯する
        BSET      (____)                    ;LED2を点灯する
LOOP:   JMP       @LOOP                     ;ここでループする
        .END

課題 2.2の説明

  • 8行目:CPUの指定.
  • 14〜16行目:シンボルの定義.ポート5データレジスタのアドレスH'FFFFCAをP5DR,ポート5のbit0をLED1,ポート5のbit1をLED2と定義します.
  • 18行目:セクションの宣言.文章の章のようにプログラムの各章の初めにその章の名称,性格,開始番地などを宣言する記述を行います.このセクションは名称がROM,中身がCODE(プログラム),H'000100番地を先頭にしなさいという指示をしています.
  • 24〜26行目:初期設定,スタックポインタにH'FFFF10を書き込んでいます.ポート5を出力に設定しています.P5DDRに制御コードを書き込みます.付録からP5DDRの番地はH'FFFFC8であることが分かりますから,その番地に,出力ビットに設定したいので1を書き込みます.
  • 36〜38行目:メインルーチン.点灯させるところに0を書き込みます.“BSET LED1”でLED1を点灯させます.具体的にはP5DR(ポート5データレジスタ)のbit0に1をセットします.そして,“BSET (____)”でLED2を点灯させます.具体的にはP5DRのbit1に1をセットします.LOOPで無限ループになっているので,電源を切ったりしない限り,この動作を続けます.

 


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