;
;					EJEMPLO 3.14
;
;				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 SAA1064. Controlador de displays 7 segmentos
;
;Se trata de un simple programa visualiza el valor "1234" sobre los cuatro displays de 
;la uPIC Trainer PLUS. El valor a visualizar podría ser cualquier otro.

		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
Key_var		equ	0x12		;Inicio de las variables de manejo del teclado
Digito_1	equ	0x18
Digito_2	equ	0x19
Digito_3	equ	0x1a		
Digito_4	equ	0x1b		;Buffer de salida al SAA1064 de los 4 dígitos		

		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
		include "teclado.INC"	;Incluye rutinas de manejo del teclado

;**************************************************************************************
;VISUALIZA: Esta rutina recoge el valor de las cuatro variables "Dígito" y las transmi-
;te por el bus I2C para su visualización sobre los displays de uPIC Trainer Plus.

VISUALIZA:	call	Inicia_Bus	;Inicia líneas del bus I2C
		call	Txt_Start_Bit	;Envía condición de inicio
		movlw	b'01110110'
		movwf	DataByte
		call	Txt_Byte	;Transmite dirección del dispositivo (escritura)
		clrf	DataByte
		call	Txt_Byte	;Transmite byte de instrucción
		movlw	b'01000111'
		movwf	DataByte	
		call	Txt_Byte	;Transmite byte de control
		movf	Digito_1,W
		movwf	DataByte
		call	Txt_Byte	;Transmite Dígito 1
		movf	Digito_2,W
		movwf	DataByte
		call	Txt_Byte	;Transmite Dígito 2
		movf	Digito_3,W
		movwf	DataByte
		call	Txt_Byte	;Transmite Dígito 3
		movf	Digito_4,W
		movwf	DataByte
		call	Txt_Byte	;Transmite Dígito 4
		call	Txt_Stop_Bit	;Transmite secuencia de STOP
		return


Inicio:		clrf	PORTA	
		clrf	PORTB
		bsf	STATUS,RP0	;Selecciona página 1 de datos
		clrf	TRISA
		clrf	TRISB		;Puerta A y B salidas
		movlw	b'10001111'	;Preescaler de 128 para el WDT. Pull_Up Off
		movwf	OPTION_REG				
		bcf	STATUS,RP0	;Selecciona página 0 de datos	

		call	Inicia_Bus	;Inicia el bus I2C
		
		movlw	0x01		;Digito a visualizar (1)
		call	BCD_7seg	;Convierte el dígito en código 7 segmentos
		movwf	Digito_1	;Almacena en el buffer de salida
		movlw	0x02		;Digito a visualizar (2)
		call	BCD_7seg	;Convierte el dígito en código 7 segmentos
		movwf	Digito_2	;Almacena en el buffer de salida
		movlw	0x03		;Digito a visualizar (3)
		call	BCD_7seg	;Convierte el dígito en código 7 segmentos
		movwf	Digito_3	;Almacena en el buffer de salida
		movlw	0x04		;Digito a visualizar (4)
		call	BCD_7seg	;Convierte el dígito en código 7 segmentos
		movwf	Digito_4	;Almacena en el buffer de salida
		
		call	VISUALIZA	;Visualiza el Buffer sobre los 4 dígitos del SAA1064

Loop		sleep			;Modo standby
		goto	Loop
		
		end			;Fin del programa fuente

