Problema al compilar programa en ccs

#1
hola que tal amigos foreros reciban un cordial saludo
esta vez escribo por que estoy tratando de compilar un programa en ccs
y me sale un error que la verdad no logro detectar, soy nuevo en esto y espero que me puedan ayudar.
creo que es un simple error pero no logro encontrarlo

Código:
//Device/Fuses/Etc.---------------------------------
#INCLUDE <16F877A.H> 
#INCLUDE <MATH.H>
#FUSES NOWDT //No Watch Dog Timer
#FUSES XT 
#FUSES NOPUT //No Power Up Timer
#FUSES NOPROTECT //Code not protected from reading
#FUSES NOBROWNOUT //No brownout reset
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD //No EE protection
#use delay(clock=4000000)
//Defines------------------------------------------
#BYTE PORTA = 0x05
#BYTE PORTB = 0x06
#BYTE PORTA_TRIS = 0x85
#BYTE PORTB_TRIS = 0x86
#DEFINE RDD_DATA PIN_A1
#DEFINE RDD_CLOCK PIN_A0
#DEFINE EEPROM_SCL PIN_A2
#DEFINE EEPROM_SDA PIN_A3
//
void fConfigurar_puertos(void);
void fRDD_send_data0(void);
void fRDD_send_data1(void);
//--------------------------------------------------
//Main----------------------------------------------
//--------------------------------------------------ç
//
void main(){
int8 i,j;
fConfigurar_puertos();
output_low(RDD_CLOCK); //RELOJ = Bajo
output_low(RDD_DATA);
// 
//------Dibujo las filas una a una ----- 
//
while (TRUE){
PORTB = 0b11111110; //Filas 1 encendida, las demas apagadas.
for (i=0;i<8;i++) {
for (j=0;j<8;j++) {
fRDD_send_data0();
}
delay_ms(300);
PORTB = (PORTB <<1) +1;
} 
}//Fin main
//--------------------------------------------------
//- FUNCIONES-
//--------------------------------------------------c
//;
void fConfigurar_puertos(void){
PORTA_TRIS = 0b11000000; //1=ENTRADA, 0=SALIDA
PORTB_TRIS = 0b00000000; //1=ENTRADA, 0=SALIDA
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
}
//--------------------------------------------------
//---Envia un 0 al registro de desplazamiento:
//--------------------------------------------------
//
void fRDD_send_data0(void){
output_low(RDD_DATA); 
delay_us(2);
output_low(RDD_CLOCK);
delay_us(2);
output_high(RDD_CLOCK);
}
//--------------------------------------------------
//---Envia un 1 al registro de desplazamiento:
//--------------------------------------------------
void fRDD_send_data1(void){
output_high(RDD_DATA); 
delay_us(2);
output_low(RDD_CLOCK);
delay_us(2);
output_high(RDD_CLOCK);
} 
}
tambien les dejo una imagen


espero y me puedan ayudar

saludos
 
#2
Esta raro... pero unas dudas basicas... No deberia aparecer un "return;" al final de cada subrutina?, y tambien por seguridad pongo un "while(1);" al final del main... solo por precaucion....
 
#3
Hola...
Veo que no usas el PIC Wizard para crear el proyecto, puede que sea un bug del CCS.

Has intentado poner asi, debajo de #use delay
#use fast_io(b) para que no cause problemas...

y en el código..

output_b((input_b() << 1) + 1);
 
Última edición:
#4
Te faltó una llave para cerrar main. Así te quedaban las rutinas dentro.

Código:
................................
delay_ms(300);
PORTB = (PORTB <<1) +1;
} 
}        [B]; <<<<<<<<<<<<< agregar[/B]
}//Fin main
//--------------------------------------------------
//- FUNCIONES-
//-----------------
..................................
Y sacá una llave al final.


Después escribir 100 veces "Debo indentar las llaves" ;)
 
