Preciso de ajuda

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

Preciso de ajuda

Mensagempor Vonnilmam » 08 Out 2008 00:50

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
VonNilmam "Assembler" e agora "C"
Avatar do usuário
Vonnilmam
Byte
 
Mensagens: 446
Registrado em: 19 Out 2006 14:25
Localização: espacial

Mensagempor veioloko » 08 Out 2008 08:25

Cara muda o titulo do seu topico, seja mais especifico

E que tipo de problema você esta tendo?.....colocar a rotina inteira e ainda mais em assembler é pra quem tem saco e tempo de sobra pra ficar lendo....

Muitos vão fazer como eu,entrar no topico e nem vao se quer olhar a rotina....

tente apontar melhor seu problema...
veioloko
Byte
 
Mensagens: 348
Registrado em: 10 Nov 2006 06:01
Localização: São Bernardo do Campo


Voltar para PIC

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

x