Preciso de ajuda

Eu estou fazendo um novo produto como havia dito aos amigos, já esta quase tudo Ok no programa, mas estou me deparando com problemas no ds1302, minha rotina é essa aquí:
Por favor me ajudem, muito obrigado meu email: mcupicc@hotmail.com
; Essa rotina trata todas as funções do DS 1302:
; ***********************************
; * Rotina leitora de dados no DS1302 *
; ***********************************
;
SendMinutoHora:
Movf Minuto, w
Call Conversor_Dec_Bcd
Movwf CLOCK_SEC;Clock_Min
Call Set_Sec;SET_MIN
; Movf Hora, w
; Call Conversor_Dec_Bcd
; Movwf Clock_Hrs
; Call Set_Hour
Return
;
ReadMinutoHora:
Call Read_Sec;Read_Min
Movf Buffer1, w
Call Conversor_Bcd_Dec
Movwf Minuto
; Call Read_Hour
; Movf Buffer1, w
; Call Conversor_Bcd_Dec
; Movwf Hora
Return
;-----------
READ_SEC ; DS1302 read seconds register
BSF IO_RST ; take IO reset high to initiate transfer
MOVLW B'10000001' ; binary is 10000001 read seconds command
MOVWF BUFFER1 ; store it in the buffer
CALL SHIFT_OUT ; and send to DS 1320
CALL SHIFT_IN ; read a bite from DS1320
BCF IO_RST ; IO_RST low
RETURN
;-----------
READ_MIN ; DS1302 read minutes register
BSF IO_RST ; take IO reset high to initiate transfer
MOVLW B'1000011' ; binary is 10000011 read minutes command
MOVWF BUFFER1 ; store it in the buffer
CALL SHIFT_OUT ; and send to DS 1320
CALL SHIFT_IN ; read a bite from DS1320
BCF IO_RST ; IO_RST low
RETURN
;-----------
READ_HOUR ; DS1302 read hour register
BSF IO_RST
MOVLW B'10000101'
MOVWF BUFFER1
CALL SHIFT_OUT
CALL SHIFT_IN
BCF IO_RST ; IO_RST low
RETURN
;-----------
READ_DAY ; DS1302 read day register
BSF IO_RST
MOVLW B'10000111'
MOVWF BUFFER1
CALL SHIFT_OUT
CALL SHIFT_IN
BCF IO_RST ; IO_RST low
RETURN
;-----------
READ_MONTH ; DS1302 read month register
BSF IO_RST
MOVLW B'10001001'
MOVWF BUFFER1
CALL SHIFT_OUT
CALL SHIFT_IN
BCF IO_RST ; IO_RST low
RETURN
;-----------
READ_YEAR ; DS1302 read year register
BSF IO_RST
MOVLW B'10001101'
MOVWF BUFFER1
CALL SHIFT_OUT
CALL SHIFT_IN
BCF IO_RST
RETURN
;-----------
DS1302_INIT_RTN
SET_SEC ; Set seconds on DS1302
BSF IO_RST ; take IO reset high to init transfer
MOVLW B'10001110' ; Write protect off bin 10001110
MOVWF BUFFER1 ; send to ds 1320
CALL SHIFT_OUT
MOVLW B'00000000' ; Write protect on
MOVWF BUFFER1 ; send to ds 1320
CALL SHIFT_OUT
BCF IO_RST ; toggle IO reset
BSF IO_RST ; IO_RST high
MOVLW B'10000000' ; Select second register
MOVWF BUFFER1 ; send to ds 1320
CALL SHIFT_OUT
MOVF CLOCK_SEC, W ; ***! UPDATED !***
MOVWF BUFFER1 ; send to ds 1320
CALL SHIFT_OUT
BCF IO_RST ; IO_RST low
RETURN
;-----------
SET_MIN ; Set minutes on DS1302
BSF IO_RST ; take IO reset high to init transfer
MOVLW B'10001110' ; Write protect off
MOVWF BUFFER1 ; send to ds 1320
CALL SHIFT_OUT
MOVLW B'00000000' ; Write protect on
MOVWF BUFFER1 ; send to ds 1320
CALL SHIFT_OUT
BCF IO_RST ; toggle IO reset
BSF IO_RST
MOVLW B'10000010' ; b'10000010' is write minutes command
MOVWF BUFFER1 ; send to ds 1320
CALL SHIFT_OUT
MOVF CLOCK_MIN, W ; ***! UPDATED !***
MOVWF BUFFER1 ; send to ds 1320
CALL SHIFT_OUT
BCF IO_RST ; IO_RST low
RETURN
;-----------
SET_HOUR ; Set hours on DS1302
BSF IO_RST ; take IO reset high to init transfer
MOVLW B'10001110' ; Write protect off
MOVWF BUFFER1 ; send to ds 1320
CALL SHIFT_OUT
MOVLW B'00000000' ; Write protect on
MOVWF BUFFER1 ; send to ds 1320
CALL SHIFT_OUT
BCF IO_RST ; toggle IO reset
BSF IO_RST
MOVLW B'10000100' ; b'10000100' is write hour command.
MOVWF BUFFER1 ; send to ds 1320
CALL SHIFT_OUT
MOVF CLOCK_HRS, W ; ***! UPDATED !***
; working here the time is set before entering the routine, so look for all calls to set_hour!
MOVWF BUFFER1 ; send to ds 1320
CALL SHIFT_OUT
BCF IO_RST
RETURN
;-----------
SET_DAY ; Set days on DS1302
BSF IO_RST ; take IO reset high to init transfer
MOVLW B'10001110' ; Write protect off
MOVWF BUFFER1 ; send to ds 1320
CALL SHIFT_OUT
MOVLW B'00000000'
MOVWF BUFFER1
CALL SHIFT_OUT
BCF IO_RST ; toggle IO reset
BSF IO_RST
MOVLW B'10000110' ; b'10000110' is write date command.
MOVWF BUFFER1 ; send to ds 1320
CALL SHIFT_OUT
MOVLW B'00110001' ; This is the value that is set.
MOVWF BUFFER1 ; send to ds 1320
CALL SHIFT_OUT
BCF IO_RST
RETURN
;-----------
SET_MONTH ; Set months on DS1302
BSF IO_RST ; take IO reset high to init transfer
MOVLW B'10001110' ; Write protect off
MOVWF BUFFER1 ; send to ds 1320
CALL SHIFT_OUT
MOVLW B'00000000'
MOVWF BUFFER1 ; send to ds 1320
CALL SHIFT_OUT
BCF IO_RST ; toggle IO reset
BSF IO_RST
MOVLW B'10001000' ; '10001000' is write month command.
MOVWF BUFFER1 ; send to ds 1320
CALL SHIFT_OUT
MOVLW B'00010010' ; This is the value that is set.
MOVWF BUFFER1 ; send to ds 1320
CALL SHIFT_OUT
BCF IO_RST
RETURN
;-----------
SET_YEAR ; Set years on DS1302
BSF IO_RST ; take IO reset high to init transfer
MOVLW B'10001110' ; Write protect off
MOVWF BUFFER1 ; send to ds 1320
CALL SHIFT_OUT
MOVLW B'00000000'
MOVWF BUFFER1 ; send to ds 1320
CALL SHIFT_OUT
BCF IO_RST ; toggle IO reset
BSF IO_RST
MOVLW B'10001100' ; b'10001100' is write year command.
MOVWF BUFFER1 ; send to ds 1320
CALL SHIFT_OUT
MOVLW B'00000001' ; This is the value that is set.
MOVWF BUFFER1 ; send to ds 1320
CALL SHIFT_OUT
BCF IO_RST
RETURN
;-----------
; *********************************
; * Driver entrada e Saida de dados *
; *********************************
;SHIFT_IN: ; Read a byte from the DS1302 and store it in BUFFER1
Bank1
Bsf Trisc, 4
Bank0
MOVLW .8
MOVWF LOOP_CNT1 ; initialize loop counter for 8 bits of data
CLRF BUFFER1 ; clear the buffer
BcF IO_CLK
SH_2:
BsF IO_CLK
BCF STATUS,C
BTFSC IO_DATA
BSF STATUS,C
BcF IO_CLK
RRF BUFFER1, F ; rotate the buffer
DECFSZ LOOP_CNT1, F
GOTO SH_2
Bank1
Bcf Trisc, 4
Bank0
RETURN
;-----------
; ************************************
; * Rotina que escreve dados no DS1302 *
; ************************************
SHIFT_OUT: ; DS1302 serial out routine
MOVWF BUFFER1
MOVLW .8
MOVWF LOOP_CNT1
BcF IO_CLK
SH_1:
BTFSC BUFFER1,0
BSF IO_DATA
BTFSS BUFFER1,0
BCF IO_DATA
BsF IO_CLK
RRF BUFFER1, F
BcF IO_CLK
DECFSZ LOOP_CNT1, F
GOTO SH_1
RETURN
Por favor me ajudem, muito obrigado meu email: mcupicc@hotmail.com
; Essa rotina trata todas as funções do DS 1302:
; ***********************************
; * Rotina leitora de dados no DS1302 *
; ***********************************
;
SendMinutoHora:
Movf Minuto, w
Call Conversor_Dec_Bcd
Movwf CLOCK_SEC;Clock_Min
Call Set_Sec;SET_MIN
; Movf Hora, w
; Call Conversor_Dec_Bcd
; Movwf Clock_Hrs
; Call Set_Hour
Return
;
ReadMinutoHora:
Call Read_Sec;Read_Min
Movf Buffer1, w
Call Conversor_Bcd_Dec
Movwf Minuto
; Call Read_Hour
; Movf Buffer1, w
; Call Conversor_Bcd_Dec
; Movwf Hora
Return
;-----------
READ_SEC ; DS1302 read seconds register
BSF IO_RST ; take IO reset high to initiate transfer
MOVLW B'10000001' ; binary is 10000001 read seconds command
MOVWF BUFFER1 ; store it in the buffer
CALL SHIFT_OUT ; and send to DS 1320
CALL SHIFT_IN ; read a bite from DS1320
BCF IO_RST ; IO_RST low
RETURN
;-----------
READ_MIN ; DS1302 read minutes register
BSF IO_RST ; take IO reset high to initiate transfer
MOVLW B'1000011' ; binary is 10000011 read minutes command
MOVWF BUFFER1 ; store it in the buffer
CALL SHIFT_OUT ; and send to DS 1320
CALL SHIFT_IN ; read a bite from DS1320
BCF IO_RST ; IO_RST low
RETURN
;-----------
READ_HOUR ; DS1302 read hour register
BSF IO_RST
MOVLW B'10000101'
MOVWF BUFFER1
CALL SHIFT_OUT
CALL SHIFT_IN
BCF IO_RST ; IO_RST low
RETURN
;-----------
READ_DAY ; DS1302 read day register
BSF IO_RST
MOVLW B'10000111'
MOVWF BUFFER1
CALL SHIFT_OUT
CALL SHIFT_IN
BCF IO_RST ; IO_RST low
RETURN
;-----------
READ_MONTH ; DS1302 read month register
BSF IO_RST
MOVLW B'10001001'
MOVWF BUFFER1
CALL SHIFT_OUT
CALL SHIFT_IN
BCF IO_RST ; IO_RST low
RETURN
;-----------
READ_YEAR ; DS1302 read year register
BSF IO_RST
MOVLW B'10001101'
MOVWF BUFFER1
CALL SHIFT_OUT
CALL SHIFT_IN
BCF IO_RST
RETURN
;-----------
DS1302_INIT_RTN
SET_SEC ; Set seconds on DS1302
BSF IO_RST ; take IO reset high to init transfer
MOVLW B'10001110' ; Write protect off bin 10001110
MOVWF BUFFER1 ; send to ds 1320
CALL SHIFT_OUT
MOVLW B'00000000' ; Write protect on
MOVWF BUFFER1 ; send to ds 1320
CALL SHIFT_OUT
BCF IO_RST ; toggle IO reset
BSF IO_RST ; IO_RST high
MOVLW B'10000000' ; Select second register
MOVWF BUFFER1 ; send to ds 1320
CALL SHIFT_OUT
MOVF CLOCK_SEC, W ; ***! UPDATED !***
MOVWF BUFFER1 ; send to ds 1320
CALL SHIFT_OUT
BCF IO_RST ; IO_RST low
RETURN
;-----------
SET_MIN ; Set minutes on DS1302
BSF IO_RST ; take IO reset high to init transfer
MOVLW B'10001110' ; Write protect off
MOVWF BUFFER1 ; send to ds 1320
CALL SHIFT_OUT
MOVLW B'00000000' ; Write protect on
MOVWF BUFFER1 ; send to ds 1320
CALL SHIFT_OUT
BCF IO_RST ; toggle IO reset
BSF IO_RST
MOVLW B'10000010' ; b'10000010' is write minutes command
MOVWF BUFFER1 ; send to ds 1320
CALL SHIFT_OUT
MOVF CLOCK_MIN, W ; ***! UPDATED !***
MOVWF BUFFER1 ; send to ds 1320
CALL SHIFT_OUT
BCF IO_RST ; IO_RST low
RETURN
;-----------
SET_HOUR ; Set hours on DS1302
BSF IO_RST ; take IO reset high to init transfer
MOVLW B'10001110' ; Write protect off
MOVWF BUFFER1 ; send to ds 1320
CALL SHIFT_OUT
MOVLW B'00000000' ; Write protect on
MOVWF BUFFER1 ; send to ds 1320
CALL SHIFT_OUT
BCF IO_RST ; toggle IO reset
BSF IO_RST
MOVLW B'10000100' ; b'10000100' is write hour command.
MOVWF BUFFER1 ; send to ds 1320
CALL SHIFT_OUT
MOVF CLOCK_HRS, W ; ***! UPDATED !***
; working here the time is set before entering the routine, so look for all calls to set_hour!
MOVWF BUFFER1 ; send to ds 1320
CALL SHIFT_OUT
BCF IO_RST
RETURN
;-----------
SET_DAY ; Set days on DS1302
BSF IO_RST ; take IO reset high to init transfer
MOVLW B'10001110' ; Write protect off
MOVWF BUFFER1 ; send to ds 1320
CALL SHIFT_OUT
MOVLW B'00000000'
MOVWF BUFFER1
CALL SHIFT_OUT
BCF IO_RST ; toggle IO reset
BSF IO_RST
MOVLW B'10000110' ; b'10000110' is write date command.
MOVWF BUFFER1 ; send to ds 1320
CALL SHIFT_OUT
MOVLW B'00110001' ; This is the value that is set.
MOVWF BUFFER1 ; send to ds 1320
CALL SHIFT_OUT
BCF IO_RST
RETURN
;-----------
SET_MONTH ; Set months on DS1302
BSF IO_RST ; take IO reset high to init transfer
MOVLW B'10001110' ; Write protect off
MOVWF BUFFER1 ; send to ds 1320
CALL SHIFT_OUT
MOVLW B'00000000'
MOVWF BUFFER1 ; send to ds 1320
CALL SHIFT_OUT
BCF IO_RST ; toggle IO reset
BSF IO_RST
MOVLW B'10001000' ; '10001000' is write month command.
MOVWF BUFFER1 ; send to ds 1320
CALL SHIFT_OUT
MOVLW B'00010010' ; This is the value that is set.
MOVWF BUFFER1 ; send to ds 1320
CALL SHIFT_OUT
BCF IO_RST
RETURN
;-----------
SET_YEAR ; Set years on DS1302
BSF IO_RST ; take IO reset high to init transfer
MOVLW B'10001110' ; Write protect off
MOVWF BUFFER1 ; send to ds 1320
CALL SHIFT_OUT
MOVLW B'00000000'
MOVWF BUFFER1 ; send to ds 1320
CALL SHIFT_OUT
BCF IO_RST ; toggle IO reset
BSF IO_RST
MOVLW B'10001100' ; b'10001100' is write year command.
MOVWF BUFFER1 ; send to ds 1320
CALL SHIFT_OUT
MOVLW B'00000001' ; This is the value that is set.
MOVWF BUFFER1 ; send to ds 1320
CALL SHIFT_OUT
BCF IO_RST
RETURN
;-----------
; *********************************
; * Driver entrada e Saida de dados *
; *********************************
;SHIFT_IN: ; Read a byte from the DS1302 and store it in BUFFER1
Bank1
Bsf Trisc, 4
Bank0
MOVLW .8
MOVWF LOOP_CNT1 ; initialize loop counter for 8 bits of data
CLRF BUFFER1 ; clear the buffer
BcF IO_CLK
SH_2:
BsF IO_CLK
BCF STATUS,C
BTFSC IO_DATA
BSF STATUS,C
BcF IO_CLK
RRF BUFFER1, F ; rotate the buffer
DECFSZ LOOP_CNT1, F
GOTO SH_2
Bank1
Bcf Trisc, 4
Bank0
RETURN
;-----------
; ************************************
; * Rotina que escreve dados no DS1302 *
; ************************************
SHIFT_OUT: ; DS1302 serial out routine
MOVWF BUFFER1
MOVLW .8
MOVWF LOOP_CNT1
BcF IO_CLK
SH_1:
BTFSC BUFFER1,0
BSF IO_DATA
BTFSS BUFFER1,0
BCF IO_DATA
BsF IO_CLK
RRF BUFFER1, F
BcF IO_CLK
DECFSZ LOOP_CNT1, F
GOTO SH_1
RETURN