Hola Amigos..
Ando enredado, y no se si este haciendo bien las cosas, por eso vengo aqui a ver si alguno de ustedes ha trabajado antes con algun IBUTTON, lo que yo pretendo primeramente es hacer establecer la comunicacion con el, para despues leer su numero de serie, con el fin de comparar ese numero con otro previamente grabado en el pic.
Sin mas preambulo, estoy en la etapa en donde genero un pulso de reset y el ibutton debe contestarme con un pulso de presencia, cuando el ibutton me contesta y lo detecto, hago que RB0 se encienda, aqui es donde no logro hacer nada.
Pongo mi programa en asm, estoy utilizando el mplab para la edicion.
Espero que me puedan ayudar, o si alguien tuviera la rutina y quisiera compartirla conmigo se lo agradeceria infinitamente.
Gracias..
Felipe.
;*****************************************
;Programa para leer la serie de un Ibutton
;Procesador: 16f877a Crystal: 4Mhz
;*****************************************
LIST P=16F877a
INCLUDE <P16F877a.INC>
del0 equ 20h
del1 equ 21h
ORG 0x000
goto INICIO
INICIO
clrf PORTA ;Borra lacth del puerto A
clrf PORTB ;Borra lacth del puerto B
bsf STATUS, RP0 ;Accedemos al
bcf STATUS, RP1 ;Banco 1
clrf TRISA ;Ponemos como salida todo el puerto A
clrf TRISB ;Ponemos como salida todo el puerto B
bcf STATUS, RP0 ;Accedemos al
bcf STATUS, RP1 ;Banco 0
;//////////////////////////////////////////////////////////////////////////////////////////////////////
pulso_reset
bsf STATUS, RP0 ;Accedemos al
bcf STATUS, RP1 ;banco 1
movlw 00h
movwf TRISA ;Ponemos todo el puerto A como salida
bcf STATUS, RP0 ;Accedemos al
bcf STATUS, RP1 ;Banco 0
bcf PORTA, 4 ;Ponemos a 0 el 4o. bit del Pto. A
call retardo_reset ;Llamamos a la subrutina que genera el pulso de reset
bsf STATUS, RP0 ;Accedemos al
bcf STATUS, RP1 ;Banco 1
movlw 0ffh
movwf TRISA ;Ponemos todo el puerto A como entrada
bcf STATUS, RP0 ;Accedemos al
bcf STATUS, RP1 ;Banco O
;*********************************************************************************
det_presencia
call retardo_presencia
btfsc PORTA, 4 ;Aqui el Ibutton deberia estar mandando un pulso bajo(pulso de presencia), si es asi, salta.
goto pulso_reset ;si no, regresa a generar de nuevo el pulso de reset
bsf PORTB,0
ok
goto $+1 ;Bucle Infinito
goto $-1
;*********************************************************************************
retardo_reset ;550uS
movlw D'182'
movwf del0
loop0 decfsz del0,1
goto loop0
nop
return
;*********************************************************************************
retardo_presencia ;150uS
movlw D'49'
movwf del1
loop1 decfsz del1,1
goto loop1
nop
return
;*********************************************************************************
end