#6
hola que tal
perdon por mi ausencia pero esque andaba de viaje jejejeje

el programa lo copie de ucontrol.com.ar pero creo que es mejor empezar desde cero con este programa, esque lo que quiero hacer es experimentar con el integrado 74HC164N. ya que me quiero empezar con las matrices de leds pero lo que no se es de como se controlan esos integrados.

tengo el pic16f877a y el integrado y lo primero que quiero hacer es controlar todos sus pines y nadamas una fila de leds claro que el control de los leds seria con 3 pines del integrado.

no se si ustedes tengan un ejemplo para iniciarme con las matrices de leds y eempezar a multiplexar.

saludos

P.D. no soy un buen programador de pics pero si se usar algunas sentencias o funciones, como for while if then etc.
 
#7
Hola Ferfila20, te comento que usar los registros de desplazamiento como el 74LS164 no es para nada dificil, lo unico que tienes que hacer es conectar la salida de datos del pic a las dos primeras entradas del 74ls164, es decir las patas 1 y 2 "A y B", otra pata del pic va a ser tu señal de reloj, que va a ir en la pata 8 "clock", cada que des un pulso de reloj, tu dato (1 o 0) va a entrar al registro y se va a ir mostrando en orden, primero en la pata 3 "QA", luego cuando metas otro dato, este empuja el valor que estaba en Qa a Qb y el nuevo se queda en Qa, y asi sucesivamente hasta acompletar 8 pulsos y llenar el registro, si dices que estas haciendo una matriz de leds, en el caso que sea de 8X8 lo que haces es conectar cada salida de Qa hasta Qe a todas las filas o columnas de la matriz, con lo que tendras el control individual de cada fila o columna, dependiendo de que valor hayas metido en su pin correspondiente por medio del registro; para acompletar el circuito, debes conectar 8 patas del pic a cada una de las filas (si conectaste tu registro a las columnas, el pic ira en las filas y viceversa), por medio de un transistor para que no se valla a quemar tu puerto, ya que en el caso de una matriz de 8x8 no hay problema, pero si es mayor, entonces tu puerto puede pasar a mejor vida, como vez no es dificil usarlos, asi, si quieres prender por ejemplo solamente el LED no. 4 de la columna 3, y tienes tu registro en las columnas y tu pic en las filas, debes llenar tu registro con 00100000 y activar tu pin numero 4, entonces se prenderá el LED que esté en la interseccion, en este caso el numero 4 de la 3er columna, recuerda que debes poner un cero donde esté el cátodo de tus LEDs y un 1 en el ánodo, si no no prenderán.

Ahora que si te quieres complicar mas la vida, puedes poner un registro en las filas y uno en las columnas y asi utilizar solo 4 pines del pic, sean las filas y columnas que sean.

Si tienes dudas me dices, espero haberte ayudado
 
#8
bueno amigos quisiera que den una mano tengo un problema al copilar el codigo es este:

PHP:
#include <16F876.H>                      
#fuses HS,XT,NOPUT,NOPROTECT,NOWDT            
#use delay(clock=8M)                          
#include <Flex_lcd.c>                           

#use fast_io(a)                              
#use fast_io(b)
#use fast_io(c

///****   DEFINIMOS NOMBRES A PUERTOS   ****///
#bit CENTENAS  = 0x06.4 
#bit UNIDADES  = 0x06.5   
#bit SPEEDUP   = 0x06.6   
#bit SPEEDDOWN = 0x06.7 

///****    VARIABLES GLOBALES  ***///
int  contador,stop,Duty,FlagRamp,
     mil,cen,dec,uni,
     uni2,dec2,cen2,mil2;

