Autor Tema: 12c508a en c  (Leído 5271 veces)

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

Desconectado ChOrChE

  • PIC10
  • *
  • Mensajes: 13
Re: 12c508a en c
« Respuesta #15 en: 22 de Junio de 2006, 11:28:12 »
jOODER!!! Muchas gracias a los dos. Sois unos fieras.
He estado probando y mirando un pokillo el CCS.
Cambie algunas cosas porque no se definian igual que en C2C.



 #include <12C508A.h>
#FUSES NOWDT                    //No Watch Dog Timer
#FUSES INTRC                    //Internal RC Osc
#FUSES NOPROTECT                //Code not protected from reading
#FUSES NOMCLR                     //Master Clear pin enabled
#use delay(clock=20000000)

////////AQUI ME DA ERROR EXPECTING AN IDENTIFIER EN TYPEDEF INT8 BOOLEAN

typedef int8 boolean ;// lo sacamos fuera dl main

#define GP1 output_pin_port_a( 1 );// Declaramos lo que es GP1 y GP2
#define GP2 output_pin_port_a( 2 );


void main(void)    {


boolean GP3;// Descripcion de variables
boolean GP4;
boolean GP5;
while(1)   // Ejecutar un bucle que se repite de forma indefinida
{       while (!input_pin_port_a( 0 )){}; // Se cierra en el 2º bucle si A0 = 0 y espera a que valga 1
                                                       
               GP3= input_pin_port_a( 3 ); // Leemos                                                                             GP4= input_pin_port_a( 4 );
               GP5= input_pin_port_a( 5 );
               if (GP3==0 && GP4==0 && GP5==0)              { GP1=0;GP2=0;}
               else if (GP3==0 && GP4==0 && GP5==1)   { GP1=0;GP2=1;}
               else if (GP3==0 && GP4==1 && GP5==0)   { GP1=1;GP2=1;}
               else if (GP3==0 && GP4==1 && GP5==1)   { GP1=0;GP2=1;}
               else if (GP3==1 && GP4==0 && GP5==0)   { GP1=1;GP2=0;}
               else if (GP3==1 && GP4==0 && GP5==1)   { GP1=0;GP2=0;}
               else if (GP3==1 && GP4==1 && GP5==0)   { GP1=1;GP2=0;}
               else if (GP3==1 && GP4==1 && GP5==1)   { GP1=1;GP2=1;}
               endif       }
                                                       if (GP0==0)   { GP1=0;GP2=0;}// para cambiar el estado de gp0.
                                                                                                     //  quiero las salidas GP1 y GP2 a 0 cuando GP0=0
                } // Cerramos en main

Sabeis a que se debe? Y por cierto... existe algun libro para programacion de microcontroladores en c. Si me podeis aconsejar alguno? GRACIAS!!

Desconectado ChOrChE

  • PIC10
  • *
  • Mensajes: 13
Re: 12c508a en c
« Respuesta #16 en: 22 de Junio de 2006, 11:39:50 »
Leyendo un poco me he hecho un lio.

A ver....
En un puerto de 6bit de GP0 a GP5  si asigno pin a pin p.e.:

#define GP1 output_pin_port_a( 1 )   o bien

