Página 1 de 2

barramento bidirecional num port do 8051

MensagemEnviado: 17 Dez 2013 22:29
por renan-papaco
alguem ai por favor conhece algum truque pra tornar algum port do 8051 como um bus de dados bidirecional? dai eu usaria um pino de outro port pra fazer o controle de um latch 74LS374 para fazer uma saída...e um outro pino pra controlar um 74LS244 pra fazer a leitura.... ou até usaria um 8255 e inicializaria ele com o PA como saida, e PB como entrada.

Re: barramento bidirecional num port do 8051

MensagemEnviado: 17 Dez 2013 22:38
por andre_luis
O handshake para manipulação dos sinais de controle de um Latch é tão simples, que acredito que não se encontre bibliotecas na internet para isso.
Eu já fiz isso com o PIC em C, e foram algumas poucas linhas de código diluídas dentro do programa principal.


+++

Re: barramento bidirecional num port do 8051

MensagemEnviado: 18 Dez 2013 07:06
por brasilma
Veja circuítos com o seletor 74LS138 ou 74LS139 que vai encontrar o que deseja, o 8255 também é uma boa opção!!!

Re: barramento bidirecional num port do 8051

MensagemEnviado: 18 Dez 2013 07:20
por tcpipchip
sobre configurar como port bidirecional o mcs51 já foi discutido....dê uma procurada...

Re: barramento bidirecional num port do 8051

MensagemEnviado: 18 Dez 2013 23:54
por renan-papaco
aparentemente era pra ser uma coisa fácil... mas acho q sei o porque de não conseguir fazer isso... ocorre que meu compilador não é preparado pra usar recursos avançados do 8051.... como IO mapeada, barramento bidirecional e etc... ja tentei algumas manhas como separar funções do tipo:

void (portaentrada){
P0= variavel
if variavel = 0
(portasaida)
}
void (portasaida)
"habilitar latch por P1.0 e por FF em P0"
}

algo mais ou menos assim nesse esboço... mas como ja disse... não é muito possivel pois o meu compilador eu peguei desse site aki: www.u8051.com.br
parece q precisarei usar uma outra versão do SDCC, pois as headers do compilador q baixei do referido site usa headers proprias, e outras headers foram modificadas pra q não se use recursos externos...q é oq preciso tanto...

Re: barramento bidirecional num port do 8051

MensagemEnviado: 19 Dez 2013 07:11
por brasilma
Não vou arriscar comentar algo em C, pois não é minha praia...

A operação é assim: você precisa mapear esses buffers de entrada e saída no seu 8051.

Ou seja, utilizar os pinos de endereço e controle (RD/WR) para controlar a habilitação deles em endereços determinados.

Para exemplificar veja o diagrama de tempos no data sheet do 8051 e os exemplos abaixo.

http://books.google.com.br/books?id=iru ... Fo&f=false

https://www.google.com.br/search?hl=pt- ... GPEA_pt-BR

Re: barramento bidirecional num port do 8051

MensagemEnviado: 19 Dez 2013 08:15
por renan-papaco
brasilma escreveu:Não vou arriscar comentar algo em C, pois não é minha praia...

A operação é assim: você precisa mapear esses buffers de entrada e saída no seu 8051.

Ou seja, utilizar os pinos de endereço e controle (RD/WR) para controlar a habilitação deles em endereços determinados.

Para exemplificar veja o diagrama de tempos no data sheet do 8051 e os exemplos abaixo.

http://books.google.com.br/books?id=iru ... Fo&f=false

https://www.google.com.br/search?hl=pt- ... GPEA_pt-BR

beleza... vc entende de assembly né? pode me dar umas orientações? acho melhor apelar pra essa linguagem...

Re: barramento bidirecional num port do 8051

MensagemEnviado: 19 Dez 2013 09:16
por brasilma
Em assembly funciona assim:

Endereço externo com 16bits (65.536 posições) (é possivel trabalhar com apenas 8bits tbém)

MOV DPL, #parte alta do endereço externo;
MOV DPH, #parte baixa do endereço externo;

e para ler ou escrever (o dado fica em A e o endereço vc carrega no DPTR)

MOVX A, @DPTR;
MOVX @R0, A

Re: barramento bidirecional num port do 8051

MensagemEnviado: 20 Dez 2013 14:20
por renan-papaco
brasilma escreveu:Em assembly funciona assim:

Endereço externo com 16bits (65.536 posições) (é possivel trabalhar com apenas 8bits tbém)

MOV DPL, #parte alta do endereço externo;
MOV DPH, #parte baixa do endereço externo;

e para ler ou escrever (o dado fica em A e o endereço vc carrega no DPTR)

MOVX A, @DPTR;
MOVX @R0, A



será q esse exemplo aqui serviria?

MOVX FFh @DPTR;
MOVX @R0, FFh

qual deles lê e qual deles escreve?

e para selecionar endereços. como faço isso com um exemplo?

Re: barramento bidirecional num port do 8051

MensagemEnviado: 20 Dez 2013 16:18
por brasilma
Em assembly, o endereço ou registro que está a esquerda da virgula recebe o que está a direita dela.

Portanto para enviar à saída você deve usar a estrutura MOVX @DPTR,A

Para ler MOVX A,@DPTR

O endereço fica nos registradores DPTR parte alta em DPH e baixa em DPL. Suponha que deseje enviar ou ler um dado do endereço 15.500, DPL deve receber 8CH e DPH 3CH (15.500 = 3C8C).

Re: barramento bidirecional num port do 8051

MensagemEnviado: 22 Dez 2013 08:41
por tcpipchip
De acordo sobre o movx
Teoricamente o P0 é unico port bidirecional

Re: barramento bidirecional num port do 8051

MensagemEnviado: 23 Dez 2013 18:33
por renan-papaco
e qual a rotina em C q posso usar pra fazer desse port, um port bi direcional?

tipo... poderia ser algo tipo um valor de entrada do tipo FFh q é somado com um pino de outro port por exemplo P3.0... esse pino pode ficar em clock continuo, quando P3.0 for 1, e aparecer FFh no port P0. vamos por um tri state pra fazer uma porta de entrada, se FF aparecer no tri state ele somará com P3.0 q vai habilitar ele mandando esse valor pro port P0... e quando o tri state ficar em alta impedância (Z) o programa vai escrever no proprio P0, FFh também... só q vai ativar P3.1 pra habilitar um latch q irá registrar esse valor... é como um I/O mapeado...mas não é I/O mapeado...sacaram?

Re: barramento bidirecional num port do 8051

MensagemEnviado: 24 Dez 2013 09:03
por brasilma
Renan, não há nada que precise ser feito neste caso, o sistema já está todo preparado para funcionar exatamente assim desde que os engenheiros projetaram o controlador (a umas 4 décadas, rsrsrs).

O P0 é o barramento de dados (e parte inferior do endereçamento) dele, basta você seguir o esquema dos links que postei, acrescentando o decodificador e utilizando a instrução MOVX.

Experimente baixar o data sheet de Intel e verá outros exemplos de hardware e software sobre isso que estamos falando.

Re: barramento bidirecional num port do 8051

MensagemEnviado: 24 Dez 2013 20:58
por renan-papaco
e num tem como fazer isso em C? MOVX é uma instrução usada no ASM...

Re: barramento bidirecional num port do 8051

MensagemEnviado: 25 Dez 2013 08:12
por brasilma
Claro que sim, tudo que se faz em Assembly, faz muito mais fácil em C, da uma pesquisadinha e faz umas experiências que consegue, isso é simples...