Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
Artuka

CI Relógio e Calendario - M5832

Recommended Posts

Olá...

Estou com uma grande dificuldade com relação ao funcionamento do CI M5832.

Achei este CI muito util e pratico...ele é um relógio e calendario q funciona mesmo com o circuito desligado apenas utilizando uma bateria d 2,5V.

Porém não consigo comunicar com meu microcontrolador q no caso estou utilizando um 8051 convencional (AT89S52), não consigo "escrever" nem "ler" as informações (aliais se eu não consigo "ler" não sei se estou conseguindo "escrever" nele).

aqui vai o link do Datasheet dele:

http://www.datasheetcatalog.net/pt/datasheets_pdf/M/5/8/3/M5832.shtml

Por favor...preciso de ajuda em relação ao ciclo de leitura deste CI

Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Seja bem vindo!

Se não colocar o programa que está tentando fazer, fica difícil ajudar.

Compartilhar este post


Link para o post
Compartilhar em outros sites
  • Autor do tópico
  • fiz um programinha simples só para poder entender este ci...este programinha simplesmente envia os dados (horario e data) e depois faz uma rotina para ficar lendo somente os segundos e ficar jogando para um display d 7 segmentos.

    ORG 0H

    LCALL SEG

    MOV A,#00D

    MOV R0,A

    MOV R1,A

    MOV R2,A

    MOV R3,A

    MOV R4,A

    MOV R5,A

    MOV R6,A

    MOV R7,A

    MOV P0,A

    MOV P1,A

    MOV P2,A

    MOV P3,A

    ;--------------------INICIO MODO ESCRITA

    SETB P1.2;habilita hold e cs

    LCALL T150;tempo para habilitar escrita

    MOV P2,#00D;endereço de unidade de segundo

    MOV P3,#05D;valor para unidade de segundos

    NOP

    SETB P1.1;habilita escrita

    NOP

    CLR P1.1;desabilita escrita

    NOP

    MOV P2,#01D;endereço dezena de segundo

    MOV P3,#03D;valor para dezena de segundo e assim sucessivamente para o restante

    NOP

    SETB P1.1

    NOP

    CLR P1.1

    NOP

    MOV P2,#02D;unidade de minuto

    MOV P3,#04D

    NOP

    SETB P1.1

    NOP

    CLR P1.1

    NOP

    MOV P2,#03D;dezena de minuto

    MOV P3,#05D

    NOP

    SETB P1.1

    NOP

    CLR P1.1

    NOP

    MOV P2,#04D;unidade de hora

    MOV P3,#09D

    NOP

    SETB P1.1

    NOP

    CLR P1.1

    NOP

    MOV P2,#05D;dezena de hora

    MOV P3,#09D;ajustado para enviar o valor 1 e formato 24 horas

    NOP

    SETB P1.1

    NOP

    CLR P1.1

    NOP

    MOV P2,#06D;dia da semana

    MOV P3,#01D

    NOP

    SETB P1.1

    NOP

    CLR P1.1

    NOP

    MOV P2,#07D;unidade dia

    MOV P3,#07D

    NOP

    SETB P1.1

    NOP

    CLR P1.1

    NOP

    MOV P2,#08D;dezena dia

    MOV P3,#01D

    NOP

    SETB P1.1

    NOP

    CLR P1.1

    NOP

    MOV P2,#09D;unidade mes

    MOV P3,#01D

    NOP

    SETB P1.1

    NOP

    CLR P1.1

    NOP

    MOV P2,#10D;dezena mes

    MOV P3,#01D

    NOP

    SETB P1.1

    NOP

    CLR P1.1

    NOP

    MOV P2,#11D;unidade ano

    MOV P3,#08D

    NOP

    SETB P1.1

    NOP

    CLR P1.1

    NOP

    MOV P2,#12D;dezena ano

    MOV P3,#00D

    NOP

    SETB P1.1

    NOP

    CLR P1.1

    NOP

    CLR P1.2

    ;--------------------FIM MODO ESCRITA

    ;--------------------INICIO MODO LEITURA

    VL3: MOV A,#00D

    MOV R0,A

    MOV R1,A

    MOV R2,A

    MOV R3,A

    MOV R4,A

    MOV R5,A

    MOV R6,A

    MOV R7,A

    MOV P0,A

    MOV P1,A

    MOV P2,A

    MOV P3,A

    SETB P1.2;habilita hold e cs

    LCALL T150;tempo d espera

    MOV P2,#00D;esndereço de unidade de segundo

    NOP

    NOP

    SETB P1.0;habilita leitura

    NOP

    NOP

    NOP

    MOV A,P3;mover o valor da unidade d segundo para A

    CLR P1.0;desabillita escrita

    CLR P1.2;desabilita hold e cs

    MOV P0,A;mover para P0 o valor da unidade d segundo

    VL2: NOP;ESSA ROTINA aqui É PARA EU ATUALIZAR O DISPLAY MANUALMENTE COM UM BOTÃO

    JB P1.7,VL1

    JMP VL2

    VL1: NOP

    JNB P1.7,VL3

    JMP VL1

    ;--------------------FIM MODO LEITURA

    T150: MOV R7,#100D

    VLT: NOP

    DJNZ R7,VLT

    RET

    SEG: MOV R1,#20D

    S: MOV TMOD, #01

    MOV TH0, #03CH

    MOV TL0, #0AFH

    SETB TR0

    JNB TF0,$

    CLR TR0

    CLR TF0

    DJNZ R1,S

    MOV R1,#10D

    RET

    END

    mesmo eu não enviando o horario e data ele tinha q contar da qualker jeito pelo menos os segundos...estou fazendo exatamente como dia no datasheet...

    - Habilito o HOLD e CS

    - Espero um tempo

    - Envio o endereço da onde eu quero ler

    - Espero um tempo

    - Habilito o READ

    - Armazeno em algum registrador o valor das saidas D0-D3

    - Desabilito READ

    - Desabilito HOLD e CS

    estou fazendo esta rotina dentro dos tempos necessarios q ele pede...no programa fiz um loop d 100 voltas pois com um cristal d 12mhz faz com q o micro demore 1 micro segundo por cada instrução...e isso da o tempo necessario q ele precisa

    p0 - envia os dados para um 7448 q aciona o display d 7 segmentos

    p2 - envia o endereço d memoria para o M5832

    p3 - lê os dados fornecidos pelo M5832

    p1.0 - read

    p1.1 - write

    p1.2 - hold e cs

    Editado por soschip
    Não postar mensagens seguidas em menos de 24h. Ler as regras

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Está usando um CI com mais de 25 anos, praticamente extinto, quando no mercado tem CIs novos com muitas rotinas disponíveis na net, como PCF8583 e DS1302 ou DS1307.

    Obs:

    Não poste seguidamente em menos de 24h. Use edit.gif

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • Estou ciente disso, realmente é um CI mtoo antigo, porém onde eu trabalho mexo com alguns equipamentos antigos projetados há uns 20 anos e no estoque do trampo tem milhares deste ci por isso q escolhi este...semana passada eu pesquisei alguns cis deste tipo e achei o DS1302 q achei bem simples e pratico, aliais até imprimi o datasheet pra dar uma estudada...muito legal este PCF8583, não conhecia...muito bom !

    porém estou fazendo um projeto q utilize somente componentes q tem lá no estoque pra simplificar as coisas e por isso estou querendo algumas informações sobre este ci.

    Ainda não sou expert em assembler, faço apenas projetos simples para acionar reles, trasistores, sensores; gigas de teste entre outros e agora surgiram novas duvidas devido algumas ideias q surgiram quando precisei fazer uma comunicação serial de um projetinho lá e quando eu pensei em utilizar o DS1302...

    por exemplo...pra mim fazer a comunicação com este CI (DS1302) preciso somente d 3 terminais do port do meu micro ligado no RST,SCLK e I/O do DS1302...minha duvida é: como trasfiro os dados pelo I/O ? como fazer e em assembler ? vou explicar melhor minha duvida

    por exemplo c o P0.0 esteja ligado ao I/O do DS1302, p0.1 ligado ao SCLK e o p0.2 ligado ao RST...

    setb p0.3

    setb p0.0 |

    setb p0.1 |--> leu o valor "1" no p0.0

    clr p0.1 |

    clr p0.0 |

    setb p0.1 |--> leu o valor "0" no p0.0

    clr p0.1 |

    e assim por diante........

    clr p0.3

    entendeu o q eu quir dizer ?

    exemplo: preciso enviar : 1001101

    onde eu vou armazenar os "zero" e "um" PARA ENVIAR E RECEBE-LOS em sequencia? fica **** d ficar fazendo "setb" e "clr"

    tenho um livro de 8051 mais não explica isso extamente como fazer

    desculpe pelas postagens em menos d 24hrs...não tinha visto nas regras e muito obrigado pela atenção

    Editado por Artuka

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    É só colocar o valor a transferir no acumulador e transferir os o 8 bits com o auxílio do carry.

    Ex:


    ;o acumulador deve conter o byte
    [B]mov r1,#8[/B] ;contador para os 8 bits
    [COLOR=Blue]loop[/COLOR]: [B]rlc a [/B];coloca o bit mais significativo do cumulador no carry - [B]rrc a[/B] transferiria o menos significativo
    [B]mov SDA,C[/B] ;transfere o carry para a saída SDA.
    setb clock ;clock é o pino para o clock I2C
    nop
    clr clock
    [B]djnz r1[/B],[COLOR=Blue]loop [/COLOR] ;repete 8 vezes.
    segue:

    Uma forma fácil de interpretar os mnemônicos assembly é entender o que significa traduzindo-os.

    DJNZ = Decrement and Jump if Not Zero

    Decrementa e salta se não igual a zero.

    RRC = Rolate Right with Carry

    RLC = Rolate Left

    Editado por soschip

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • entendi mais ou menos...não entendi exatamente a lógica da coisa...

    só pra ver c eu entendi...

    mov r1,#08d ---> porque eu vou enviar 8 bits, isso depende da quantidade d bits q enviarei

    loop:

    rlc a ----> eu jogo o valor q eu quiser pra variavel "a" ?

    mov px.y,c ----> x= porta (o q seria a porta ? p0 p1 p2 p3 ?) e q valor d y ?

    djnz r1,loop

    os comandos mais comuns eu conheço, djnz, cjne, dec etc....

    por exemplo, como envio o valor 5 q seria "10100000" ?

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Obs: Leia novamente o post acima que inseri o clock depois de RLC.

    deve definir que pino deve ser o clok com

    clock equ Px.y

    sda equ Px.y

    A instrução RLC e RRC ou RR e RL tem tudo a ver com shift register.

    Se tenho um byte em A = 11110000 e o carry bit = 0

    e faço RLC A, então A ficará

    11100000 porque o bit1 da esquerda foi parar no carry e o carry que era zero foi parar no bit mais a direita de A.

    - mais um RLC A ficará.

    11000001

    porque o bit da esquerda vai para o carry e o que estava no carry vai para o bit mais a direita.

    Quando o bit está no carry, ele pode ser movido para qualquer pino do micro.

    Para ler um pino basta vazer o inverso 8 ezes, ou seja, mover o carri para o bit 7 do acumulador com RRC ou para o bit 1 com RLC.

    Sugiro que estude as instruções aqui:

    http://www.keil.com/support/man/docs/is51/is51_instructions.htm

    RLC

    É muito recomendáve conhecer bem eletrônica digital para compreender bem assembly, principalmente instruções de manipulação de bits, rolagem, operações lógicas OR, XOR e AND.

    Sinto muito não poder ajudar mais, é por falta de tempo mesmo.

    Editado por soschip

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Salve, Artuka.

    rlc a ----> eu jogo o valor q eu quiser pra variavel "a" ?

    O "a", nesse caso, é e não é (???) uma variável. Nesse caso, o "a" faz referência ao registrador acumulador do 8051 (o "A", ou "ACC", ou "acc"). Depende do seu compilador, mas a maioria dos compiladores entende somente o "a" nessa instrução, como referência ao acumulador. E sim. Sendo um registrador de uso geral (o mais geral do 8051), você pode escrever qualquer valor de 8 bits, nele.

    mov px.y,c ----> x= porta (o q seria a porta ? p0 p1 p2 p3 ?) e q valor d y ?

    Exato. PORTA, no caso, faz referência à porta de I/O de 8 bits do 51 (P0~P3).

    Y faz referência ao pino da porta que você escolheu como I/O, que varia de 0 à 7.

    Pra estudar o hardware do 8051, em ASM, recomendo o livro do Denys:

    http://www.editoraerica.com.br/buscafinal.asp?cod=721X

    O livro é excelente. Fala do hardware do 51 e tb dos circuitos de lógica combinacional que se acopla à máquina. Muito recomendado.

    []'s

    Editado por Maurício2006

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • Então...eu tenho esse livro !!! mais ele não explica exatamente assim como vocês explicaram...aprendi assembler no tecnico há uns 2 anos e não ME lembro direito como funciona esse carry...vou dar uma estudada nessas informações q vocês me passaram, no ds1302 e em assembler...

    irei comprar este ci e começar a fazer "experiencias" e qualker outra duvida postarei aqui !!!

    AGRADEÇO MTOO A ATENÇÃO E AJUDA DE vocês !!! VALEU MESMO !!!

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Fechado até o autor do tópico decidir reabrí-lo.

    Para isto, entre em contato com a moderação.

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
    Visitante
    Este tópico está impedido de receber novos posts.





    Sobre o Clube do Hardware

    No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

    Direitos autorais

    Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

    ×