void reset()
{                                 
 mil=0; dec=0; cen=0; uni=0;                    
 uni2=0; dec2=0; cen2=0; mil2=0;
 contador=0;
 output_b(0x00);
 output_c(0x00);
 output_a(0x00);
 Stop=0;
 FlagRamp=0;
 Duty=0;
 set_pwm1_duty(0);                           //Borra la pantalla LCD
}
///****    FUNCIÓN PANTALLA DE ARRANQUE   ****///
void inicial()                                 
 {
 lcd_gotoxy(2,1); lcd_putc("BOBINADORA 3.0");   
 lcd_gotoxy(2,2); lcd_putc("INOXSTEEL 2009");
 delay_ms(3000);
 lcd_putc("\f");
 }

///****    FUNCIÓN FIN DE BOBINADO   ****///
void Fin()                                  
 {
 int i;
 for (i=0;i<5;i++)
 {
  lcd_putc("\f");
  delay_ms(300);
  lcd_gotoxy(5,1); lcd_putc("BOBINADO");
  lcd_gotoxy(4,2); lcd_putc("FINALIZADO");
  delay_ms(300);
 } 
 lcd_putc("\f");
 reset();
 }

///****     INTERRUPCIÓN TIMER0    ****///
///      TIMER0 EN MODO CONTADOR       ///
/// LLEVA EL CONTEO POR SENSOR EXTERNO ///

#int_TIMER0
Void TIMER0_isr(void)                         
 {                                              
 contador=1;
 set_timer0(255);
 clear_interrupt(int_TIMER0);
 }
   
///****           INTERRUPCIÓN RB0           ****///
/// PUESTA EN MARCHA SI HAY CANTIDAD INTRODUCIDA ///

#int_EXT

void Start_isr(void)
  {
   if (uni!=0 || cen!=0) 
    {lcd_putc("\f"); Stop=1;}
  
  clear_interrupt(int_EXT);
  }

///****       INTERRUPCIÓN RB4-RB7         ****///
/// TOMA LOS DATOS RECIBIDOS EN LOS PULSADORES ///
///    CENTENAS, UNIDADES, VELOCIDAD + Y -     ///  

#int_RB
Void Pulsadores_isr()
   {
   if (SPEEDUP==1)  if (duty<82) Duty+=4;
   if (SPEEDDOWN==1)if (duty>2) Duty-=4;
   if (CENTENAS==1) cen++;
   if (UNIDADES==1) uni++;
                                     
   if (uni>9) {dec++; uni=0;}             
   if (dec>9) dec=0;                    
   if (cen>9) {mil++; cen=0;}     
   if (mil>9) mil=0;  

   clear_interrupt(int_RB);
   }
 
///****       INTERRUPCIÓN TIMER1          ****///
/// SE ENCARGA DEL ARRANQUE SUAVE DEL MOTOR    ///
/// AL INICIAR EL BOBINADO - DE 0% A 50% VEL.  ///  

#int_TIMER1
Void SoftStart()
   {
    if (stop==1 && Duty<42 && FlagRamp==0)
       {Duty+=2; set_timer1(50000);}
   
    if (Duty==42) FlagRamp=1;
   }

///****FUNCIÓN PRINCIPAL****///  

