楽天市場
[無料でホームページを作成] [通報・削除依頼]

プログラム領域をROMのように使う


プログラムメモリをROMのように使う(2013.11.20 コード短縮により加筆修正)

PIC10F322はROMを搭載していませんが、
データが7ビットで収まるのなら、1ワードを7ビットx2の
ROMのように使うことができます。

以下はプログラム領域に書き込んだ文字列を
シリアルポートに出力する例です。

データ中上位7ビット、下位7ビットのいずれかが0のとき、0の場所で文字列の出力を停止します。

出力する文字数が少ないときは役に立ちませんが、文字数が多いときにはコードの節約になります。

※上位7ビットが0のときは判定せずそのまま出力。0を表示しても何も表示されない。



org 0040

M001:
DW 0x0d*0x80+0x0A      ;改行
DW 'A'*0x80+'D'             ;ADRS+00+01+02+03+04+05+06+07
DW 'R'*0x80+'S'            
DW '+'*0x80+'0'            
DW '0'*0x80+'+'            
DW '0'*0x80+'1'             
DW '+'*0x80+'0'           
DW '2'*0x80+'+'            
DW '0'*0x80+'3'             
DW '+'*0x80+'0'            
DW '4'*0x80+'+'            
DW '0'*0x80+'5'             
DW '+'*0x80+'0'            
DW '6'*0x80+'+'
DW '0'*0x80+'7'
DW 0x0d*0x80+0x0A         ;改行
DW 0


として、以下のサブルーチンを定義


PUT2:                                 ;2文字出力
        MOVWF    PMADRL       ;PMADRをセット
        CLRF        PMADRH       ;データのアドレス<0x0100
LOOP_P:
        BSF          PMCON1,RD  ;フラッシュ読み出し
        NOP
        NOP
        INCF         PMADRL,F     ;PMADRL = PMADRL + 1
        RLF          PMDATL,F      ;Carry=a, PMDATL=bcdefghX
        RLF          PMDATH,W    ;Carry=0, W=0ABCDEFa
        RRF          PMDATL,F      ;Carry=X, PMDATL=0bcdefgh
        CALL         PUTC            ;最初の文字を表示(シリアルポート出力)
        MOVF        PMDATL,W    ;W=PMDATL
        skpnz                           ;W>0
        RETURN                        ;リターン

        CALL          PUTC            ;次の文字を表示(シリアルポート出力)
        GOTO        LOOP_P         ;ループ



<メインルーチンでの記述>

        MOVLW       M001
        CALL           PUT2


<出力結果>

ADRS+00+01+02+03+04+05+06+07









































































.