Go Down

Topic: error de compilación "expected ')' befoer ';' token"?[SOLUCIONADO] (Read 1 time) previous topic - next topic

ionhs

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?

Code: [Select]
#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 :
Code: [Select]
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.

maxid

me parece que el error esta en el if
has puesto PINB en vez de portB
El que pregunta aprende, el que responde aprende a responder.

ionhs

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

maxid

La referencia dice variable << numero de bits, y lo esta poniendo alrevez
El que pregunta aprende, el que responde aprende a responder.

curro92


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.


ionhs

#5
May 27, 2013, 09:32 pm Last Edit: May 27, 2013, 10:14 pm by ionhs Reason: 1
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.

curro92

#6
May 28, 2013, 08:33 pm Last Edit: May 28, 2013, 08:42 pm by curro92 Reason: 1
Hola,
dando palos de ciego, he intentado utilizar patrones binarios, y no da error
Code: [Select]

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.


ionhs

#7
May 28, 2013, 08:55 pm Last Edit: May 28, 2013, 08:57 pm by ionhs Reason: 1
Gracias curro. Es el ; que he puesto al define. Con eso el programa compila bien como suponia era una tonteria. Gracias por las ideas.

curro92

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


ionhs

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

Go Up
 

Quick Reply

With Quick-Reply you can write a post when viewing a topic without loading a new page. You can still use bulletin board code and smileys as you would in a normal post.

Warning: this topic has not been posted in for at least 120 days.
Unless you're sure you want to reply, please consider starting a new topic.

Note: this post will not display until it's been approved by a moderator.
Name:
Email:

shortcuts: alt+s submit/post or alt+p preview