Void Main(Void)                                
  {
   int16 speed;
   speed=0;
   
   set_tris_a(0b110000);
   set_tris_b(0b11110001); 
   set_tris_c(0b00000000);

   ///**** HABILITACIÓN Y AJUSTE DE INTERRUPCIONES****///
   enable_interrupts(int_EXT);
   enable_interrupts(int_TIMER0);
   enable_interrupts(int_TIMER1);
   enable_interrupts(int_RB);
   enable_interrupts(global);

   ext_int_edge(L_TO_H);
   setup_timer_0(RTCC_EXT_L_TO_H|RTCC_DIV_1);
   setup_timer_2(T2_DIV_BY_16,82,1);
   setup_timer_1(T1_INTERNAL|T1_DIV_BY_8);
   setup_ccp1(CCP_PWM);

   clear_interrupt(int_RB);
   clear_interrupt(int_EXT);
   clear_interrupt(int_RTCC);
   clear_interrupt(int_ccp1);

   reset();                                       

   lcd_init();                                        

   inicial();

while (true)
  {
///****BLOQUE PRINCIPAL DE PRESELECCIÓN****///
  
   if (stop==0)
   {
    lcd_gotoxy(1,1);  lcd_putc("INTRODUCE EL N");      
    lcd_gotoxy(15,1); lcd_putc(223);                         
    lcd_gotoxy(1,2);  lcd_putc("DE ESPIRAS");
    lcd_gotoxy(12,2); printf(lcd_putc,"%u",mil);                            
    lcd_gotoxy(13,2); printf(lcd_putc,"%u",cen);    
    lcd_gotoxy(14,2); printf(lcd_putc,"%u",dec);    
    lcd_gotoxy(15,2); printf(lcd_putc,"%u",uni);   
   }

///****BLOQUE EN FUNCIONAMIENTO****///

   if (Stop==1)
   {  
    lcd_gotoxy( 1,1); lcd_putc("BOBINANDO");
    delay_ms(20);
    lcd_gotoxy(11,1); printf(lcd_putc,"V.%03Lu",Speed);
    lcd_gotoxy(16,1); lcd_putc("%");
    lcd_gotoxy( 1,2); lcd_putc("ESPIRAS N");
    lcd_gotoxy(10,2); lcd_putc(223);
    lcd_gotoxy( 1,1); lcd_putc("         ");
    delay_ms(20);
    lcd_gotoxy(12,2); printf(lcd_putc,"%u",mil2);
    lcd_gotoxy(13,2); printf(lcd_putc,"%u",cen2);    
    lcd_gotoxy(14,2); printf(lcd_putc,"%u",dec2);    
    lcd_gotoxy(15,2); printf(lcd_putc,"%u",uni2);   
 
    set_pwm1_duty(duty);              //PWM para control de velocidad

    Speed = Duty;                     //Variable de % de velocidad en pantalla
    Speed = (( Speed * 100) / 82 );

    if (contador==1)                  
    {uni2++; contador=0;}                    
    if (uni2>9) {dec2++; uni2=0;}    
    if (dec2>9) {cen2++; dec2=0;} 
    if (cen2>9) {mil2++; cen2=0;}

    if (mil2==mil && dec2==dec &&   
    cen2==cen && uni2==uni)  
   {Stop=0; lcd_putc("\f"); fin();}  
  }
 }
}
 
