プログラムの書き方

【プログラムを奇麗に書く】

 プログラムを書く時、最も気にしなければならないことは、まず奇麗に
書くことです。これは、上手なプログラムを書くことでは無く、見た目だけ
の話です。つまり、プログラムのリストを見た目に奇麗にすることで、
後から他人が見たり、自分が見直しをする時非常に見やすいということ
が肝心なことだからです。



【奇麗に書くには】

 プログラムリストが奇麗になるようにするには、いくつかのコツがあります。

1.見出しをコメント行で挿入する。
これは単純にプログラムの内容の切れ目毎にコメント行を挿入して
以下のプログラム部分が何をする部分なのかを説明することです。
リストの節目が明確になって読み易くなると同時に、これから何を
する部分だということを意識して読めるのでぐっと楽に読めます。
2.インデントを多用する。
繰り返しや条件を設定する部分はインデント(字下げ)をして範囲が
はっきりするようにします。
しかし、アセンブラの場合は、インデントが使いにくいので、コメント
行を挿入して切れ目を明確にしておきます。
3.ラベルはラベル行だけの独立行にする。
アセンブラの場合、ラベルでプログラムのジャンプ先を指定しますが
これがプログラムを読む時の目印になるので、はっきりと分かるように
独立行として目立つようにします。
4.すべての行にコメントを付ける。
一寸面倒ですが、1行毎に何をしようとしているのかを簡単にコメント
しておきます。あとから読む時にはこれが非常に大きな手がかりに
なります。
5.見出しにプログラム部分の仕様を書いておく。
これもやや面倒ですが、変数の意味と使い方、入力出力条件、外部
出力ピン、動作概要などを見出しのコメント行に詳しく書いておきます。


【プログラム例】

下記は実際に私が作成したプログラムです。多少我流の所があります
が、まあまあわかりやすい方だと思います。

;*************************************************************
;************** RS232C PROCESS *****************************
;**** Preset Baud Rate ****
;************ Define constant for TIMER0 ****
;BaudRate PulseWidth Counter prescale TMR0(BITTMR) width
;  300  3333.33usec 8333  64(5)  130(7E)   3328usec
; 1200   833.33    2083  16(3)  130(7E)   832
; 2400  416.67    1041   8(2)  128(80)   409
; 4800  208.33    521   4(1)  124(84)   198
; 9600  104.17    260   2(0)  122(86)    99
; This TMR0 RATE is used for BAUDRATE parameter as prescaler.
;
;BAUDRATE:boud rate 300 to 9600 at 10MHz clock.
; 5=300bps 3=1200bps 2=2400bps 1=4800bps 0=9600bps
;
BAUDRATE  SET 0   ;preset to 9600bps
BITTMR   SET 086H  ;TMR0 DATA -122
BITTMR1   SET 06AH  ;TMR0 DATA -150
;
;****************************************
; Interrupt process module
;****************************************
INTERRUPT
    BTFSS   INTCON,T0IF  ;TMR0's interrupt?
    RETFIE          ;not, quick return
    BCF    INTCON,T0IF  ;reset T0IF bit
;**** save W register & status register
    MOVWF   WREG      ;save w reg
    SWAPF   STATUS,W    ;status to wreg
    MOVWF   SREG      ;save status
    BTFSC   TXBUSY    ;In send mode
    GOTO   TXNEXT    ;send next bit
    BTFSC   RXBUSY    ;In receive mode
    GOTO   RXNEXT    ;receive next bit
    GOTO   STARTBIT    ;must be start bit
;**** register restore and return
RESTORE
    SWAPF   SREG,W    ;get saved status
    MOVWF   STATUS
    SWAPF   WREG,F    ;get saved wreg
    SWAPF   WREG,W
    RETFIE

;************************************
; Transmission process module
;************************************
PUTCHAR
    BSF    TXBUSY    ;set busy bit
    MOVLW   8       ;bit count
    MOVWF   BITCNT    ;reset bit counter
    MOVLW   1
    MOVWF   EXTRA     ;set stopbit flag
    CALL   TXSTART    ;start send dumy bit
    BCF    INTCON,T0IF  ;reset flag
    BSF    INTCON,T0IE  ;permit TMR0 interrupt
    RETFIE
;**** Send start bit ****
TXSTART
    CLRF   TMR0      ;reset timer
    BSF    STATUS,RP0  ;page 1
    CLRWDT
    MOVLW   BAUDRATE    ;set prescaler
    MOVWF   OPTION_REG
    BCF    STATUS,RP0  ;page 0
    BCF    PORTA,3    ;send start bit
    MOVLW   BITTMR
    MOVWF   TMR0      ;start timer
    RETURN
;****** Interrupt process for Send next bit *****
TXNEXT
    MOVLW   BITTMR    ;timer restart
    MOVWF   TMR0
    MOVF   BITCNT    ;end test
    BTFSC   STATUS,Z
    GOTO   STOPBIT    ;send stop bit
    NEXT   TXBIT
    DECF   BITCNT,F    ;BITCNT-1
    BSF    STATUS,C    ;C on
    RRF    TXREG     ;shift send data
    BTFSS   STATUS,C    ;bit test
    BCF    PORTA,3    ;0 out
    BTFSC   STATUS,C
    BSF    PORTA,3    ;1 out
    GOTO   RESTORE    ;return
;**** Send Stop bit ****
STOPBIT
    MOVF   EXTRA,W
    BTFSC   STATUS,Z    ;end test
    GOTO   DONE      ;goto end
    DECF   EXTRA,F    ;end of stop
    BSF    PORTA,3    ;send 1 for stop bit
    GOTO   RESTORE    ;return
;*** all end of send ****
DONE
    BCF    INTCON,T0IE  ;Disable interrupt
    BCF    TXBUSY    ;reset busy flag
    GOTO   RESTORE    ;return
;***********************************************************


  次のページへ      目次ページへ