Si alguna vez usaron arduino o pinguino conocen este comando, asigna la direccion del pin como entrada o como salida.
Programando los pics en forma tradicional con CCS el comando no existe se utiliza el set_trisX y hay que saber a que port esta cada puerto, etc., nunca entendi porque si las intrucciones output_low, output_high lo hacen porque no existe un set_tris generico para todos los puertos.
Personalmente siempre uso el FAST_IO(), si usan esto TIENEN QUE USAR #use FAST_IO(ALL).
En CCS cada pin tiene un numero asignado en las definiciones del Device ejemplo para el 18F4550 el PIN_A5 es 31749 o bien 0x7C05 este numero tiene referencia al port y al pin, siendo:
siguiendo con el ejemplo:
pin = 0x7C05
pinbit = pin&7 ==> 5;
port = pin>>3 ==> 0xf80 que es el portA
Por lo cual tenemos todo resuelto para usar una asignacion dinamica de pines estilo arduino,
/////////////////////////////////////////////////////////////////////////////
// pinmode(u8 pin, u8 state)
// pin es CCS pin PIN_A2,PIN_E2 etc.
// state es 0 salida, 1 entrada
/////////////////////////////////////////////////////////////////////////////
void pinmode(UNSIGNED long pin, int8 state)
{
INT8 pinbit;
UNSIGNED long addrtris;
pinbit = pin&7;
addrtris = (pin>>3) + 18;
IF (state == OUTPUT)
bit_clear ( * addrtris, pinbit) ;
ELSE
bit_set ( * addrtris, pinbit) ;
}
Bueno eso es todo, espero que les sirva, personalmente lo uso para hacer las asignaciones dinamicas de los pines ejemplo
const UNSIGNED long sensor[9]={PIN_A0, PIN_A1, PIN_A2, PIN_A3, PIN_E2, PIN_A5, PIN_E0, PIN_E1, PIN_B2};//sensores touch ADC
const UNSIGNED long ledPin[9]={PIN_B5, PIN_D7, PIN_B7, PIN_B6, PIN_C7, PIN_D4, PIN_D5, PIN_C6, PIN_C0};//cada sensor tiene un led
iterando en el init() asigno los pines,
Saludos espero les guste, Fernando.