例題2.1 LEDを点灯するプログラム
LED(ポート5のbit0に接続されている)を点灯するプログラムを使って,LEDを点灯させてみましょう. このプログラムではプログラム作成の基本的な流れとH8にプログラムを書き込むまでの流れを学習します. |
; LEDON.SRC (c)yas@E-SYS Lab.
;**********************************
;* LED点灯プログラム *
;**********************************
;
;------CPUの指定-------
;H8には色々なCPU機種が存在します.
;ここではどの機種のCPUを使用するかを宣言します.
.CPU 300HA
;
;----シンボルの定義------
;H8内部ではすべてアドレスで処理されます.
;しかし,毎回アドレスを打ち込んでいると面倒臭いし,間違えます.
;ここではそのアドレスに名前を付けるショートカット作業を行っています.
;今回はマザーボード右下のLEDのついているポート5を使用するので
;ポート5データレジスタ(ポート5の入出力データが入る場所)にP5DRと名前をつけます.
;また,ポート5のbit0にもLED1と名前を付けます.
;.sectionではセクションの名称,性格,プログラムの開始番地を宣言します.
;
P5DR .EQU H'FFFFCA ;ポート5データレジスタ
LED1 .BEQU 0,P5DR ;ポート5のbit0をLED1で表す
;
.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を点灯するだけのプログラムです.
;
;流れの説明
;まず,LED1を点灯する.次にLOOPラベルのところへジャンプする(無限ループ).
;
LEDON: BSET LED1 ;LED1を点灯する
LOOP: JMP @LOOP ;ここでループする
;
.END |
例題 2.1の説明
|
; |
セミコロンから右に書かれた文字はコメントとして扱われます. |
.CPU |
CPUの指定です. |
.EQU |
シンボルの定義をします. |
.BEQU |
Bit単位でシンボルの定義をします. |
.SECTION |
セクションの宣言をします.文章の章のようにプログラムの各章の初めにその章の名称,性格,開始番地などを宣言する記述をします.プログラムをいくつかのセクションと呼ばれる管理単位に分割できるようになっていて,このセクションは名称が ROM,中身がCODE(プログラム)としています.また,このプログラムでは,これ以降のプログラムはH'000100番地を先頭にしなさいという指示をしています. |
.END |
プログラムの終わりを示します.必ず付けて下さい. |
今回新たに使われたニモニック
MOV MOVe |
ソースオペランドの内容をデスティネーションオペランドに書き込みます |
Ex) MOV.L #H'FFF10,ER7 ;#H'FFF10をER7に書き込みます |
|
BSET BitSET |
デスディネーションオペランドの指定された 1bitを「1」にセットします |
Ex) LEDON: BSET LED1 ;LED1を「1」にセット |
|
JMP JuMP |
指定した実行アドレスにジャンプします |
Ex) JMP @LEDON ;LEDONラベルへジャンプ |
|
BSET |
デスティネーションオペランドの指定された 1bitを「1」にビットセットします |
Ex) BSET LED1 ;LED1を1にセットします |