[C18] Programa para "encender" los pines del puerto B
Resultados 1 al 6 de 6

Tema: [C18] Programa para "encender" los pines del puerto B

  1. #1
    Usuario
    Ubicación
    General Rodriguez
    Mensajes
    77
    Gracias
    5
    Agradecido 21 veces en 10 posts

    [C18] Programa para "encender" los pines del puerto B

    Acá presento un simple programa para que mediante un pulsador activado por nivel alto colocado en RC0 coloque un nivel alto en todos los pines del Puerto B.
    Las lineas están bien descritas.

    Código:
    #include <p18f2550.h>		;Incluye la libreria que contiene 
    				; las equivalencias de los regitros
    
    #pragma  WDT = OFF		;Desactiva el Wachdog Timer
    
    void main (void)		;Rutina pricipal del programa
    {
    
    	TRISC = 0xFF;		;Configura todos los pines del puerto C
    				; como entradas
    	TRISB = 0x00 ;		;Configura todos los pines del puerto B
    				; como salidas
    	While (1)		;Apartir de esta instrucción el programa
    				; se repite de forma indefinida
    	
    	if (PORTCbits.0 = 1) 	;Si RC0 esta en nivel alto... 
    	{			
    		PORTB = 0xff ;	;Pone en nivel alto todos los pines del 
    				; puerto B
    	}
    	else			;Si no se cumple dicha condición...
    	{
    		PORTB = 0x00 ;	;Pone en nivel bajo todos los bits 
    				; del puerto B
    	}
    	}
    Este simple programa esta basado en la estructura If-Else que basicamente lo que hace es ejecutar las instrucciones que estan despues de la instruccion IF solo si se cumple la sentencian que esta entre parentesis, en este caso (PORTCbits.0 = 1), en caso de que esta sentencia no sea cumplida se ejecutan las instrucciones que estan despues de la instruccion "ELSE".

    Para los que recien empiezan en C.
    *La rutina main es (si no me equivoco) obligatoria
    *Todas las intrucciones que no sean "basicas" por decirlo de alguna forma, termina con punto y coma ( ; )
    *Los bucles del programa se deben poner entre llaves ( {} )
    *Las intrucciones que se van a realiza dentro de una estructura como IF-Else deben estar entre llaves ( {} ).

    Espero haber sido claro.

    Saludos.
    Última edición por Sebitronic; 12/09/2010 a las 05:03

  2. #2
    Usuario Avatar de Mario
    Ubicación
    En mi corazón
    Mensajes
    2,219
    Gracias
    910
    Agradecido 2,357 veces en 1,118 posts
    Genial Sebitronic!

    Ahora vienen las consultas típicas de los preguntones que queremos aprender.

    Defines a todo el puerto C como entrada.
    ¿Podrías haber definido sólo el pin 0 (el que lleva el pulsador) en lugar de todo el puerto completo?
    ¿Cómo hubiera quedado esa línea?
    ¿y para definir sólo el pin 3 del puerto C?

    Por otro lado, en el condicional IF, ¿no se utilizan dos signos iguales? o también se puede usar uno solo?

    Es decir:

    if (PORTCbits.0 = 1) ;Si RC0 esta en nivel alto...

    es lo mismo que decir?

    if (PORTCbits.0 == 1) ;Si RC0 esta en nivel alto...

    Última: En C18 es así ... IF - ELSE
    ¿No es como en Basic que es IF - THEN - ELSE - END IF?

    Muy bueno para empezar Sebitronic! Con ejemplos así, sencillos, tenemos que aprovechar a sacarnos todas las dudas.

    Si no lo hace antes otro, mañana hago el esquema de conexiones y el ensayo con la entrenadora (video).

    Saludos!
    Mario

  3. #3
    Usuario Avatar de jonbul
    Ubicación
    Bilbao
    Mensajes
    63
    Gracias
    12
    Agradecido 8 veces en 6 posts
    Muy bueno esto empieza a funcionar, ahora subo el mio

  4. #4
    Avanzado
    Ubicación
    Argentina
    Mensajes
    212
    Gracias
    11
    Agradecido 111 veces en 42 posts
    El ejemplo es muy útil, pero tiene varios aspectos a analizar:

    La configuración del puerto TRIS del puerto C puede obviarse, por default el microcontrolador setea todos sus puertos como entradas para prevenir si se coloca una tensión no adecuada (5V) se queme el pin o puerto.
    Pero respondiendo a la consulta de Mario, puede configurarse un solo pin mediante TRISbits.TRISC0=1, o si se quiere el pin3, sería TRISbits.TRISC3=1.
    Esto lo podemos hacer de esta manera al incluir en nuestro proyecto el archivo p18F2550.h, el cual tiene definidos todos los bit de los registros del microcontrolador mediante una estructura o union, por ejemplo:

    Código:
    extern volatile near struct {
      unsigned TRISC0:1;
      unsigned TRISC1:1;
      unsigned TRISC2:1;
      unsigned :3;
      unsigned TRISC6:1;
      unsigned TRISC7:1;
    } TRISCbits;
    Es conveniente que se utilicen el par {} para limitar el alcance de una estructura de control de flujo del programa, entonces es ideal utilizar:

    Código:
    while(1){
         // ....
    
    }
    Dentro de un if podemos usar operadores distintos a los de comparación, pero en este caso se quiere saber si el estado del pin C0 está en 1 lógico, por lo tanto se debe usar el doble igual (==).

    Otro detalle es que para escribir sobre los puertos es recomendable utilizar los registros LAT.

    Saludos!

  5. #5
    Usuario Avatar de Yesbond
    Mensajes
    838
    Gracias
    317
    Agradecido 434 veces en 237 posts
    Hey que bien, ya empezamos muy bien
    Yo estoy haciendo mi Led enciende, espera, y luego apaga Led.
    Sigamos asi.

  6. #6
    Usuario Avatar de snowflacke86
    Ubicación
    Morelia Mich. México
    Mensajes
    39
    Gracias
    3
    Agradecido 15 veces en 7 posts
    Cita Iniciado por Suky Ver mensaje

    La configuración del puerto TRIS del puerto C puede obviarse, por default el microcontrolador setea todos sus puertos como entradas para prevenir si se coloca una tensión no adecuada (5V) se queme el pin o puerto.
    De hecho, lo comun es que sin querer (o sin pensar) conectes a tierra alguno de los pines. Solo lo comento por que es algo que siempre te va a quemar el pin, asi que siempre hay q revisar bien todo, ya me paso con un pic que por cierto me presto mi profe, fue muy penoso. u.u.

    Ademas, cuando utilizas botones pulsadores, tienes que escribir una rutina para evitar el efecto rebote. Aun que en este ejemplo no se nota mucho sus efectos. En un rato armo un programa q encienda el puerto al pulsar el boton y q lo apague al volver a presionar, ahi si se ve lo que ocaciona el efecto rebote.

    EDIT:

    Bueno, ya nadie contesto, pero ya le meti mano a tu programa y corregi algunas cosillas:

    Código:
    #include <p18f2550.h>                              //Incluye la libreria que contiene
                                                                    //las equivalencias de los regitros
    #include <delays.h> 
    #pragma config WDT = OFF	                //Desactiva el Wachdog Timer
    
    void main (void)                                         //Rutina pricipal del programa
    {
    
    	TRISC = 0xFF;		                        //Configura todos los pines del puerto C
    				                                //como entradas
    	TRISB = 0x00;		                        //Configura todos los pines del puerto B
            PORTB = 0X00;                                  //como salidas
    	while (1)
            {                                                       //Apartir de esta instrucción el programa
    				                                 //se repite de forma indefinida
    
                if (PORTCbits.RC0 == 1){                //Si RC0 esta en nivel alto...
                    Delay10KTCYx(5);                       //Pausa de 50ms para evitar el efecto rebote
                    while (PORTCbits.RC0 == 1){}     //Pausa para esperar a que se deje
                                                                     //de apretar el boton.
                    
                    if (PORTB == 0x00)
                        PORTB = 0xff ;                       //Pone en nivel alto todos los pines del
                                                                    //puerto B.
    	
                    else                                          //Si no se cumple dicha condición...
                        PORTB = 0x00 ;                     //Pone en nivel bajo todos los bits
                }                                                   //del puerto B
    	}
    }
    Ya esta probado en Proteus.
    Última edición por snowflacke86; 24/06/2011 a las 19:49 Razón: Ya esta el programa. :D

