Autor Tema: duda puertos pic16f887  (Leído 998 veces)

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

Desconectado jeison

  • PIC10
  • *
  • Mensajes: 19
duda puertos pic16f887
« en: 18 de Septiembre de 2014, 13:36:22 »
Hola, alguien sabe como asignar un valor a un puerto en especifico en CCS que no sea bit a bit, de la forma más concreta posible estoy usando lenguaje C en un pic16f887. se que es algo muy fácil pero no se cual es la sintaxis.
¡saludos!

Desconectado fabianjsm

  • PIC18
  • ****
  • Mensajes: 255
    • fabianjsm is on twitter
Re: duda puertos pic16f887
« Respuesta #1 en: 19 de Septiembre de 2014, 07:00:26 »
Tratar al puerto como si fuera una variable:

Código: C
  1. #byte PORTA = 5
  2.  
  3. main()
  4. {
  5.         int i;
  6.        
  7.         // Todos los bits son salidas
  8.         set_tris_a(0x00);
  9.        
  10.         // Ponemos todos los bits a cero
  11.         PORTA = 0;
  12.        
  13.         // Parte alta salida, parte baja entrada
  14.         set_tris_a(0x0F);
  15.        
  16.         // Leemos el puerto en una variable
  17.         i = PORTA;
  18.        
  19.         // Si esta seteado el primer bit seteamos el ultimo
  20.         if(PORTA & 1)
  21.                 PORTA |= 0x80;
  22.        
  23.         // Si esta seteado el segundo bit invertimos el anteultimo
  24.         if(PORTA & 2)
  25.                 PORTA ^= 0x40;
  26.        
  27.         // Si esta seteado el tercer bit limpiamos el antepenultimo
  28.         if(PORTA & 4)
  29.                 PORTA &= ~0x20;
  30. }

Utilizando estructuras:

Código: C
  1. struct mapa {
  2.         int dt:4;
  3.         int reservado: 2;
  4.         int enable:1;
  5.         int ck:1;
  6. };
  7.  
  8. struct mapa bus;
  9. #byte bus = 6 /* PORTB */
  10.  
  11. void enviar(int val)
  12. {
  13.         bus.enable = 1;      // Habilitamos el bus
  14.         bus.dt = val & 0x0F; // Enviamos la parte baja
  15.         bus.ck = 1;          // Pulso de clock
  16.         delay_us(40);
  17.         bus.ck = 0;
  18.         bus.dt = val >> 4;   // Enviamos la parte alta
  19.         bus.ck = 1;          // Pulso de clock
  20.         delay_us(40);
  21.         bus.ck = 0;
  22.         bus.enable = 0;      // Desabilitamos el bus
  23. }

Espero que te sirva.
@fabianjsm is on twitter