Hola racias por comentar, el pic que utilizo es el 12f675. Este esta es la parte principal del programa (utilizo un oscilador de 4Mhz)
list p=12f675
INCLUDE "p12f675.INC"
__CONFIG _CP_OFF&_CPD_OFF&_MCLRE_OFF&_BODEN_OFF&_WDT_OFF&_PWRTE_ON&_HS_OSC
Dato_leido equ 20h
R_ContC equ 25h
R_ContA equ 26h ; Contadores para los retardos.
R_ContB equ 27h
BCD_Centenas equ 28h ; de la RAM de usuario. Se toma a continuación de
BCD_Decenas equ 29h ; la última asignada.
BCD_Unidades equ 30h
dato_nibble_bajo equ 35h
dato_nibble_alto equ 36h
I2C_ContadorBits equ 37h ; Cuenta los bits a transmitir o a recibir.
I2C_Dato equ 38h ; Dato a transmitir o recibido.
I2C_Flags equ 39h
PCF8574_Dato equ 40h ; Aquí guarda el resultado del dato leído o que
#DEFINE PCF8574_DIR_ESCRITURA b'01000000'
; se va a escribir.
#DEFINE SCL GPIO,0 ; Línea SCL del bus I2C.
#DEFINE SDA GPIO,2 ; Línea SDA del bus I2C.
#DEFINE I2C_UltimoByteLeer I2C_Flags,0
;.........................................................................
org 0 ;Vector de RESET
goto INICIO
org 5 ;Inicio del Programa
include <RETARDOS.INC>
include <LCD.INC>
include <Visualizar.INC>
include <BIN_BCD.INC>
INCLUDE <BUS_I2C.INC>
INCLUDE <PCF8574.INC> ; Subrutinas de control del módulo LCD.
;................... Configuración de puertos ................
CONFIGURACION_GENERAL:
clrf GPIO
bcf STATUS,RP0
movlw b'00000111'
movwf CMCON
bsf STATUS, RP0
movlw b'00010010'
movwf ANSEL
movlw b'00000010'
movwf TRISIO
bcf STATUS,RP0
;.......................................................................
INICIO:
call LCD_Inicializa ; Inicializo LCD
call Mensaje ; Envio la frase voltimetro
call Retardo ; Retardo de 65ms
call Borrar ; Borro el mensaje
bsf OPTION_REG,7
movlw b'0000101' ; derecha,Vdd,0,0,01=canal 1,0= aun no inicia AD, 1=AD operativo
movwf ADCON0
call Retardo
bsf ADCON0,1
call Retardo
PROGRAMA:
btfsc ADCON0,1 ; Termino la conversion A/D?
goto PROGRAMA
call Visualizar_datos_LCD
call Retardo
bcf PIR1,6
bsf ADCON0,1
goto PROGRAMA
end