Última edición por un moderador:
#10
Hola que tal, recurro a ustedes porque me ha surgido un problema a la hora de compilar un programa en c, utilizo el CCS.
Intento compilar a hex el archivo main pero me tira error ( cambie el #include pic.h por #device PIC16F628A y esa parte se compila pero ahora me salen un montón de errores en stdlib.h ; )
Busque bastante pero no pude encontrar una solución.

Pagina de donde descargue el código:
http://sunbizhosting.co.uk/~spiral/blog/?p=98

Desde ya gracias.
 

Adjuntos

Última edición por un moderador:
#11
Hola que tal, recurro a ustedes porque me ha surgido un problema a la hora de compilar un programa en c, utilizo el CCS.
Intento compilar a hex el archivo main pero me tira error ( cambie el #include pic.h por #device PIC16F628A y esa parte se compila pero ahora me salen un montón de errores en stdlib.h ; )
Busque bastante pero no pude encontrar una solución.
El problema que tienes es que ese programa no es para el PCWHD Compiler de CCS.
Es para el HI-TECH C Compiler de Microchip. :cool:

Con el compilador que usas te será prácticamente imposible compilar ese programa sin antes realizar muchos cambios.
 
#12
Hola. Cuando empecé a programar PIC tenía el mismo error.

El problema que tenés, es que no todos los compiladores usan una configuración de PIC igual, el lenguaje es el mismo, en la parte de operadores aritméticos, pero lo que dice "este puerto es entrada, este salida, este es analógico, este está en 1, estos dos son para I2C... etc." es distinto.

Por ejemplo, para configurar un puerto en HI-TECH es:

TRISA = 0xA3;

Y para configurar de la misma forma en CCS es:

set_tris_a(0xA3);

Ambos comandos hacen lo mismo, pero los distintos compiladores los reconocen de distintas formas.

Los "PORTB=0xff" serían "output_b(0xff)" en CCS.

Un saludo
 
#13
Gracias tanto a D@rkbytes como a BrunoARG por sus claras respuestas, voy a adquirir el HI-TECH C Compiler y comentare los resultados.
Saludos (y)

---------- Actualizado después de 9 horas ----------

Bueno cambie el compilador y funciono perfecto. Gracias
 
Última edición por un moderador:
#14
Al compilar este programa en CCS Compiler, me lanza este error: "DEVICE required before this line"
Gracias por su ayuda!

Código:
#include "18F4520.h"
#device adc=8

#FUSES NOWDT                     //No Watch Dog Timer
#FUSES WDT128                    //Watch Dog Timer uses 1:128 Postscale
#FUSES INTRC                     //Internal RC Osc
#FUSES NOPROTECT                 //Code not protected from reading
#FUSES BROWNOUT                  //Reset when brownout detected
#FUSES BORV25                    //Brownout reset at 2.5V
#FUSES PUT                       //Power Up Timer
#FUSES NOCPD                     //No EE protection
#FUSES STVREN                    //Stack full/underflow will cause reset
#FUSES NODEBUG                   //No Debug mode for ICD
#FUSES NOLVP                     //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOWRT                     //Program memory not write protected
#FUSES NOWRTD                    //Data EEPROM not write protected
#FUSES IESO                      //Internal External Switch Over mode enabled
#FUSES FCMEN                     //Fail-safe clock monitor enabled
#FUSES NOPBADEN                  //PORTB pins are configured as digital I/O on RESET
#FUSES NOWRTC                    //configuration not registers write protected
#FUSES NOWRTB                    //Boot block not write protected
#FUSES NOEBTR                    //Memory not protected from table reads
#FUSES NOEBTRB                   //Boot block not protected from table reads
#FUSES NOCPB                     //No Boot Block code protection
#FUSES LPT1OSC                   //Timer1 configured for low-power operation
#FUSES NOMCLR                    //Master Clear pin used for I/O
#FUSES NOXINST                   //Extended set extension and Indexed Addressing mode disabled (Legacy mode)

#use delay(clock=8000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)

#byte PORTB=0xF81

#bit  LedRojo        =     PORTB.0
#bit  LedVerde       =     PORTB.1
#bit  LedAzul        =     PORTB.2

#define Retardo    1

char buffer[13];
int8 Rojo,Verde,Azul, Ticks;
int8 CaracteresRecibidos  = 0;
int1 ComandoRecibido;


#int_Timer0
void ActivaLed() {
    Ticks++;

    if (Ticks==0) {
        LedAzul=1;
        LedRojo=1;
        LedVerde=1;
    };
    if (Ticks==Rojo)
            LedRojo=0;
    if (Ticks==Verde)
            LedVerde=0;
    if (Ticks==Azul)
            LedAzul=0;
    set_timer0(140);
}

#INT_RDA
void serial_isr()
{
    char c;

    c=getc();
    putchar(c);
   buffer[CaracteresRecibidos] = c;
    if (c==13)
        ComandoRecibido=true;
    else
       CaracteresRecibidos = (CaracteresRecibidos+1) % sizeof(buffer);
}

void Demo() {
    printf ("Ejecutando demo\n\r");
   Rojo=255;
   Verde=0;
   Azul=0;
   for (Verde=0;Verde<255;Verde++)
      delay_ms(Retardo);
   for (Rojo=255;Rojo>0;Rojo--)
      delay_ms(Retardo);
   for (Azul=0;Azul>=255;Azul++)
      delay_ms(Retardo);
   for (Verde=255;Verde>0;Verde--)
      delay_ms(Retardo);
   for (Rojo=0;Rojo<255;Rojo++)
      delay_ms(Retardo);
   for (Azul=255;Azul>0;Azul--)
      delay_ms(Retardo);
    Rojo=0;
}


void ProcesaRGB() {
    int8 i=0;
    int1 CambiandoRojo, CambiandoVerde, CambiandoAzul;

    CambiandoRojo=false;
    CambiandoVerde=false;
    CambiandoAzul=false;

    while (i<CaracteresRecibidos) {
        if ((Buffer[i]=='r') || (Buffer[i]=='R')) {
            CambiandoRojo=true;
            CambiandoVerde=false;
            CambiandoAzul=false;
            Rojo=0;
        }
        if ((Buffer[i]=='g') || (Buffer[i]=='G')) {
            CambiandoVerde=true;
            CambiandoRojo=false;
            CambiandoAzul=false;
            Verde=0;
        }
        if ((Buffer[i]=='b') || (Buffer[i]=='B')) {
            CambiandoAzul=true;
            CambiandoRojo=false;
            CambiandoVerde=false;
            Azul=0;
        }
        if ((Buffer[i]>='0') && (Buffer[i]<='9')) {
            if (CambiandoRojo)
                Rojo=Rojo*10+Buffer[i]-48;
            if (CambiandoVerde)
                Verde=Verde*10+Buffer[i]-48;
            if (CambiandoAzul)
                Azul=Azul*10+Buffer[i]-48;
        }
        if ((Buffer[i]=='d') || (Buffer[i]=='D'))
            Demo();
        i++;
    }
    printf ("Color establecido: Rojo = %u, Verde = %u, Azul = %u \n\r\n\r",Rojo,Verde,Azul);
    CaracteresRecibidos=0;
    ComandoRecibido=false;
}


void main() {

   setup_adc_ports(NO_ANALOGS|VSS_VDD);
   setup_adc(ADC_OFF|ADC_TAD_MUL_0);
   setup_psp(PSP_DISABLED);
   setup_spi(FALSE);
   setup_wdt(WDT_OFF);
   setup_timer_0( RTCC_8_BIT|RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_timer_3(T3_DISABLED|T3_DIV_BY_1);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(VREF_LOW|-2);
   setup_low_volt_detect(FALSE);
   setup_oscillator(OSC_8MHZ);

    set_tris_b(0);

   Rojo=0;
   Verde=0;
   Azul=0;
    Ticks=0;
    ComandoRecibido=false;

    printf ("Jugando con LEDS RGB          Nocturno 2007 -n\r\n\r");
    printf ("Introduce el color deseado en formato RxxxGxxxxx\n\r");
    printf ("Puedes modificar sólo una componente del color con (R/G/B)x\n\r");
    printf ("Si escribes DEMO verás una secuencia de colores\r");

    enable_interrupts(INT_RDA);
    enable_interrupts(INT_TIMER0);
    enable_interrupts (GLOBAL);

    while (1) {
        if (ComandoRecibido)
            ProcesaRGB();
    }
}
 
Última edición por un moderador:
#17
El error esta en la primer linea no detecta el include, puede ser que este mal instalado o configurado el CCS o no tiene la libreria.

mira pongo asi :

Dibujo1.JPG
(si se ve muy chica la imagen ve la segunda del anexo)

y no marca error solo unas advertencias, pero si la comento:

Dibujo.JPG


me marca el error que dices que aparece.
 
Última edición:
#19
fijate si esta en el archivo de la instalacion, digamos en mi caso C:\archivos de programa\PICC", dentro de la carpeta devices...

Dibujo.JPG

si esta, fijate en el CCS en la pestaña option, en la opcion file associations supongo o project options, a mi nunca me a pasado eso, asi que no se realmente porque no la detecta pero se que va por ahi.
 
Última edición:
Arriba