2014-11-04 38 views
0

我有folloving代碼:AVR PINx.n不工作

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

int main(void) { 
    DDRB = 0xFF;//B output 
    DDRD = 0x00;//D input 
    PORTB = 0x00;//LED off 
    PORTD = 0xFF;//Pull-ups activated 
    while(1) { 
    if(PIND.4==0) { 
     PORTB &= ~(1<<PB0); /* LED on */ 
     _delay_ms(100); 
     PORTB |= 1<<PB0; /* LED off */ 
     _delay_ms(100); 
    }} 
    return 0; 
} 

然而,試圖建立它在愛特梅爾Studio時,它給出了一個錯誤:

Error 1 expected ')' before numeric constant 

行號指if(PIND.4==0) { 如果我刪除'PIND'和'4'之間的點,它會生成但程序不起作用。 我在做什麼錯?

回答

1

PIND.4寄存器訪問風格可能沒有在您的特定ioXXXX.h文件中定義。

一個簡單的替換是

if(PIND & (1<<4) == 0) { 
+1

我不認爲它是在*的AVR頭的任何*定義。 – 2014-11-04 20:57:03

+0

這種風格在許多來源中都有描述。喜歡那裏:https://docs.google.com/presentation/d/1rmB6VRZoC46RKIF8Wp4n4IfMHdYZIkggmYX1fjA0IBY/preview?slide=id.p26 – Kestis 2014-11-04 21:06:12

+1

「特色編碼與CodeVision AVR C編譯器」 – 2014-11-04 21:30:46