Hola que tal, estoy empezando con C18, vengo de CCS y decidí pasarme y me gustaría que me ayudaran con una macro que quiero hacer, estuve leyendo por internet y mas o menos la tengo lista pero no me compila:
Este es el main:
#include <adc.h>
#include <usart.h>
#include <stdio.h>
#include "mylibs.h"
#pragma config WDT = OFF //WDT apagado
int result;
void main (void){
TRISA = 0xFF; TRISB = 0x00; PORTB = 0x00;
OpenADC(ADC_FOSC_RC & ADC_RIGHT_JUST,ADC_CH0 & ADC_INT_OFF & ADC_REF_VDD_VSS, ADC_1ANA);
SetChanADC(ADC_CH0);
OpenUSART(USART_ASYNCH_MODE & USART_EIGHT_BIT & USART_BRGH_LOW, 6); //8928 baudios
printf("Programa de prueba en C18 para PIC18F4550\n\r");
while(1){
result = Read_ADC();
PORTB = result;
printf("El valor del ADC = %u \n\r",result);
Set_baud(4000000,9000,0);
}
}
Mylibs.h y Mylibs.c que son librerias que voy haciendo:
#ifndef mylibs
#define mylibs
int Read_ADC (void);
//Macro para el calculo de baudios automatico
#define Set_baud (unsigned long XTAL, unsigned short long baud, char mode){ \
if((((XTAL/baud)/16)-1)<255){ \
return (unsigned int)(((XTAL/baud)/16)-1); \
} \
else if((((XTAL/baud)/64)-1)<255){ \
return (unsigned int)(((XTAL/baud)/64)-1); \
} \
else{ \
//#error No se pudo establecer un baud rate correcto \
} \
}
#endif
/*Librerías varias*/
//Lectura completa del ADC, toma la conersion, espera y
//lee los registros
int Read_ADC (void){
ConvertADC(); //conversion
while(BusyADC()); //espero a que termine
return ReadADC(); //tomo el valor y lo retorno
}
//Macro para el calculo de baudios automatico
#define Set_baud (unsigned long XTAL, unsigned short long baud, char mode){ \
if((((XTAL/baud)/16)-1)<255){ \
return (unsigned int)(((XTAL/baud)/16)-1); \
} \
else if((((XTAL/baud)/64)-1)<255){ \
return (unsigned int)(((XTAL/baud)/64)-1); \
} \
else{ \
//#error No se pudo establecer un baud rate correcto \
} \
}
La macro esta ahí definida y cuando la uso en el main me dice que hay un error de sintaxis y me lleva ahí en el main donde la use y no se que pueda ser. La idea de la macro es usarla para calcular los baudios automaticamente para usarla en la función:
OpenUSART(USART_ASYNCH_MODE & USART_EIGHT_BIT & USART_BRGH_LOW, 6); //8928 baudios
Que con la macro mi idea seria que quedara por ejemplo:
OpenUSART(USART_ASYNCH_MODE & USART_EIGHT_BIT & USART_BRGH_LOW, Set_baud(4000000,9000,0));
Por eso necesito que retorne el valor del número que calculé pero no se por qué no me funciona, no se si la tengo que definir en el .h y como hacerlo y si se fijan hay una directiva #error en la macro que esta como comentario porque si la coloco me tira un error el compilador C18 y el proceso como si fallara el programa.
Perdon por tantas preguntos es que recien estoy empezando espero puedan ayudarme gracias!!