TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: cororo en 06 de Julio de 2009, 20:51:06

Título: como leer un puerto usando mikro C
Publicado por: cororo en 06 de Julio de 2009, 20:51:06
Hola
    Senores, soy nuevo en esto de los pics, compre el 18f2550, ahora lo que estoy aciendo es un programa rotacional que cambiara de jiro al leer un bit del puerto b, PORTB.F0, siendo 0 rota a la derecha, siendo 1(5v) rota a la izquierda, total que cuando lo debuggeo en el mikro C si funciona, pero en la practica el puerto no recoge el 1 en el PORTB.F0

    La manera de como genero el 0 o el 1, es con una resistencia de 4.7k en serie a un pushboton normalmente  abierto que va a tierra, osea que cuando se pone push botton cerrado el voltaje en PORTB.F0 es 0 asi rota de una forma y de lo contrario rota de la otra, que puede estar mal ???



void main()
{
     TRISA=0X00;    //como salidas
     TRISB=0XFF;    //como entradas

    while(1)             //siclo infinito
     {
       int=sapo;
       sapo=PORTB.F0;
              if(sapo==0xFF)         //evaluamos si el bit 0 de el puerto b como entrada esta en 0, si es asi se ejecuta el while
              {  
                    //rota a la izquierda
                    PORTA=1;                  //0000 0001
                    Delay_ms(20);
                    PORTA=2;                  //0000 0010
                    Delay_ms(20);
                    PORTA=4;                  //0000 0100
                    Delay_ms(20);
                    PORTA=8;                  //0000 1000
                    Delay_ms(20);
                    PORTA=16;                 //0001 0000
                    Delay_ms(20);
                    PORTA=32;                 //0010 0000
                    Delay_ms(20);


              }
              if(sapo==0x00)  //si la patita 1 del puerto b es 1(5v) ahar rota ala derecha
              {          
                    //rota a la derecha
                    PORTA=32;                 //0010 0000
                    Delay_ms(20);
                    PORTA=16;                  //0001 0000
                    Delay_ms(20);
                    PORTA=8;                  //0000 1000
                    Delay_ms(20);
                    PORTA=4;                 //0000 0100
                    Delay_ms(20);
                    PORTA=2;                 //0000 0010
                    Delay_ms(20);
                    PORTA=1;                 //0000 0001
                    Delay_ms(20);

               }
      }
}

    
Título: Re: como leer un purto usando mikro C
Publicado por: NANO1985 en 07 de Julio de 2009, 10:30:38
hola cororo bien venido al foro.... el programa aparentemente está bien.... te recomiendo:
que revises el hardware, su ensamblaste (protoboard, si es el caso)...
que verifiques la señal de MCLR que ingresa al micro alimentcion y demas.

Saludos  8)
Título: Re: como leer un puerto usando mikro C
Publicado por: cororo en 08 de Julio de 2009, 20:57:26
hola
    Mira ya investigue lo que pasa esque tengo que eliminar las interrupcines externas, uso este codigo pero no funciona

RCON.IPEN = 0;
     INTCON.GIE = 0;
     INTCON.INT0IE = 0;
     INTCON.RBIE = 0;
     INTCON2.RBPU = 1;
     INTCON3.INT2IE = 0;
     INTCON3.INT1IE = 0;

Gracias  :) 8)
Título: Re: como leer un puerto usando mikro C
Publicado por: Nocturno en 09 de Julio de 2009, 01:37:38
¿Esto qué es?
PORTB.F0;
Título: Re: como leer un puerto usando mikro C
Publicado por: jonathanPIC888 en 13 de Julio de 2009, 14:46:33
Es la forma en que mikroC define a los puertos:

En el caso de PORTB.FO , está definiendo el pin RB0
Título: Re: como leer un puerto usando mikro C
Publicado por: Nocturno en 13 de Julio de 2009, 16:11:25
Claro, pero es un sólo bit lo que se lee ahí, sin embargo luego lo compara con un byte: if(sapo==0xFF)       
Título: Re: como leer un puerto usando mikro C
Publicado por: jonathanPIC888 en 13 de Julio de 2009, 16:53:53
Ahí está el error entonces el programa le quedaría así:
Código: C
  1. void main()
  2. {
  3.      TRISA=0X00;    //como salidas
  4.      TRISB=0XFF;    //como entradas
  5.  
  6.     while(1)             //siclo infinito
  7.      {
  8.        if(PORTB.F0 = 1)         //evaluamos si el bit 0 de el puerto b como entrada esta en 0, si es asi se ejecuta el while
  9.               {  
  10.                     //rota a la izquierda
  11.                     PORTA=1;                  //0000 0001
  12.                     Delay_ms(20);
  13.                     PORTA=2;                  //0000 0010
  14.                     Delay_ms(20);
  15.                     PORTA=4;                  //0000 0100
  16.                     Delay_ms(20);
  17.                     PORTA=8;                  //0000 1000
  18.                     Delay_ms(20);
  19.                     PORTA=16;                 //0001 0000
  20.                     Delay_ms(20);
  21.                     PORTA=32;                 //0010 0000
  22.                     Delay_ms(20);
  23.  
  24.  
  25.               }
  26.               if(PORTB.F0 = 0)  //si la patita 1 del puerto b es 1(5v) ahar rota ala derecha
  27.               {          
  28.                     //rota a la derecha
  29.                     PORTA=32;                 //0010 0000
  30.                     Delay_ms(20);
  31.                     PORTA=16;                  //0001 0000
  32.                     Delay_ms(20);
  33.                     PORTA=8;                  //0000 1000
  34.                     Delay_ms(20);
  35.                     PORTA=4;                 //0000 0100
  36.                     Delay_ms(20);
  37.                     PORTA=2;                 //0000 0010
  38.                     Delay_ms(20);
  39.                     PORTA=1;                 //0000 0001
  40.                     Delay_ms(20);
  41.  
  42.                }
  43.       }
  44. }

Probá ahí cororo  a ver si funciona

Título: Re: como leer un puerto usando mikro C
Publicado por: Nocturno en 13 de Julio de 2009, 17:18:36
Mejor ponle dos signos =

 if(PORTB.F0 == 1)