1

wreg の設定ビット数をカウントするサブルーチンを書いていますが、サブプログラムの最後で return ステートメントに到達すると、return ステートメントを際限なく繰り返すだけです。私はPICとアセンブリに慣れていないので、ばかげたことをしただけだと確信していますが、まだ解決できていません。どんな助けでも大歓迎です。

これが私のコードです:

COUNT       equ 0x00

NUMBER      equ 0x01

BITS        equ 0x02

;bitcounter subprogram counts the number of set bits in a byte

BITCOUNTER:

Loop1   rlcf NUMBER,f   ;rotates one bit of number into carry flag, store rotated number

    btfsc STATUS, C     ;skips next line if carry is clear

    incf COUNT, f   ;add one to count, store in count

    bcf STATUS, C   ;clear carry flag

    decfsz BITS

    goto Loop1

    movf COUNT, 0   ; put bit count into W register
return 

START

        movlw   0x0008

        movwf   BITS

        movlw   0xF2

        movwf NUMBER    ;stores input as "number"

        call BITCOUNTER

    end
4

2 に答える 2

2

私はPICプログラミングに不慣れで、まだコードをPICにアップロードしていません(まだプログラマーの配信を待っています)が、PICが何かをする必要があるため、最後の「goto start」で問題が解決すると思います。「goto start」命令はPICをループに入れるため、「停止」を試みる必要はありません。不在の場合、PICは最後の指示を無限に繰り返すだけで「止まらない」ことを処理しようとしていると思います。

もしそうなら、代わりに次のようなものを追加することもできます(私が正しく設定したと仮定して):

loop2 nop
      goto loop2

コードの最後に。PICは、リセットするまで(または、必要に応じて割り込み、WDT、またはその他の機能をセットアップすることができます)、無操作で実行し続けます。

于 2013-01-03T07:40:20.553 に答える
1

これを試して...

include "p18f452.inc"  ;from dir X:\Program Files (x86)\Microchip\MPASM Suite

COUNT       equ 0x00
NUMBER      equ 0x01
BITS        equ 0x02

;bitcounter subprogram counts the number of set bits in a byte
            org 0

START
            movlw   0x0008
            movwf   BITS
            movlw   0xF2
            movwf   NUMBER    ;stores input as "number"
            call    BITCOUNTER
            goto    START

BITCOUNTER:
Loop1       rlcf   NUMBER,f   ;rotates one bit of number into carry flag, store rotated number
            btfsc  STATUS, C     ;skips next line if carry is clear
            incf   COUNT, f   ;add one to count, store in count
            bcf    STATUS, C   ;clear carry flag
            decfsz BITS
            goto   Loop1
            movf   COUNT, 0   ; put bit count into W register
            return

            end

オシレータ、ウォッチドッグなどの MCPU 構成設定がないことを忘れないでください...コードをテストするだけです!

于 2012-04-21T12:37:41.127 に答える