error de compilación "expected ')' befoer ';' token"?[SOLUCIONADO]

Llevo un par de horas atascado con esta tontería de programa. Es el ejemplo button pero estoy intentando programar los registros. En todos los comandos que he usado los registros de desplazamiento (<<) me da el mismo error: expected ')' befoer ';' token

Será una tontería pero no veo el error, he probado hasta instalando el AVR studio y sigue dando el mismo error. A alguien se le ocurre que puede ser?

#include <avr/io.h>  //librería de entradas y salidas de los micros AVR
// constants won't change. They're used here to 
// set pin numbers:
#define buttonPin PINB2;     // Pulsador (Pin10 en Arduino)
#define ledPin PORTB5;      // Diodo led (Pin13 en Arduino)

void setup(void);  //Función para configurar el micro

int main(void){
  // read the state of the pushbutton value:
  if(PINB&(1<<buttonPin)){
    PORTB|=(1<<ledPin);
  }
  else{
   PORTB&=~(1<<ledPin);
  }
}

void setup(void) {
  DDRB&=~(1<<buttonPin);   // initialize the LED pin as an output  
  DDRB|=(1<<ledPin);  // initialize the pushbutton pin as an input  
}

He realizado el mismo programa pero en vez de usar main y funciones de C he usado las de Arduino y compila estupendamente, el código que he probado :

const int buttonPin = PINB2;     // Pulsador (Pin10 en Arduino)
const int ledPin =  PORTB5;      // Diodo led (Pin13 en Arduino)

void setup() {
  DDRB&=~(1<<buttonPin);//pinMode(ledPin, OUTPUT);      
  DDRB|=(1<<ledPin);//pinMode(buttonPin, INPUT);   
}

void loop(){
  // read the state of the pushbutton value:
  if(PINB&(1<<buttonPin)){
    PORTB|=(1<<ledPin);
  }
  else{
    PORTB&=~(1<<ledPin);
  }
}

He simulado y los desplazamientos de pines están correctos, el problema está al poner el código en C. He provado con Arduino y Atmel Studio con los mismo errores de compilación.

me parece que el error esta en el if
has puesto PINB en vez de portB

Hasta la noche no puedo probarlo pero no lo veo mal. Port es el registro para sacar 1 o 0. Pin es para leer el estado de las entradas. Ademas si estuviera mal no daria error eo compilador. Eso creo por lo menos. Salu2

La referencia dice variable << numero de bits, y lo esta poniendo alrevez

Hola,
no te puedo aclarar cosas relacionadas con el desplazamiento de bits. Pero he encontrado este documento

http://playground.arduino.cc/Code/BitMath

donde trae una serie de razones para no utilizar esta vía y utilizar pinMode(), digitalWrite() ...
Dice que se ahorra poquito tiempo, y se pierde mucho.

Justamente habia leido todo lo contrario en otro sitio diciendo que era mejor programar ek registro. Se pierde mucha velocidad de hacer blink 90000 veces al segundo, se pasa a 2,6 millones de al segundo. El tamaño de los scketch cae a la mitad. Yo creo que es bueno aprender a modificar registros y segun necesidad programar con funciones o con desplazamiento de bits. Sigo sin comprender porque no va.

He modificado el primer post para confirmar que el problema no está en los desplazamientos de registros, eso lo hace bien.

Hola,
dando palos de ciego, he intentado utilizar patrones binarios, y no da error

void setup() 
{
   // pines 3  y 5 output
   DDRD = 0b00100100; 
}

void loop() 
{
   if( PIND3 & 0b00000100)  
      PORTD |=  0b00100000 ;
   else
      PORTD &= 0b11011111;
}

No sé si te vale, tal vez te sirva para seguir investigando.

Gracias curro. Es el ; que he puesto al define. Con eso el programa compila bien como suponia era una tonteria. Gracias por las ideas.

Hola,
me alegro de que hayas solucionado, vaya fallo más tonto!

De todas formas, no entiendo por qué pones
#define ledPin PORTB5

¿NO tendría que ser esto otro?
#define ledPin PINB5

En realidad los dos son correctos. Igual que si pongo 5. Al fin y al cabo con los bits de desplazamiento le digo cuanto se tienen que desplazar el bit 00000001 hacia la izquierda. Y son 5 posiciones. La libreria /io tiene a su vez includes con port y pin igual a 5. No se si esta muy claro lo que he intentado explicar. Salu2