2017-10-26 14 views
0

私はAtmega16 ICを使用して、出力ピンPORTC1を開いて500ms間LEDを点滅させようとしています。 AtmelStudio7で次のコードを使用すると、エラーが発生しました。エラーをクリックすると、数値1と "PORTC"の間のスペースを指しています。私は、コンパイラは理解していないと思います。「Cのピン1を指し示したい」と思って、「1」が別のところに行くと思います。どうぞ、私を正しい方向に向けるようにしてください。仕事とエラーが表示されませんコード:Atmega16 [期待値;前の数値定数]

#define F_CPU 8000000UL 
#include <avr/io.h> 
#include <util/delay.h> 

int main(void) 
{ 
    DDRC.1 |= 1>>0; 
    PORTC.1 &= ~(1>>0); 
    while (1) 
    { 
    PORTC.1 |= (1>>0); 
    _delay_ms(500); 
    PORTC.1 &= ~(1>>0); 
    _delay_ms(500); 
    } 
} 

しかし、私はピン0(数字を追加することなく、単にDDRC、PORT)を使用していたときに、それが正常に動作します。動作するコードの例:

#define F_CPU 8000000UL 
#include <avr/io.h> 
#include <util/delay.h> 
int main(void) 
{ 
    DDRC |= 1>>0; 
    PORTC &= ~(1>>0); 
    while (1) 
    { 
    PORTC |= (1>>0); 
    _delay_ms(500); 
    PORTC &= ~(1>>0); 
    _delay_ms(500); 
    } 
} 

ここでの違いは、「DDRC」と「PORTC」作業が、期待以下のエラー」を示す、「DDRC.1」と「PORTC.1」を使用していない。前に数値定数 "である。 ご協力いただきありがとうございます!出力に特定のGPIOピンを設定するには

+0

これは、値がマイクロコントローラのPORTCのレジスタアドレスと等しいマクロであり、これはまた、PORTCがuCのPORTCのビットフィールドを含む構造体または共用体でないことを意味します。 – Gaurav

+0

'DDRC.n | = 1 >> >> 0の代わりに' DDRC | = 1 << n'などを使う必要があります( '>>'はあなたの例でも間違っています) – Ctx

+0

助けてくれました。ありがとうございました!正しい方法はこれです DDRC | = 1 << n、 "n"はICのポート番号です –

答えて

0

、あなたがこのアプローチを使用する必要があります

DDRD |= 1 << pin_number; 
DDRD |= 1 << 1; //Shift 1 for 1 bit = PD1 pin set to output. 

同じアプローチは、すべてのレジスタのために行きます。

は、ビットをクリアするには、次の

DDRD &= ~(1 << pin_number); 
DDRD &= ~(1 << 1); //Set PD1 to input 

PORTC.1は、有効なCの文ではなく、あなたがエラーを持っている理由です。

関連する問題