no puedo compilar un programa en C para pic

Hola a todos
miren, tengo un problema pues estoy tratando de hacer un circuito con un decodificador de tono el cual segun el tono le envia al pic un 0 o un 1 por cada una de sus cuatro salidas.
El problema es que desarrolle un programa en c bastante sencillo pero que no he podido compilar pues soy un poco novato y la verdad es que los programas que he bajado son todos pagados.
Alguien podrìa explicarme como hacerlo.
Muchas gracias de antemano.

PD. les dejo adjunto el programa en c para que lo vean
 

Adjuntos

  • programa_c_367.doc
    23 KB · Visitas: 67
Segun veo tu codigo es para compilarse con el ccs, asi que o te lo compras o te lo compras, ya que el demo no te dejara especificar el 16f84 a menos que consiguieras el .h por separado, pero creo que seria mas lio.

Mira yo te ofreceria compilarlo y pasarte el .hex, pero no creo que te ayude en mucho, o no se, ya que a cualquier modificacion y te quedarias igual.

Bueno a ver que piensas.

Saludos,
 
gracias por responder
ya habia visto la posiblidad de comprarme el ccs, pero debo ahorrar dinero primero.
Quizas me puedas enviar el archivo compilado porfavor ya que no tengo mucho tiempo y quizas no logre juntar el dinero.
Te agradezco de nuevo.
Saludos.
 
Hola Sidtho, va pues ahí tienes tu navidad, el .zip con todos los archivos incluyendo el .hex, solo tenias mal un paréntesis correspondiente al primer condicional if, fuera de eso lo compilo correctamente, que conste que no cheque la lógica del programa, imagino que tu lo haz de haber hecho .

Saludos y suerte,
 

Adjuntos

  • programa_145.zip
    27.9 KB · Visitas: 73
Descargue el demo del programa; y aun no puedo compilara ningun programa basico que hice, con el 16f776a,
#include <16f876a>
#divece ADC=8
#fuses XT, NOWDT, NOPROTECT, NOLVP, PUT, BROWOUT
#use delay(clock=4000000)
#use standard_oi(b)
//#use standard_oi(a)
int valor=0x00;
void toma_adc(void)
{ set_adc_channel(0);
delay_ms(1);
valor= read_adc();
delay_ms(1);
}
void main()
{
setup_adc(ADC_CLOCK_INTERNAL);
setup_adc_ports(RA0_analog);
do {
toma_adc();
output_b(valor);
}while(true);
}

Ayuden porfavor; saludos.
 
Mi estimado yassirT, si no me equivoco el demo del ccs 4 no te dejara especificar ese pic, debido a que viene limitado (por eso es demo). Lo debiste haber visto en la pagina de descarga del mismo ccs.

Fuera de eso, esta linea:
Código:
#include <16f876a>

Deberia ir asi:
Código:
#include <16f876a.h>

Pero principalmente deberias conseguir la version completa del ccs. Eso, o en vez de usar el 16f876 usa el 16f877 que si viene soportado en el demo, la diferencia es que tendrias mas capacidad de dispositivo (28 -> 40) y me parece que el costo es casi el mismo. Ah eso si que no te libraras del limite de 30 dias.

Saludos,
 
Me sale siempre error en la parte de printf(lcd_putc,"\fADC = %41d",q);
sobre todo me resalta la variable q, a ver si me apoyan en que me he equivocado

Código:
#include <16f877a.h>
#device adc=10
#fuses XT,NOWDT
#use delay(clock=4M)
#define lcd_data_port getenv("SFR:PORTC")
#define lcd_enable_PIN  PIN_C0
#define lcd_rs_pin      pin_c1
#define lcd_rw_pin      pin_c2
#define lcd_data4       pin_c4
#define lcd_data5       pin_c5
#define lcd_data6       pin_c6
#define lcd_data7       pin_c7
#include <lcd.c>

void main(){
   int16 q;
   float p;
   
   setup_adc_ports(AN0);
   setup_adc(ADC_CLOCK_INTERNAL);
   lcd_init();
   for(;;{
      set_adc_channel(0);
      delay_us(20);
      q=read_adc();
      p=5.0*q/1024.0;
      
      printf(lcd_putc,"\fADC = %41d",q);
      printf(lcd_putc,"\nVoltage = %01.2fV",p);
      delay_ms(100);
   }
}
 
Última edición por un moderador:
Hola,
%d generalmente solo para tipos de 8 bits y como la variable 'q' es de 16 bits necesitas de %Ld o %Lu... revisa el archivo de ayuda del CCS que está todo y seria bueno que pongas que dice el error, así es mas facil determinar que pasa...
 
cuando lo simulo supuestamente tiene que darme el valor exacto del voltaje en un potenciometro.
pero a la hora de simularlo no me da el voltaje adecuado.
por eso quería saber si la ecuación p=5.0*q/1024.0; esta bien y tambien porque le agrega un ".0" despues del 5 y del 1024 .¿ Por qué ?
O acaso el CONVERTIDOR DEL PIC NO ES 100% EXACTO Y TIENE UN MARGEN DE ERROR, corrigeme ??
 
miguel12 dijo:
cuando lo simulo supuestamente tiene que darme el valor exacto del voltaje en un potenciometro.
pero a la hora de simularlo no me da el voltaje adecuado.
por eso quería saber si la ecuación p=5.0*q/1024.0; esta bien y tambien porque le agrega un ".0" despues del 5 y del 1024 .¿ Por qué ?
O acaso el CONVERTIDOR DEL PIC NO ES 100% EXACTO Y TIENE UN MARGEN DE ERROR, corrigeme ??

- La secuencia del cálculo es como en todo, sigue las reglas... si pones p=5.0*q/1024.0, el compilador primero va a realizar la división pero si pones p=(5.0*q)/1024.0, va a realizar lo que se buscas... utiliza la regla de tres simple para obtener el voltaje "analiza".
- El compilador requiere que los tipos de datos sean los mismos, como buscas tener decimales es necesario indicar que todos los datos sean float (punto flotante), por eso colocan (.0). Ahora no es el único método para obtener decimales pero si el PIC tiene suficiente memoria, no hay problema...
 
Atrás
Arriba