2016-10-02 3 views
0

マイクロチップPIC uCで新しくなった。私はAVRの経験がありますが、数週間前にPICについて学ぶことにしました。マイクロチップPICのledフラッシュまたは動作がまれな動作

まあ、問題は次のとおりです。私は2つの点滅するledsで私の最初のプログラムをしようとしています、それは非常に簡単です。 RA1とRA2が点滅します。

コード1とコード2を入力すると、プログラムは完全に機能します。 コード1:正常に動作します。

//Code 1. OK. 

main(){ 

while(1){ 
    __delay_ms(1000); //wait 1 second 
    PORTA |= 0b00000110; //RA1 & RA2 on 
    __delay_ms(1000); //wait 1 second 
    PORTA &= 0b00000000; //RA1 & RA2 off 
} 
} 

コード2:正常に動作します。

//Code 2. OK 

main(){ 

while(1){ 
    __delay_ms(1000); //wait 1 second 
    PORTA |= (1 << 1) | (1 << 2); //RA1 & RA2 on 
    __delay_ms(1000); //wait 1 second 
    PORTA &= ~(1 << 1) & ~(1 << 2); //RA1 & RA2 off 
} 
} 

コード3:このコードは機能しません。唯一のledのフラッシュ。私はAVRでこれを使用し、コードは完全に機能します。何が問題ですか? OR演算はRA1演算に影響してはなりません。

//Code 3. Don't work. Only RA2 flash. 

main(){ 

while(1){ 
    __delay_ms(1000); //wait 1 second 
    PORTA |= (1 << 1); //RA1 on 
    PORTA |= (1 << 2); //RA2 on 

    __delay_ms(1000); //wait 1 second 
    PORTA &= ~(1 << 1); //RA1 off 
    PORTA &= ~(1 << 2); //RA2 off 
} 
} 

ありがとうございました。

答えて

2

PIC I/Oレジスタは、リード・モディファイ・ライトを使用します。場合によっては、プログラムで期待した論理値ではなく、ピンから電圧を再読み込みする可能性があります。これは、出力ピンに何らかの静電容量があると、ピンに指示する命令のシーケンスよりも遅く値を変化させる場合に特に当てはまります。

3番目のケースでは、PORTAのピンを非常に迅速に連続して変更しようとしています。これは、コードで意図したのではなく、出力に実際の電圧をラッチするために2番目の値を引き起こす可能性があります。

main(){ 

unsigned char output = 0; 

while(1){ 
    __delay_ms(1000); //wait 1 second 
    output |= (1 << 1); //RA1 on 
    PORTA = output; 
    output |= (1 << 2); //RA2 on 
    PORTA = output; 

    __delay_ms(1000); //wait 1 second 
    output &= ~(1 << 1); //RA1 off 
    PORTA = output; 
    output &= ~(1 << 2); //RA2 off 
    PORTA = output; 
} 
} 
+1

多くのPICには、出力ラッチレジスタがあります。これらのレジスタは、書き込む値のみを含むため、出力を制御するのに適しています。 AKA。 LATA対PORTA –

+0

答えをありがとう、両方の解決策は私のために働いている。 AVRではPORTXレジスタにこの種の問題はありません。 –

+0

@JuanLuis PIC以外のマイクロコントローラでは、これは問題ではありません。なぜ新しいデザインでPICを使うのか、私には分かりません。 – Lundin

1

を必ずするLATxポート(出力ラッチ)に書き込み、PORTxから読み:あなたが登録PORTAをシャドウする変数を使用する必要があるような場合には

PORTxへの書き込みは、常に頭痛を引き起こします。

+0

ありがとうございました!私はします! –

関連する問題