Autor Tema: ayuda con c!!!  (Leído 3132 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado wofer

  • PIC12
  • **
  • Mensajes: 50
ayuda con c!!!
« en: 14 de Marzo de 2004, 13:00:00 »
 si pongo esto:

#include <16f870.h>
#use delay(clock=8000000)
#fuses HS,NOWDT,NOPROTECT

#byte  PORTC   = 0x07
#byte  SUMA = 0x20  **********************

#bit     LED_AZUL = PORTC.5
#bit     LED_ROJO = PORTC.3
#bit     LED_VERDE = PORTC.4



MAIN()   {

         
        SET_TRIS_A (0b00000000);      
        SET_TRIS_B (0b00000000);
        SET_TRIS_C (0b00000000);
       
        SUMA = 0;
       
 
     
START:


        if (suma == 2){
         led_verde = true;
        }

        suma +=1;
        delay_ms(1000);
       
        goto start;
  }



........porke nunca me enciende el led_verde????sin embargo si cambio el:

#byte  SUMA = 0x20  

por el :

static  byte SUMA = 0x20; .........asi si ke me funciona bien.

No lo entiendo!!! Estoy intentando cambiar el "pic basic" por  el "c" y me esta volviendo loko!!!.....es como si al ponerle #byte...
no hiciese la suma correspondiente...........¿me podeis echar una mano???
 

Saludos!

Desconectado pacalaconcurso

  • PIC24F
  • *****
  • Mensajes: 718
RE: ayuda con c!!!
« Respuesta #1 en: 14 de Marzo de 2004, 17:15:00 »
para definir una variable debes hacerlo de esta forma:
int8 suma;
de esta forma suma es un byte...si quieres una word:
int16 suma;
si quieres para encender  y apagar el led puedes usar las funciones de C output_high( PORTC.4) y output_low( PORTC.4).

saludos.

Desconectado wofer

  • PIC12
  • **
  • Mensajes: 50
RE: ayuda con c!!!
« Respuesta #2 en: 21 de Marzo de 2004, 09:13:00 »
gracias por tu respuesta,pacalaconcurso!Pero una cosilla?...en cuanto a lo de usar el "output_high(pin_c4)" ,se puede sustituir el "(pin_c4)" por algun  alias como "led_verde"???lo he intentado de mil formas y no lo he conseguido,por eso uso en "led_verde = true;"para no tener ke estar  mirando constantemente los pines del pic.....pero de esta forma se ve ke no funciona muy bien porke si pongo :

#byte  PORTC   = 0x07
#bit     LED_AZUL = PORTC.5
#bit     LED_ROJO = PORTC.3
#bit     LED_VERDE = PORTC.0

        for (i=0;i<8;++i){
         LED_ROJO = true;
         LED_AZUL = true;
         led_verde = true;
         
         DELAY_MS(90);

         LED_ROJO = false;
         led_verde = false;
         LED_AZUL = false;

         DELAY_MS(90);

 }

el led_verde se ralla y no hace lo ke le toca.....por lo menos simulado en proteus.

saludos!!!

Desconectado pacalaconcurso

  • PIC24F
  • *****
  • Mensajes: 718
RE: ayuda con c!!!
« Respuesta #3 en: 21 de Marzo de 2004, 10:11:00 »
para definir un alias a una variable prueba:

#definine LED_ROJO  PORTC.3

de esta forma al compilar el compilador simplemente cambia LED_ROJO por  PORTC.3 y asi puedes hacerlo tal y como quieres.
espero que te funcione.

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2568
RE: ayuda con c!!!
« Respuesta #4 en: 21 de Marzo de 2004, 11:39:00 »
Teóricamente con definiciones de #byte  y #bit también debiera de funcionar. Esta es una forma de asignar variables a posiciones definidas por el usuario y no dejar que sea el compilador quien asigne esas posiciones. De todas formas lo más cómodo es hacer que sea el compilador quien se encargue y eso se hace como te decía Félix, definiendo en el main las variables como int1, int8, int16.

Este es tu programa, con algunas modificaciones, funcionando correctamente en PROTEUS:

#include <16f870.h>
#use delay(clock=8000000)
#fuses HS,NOWDT,NOPROTECT

#byte PORTC = 0x07
#bit LED_AZUL = PORTC.5
#bit LED_ROJO = PORTC.3
#bit LED_VERDE = PORTC.0


MAIN() {

int i;

SET_TRIS_A (0b00000000);
SET_TRIS_B (0b00000000);
SET_TRIS_C (0b00000000);

portc=0;

for (i=0;i<8;++i){    //parpadeo 8 veces
LED_ROJO = true;
LED_AZUL = true;
led_verde = true;

DELAY_MS(1000);    //mejor visualizacion

LED_ROJO = false;
led_verde = false;
LED_AZUL = false;

DELAY_MS(1000);

}
}

Un saludo

Desconectado fopy

  • PIC10
  • *
  • Mensajes: 35
RE: ayuda con c!!!
« Respuesta #5 en: 24 de Marzo de 2004, 07:56:00 »
primero que nada, que es lo que quieres hacer,

en tu programa original, para que entre por lo menos una vez en el if(), el valor de suma tiene que valer 2 en algun momento!!!.

Te recomiendo que el goto lo pongas fuera del if para que por lo menos vuelva a chequear, si no el if es verificado solo una vez.

Luego al menos deberia haber alguna condicion de cambio en la variable SUMA.

int contador;
contador=0;
SUMA=0;
START
contador++;
if(led_verde)
 {
  output_A(led_verde);
  delay_ms(10);
  led_verde=0;
  }
if(SUMA==2)
{led_verde = true;
 contador=0;
 SUMA=0;
 delay_ms(1000);
}
//a esto le llamaria una condicion de cambio
if(contador==1000)
{SUMA=2;}
GOTO START

Espero que te sirva

Desconectado wofer

  • PIC12
  • **
  • Mensajes: 50
RE: ayuda con c!!!
« Respuesta #6 en: 26 de Marzo de 2004, 17:46:00 »
Ya esta claro!!lo ke me pasaba de la "suma" ke no incrementaba es debido(segun supongo yo) a ke el propio ccs reserva palabras para su propio uso,como el basic,pero el ccs se ve ke reserva las primeras y yo al xafar una de ellas(0x20) nunca tenia el valor ke keria.Si pongo "#byte suma = 0x40" si ke funciona.
 
  El otro tema de setear los bits del puerto c poniendo:

       LED_VERDE = false;
       LED_AMARILLO = true;
       LED_ROJO = false;

 tambien me funciona,pero solo cuando lo pruebo en una placa board.Si lo simulo en proteus me va mal,se encienden solo el verde y el rojo,el amarillo no.¿Sabeis por ke me puede pasar esto?
Alomejor es algun tema de configuracion de proteus ya ke este sera 100% fiable,no?

................iba a poner los fixeros adjuntos  pero no me ha dejado por falta de espacio.Pongo aki el programa completo para ke lo veais y haber si le podeis encontrar explicacion de porke en proteus no me va:

#include <16f870.h>
#use delay(clock=20000000)
#fuses HS,NOWDT,NOPROTECT

#byte  PORTC   = 0x07
#bit     LED_VERDE = PORTC.4
#bit     LED_AMARILLO = PORTC.5
#bit     LED_ROJO = PORTC.6





MAIN()   {




        SET_TRIS_A (0b000001);      
        SET_TRIS_B (0b00000000);
        SET_TRIS_C (0b00000000);

       PORTA = 0;
       PORTB = 0;
       PORTC = 0;



INICIO:



//       portc = 0b00010000;
       LED_VERDE = true;
       LED_AMARILLO = false;
       LED_ROJO = false;

       delay_ms(1000);


//        rotate_left( &PORTC, 1);    **si activo de esta forma las
//salidas,si ke me funciona bien...¿?

       LED_VERDE = false;
       LED_AMARILLO = true;
       LED_ROJO = false;

        delay_ms(1000);


//       rotate_left( &PORTC, 1);
       LED_VERDE = false;
       LED_AMARILLO = false;
       LED_ROJO = true;

       delay_ms(1000);


       GOTO INICIO;

}


Saludos!!

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2568
RE: ayuda con c!!!
« Respuesta #7 en: 26 de Marzo de 2004, 23:55:00 »
- El programa funciona bien en PROTEUS (he puesto comentarios a las líneas PORTA=0 y PORTB=0 ya que no tenías definidos estos puertos).

- El PROTEUS no funciona bien al 100 por 100, tiene cosas que no van bien, pero no por eso deja de ser el mejor programa de simulación que hay para PICs.

- Te recomiendo que no uses el GOTO en C, usa en su lugar un bucle while(1).

- Te recomiendo que para activar-desactivar bits uses output_bit(pin,value) y otras.

- Te recomiendo que te bajes el manual de CCS en español y hagas los programas desde el punto de vista del C, sin pensar en basic.

Un saludo

Desconectado wofer

  • PIC12
  • **
  • Mensajes: 50
RE: ayuda con c!!!
« Respuesta #8 en: 27 de Marzo de 2004, 05:08:00 »
Eso es lo ke intento,pocher,acabar programando todo en c,pero eske este es bastante complicadillo y este lenguaje es totalmente
desconocido para mi.....pero bueno,tiempo al tiempo.
 He vuelto a probar el programa siguiendo tus consejos pero tampoco me funciona bien,el led_amarillo sigue sin encenderse.Sera ke la version de proteus ke tengo estara anticuada o algo por el estilo.




Saludos!

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2568
RE: ayuda con c!!!
« Respuesta #9 en: 27 de Marzo de 2004, 07:34:00 »
No creo que sea eso.

Qué versión tienes? ... y miro de enviarte todos los ficheros

Desconectado wofer

  • PIC12
  • **
  • Mensajes: 50
RE: ayuda con c!!!
« Respuesta #10 en: 28 de Marzo de 2004, 11:21:00 »
En el acceso directo de ISIS pone "ISIS 6 Professional",pero en el programa intall ke me baje solo pone "ProSis.exe".Este me lo baje de una web recomendada por un compañero de este foro.
 Tambien del emule me baje uno ke pone "Proteus_6.3_SP1.exe".Este ultimo no lo he probado porke al intentar instalarlo tiene pinta de ser mas antiguo.
  ¿El ke tu tienes ke version es?¿Esta mas actualizada ke estos?



Saludos!!!

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2568
RE: ayuda con c!!!
« Respuesta #11 en: 28 de Marzo de 2004, 11:41:00 »
Yo todavía tengo la 6.2 SP4 y el programa lo prové con esta versión. Dame un correo y te envio los archivos. En la que tú tienes tiene también que funcionar.

Un saludo

Desconectado wofer

  • PIC12
  • **
  • Mensajes: 50
RE: ayuda con c!!!
« Respuesta #12 en: 31 de Marzo de 2004, 15:53:00 »
Pues me haces un gran favor pocher,te lo agradezco.Probare haber con esa version haber si es eso o eske tengo algo mal por ahi.La direccion es la siguiente:

    molanomola@msn.com

Yo tengo las versiones ke te he comentado antes,osea,ke si kieres alguna dimelo y te la envio.



Saludos!!!!!!!!