Autor Tema: Ejemplo simple en C (pero no funciona)  (Leído 1817 veces)

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

Desconectado ramirez

  • PIC16
  • ***
  • Mensajes: 195
Ejemplo simple en C (pero no funciona)
« en: 19 de Mayo de 2009, 18:59:31 »
Hola de nuevo a todos, sigo intentando aprender C y de nuevo me atranqué en un ejemplo simple. Lo que intento hacer es lo sigjuiente:
Compara el dato del puerto de entrada PORTA y un "Numero" (por ejemplo el 13):
//   - Si (PORTA) = Numero, se encienden todos los LEDs de salida.
//   - Si (PORTA) y Numero no son iguales, se activan los LEDs pares de salida y apagan impares.

He intentado hacerlo de varias formas, pero no sale nada coherente, de nuevo so doy a todos las gracias por vuestra colaboración.

Desconectado QIQE

  • PIC18
  • ****
  • Mensajes: 335
Re: Ejemplo simple en C (pero no funciona)
« Respuesta #1 en: 19 de Mayo de 2009, 19:26:34 »
pon alguno de los ejemplor que has hecho y te decimos en que te has equivocado
Muchas gracias por vuestro tiempo.

Saludos desde valencia!!!

Desconectado ramirez

  • PIC16
  • ***
  • Mensajes: 195
Re: Ejemplo simple en C (pero no funciona)
« Respuesta #2 en: 19 de Mayo de 2009, 19:30:01 »
este es uno de las formas que he intentado:

#include <16F84A.h>
#FUSES NOWDT                    //No Watch Dog Timer
#FUSES XT                       //Crystal osc <= 4mhz for PCM/PCH , 3mhz to 10 mhz for PCD
#FUSES PUT                      //Power Up Timer
#FUSES NOPROTECT                //Code not protected from reading

#use delay(clock=4000000)

#use fast_io(B)
#use fast_io(A)

//DECLARACIÓN DE VARIABLES

int variable=13;
int entrada;

///PROGRAMA

void main (void)

{
do{                        //Bucle.........
set_tris_a(0xFF);            //porta como entrada
set_tris_b(0x00);            //portb como salida


if(input(13))
output_b(0xFF);
else
output_b(0b01010101);

}while(true);              //......Infinito

}

Desconectado LalitoX

  • PIC10
  • *
  • Mensajes: 13
Re: Ejemplo simple en C (pero no funciona)
« Respuesta #3 en: 19 de Mayo de 2009, 20:46:36 »
Código: [Seleccionar]
#include <16F84A.h>
#FUSES NOWDT                    //No Watch Dog Timer
#FUSES XT                       //Crystal osc <= 4mhz for PCM/PCH , 3mhz to 10 mhz for PCD
#FUSES PUT                      //Power Up Timer
#FUSES NOPROTECT                //Code not protected from reading

#use delay(clock=4000000)

#use fast_io(B)
#use fast_io(A)

//DECLARACIÓN DE VARIABLES

int variable=13;
int entrada;

///PROGRAMA

void main (void)
{
set_tris_a(0xFF);            //porta como entrada
set_tris_b(0x00);            //portb como salida
do{                        //Bucle.........

if(input_a()>13){
output_b(0xFF);
}else{
output_b(0b01010101);
}
}while(true);              //......Infinito

}

Creo que ahi debería andar, fijate que te faltaban llaves en el if, la condición del if estaba mal, asi como la función de leer el puerto. Tambien te saque la configuracion de los puertos del bucle, ya que no tiene mucho sentido estar configurandolo cada unos microsegundos. Explicate que es lo que lee el puerto a.
Saludos
« Última modificación: 19 de Mayo de 2009, 20:51:31 por LalitoX »

Desconectado kcire

  • Colaborador
  • PIC12
  • *****
  • Mensajes: 84
Re: Ejemplo simple en C (pero no funciona)
« Respuesta #4 en: 19 de Mayo de 2009, 22:06:00 »
Hola Ramirez pues espero no estar equivocado pero podria realizar ese ejemplo talves asi, claro que en este caso yo estoy utilizando el PIC16F877A pero modificando algunas tendria que dar con el PIC16F84A:

Código: C
  1. #include <16F877A.h>       // PIC a utilizar
  2. #FUSES XT                  // Crystal osc <= 4mhz for PCM/PCH , 3mhz to 10 mhz for PCD
  3. #FUSES NOWDT               // No Watch Dog Timer
  4. #FUSES NOPUT               // No Power Up Timer
  5. #FUSES NOPROTECT           // Code not protected from reading
  6. #FUSES NODEBUG             // No Debug mode for ICD
  7. #FUSES NOBROWNOUT          // No brownout reset
  8. #FUSES NOLVP               // No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
  9. #FUSES NOCPD               // No EE protection
  10. #FUSES NOWRT               // Program memory not write protected
  11.  
  12. #use delay(clock=4000000)  // Oscilador a 4MHz
  13.  
  14. #byte PORTA=0x05           // Dirección del PortA
  15. #byte PORTB=0x06           // Dirección del PortB
  16.  
  17. // FUNCION PRINCIPAL
  18. void main(void){
  19.   set_tris_b(0b11111111);       // Definimos PORTA como entrada
  20.   set_tris_b(0b00000000);       // Definimos PORTB como salida
  21.   portb = 0x00;                 // Limpiamos Puerto B
  22.   while(TRUE){                  // Bucle infinito
  23.      if(PORTA == 13){           // Comparamos el dato del puerto B con el dato 13
  24.         PORTB = 0b11111111;     // Enciendo todos los LED
  25.      }
  26.      else{                      // Opcion cuando es distinto
  27.         PORTB = 0b01010101;     // Enciendo Led pares
  28.      }
  29.   }
  30. }

Un saludo  :mrgreen:
"La imaginación es más rica que el lenguaje... sugiere con palabras, la imaginación podrá hacer el resto."

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Ejemplo simple en C (pero no funciona)
« Respuesta #5 en: 19 de Mayo de 2009, 23:56:51 »
Creo que tienes errores conceptuales. Que piensas que hace if(input(13))? Si nos vamos a la ayuda del CCS nos dice:
Citar
Syntax:
value = input (pin)

return:
0 (or FALSE) if the pin is low,

1 (or TRUE) if the pin is high

Examples:
 while ( !input(PIN_B1) );

//waits for B1 to go high

Entonces lo que estas haciendo es consultar si el pin nº 13=1. Osea, te digo esto para que te vayas guiando con la ayuda que trae CCS.

En tu caso lo que querías era testear el Puerto A, seria:

if(input_a()==13){
     // Si, cargo 0xFF
}else{
     // No, cargo bits pares.-
}

Tambien vale la manera que te explico Kcire, la única diferencia que define con anterioridad PORTA y PORTB.

Aquí te doy un enlace a tutoriales de CCS, para que vayas viendo ejemplitos :wink:

 
No contesto mensajes privados, las consultas en el foro

Desconectado ramirez

  • PIC16
  • ***
  • Mensajes: 195
Re: Ejemplo simple en C (pero no funciona)
« Respuesta #6 en: 20 de Mayo de 2009, 05:21:29 »
Muchas gracias a todos por vuestra ayuda.


 

anything