	<sect1 id="pinio" xreflabel="pinio">
		<title>M&oacute;dulo IO y manipulaci&oacute;n de pines</title>
		<para> Muestra las funciones para poder trabajar con los pines del PIC.</para>	
		<para>
		<screen>
	#include &lt;pinio.h&gt;
		</screen>
		</para>

		<sect2 id="outputhighslow" xreflabel="output_high_slow">
		<title>output_high_slow</title>
		<para>
			Establece un PIN a un estado alto de voltaje. Verifica el estado del <keycap>tris</keycap>.
		</para>
		<screen>
	void output_high_slow(	BYTE puerto, 
				BYTE pin);
	ejemplo:
	output_high_slow(PIN_B0);

		</screen>
		</sect2>

		<sect2 id="outputhighfast" xreflabel="output_high_fast">
		<title>output_high_fast</title>
		<para>
			Establece un PIN a un estado alto de voltaje. No verifica el estado del <keycap>tris</keycap>.
		</para>
		<screen>
	void output_high_fast(	BYTE puerto, 
				BYTE pin);
	ejemplo:
	output_high_fast(PIN_B0);

		</screen>
		</sect2>

		<sect2 id="outputhigh" xreflabel="output_high">
		<title>output_high</title>
		<para>
			Establece un PIN a un estado alto de voltaje. La verificaci&oacute;n del estado del <keycap>tris</keycap> depende de habilitar el macro SLOW_IO como TRUE o FALSE.
		</para>
		<para>
			Por defecto, si no se escribe <keycap>#define SLOW_IO TRUE</keycap> , SLOW_IO tiene el valor de TRUE.
		</para>
		<screen>
	#define SLOW_IO TRUE

	void output_high(	BYTE puerto, 
				BYTE pin);
	ejemplo:
	output_high(PIN_B0);

		</screen>
		</sect2>

		<sect2 id="outputlowslow" xreflabel="output_low_slow">
		<title>output_low_slow</title>
		<para>
			Establece un PIN a un estado bajo de voltaje. Verifica el estado del <keycap>tris</keycap>.
		</para>
		<screen>
	void output_low_slow(	BYTE puerto, 
				BYTE pin);
	ejemplo:
	output_low_slow(PIN_B0);

		</screen>
		</sect2>

		<sect2 id="outputlowfast" xreflabel="output_low_fast">
		<title>output_low_fast</title>
		<para>
			Establece un PIN a un estado bajo de voltaje. No verifica el estado del <keycap>tris</keycap>.
		</para>
		<screen>
	void output_low_fast(	BYTE puerto, 
				BYTE pin);
	ejemplo:
	output_low_fast(PIN_B0);

		</screen>
		</sect2>

		<sect2 id="outputlow" xreflabel="output_low">
		<title>output_low</title>
		<para>
			Establece un PIN a un estado bajo de voltaje. La verificaci&oacute;n del estado del <keycap>tris</keycap> depende de habilitar el macro SLOW_IO como TRUE o FALSE.
		</para>
		<para>
			Por defecto, si no se escribe <keycap>#define SLOW_IO TRUE</keycap> , SLOW_IO tiene el valor de TRUE.
		</para>
		<screen>
	#define SLOW_IO TRUE

	void output_low(	BYTE puerto, 
				BYTE pin);
	ejemplo:
	output_low(PIN_B0);

		</screen>
		</sect2>

		<sect2 id="inputslow" xreflabel="input_slow">
		<title>input_slow</title>
		<para>
			Devuelve el estado de un pin. puede ser <keycap>1</keycap> o <keycap>0</keycap>. Verifica el estado del <keycap>tris</keycap>.
		</para>
		<screen>
	BYTE input_slow(	BYTE puerto, 
				BYTE pin);
	ejemplo:
	input_slow(PIN_B1);

		</screen>
		</sect2>

		<sect2 id="inputfast" xreflabel="input_fast">
		<title>input_fast</title>
		<para>
			Devuelve el estado de un pin. puede ser <keycap>1</keycap> o <keycap>0</keycap>. No verifica el estado del <keycap>tris</keycap>.
		</para>
		<screen>
	BYTE input_fast(	BYTE puerto, 
				BYTE pin);
	ejemplo:
	input_fast(PIN_B1);

		</screen>
		</sect2>

		<sect2 id="input" xreflabel="input">
		<title>input</title>
		<para>
			Devuelve el estado de un pin. puede ser <keycap>1</keycap> o <keycap>0</keycap>. La verificaci&oacute;n del estado del <keycap>tris</keycap> depende de habilitar el macro SLOW_IO como TRUE o FALSE.
		</para>
		<para>
			Por defecto, si no se escribe <keycap>#define SLOW_IO TRUE</keycap> , SLOW_IO tiene el valor de TRUE.
		</para>
		<screen>
	#define SLOW_IO TRUE

	BYTE input(	BYTE puerto, 
			BYTE pin);
	ejemplo:
	input(PIN_B1);

		</screen>
		</sect2>

		<sect2 id="setpintoslow" xreflabel="set_pin_to_slow">
		<title>set_pin_to_slow</title>
		<para>Establece el estado de un pin a <keycap>1</keycap> o <keycap>0</keycap>. Verifica el estado del <keycap>tris</keycap>.</para>
		<screen>
	void set_pin_to_slow(	BYTE puerto, 
				BYTE pin,
				BYTE X);

	ejemplo:
	set_pin_to_slow(PIN_C1,1);//el pin C1 ahora tiene un estado alto
	set_pin_to_slow(PIN_C1,0);//el pin C1 ahora tiene un estado bajo
		</screen>
		</sect2>

		<sect2 id="setpintofast" xreflabel="set_pin_to_fast">
		<title>set_pin_to_fast</title>
		<para>Establece el estado de un pin a <keycap>1</keycap> o <keycap>0</keycap>. No verifica el estado del <keycap>tris</keycap>.</para>
		<screen>
	void set_pin_to_fast(	BYTE puerto, 
				BYTE pin,
				BYTE X);

	ejemplo:
	set_pin_to_fast(PIN_C1,1);//el pin C1 ahora tiene un estado alto
	set_pin_to_fast(PIN_C1,0);//el pin C1 ahora tiene un estado bajo
		</screen>
		</sect2>

		<sect2 id="setpinto" xreflabel="set_pin_to">
		<title>set_pin_to</title>
		<para>
			Establece el estado de un pin a <keycap>1</keycap> o <keycap>0</keycap>.
		</para> 
		<para>
			La verificaci&oacute;n del estado del <keycap>tris</keycap> depende de habilitar el macro SLOW_IO como TRUE o FALSE.
		</para>
		<para>
			Por defecto, si no se escribe <keycap>#define SLOW_IO TRUE</keycap> , SLOW_IO tiene el valor de TRUE.
		</para>
		<screen>
	#define SLOW_IO TRUE

	void set_pin_to(	BYTE puerto, 
				BYTE pin,
				BYTE X);

	ejemplo:
	set_pin_to(PIN_C1,1);//el pin C1 ahora tiene un estado alto
	set_pin_to(PIN_C1,0);//el pin C1 ahora tiene un estado bajo
		</screen>
		</sect2>

		<sect2 id="setpintristo" xreflabel="set_pin_tris_to">
		<title>set_pin_tris_to</title>
		<para>Establece el TRIS de un pin a <keycap>1</keycap> o <keycap>0</keycap>.</para>
		<screen>
	void set_pin_tris_to(	BYTE puerto, 
				BYTE pin,
				BYTE X);

	ejemplo:
	set_pin_tris_to(PIN_C1,1);//el TRIS C1 ahora tiene un estado alto
	set_pin_tris_to(PIN_C1,0);//el TRIS C1 ahora tiene un estado bajo
		</screen>
		</sect2>

		<sect2 id="setportaasdigital" xreflabel="set_porta_as_digital">
		<title>set_porta_as_digital</title>
		<para>Establece el puerto A como DIGITAL.</para>
		<screen>
	#define set_porta_as_digital() ADCON1=0x06

	ejemplo:
	set_porta_as_digital();
		</screen>
		</sect2>

		<sect2 id="setpullupportb" xreflabel="set_pullup_portb">
		<title>set_pullup_portb</title>
		<para>Habilita o deshabilita las resistencias de pull-up del puerto B.</para>
		<para>Para habilitar    las resistencias de pull-up X= 1 o TRUE.</para>
		<para>Para deshabilitar las resistencias de pull-up X= 0 o FALSE.</para>
		<screen>
	void set_pullup_portb(BYTE X);
		</screen>
		</sect2>

		<sect2 id="ejemplopinio" xreflabel="Ejemplo PinIO">
		<title>Ejemplo de PinIO</title>
		<para>
		Para compilar necesitas los siguientes comandos.
		</para>
		<para>
		<screen>
Ejemplo de compilacion : ./compila.sh ej_pinio 16f877a
		</screen>
		</para>
		<para>
		ej_pinio.c
		</para>
		<screen>
#include &lt;pic/p16f877a.h&gt;

#define FOSC_HZ 20000000

#include &lt;pinio.h&gt;
#include &lt;delayms.h&gt;

int main (void)
{
	delayms(100);

	while(TRUE)
	{
		delayms(50);
		output_high(PIN_C2);
		delayms(50);
		output_low(PIN_C2);

		if(input(PIN_A4)==1) output_high(PIN_B7);
		else                 output_low (PIN_B7); 
	}
	return 0;
}
		</screen>
		</sect2>
	</sect1>