Temas similares

  1. Respuestas: 19
    Último mensaje: 29/02/2012, 19:40
  2. "El Juego de Ender", por Orson Scott Card
    Por Lisandro Pardo en el foro Literatura
    Respuestas: 0
    Último mensaje: 07/09/2010, 01:21
  3. "Planet Terror" homenaje a los filmes clase B
    Por daniel_ch en el foro Cine
    Respuestas: 0
    Último mensaje: 06/09/2010, 19:25
  4. Crítica: "Zardoz". (Película de John Boorman).
    Por unadicotomía en el foro Cine
    Respuestas: 5
    Último mensaje: 06/09/2010, 17:23
  5. "Freezar" ordenador que corre Windows XP ¿Como?
    Por Ariel Palazzesi en el foro Software
    Respuestas: 6
    Último mensaje: 28/08/2010, 15:16

Los visitantes encuentran esta página buscando por:

#include &lt;p18F2550.h&gt;

ejemplos de programas en c18

programas en c18

programa en c18

encender led c18

c18 ejemplos

lat c18

c18

puerto a puerto c18

ejemplos de prgramas para c18

prender led c18

programas c18

prender un led en c18

ejemplos programas c18

p18f2550.h

puertos en c18

ejemplos de programacion en c encendido de leds

como prender un led con c18

ejemplo c18

programa para encender el puerto b en un pic en ccs

puertos de encender

programa ejemplo C18como configurar puertos c18poner a alto un pin c18ejemplo programa en c18

Etiquetas para este tema

Permisos de publicación

  • No puedes crear nuevos temas
  • No puedes responder temas
  • No puedes subir archivos adjuntos
  • No puedes editar tus mensajes
  •  

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37