;
;					EJEMPLO 3.11
;
;				Autor: Mikel Etxebarria
;			(c) Microsystems Engineering (Bilbao)
;
;Ejemplo para MicroPIC Trainer y Trainer PLUS. Interface I2C gestionado por software.
;
;Haciendo uso de las rutinas incluidas en el fichero I2CLOW.INC, se trata de controlar
;el funcionamiento de los distintos dispositivos I2C, existentes en la tarjeta 
;Trainer PLUS. Estos dispositivos están conectados entre sí al bus I2C común. Se recomienda
;leer las especificaciones técnicas de los mismos, para tener un mayor conocimiento de las
;posibilidades de los mismos. Igualmente es importante desconectar los leds de la uPIC Trainer
;mediante el jumper J7 pues de lo contrario actuarían como carga adicional en las líneas RB6
;y RB7 que, en estos ejemplos, forman el bus I2C.
;
;El dispositivo I2C PCF8574. Puerto de E/S de 8 bits.
;
;Los leds de la Triner PLUS que pilotan el estado de las líneas de E/S del PCF8574 están 
;complementados. Es decir, se activan cuando la línea correspondiente está a "0".
;
;El ejemplo que se presenta a continuación lee el estado de los interruptores RA0-RA4 de la
;uPIC Trainer y lo saca por la puerta de salida del dispositivo PCF8574. 

		List	p=16F84		;Tipo de procesador
		include	"P16F84.INC"	;Definiciones de registros internos

CLKIN		equ	.4000000	;Frecuencia de trabajo
                 
I2c_var		equ	0x0c		;Inicio de las variables para rutinas I2C_LOW

		org	0x00		;Vector de reset
		goto	Inicio
		org	0x05		;Salvar el vector de interrupción	

		include	"I2CLOW.INC"	;Incluye las rutinas de manejo del bus I2C

Inicio:		bsf	STATUS,RP0	;Selecciona página 1 de datos
		movlw	b'10001111'	;Preescaler de 128 para el WDT. Pull_Up Off
		movwf	OPTION_REG	
		movlw	0x3f
		movwf	TRISA		;Puerta A como entrada		
		bcf	STATUS,RP0	;Selecciona página 0 de datos	
			
Loop		clrwdt
		call	Inicia_Bus	;Inicia el bus I2C
		call	Txt_Start_Bit	;Envía condición de inicio
		movlw	b'01110000'
		movwf	DataByte
		call	Txt_Byte	;Envía dirección del PCF8574, modo escritura

		movf	PORTA,W
		andlw	b'00011111'	;Lee el estado de RA0-RA4
		xorlw	b'11111111'	;Complementa las salidas (por los leds piloto)
		movwf	DataByte
		call	Txt_Byte	;Envía dato de salida
		call	Txt_Stop_Bit	;Envía condición de stop
		goto	Loop
		
		end			;Fin del programa fuente