typedef int1 bit ;
void main(void)    {
boolean GP3
while(1)   {while (!GP0){};                                   
GP3= input_pin_port_a( 3 );}

Como se comporta el pin del puerto?? Lo que quiero saber es el estado del pin de entrada.
Sera igual definirlo como BIT que como BOOLEAN??

Desconectado ChOrChE

  • PIC10
  • *
  • Mensajes: 13
Re: 12c508a en c
« Respuesta #17 en: 22 de Junio de 2006, 12:13:05 »
Y Yo aqui rizando el rizo.....

#define PIN_B0  48
#define PIN_B1  49
#define PIN_B2  50
#define PIN_B3  51
#define PIN_B4  52
#define PIN_B5  53
#define FALSE 0
#define TRUE 1
#include <12C508A.h>
#FUSES NOWDT                    //No Watch Dog Timer
#FUSES INTRC                    //Internal RC Osc
#FUSES NOPROTECT                //Code not protected from reading
#FUSES NOMCLR                     //Master Clear pin enabled
#use delay(clock=20000000)


//typedef int1 boolean ;// lo sacamos fuera dl main
//#define BOOLEAN short int
#define GP1 output( PIN_B1 )// Declaramos lo que es GP1 y GP2
#define GP2 output( PIN_B2 )

void main(void)    {


boolean GP3;// Descripcion de variables
boolean GP4;
boolean GP5;

while(1)   // Ejecutar un bucle que se repite de forma indefinida
{       while (!GP0){}; // Se cierra en el 2º bucle si A0 = 0 y espera a que valga 1
                                          // Eliminamos una asignación innecesaria de GP0.

               GP3= input( PIN_B3 ); // Leemos las variables de entrada que definiran las salidas
               GP4= input( PIN_B4 );
               GP5= input(PIN_B5 );
               if (GP3==0 && GP4==0 && GP5==0)              { GP1=0;GP2=0;}
               else if (GP3==0 && GP4==0 && GP5==1)   { GP1=0;GP2=1;}
               else if (GP3==0 && GP4==1 && GP5==0)   { GP1=1;GP2=1;}
               else if (GP3==0 && GP4==1 && GP5==1)   { GP1=0;GP2=1;}
               else if (GP3==1 && GP4==0 && GP5==0)   { GP1=1;GP2=0;}
               else if (GP3==1 && GP4==0 && GP5==1)   { GP1=0;GP2=0;}
               else if (GP3==1 && GP4==1 && GP5==0)   { GP1=1;GP2=0;}
               else if (GP3==1 && GP4==1 && GP5==1)   { GP1=1;GP2=1;}
               endif       } if (GP0==0)   { GP1=0;GP2=0;}// para cambiar el estado de gp0.
                                                         //  quiero las salidas GP1 y GP2 a 0 cuando GP0=0
                } // Cerramos en main

Ahora ya si que no se cono definir las variables ni los pines de los puertos.
S.O.S!!!

Desconectado djpalas

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 595
    • Microtronic
Re: 12c508a en c
« Respuesta #18 en: 22 de Junio de 2006, 15:32:48 »
Buenas de nuevo!

Código: C
  1. LIST p=12c508A, r=HEX;
  2. #INCLUDE <C:\C2CPP\p12C508A.inc>;
  3. #FUSES NOWDT                       //No Watch Dog Timer
  4. #FUSES INTRC                         //Internal RC Osc
  5. #FUSES NOPROTECT                //Code not protected from reading
  6. #FUSES NOMCLR                     //Master Clear pin enabled
  7. #use delay(clock=20000000)
  8.  
  9. #use fast_io(B) //ChOrChE con esto te olvidas de tantos #define pin_bX ...... ;)
  10.  
  11. #define true 1
  12. #define false 0
  13. #define GP1 output_pin_port_a(pin_b1);   //Definimos las macros de GP1 y GP2
  14. #define GP2 output_pin_port_a(pin_b2);
  15.  
  16.  
  17.  
  18. typedef short boolean;   // Los tipo binarios o Bits tienen que ser declarado como short
  19.                                    // por ello que para un uso mas habitual y mas
  20.                                    // Las dos declaraciones de la variable GP0 es lo mismo.
  21.                                    // short GP0;
  22.                                    // boolean GP0;
  23.  
  24. void main(){
  25.  
  26. // Descripcion de variables
  27.        boolean GP0;
  28.        boolean GP3;
  29.        boolean GP4;
  30.        boolean GP5;
  31.  
  32.   while(1){
  33.  
  34.        while (input_pin_port_a(pin_b0)){
  35.  
  36.                GP3= input_pin_port_a(pin_b3);
  37.                GP4= input_pin_port_a(pin_b4);
  38.                GP5= input_pin_port_a(pin_b5);
  39.        
  40.                //Si aplicamos mediante algebra boolena o karnaugh a cada una de las variable de Salida
  41.                //con respecto a las entradas, podemos simplificarla
  42.                //
  43.                // GP1 = (GP3 || GP4) && (~GP5)
  44.                // GP2 = (GP4 || GP5) && (~GP3)
  45.                //
  46.                // Con lo que podremos simplificar las comparaciones con tantos if
  47.    
  48.                if((GP3 || GP4) && (~GP5))
  49.                       GP1=1;
  50.                else
  51.                       GP1=0;
  52.    
  53.                if((GP4 || GP5) && (~GP3))
  54.                       GP2=1;
  55.                else
  56.                       GP2=0;
  57.         }
  58.         // Puesto que si sale del bucle GP0=0, le asignamos los valores 0 a GP1 Y GP2
  59.         GP1=0;
  60.         GP2=0;
  61.  
  62.   }
  63.  
  64. }

Perdona por que llevo tiempo sin programar PIC, me llevado tiempo con los de la Familia Infineon C515-L (8051) y he tenido de mirar un poco el manual del CCS.
De todas maneras creo que te podria servir este código. Si tienes alguna duda por aquí estaremos.

Saludos desde Cádiz, España
Web personal: http://www.microtronic.es


 

anything