Ir ao conteúdo
  • Cadastre-se

CI Relógio e Calendario - M5832


Artuka

Posts recomendados

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

Link para o comentário
Compartilhar em outros sites

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

Link para o comentário
Compartilhar em outros sites

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

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

É 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

Link para o comentário
Compartilhar em outros sites

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" ?

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

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.

Link para o comentário
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

Link para o comentário
Compartilhar em outros sites

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 !!!

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades 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

×
×
  • Criar novo...