プログラムの書き方。
アセンブリ言語でプログラムを書く、書き方があります。
下プログラムは、アセンブリ言語でプログラムを書いたものです(一部省略しています)、上の行から説明。
LIST P=PIC16F627A
INCLUDE "P16F627A.INC"
__CONFIG _EXTCLK_OSC & _CP_OFF & _DATA_CP_OFF & _BODEN_OFF & _MCLRE_ON & _WDT_OFF & _PWRTE_ON & _LVP_OFF
;****************************************************
; Define Constant or Work
;****************************************************
TEMP EQU 020H ;work 020H の書き方は、16進数を表す。
HOUR EQU 021H ;Hour Counter
MINT EQU 022H ;Minutes Counter
・
・
SRCNO EQU 038H ;search program counter
RW SET 1 ;LCD R/W
RS SET 2 ;LCD RS
STB SET 0 ;LCD STROBE
;********************************
; Jumping Vector
;********************************
ORG 0
GOTO INIT
ORG 4
GOTO INTRPT
ORG 08H
;************************************
; Initialize routine
・
・
; Timer initilize
;************************************
INIT
;**** CMCON mode set *****
MOVLW 07H ;degital mode
MOVWF CMCON ;CMCON set
;**** PORT mode set *****
BCF INTCON,GIE ;Interrupt Disable
BSF STATUS,RP0 ;Set page 1
MOVLW 0FH ;lower are input
MOVWF TRISB ;PortB set
CLRF TRISA ;PortA set all output
各行の説明。
LIST P=PIC16F627A ;使用するPIC型番の指定。
INCLUDE "P16F627A.INC" ;P16F627A.INC をインクルード(取り込んで参照)する。
P16F627A.INC ファイルは、下のようなファイルで、MPLAB が持っていて、プログラムで使う定数の定義、レジスタ名の定義、その他が書かれています。
W EQU H'0000' ; H'0000' の書き方は、16進数を表す。
F EQU H'0001'
;----- Register Files------------------------------------------------------
INDF EQU H'0000'
TMR0 EQU H'0001'
・
・
EEDATA EQU H'0008‘
;----- STATUS Bits --------------------------------------------------------
IRP EQU H'0007‘ NOT_TO EQU H'0004
RP1 EQU H'0006‘ NOT_PD EQU H'0003
RP0 EQU H'0005'
Z EQU H'0002‘ DC EQU H'0001'
C EQU H'0000
・
・
_CONFIG _EXTCLK_OSC & _CP_OFF & _DATA_CP_OFF & _BODEN_OFF & _MCLRE_ON & _WDT_OFF & _PWRTE_ON & _LVP_OFF ;コンフィグレーションの設定。
;****************************************************
; Define Constant or Work ;注釈行
;****************************************************
TEMP EQU 020H ;work ;このプログラムで使う汎用レジスタの名前の設定(ここから)。
HOUR EQU 021H ;Hour Counter
MINT EQU 022H ;Minutes Counter
・
・
SRCNO EQU 038H ;search program counter ;このプログラムで使う汎用レジスタの名前の設定(ここまで)。
RW SET 1 ;LCD R/W ;初期値の設定。
RS SET 2 ;LCD RS
STB SET 0 ;LCD STROBE
注釈行は飛ばします。
ORG 0 ;次の行を0番地に置く。
GOTO INIT ;INITに行く。
ORG 4 ;次の行を4番地に置く。
GOTO INTRPT ;INTRPT に行く。
ORG 08H ;次の行を8番地に置く、次のラベルINITは、8番地。
ここからが、実際の処理をする命令がはじまる。
INIT ;ラベル(メモリの番地を表す、INITは8番地の名前と言う事。
;**** CMCON mode set *****
MOVLW 07H ;degital mode ;命令文、ここからが、実際の処理をする命令がはじまる。
MOVWF CMCON ;CMCON set
;**** PORT mode set *****
BCF INTCON,GIE ;Interrupt Disable
BSF STATUS,RP0 ;Set page 1
MOVLW 0FH ;lower are input
MOVWF TRISB ;PortB set
CLRF TRISA ;PortA set all output
各命令文の説明は、次回から、詳しくせつめいする。
まず、プログラムを書く書式について、
LIST P=PIC16F627A から ORG 08H までの記述は、先頭から書く(スペースを入れてはいけない)。
ラベルは先頭から書く(スペースを入れてはいけない)。
;以降は注釈文、プログラムの解説などを記載、プログラムの実行には影響がない。
命令文( BCF INTCON,GIE 等)は、先頭にスペースを1つ以上入れる(先頭から書いてはいけない)。
命令文やラベルの使用文字は、半角英数で、大文字小文字を区別する、先頭の文字はアルファベットに限る。
ラベルを書いて、1つ以上のスペースを入れて、命令文を書いても良い。
例;下の2つの書き方は、同じ意味です。
INIT
BCF INTCON,GIE ;Interrupt Disable
BSF STATUS,RP0 ;Set page 1
INIT BCF INTCON,GIE ;Interrupt Disable
BSF STATUS,RP0 ;Set page 1
今回はここまでです。