1

最近、18 個の PIC 4500 を使い始めました。アセンブリでプログラムする最初の試みは、ループで 1 つの LED を点滅させることでした。ただし、私はこの言語でのプログラミングの経験があまりないため、他のコード スニペットに頼って作業を開始する必要がありました。私のコードは以下の通りです:

#include<p18f4550.inc>

CONFIG WDT = OFF
CONFIG MCLRE = ON
CONFIG DEBUG = ON
CONFIG LVP = OFF
CONFIG FOSC = INTOSCIO_EC

ORG 0


Delay1 res 2
Delay2 res 2


Start: 
        CLRF PORTB
        CLRF TRISB
        CLRF Delay1
        CLRF Delay2


MainLoop:
    BSF PORTB,1
    GOTO DelayA


DelayA:
    DECFSZ Delay1,1 
    GOTO DelayA
    BCF PORTB,1
    GOTO DelayB

DelayB: 
    DECFSZ Delay2,1
    GOTO DelayB
    GOTO MainLoop 

end

なぜうまくいかないのか理解できませんが、命令サイクル速度 (1 MHz と思われます) と関係があるのではないかと考えており、遅延が極端に短くなっています。

どんな助けでも大歓迎です!

4

1 に答える 1

0

1. 切り替えているピンの Tri-State を設定してみてください。入力か出力かを示す必要があります。この場合は出力です。

お気に入り

#define D0_1Tris B'11001111'

movlw   D0_1Tris    ; set direction so LEDs D0 & D1 are outputs
movwf   TRISA       ; all others are inputs (high-z)

2. A/D が I/O デジタルとして設定されていることを確認してください

clrf ANSEL ; configure A/D I/O as digital (選択した I/O と多重化されているペリフェラルに関係なく、コンパレータもクリアする必要がある場合があります)

3. また、リセットベクターを使用することを忘れないでください

ORG 0x000 ; processor reset vector

nop         ; required by in circuit debugger

goto    Init            ; go to beginning of program

4 . 遅いクロック レートで試して、短い遅延が原因であるかどうかを判断します。遅延の問題である場合は、タイマーを実装して、トグル信号を 50-50 デューティ サイクルにします (これを p18f4550 に変更する必要があることに注意してください。これは pic16 の例から取得したものです)。

于 2013-07-09T10:36:27.063 に答える