1

pic 10f322 の mpasm を使用してアセンブリ プログラムを作成しました。このプログラムで TABLE 内のすべての文字を読み取り、これらの値を WREG に戻すようにしたいと考えています。私のコードが実行されると、レジスタ FSR に格納されている値が読み取られ、指定されたアドレスに格納されている値がフェッチされると想定されます。次に、この FSR 値がインクリメントされて次の文字が取得されます。ただし、プログラムを実行すると、ポインターは正しくインクリメントされますが、メモリに値が保存されていないように見えるため、コードはジャンク値を取得しています。ディレクティブが機能しないのはなぜですか?

            org     0x0000
            FSR     Equ     0x04
            INDF    Equ     0x00
    START
            movlw   TABLE
            movwf   FSR     ; move w value int address FSR
    Loop:   movf    INDF, 0 ; move character pointed in table back to w reg
            incf    FSR     ; increment incfg
            goto    Loop
    TABLE:
            db    "HELLO"
            db    "Man"

    END

プログラムメモリにデータを保存したくありません。代わりに、データをデータメモリに入れたいと思います。DB のようにこれを簡単に実行できるアセンブリ ディレクティブはありますか? 私のアセンブラは MPASM です。

4

1 に答える 1

3

およびレジスタを介してコードメモリにアクセスすることはできません。この 2 つのレジスタは、データメモリにアクセスするためのものです。代わりにルックアップ テーブルを使用します。FSRINDF

        movlw  1                ;Read second byte in Table
        movwf  TableIndex       ;Store index
        call   ReadLookupTable  ;Perform table read
        ...


ReadLookupTable   
        movlw  high Table
        movwf  PCLATH
        movlw  low Table
        addwf  TableIndex, w       ;Add index to table pointer           
        movwf  PCL                 ;Perform computed jmp
Table   
        retlw 10 
        retlw 11
        ...
于 2013-06-08T14:22:28.203 に答える