Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

01/12/2013 #1


Problema de compilación en mikroC PRO para el PIC16F88
Hola. Soy microset. He hecho algunos proyectos con microcontroladores en ensamblador, pero no tengo mucha experiencia en C.
Me enviaron este código fuente, pero necesito la cooperación de alguien con mas experiencia para encontrar la solución a varios errores compilando en mikroC PRO para escribir en la eeprom 24LC256 con el PIC16F88.
El primer error es en la línea 32 y es "while expected, but 'Soft_I2C_Stop' found".
El código es para escribir en la eeprom el binario "(1110001)" y leer este dato en el puerto B del PIC.
Agradezco cualquier cooperación. Gracias.

El siguiente es el código fuente:

Código:
//16F88_I2C.C
//Variables de conexión I2C
sbit Soft_I2C_Scl at RA1_bit;
sbit Soft_I2C_Sda at RA2_bit;
sbit Soft_I2C_Scl_Direction at TRISA1_bit;
sbit Soft_I2C_Sda_Direction at TRISA2_bit;
// Fin de declaración de variables de conexión.
//Declaración de variable.
unsigned short DATO;
void main() {
 OSCCON=0x60;                //Oscilador interno a 4MHz (TCI=1 us).
//while (OSCCON.IOFS==0);     //Esperar mientras el oscilador está inestable.
ANSEL=0x00;                 //Bits AN6:AN0 como E/S digital.
Soft_I2C_Init();            //Inicializa la comunicación I2C.
//Escritura
Soft_I2C_Start();           //Envía una señal de START.
Soft_I2C_Write(0b10100000); //Byte de Control. Operación de escritura.
Soft_I2C_Write(0x3B);       //MSByte de dirección.
Soft_I2C_Write(0x00);       //LSByte de dirección.
Soft_I2C_Write(0b11110001); //Dato que será escrito.
Soft_I2C_Stop();            //Envía una señal de STOP.
Delay_ms(5);                //Ciclo interno de escritura.
//Lectura.
Soft_I2C_Start();           //Envía una señal de START.
Soft_I2C_Write(0b10100000); //Byte de Control. Operación de escritura.
Soft_I2C_Write(0x3B);       //MSByte de dirección.
Soft_I2C_Write(0x00);       //LSByte de dirección.
Soft_I2C_Start();
Soft_I2C_Write(0b10100001); //Byte de Control. Operación de lectura.
do{
 dato=Soft_I2C_Read(1);     //Lee un dato y responde con ACK.
}
Soft_I2C_Stop();            //Envía una señal de STOP.
portb=dato
}
02/12/2013 #2
Moderador

Avatar de D@rkbytes

Microset dijo: Ver Mensaje
El primer error es en la línea 32 y es "while expected, but 'Soft_I2C_Stop' found".
El código es para escribir en la eeprom el binario "(1110001)" y leer este dato en el puerto B del PIC.
Mirando tu código, le falta un while(expression) después del bucle do.
Pero eso generará un posible error en la lectura de la memoria EEPROM al incluir Soft_I2C_Read(0) y Soft_I2C_Stop() dentro del bucle y eso no te permitirá ver el valor que quieres leer.

Lo que puedes hacer para leer solo una vez el valor escrito en la EEPROM, es eliminar el bucle do y a continuación generar un bucle infinito con while(1);

Probablemente también funcione el programa sin incluir bucles y tan solo dejarlo correr hasta que termine, ya que solo quieres escribir y leer solo una vez el valor que se grabó en la EEPROM.

También te hace falta declarar el puerto B como salidas, o no podrás ver el valor escrito en la memoria por el puerto B, ya que los puertos sin configurar se mantienen como entradas. (Por defecto = TRISX = 0xFF)

Suerte.
02/12/2013 #3


Gracias D@rkbytes por tu cooperación. Compilación y programación perfectas gracias
a Foros de electrónica y a tí.
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.