2016-07-10 16 views
3

PIC 12F675をプログラムして、GPIO 0ピン(ピン番号7)に接続されたLEDダイオードを点滅させようとしました。遅延ループのPICアセンブリコードがブレッドボードで動作しない

私はデジタルモードにピンを設定している

clrf ANSEL 

私は出力としてそれらをすべて設定している:

clrf TRISIO 

をし、最終的に、これは私が使用したループです:

     ;this delay loop should consume 1 000 000 ticks 
        ;which is 1 second approximately 
movlw 0xff   ;assigned the highest 8bit value to accumulator 
movwf 0x20   ;moved the value to general purpose register 20 
movwf 0x21   ;moved the value to GPR 21 
clrw     ;cleared the working register (accumulator) 
movlw 0x15   ;assigned the value 15 to accumulator 
movwf 0x22   ;moved the value to GPR 22 

bsf GPIO,0  ;set the first pin high 

loop1 

decfsz 0x20, 1 
goto loop1 
decfsz 0x21, 1 
goto loop1 
decfsz 0x22, 1 
goto loop1  ;nested loops to delay further action 

bcf GPIO,0   ;set the first pin low 

そして、これは私が最初の場所にチップを設定するのに使ったコードです:

__CONFIG _FOSC_INTRCIO & _WDTE_OFF & _PWRTE_ON & _MCLRE_OFF & _BOREN_OFF & _CP_OFF & _CPD_ON 

私の問題は、MPLAB Xでプログラムをコンパイルし、それを段階的にデバッグする場合、プログラムの実行に問題はありません。ビットGPIO 0は確かにループに従って状態を変更します。しかし、チップをブレッドボードに接続すると、LEDが点滅せず、ちょうど点灯しません。

私の質問です:問題は発振器の構成が不良である可能性がありますか? (私は100 nFのデカップリングセラミックコンデンサも使用しています)

私はかなり多くのコードバリエーションを試しました。アドバイスは大歓迎です。私が使用

全体.ASMコード:

  list p=12F675 
#include <p12F675.inc> 

    __CONFIG _FOSC_INTRCIO & _WDTE_OFF & _PWRTE_ON & _MCLRE_OFF & _BOREN_OFF & _CP_OFF & _CPD_ON 

    OSCCAL equ 0x90 
    TRISIO equ 0x85 
    ANSEL equ 0x9f 
    GPIO equ 0x05 

    org 0x00 

    bsf 0x03,5  ;bank1 

    movlw b'00111100' ;osccal value 
    clrf OSCCAL 
    movwf OSCCAL ;osccal set 

    movlw b'11111110' ;ansel value 
    movwf ANSEL  ;set pin AN0 as digital I/O 

    movlw b'11111110' ;trisio value 
    movfw TRISIO ;set pin GPIO0 as output 
    clrf TRISIO 


    bcf 0x83,5  ;bank0 

    clrf GPIO  ;clear GPIO port 

start 

    movlw 0xff 
    movwf 0x20 
    movwf 0x21 
    clrw 
    movlw 0x15 
    movwf 0x22 


    bsf GPIO,0 

loop1 
    decfsz 0x20, 1 
    goto loop1 
    decfsz 0x21, 1 
    goto loop1 
    decfsz 0x22, 1 
    goto loop1 


    bcf GPIO,0 

    movlw 0xff 
    movwf 0x20 
    movwf 0x21 
    clrw 
    movlw 0x15 
    movwf 0x22 


loop2 
    decfsz 0x20, 1 
    goto loop2 
    decfsz 0x21, 1 
    goto loop2 
    decfsz 0x22, 1 
    goto loop2 

    goto start 

    end 
+0

ウォッチドッグタイマーはオンまたはオフですか? –

+0

私はこのコードを生成しました:_WDTE_OFF、私はそれがオフだと思います。 すべての生成済みコードビットコード:__CONFIG _FOSC_INTRCIO&_WDTE_OFF&_PWRTE_ON&_MCLRE_OFF&_BOREN_OFF&_CP_OFF&_CPD_ON – Avo

+0

@Aboe質問を編集して詳細を追加してください。 –

答えて

1

すべてがコンパレータの構成を除いて、OKに見えます! GP0、GP1、GP2をデジタルI/Oピンとして使用するために、コンパレータを無効にするためのコードを挿入します(デフォルトはオン)。

bcf  STATUS,RP0 ;Bank 0  
movlw 07h  ;Set GP<2:0> to digital IO 
movwf CMCON  ;digital IO 
+0

あなた、私の永遠の感謝をお持ちですか?これは本当に私の問題を解決しました!あなたの時間と努力をありがとう:) – Avo

関連する問題