1

ATmega88PA を使用して 2 つのピンのピン変更を探しています。別のピンを使用する必要がある場合は、他の多くのピンを開いていますが、PCINT0 と PCINT2 を使用したいと考えています。私は物事をいじっていて、PCINT0を適切に機能させることができました.PCINT2を機能させようとしたときに問題が発生しました.

PCINT0 を機能させるために行ったのと同じ方法で PCINT2 を定義およびセットアップしても、何も起こりません。何か他のものが何らかの方法で干渉しているかどうかを確認するためだけに、新しいプログラムでもこれを試しましたが、何も解決しませんでした. PCINT0 をすべて削除して、PCINT2 を単独で動作させることができるかどうかを確認しましたが、それでも動作しませんでした。

これが私がPCINT0用に持っていたコードです

DDRC = 0x20; // PORTC,5 is now output
   sbi(PORTC,5);
   USART_Init(51);
   lcd_init(LCD_DISP_ON);
   lcd_clrscr();

PCICR |= (1 << PCIE0);
PCMSK0 |= (1 << PCINT0);

すべてを PCMSK2 と PCINT2 に変更すると、ピンをトリガーしても何も起こりません。ここにATmega88PAデータシートのデータシートへのリンクがあります

4

1 に答える 1

0

この問題は、さまざまなレジスタ フラグの名前が少し紛らわしいことが主な原因であると考えられます。データシートをよく見てみると、PCIE2 と PCMSK2 が PCINT2 を制御していないことがわかります。実際に PCINT16 ~ PCINT23 を制御します。

PCINT0-PCINT7(必要なPCINT2を含む)は、PCICRのPCIE0(すでに設定済み)とPCMSK0(最後のコメントで言及したPCMSK2ではありません)によって制御されます。

したがって、問題を解決するには、最後の行を次のように変更するだけです。

PCMSK0 |=(1 << PCINT0) | (1 << PCINT2)

免責事項: 実際のハードウェアでこれをテストする機会はありませんでした。データシートを再確認してください。

お役に立てれば。

于 2013-10-18T23:02:22.097 に答える