PICを、アセンブリ言語のプログラムで使う。

PICで電子工作をするため、アセンブリ言語プログラムを使い始める。

当ブログをご覧いただき、ありがとうございます。
ご注意事項:
記載内容には、十分注意しておりますが、勘違い、記憶違い、理解不足、思い込み等が無いとは限りませんので、申し訳ありませんが、 記載内容の正確性は保障致しません(出来ません)。
従いまして、このブログの内容を参考にする事に起因して生じる、または 生じた、いかなる事態にも、当方は何の責任も取れませんので、 参考にされる場合は、自己責任にてお願い致します。
このブログのアセンブリ言語に関する説明には、PICで電子工作するのに必要な事柄以外(私のレベルで)は出てきません、ご了承願います。

プログラムの書き方。

アセンブリ言語でプログラムを書く、書き方があります。

 

下プログラムは、アセンブリ言語でプログラムを書いたものです(一部省略しています)、上の行から説明。


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

 

今回はここまでです。