Entrar    Registrar

tem como acessar memoria ram externa em C?

Software e Hardware para linha x51

Moderadores: guest2003, 51, Renie, gpenga

  • Autor
    Mensagem

Re: tem como acessar memoria ram externa em C?

Mensagempor renan-papaco » 08 Abr 2013 07:52

bem....a intenção é usar o endereço apartir do 8001 pra cima só pramapearI/O...tipo, o endereçamento de i/o começa onde termina o endereçamento da memória.
Sabe quem mais programa um 8051 com ROM externa? MINHA MÃE! HOOOOOOOOOOOOOOOOOO
Avatar do usuário
renan-papaco
Byte
 
Mensagens: 292
Registrado em: 17 Jun 2012 15:56

Re: tem como acessar memoria ram externa em C?

Mensagempor ze » 08 Abr 2013 10:12

voce pode colocar A2...0 nas entradas do 138 e um NAND PSEN/A15 no enable dele. Isso e + um AND com WR e RD com saida ligada nos enables dos I/Os, voce já deve conseguir fazer alguma brincadeira como
#define MEU_PORT0 XBYTE [0x8000]
#define MEU_PORT1 XBYTE [0x8001]
...
Só pra lembrar ... esta é configuração típica e não estamos reinventado a roda.

Permita-me sugerir... a esta altura voce já pode mostrar algo de prático que já fez. Alguma simulação , sei lá. Pra te falar a verdade até que tenho alguma coisa semelhante ao citado acima. No entanto é bom ver algum retorno teu pra ver se compensa "investir" em voce. Também sinto falta de palavras mágicas. ( . de vista pessoal, óbvio)

boa sorte
Avatar do usuário
ze
Dword
 
Mensagens: 1547
Registrado em: 05 Jun 2007 14:32

Re: tem como acessar memoria ram externa em C?

Mensagempor renan-papaco » 09 Abr 2013 00:49

lellis escreveu:voce pode colocar A2...0 nas entradas do 138 e um NAND PSEN/A15 no enable dele. Isso e + um AND com WR e RD com saida ligada nos enables dos I/Os, voce já deve conseguir fazer alguma brincadeira como
#define MEU_PORT0 XBYTE [0x8000]
#define MEU_PORT1 XBYTE [0x8001]
...
Só pra lembrar ... esta é configuração típica e não estamos reinventado a roda.

Permita-me sugerir... a esta altura voce já pode mostrar algo de prático que já fez. Alguma simulação , sei lá. Pra te falar a verdade até que tenho alguma coisa semelhante ao citado acima. No entanto é bom ver algum retorno teu pra ver se compensa "investir" em voce. Também sinto falta de palavras mágicas. ( . de vista pessoal, óbvio)

boa sorte




bem... de retorno posso mostrar uns projetos aqui e compartilhar com voces. .. to pensando em fazer um TX e um RX de controle remoto por Infravermelho...de 8 canais mais o botão pra limpar as saidas acionadas...q tal?
Sabe quem mais programa um 8051 com ROM externa? MINHA MÃE! HOOOOOOOOOOOOOOOOOO
Avatar do usuário
renan-papaco
Byte
 
Mensagens: 292
Registrado em: 17 Jun 2012 15:56

veja se imagem aparece agora

Mensagempor ze » 09 Abr 2013 09:20

edit: imagem deve aparecer agora
Imagem
aproveitando parte de minhas eternas madrugadas, resolvi dar uma e dar uma reciclada com o proteus. note que: tentei maximizar o minimalismo tanto do hw quando do sw; há margens para melhorias; pro caso tanto faz 373 ou 374; as variáveis não são comuns: são meio que "rom" e "wom" (inventei isso agora) voce não pode fazer operaçoes com elas.
Não note: o fonte, projeto, etc estariam na figura. não estou conseguindo hospedar da maneira que fazia antigamente. acho que num vale apena continuar tentando
Bem pelo menos o fonte publico. É trisimples. chega a ser ridículo. note a boiolice do pisca led. mas quiçá sirva pr´algum incauto navegante do futuro ver como é relativamente simples programar MCs em c.
Código: Selecionar todos
#include <absacc.h>    /* Include Macro Definitions */
#include <reg51.h>
#include "defines.c"
#pragma NOAREGS    // do not use absolute register symbols (ARx) for functions called from interrupt routines.
#define saida0 XBYTE [0x8000]
#define saida1 XBYTE [0x8001]
#define saida2 XBYTE [0x8002]
#define entrada0 XBYTE [0x8003]
//***************************************************************
void delay(unsigned int dl)
{
while(dl--);
}
//***************************************************************
void main( void )
{
//-----------------------------------
for(;;)
{
saida0=0x55;
saida1=0x55;
saida2=entrada0;
delay(5000);
saida0=0xaa;
saida1=0xaa;
delay(5000);
}
//---------------------------------------------------------------
}
//***************************************************************

Bom, só postei pra não ter perdido meu sono por quase nada (o que dá quase no mesmo). Enfim... fico por aqui. boa sorte.
tip... Again... Litte Stupid Detail: magic words... a gain
Editado pela última vez por ze em 16 Abr 2013 10:32, em um total de 1 vez.
Avatar do usuário
ze
Dword
 
Mensagens: 1547
Registrado em: 05 Jun 2007 14:32

Re: tem como acessar memoria ram externa em C?

Mensagempor renan-papaco » 15 Abr 2013 22:34

lellis escreveu:Imagem
aproveitando parte de minhas eternas madrugadas, resolvi dar uma e dar uma reciclada com o proteus. note que: tentei maximizar o minimalismo tanto do hw quando do sw; há margens para melhorias; pro caso tanto faz 373 ou 374; as variáveis não são comuns: são meio que "rom" e "wom" (inventei isso agora) voce não pode fazer operaçoes com elas.
Não note: o fonte, projeto, etc estariam na figura. não estou conseguindo hospedar da maneira que fazia antigamente. acho que num vale apena continuar tentando
Bem pelo menos o fonte publico. É trisimples. chega a ser ridículo. note a boiolice do pisca led. mas quiçá sirva pr´algum incauto navegante do futuro ver como é relativamente simples programar MCs em c.
Código: Selecionar todos
#include <absacc.h>    /* Include Macro Definitions */
#include <reg51.h>
#include "defines.c"
#pragma NOAREGS    // do not use absolute register symbols (ARx) for functions called from interrupt routines.
#define saida0 XBYTE [0x8000]
#define saida1 XBYTE [0x8001]
#define saida2 XBYTE [0x8002]
#define entrada0 XBYTE [0x8003]
//***************************************************************
void delay(unsigned int dl)
{
while(dl--);
}
//***************************************************************
void main( void )
{
//-----------------------------------
for(;;)
{
saida0=0x55;
saida1=0x55;
saida2=entrada0;
delay(5000);
saida0=0xaa;
saida1=0xaa;
delay(5000);
}
//---------------------------------------------------------------
}
//***************************************************************

Bom, só postei pra não ter perdido meu sono por quase nada (o que dá quase no mesmo). Enfim... fico por aqui. boa sorte.
tip... Again... Litte Stupid Detail: magic words... a gain



bem...observando seu codigo o programa envia valores em bytes pros endereçamentos definidos no Xbyte.

agora... eu vou projetar um hardware basico com isso...com uma porta de entrada e outras duas de saída e vou postar aqui...ai voces me orientam nele. em troca faço uns projetos e posto aqui com o codigo fonte pra voces.
Sabe quem mais programa um 8051 com ROM externa? MINHA MÃE! HOOOOOOOOOOOOOOOOOO
Avatar do usuário
renan-papaco
Byte
 
Mensagens: 292
Registrado em: 17 Jun 2012 15:56

Re: tem como acessar memoria ram externa em C?

Mensagempor renan-papaco » 15 Abr 2013 23:50

fiz um diagrama .. bem simplificado, sem ram externa. mas não da pra postar aqui. o jeito é tentar explicar o funcionamento dele


ele fará a seguinte função: quando quero gravar algo numa latch eu devo obter um pulso em nivel alto gerado pelo WR, q dá pra inverte-lo com uma porta inversora 7404

mas pra gravar numa latch devo habilita-la primeiro...usando uma saida em nivel baixo do 74LS138
ja pra ler algum valor....posso usar um 74LS244, habilitando ele e levando RD em nivel baixo pra q ele faça uma leitura.
será q essa configuração minha ta certa?
Sabe quem mais programa um 8051 com ROM externa? MINHA MÃE! HOOOOOOOOOOOOOOOOOO
Avatar do usuário
renan-papaco
Byte
 
Mensagens: 292
Registrado em: 17 Jun 2012 15:56

Re: tem como acessar memoria ram externa em C?

Mensagempor mastk » 16 Abr 2013 09:49

Bata uma foto ou scaneie a imagem e sub em site como o image shark e com a link puro da imagem use o botão IMG no menu de postagem.

Minha recomendação para esse circuitos é fazer um mapa dos sinais envolvidos. Uma coisa que uso é um caderno quadriculado em que desenho os planos e temporizações de um barramento, recomendo um moleskine.
Sim, mesmo se alguém conquistar apenas uma alma, uma única alma em todo o mundo. Mas aquele que não foi capaz disso, que fique chorando sozinho!

http://mastk.wordpress.com/

http://www.youtube.com/user/Mastk2008
Avatar do usuário
mastk
Dword
 
Mensagens: 4336
Registrado em: 14 Out 2006 20:43

Re: tem como acessar memoria ram externa em C?

Mensagempor renan-papaco » 19 Abr 2013 14:05

bem, devo fazer isso então...vou por as imagens em algum site pra poder ser visualizada aqui


http://sphotos-b.ak.fbcdn.net/hphotos-a ... 6140_n.jpg


ai está a imagem, postadinha.

é só clicarem no link.
Editado pela última vez por renan-papaco em 30 Abr 2013 23:03, em um total de 1 vez.
Sabe quem mais programa um 8051 com ROM externa? MINHA MÃE! HOOOOOOOOOOOOOOOOOO
Avatar do usuário
renan-papaco
Byte
 
Mensagens: 292
Registrado em: 17 Jun 2012 15:56

Re: tem como acessar memoria ram externa em C?

Mensagempor renan-papaco » 29 Abr 2013 16:10

pessoal vlw pela ajuda aí. sei o quanto são ocupados e é melhor eu não perturbar muito...hehe
Sabe quem mais programa um 8051 com ROM externa? MINHA MÃE! HOOOOOOOOOOOOOOOOOO
Avatar do usuário
renan-papaco
Byte
 
Mensagens: 292
Registrado em: 17 Jun 2012 15:56

Re: veja se imagem aparece agora

Mensagempor renan-papaco » 27 Jul 2013 13:57

lellis escreveu:edit: imagem deve aparecer agora
Imagem
aproveitando parte de minhas eternas madrugadas, resolvi dar uma e dar uma reciclada com o proteus. note que: tentei maximizar o minimalismo tanto do hw quando do sw; há margens para melhorias; pro caso tanto faz 373 ou 374; as variáveis não são comuns: são meio que "rom" e "wom" (inventei isso agora) voce não pode fazer operaçoes com elas.
Não note: o fonte, projeto, etc estariam na figura. não estou conseguindo hospedar da maneira que fazia antigamente. acho que num vale apena continuar tentando
Bem pelo menos o fonte publico. É trisimples. chega a ser ridículo. note a boiolice do pisca led. mas quiçá sirva pr´algum incauto navegante do futuro ver como é relativamente simples programar MCs em c.
Código: Selecionar todos
#include <absacc.h>    /* Include Macro Definitions */
#include <reg51.h>
#include "defines.c"
#pragma NOAREGS    // do not use absolute register symbols (ARx) for functions called from interrupt routines.
#define saida0 XBYTE [0x8000]
#define saida1 XBYTE [0x8001]
#define saida2 XBYTE [0x8002]
#define entrada0 XBYTE [0x8003]
//***************************************************************
void delay(unsigned int dl)
{
while(dl--);
}
//***************************************************************
void main( void )
{
//-----------------------------------
for(;;)
{
saida0=0x55;
saida1=0x55;
saida2=entrada0;
delay(5000);
saida0=0xaa;
saida1=0xaa;
delay(5000);
}
//---------------------------------------------------------------
}
//***************************************************************

Bom, só postei pra não ter perdido meu sono por quase nada (o que dá quase no mesmo). Enfim... fico por aqui. boa sorte.
tip... Again... Litte Stupid Detail: magic words... a gain

eu entendi o programa, montei este circuito e funcionou... agora, pode parecer bobagem mas q livro pra 8051 em C eu devo comprar pra estudar melhor isso?qual me recomendam?
Sabe quem mais programa um 8051 com ROM externa? MINHA MÃE! HOOOOOOOOOOOOOOOOOO
Avatar do usuário
renan-papaco
Byte
 
Mensagens: 292
Registrado em: 17 Jun 2012 15:56

Re:

Mensagempor renan-papaco » 01 Ago 2013 14:38

lopesjm escreveu:Olá Renan,

Veja se este exemplo te ajuda.

Código: Selecionar todos
/* ACESSANDO RAM EXTERNA NO 8051 USANDO O SDCC*/

#include <at89x52.h>

xdata unsigned char tmp;
xdata unsigned int tmp2;
xdata unsigned char vetor[256];
xdata unsigned long SuperVar;
xdata float OutraVar;
xdata at 0x2000 unsigned char tmp3;     // colocando em uma posição específica da memória externa
xdata at 0x8000 unsigned char teclado;

void main(void)
{
 
  tmp2=1000;              // escreve em variavel da memoria externa
  vetor[0]=13;
  SuperVar=1234567890;
 
  tmp=teclado;            // le posição externa (memoria ou periférico mapeado)
 
}


[]s
Jorge


uma dúvida... eu modifiquei este programa e fiz desse jeito:
Código: Selecionar todos
#include <at89x52.h>
#include <delay.h>
#include <absacc.h>
xdata float Outravar;
xdata at 0x2000 unsigned char tmp3;     // colocando em uma posição específica da memória externa
xdata at 0x8000 unsigned char teclado;

void main(void)
{
while(1){
 
tmp3=0;
delay_ms(200);
tmp3=255;
delay_ms(200);



 

        }
}


ele compila e grava na eprom/flash externa numa boa... mas não detectei nenhuma atividade no pino WR... que devia ir a nivel logico 0 rotineiramente pra gravar os valores nos latches endereçados... liguei um led nele com um transistor buffer pra detectar atividade. porém ele só fica apagado. Ah e outro detalhe...eu não coloquei nenhuma RAM externa... nem sequer adicionei os periféricos de entrada ou saída...só testei o código pra ver se os pinos de controle entram em atividade e apartir deles projeto algum circuito...falta só isso.
Sabe quem mais programa um 8051 com ROM externa? MINHA MÃE! HOOOOOOOOOOOOOOOOOO
Avatar do usuário
renan-papaco
Byte
 
Mensagens: 292
Registrado em: 17 Jun 2012 15:56

Re: Re:

Mensagempor renan-papaco » 02 Ago 2013 15:42

renan-papaco escreveu:
lopesjm escreveu:Olá Renan,

Veja se este exemplo te ajuda.

Código: Selecionar todos
/* ACESSANDO RAM EXTERNA NO 8051 USANDO O SDCC*/

#include <at89x52.h>

xdata unsigned char tmp;
xdata unsigned int tmp2;
xdata unsigned char vetor[256];
xdata unsigned long SuperVar;
xdata float OutraVar;
xdata at 0x2000 unsigned char tmp3;     // colocando em uma posição específica da memória externa
xdata at 0x8000 unsigned char teclado;

void main(void)
{
 
  tmp2=1000;              // escreve em variavel da memoria externa
  vetor[0]=13;
  SuperVar=1234567890;
 
  tmp=teclado;            // le posição externa (memoria ou periférico mapeado)
 
}


[]s
Jorge


uma dúvida... eu modifiquei este programa e fiz desse jeito:
Código: Selecionar todos
#include <at89x52.h>
#include <delay.h>
#include <absacc.h>
xdata float Outravar;
xdata at 0x2000 unsigned char tmp3;     // colocando em uma posição específica da memória externa
xdata at 0x8000 unsigned char teclado;

void main(void)
{
while(1){
 
tmp3=0;
delay_ms(200);
tmp3=255;
delay_ms(200);



 

        }
}


ele compila e grava na eprom/flash externa numa boa... mas não detectei nenhuma atividade no pino WR... que devia ir a nivel logico 0 rotineiramente pra gravar os valores nos latches endereçados... liguei um led nele com um transistor buffer pra detectar atividade. porém ele só fica apagado. Ah e outro detalhe...eu não coloquei nenhuma RAM externa... nem sequer adicionei os periféricos de entrada ou saída...só testei o código pra ver se os pinos de controle entram em atividade e apartir deles projeto algum circuito...falta só isso.


será q pra eu usar esse código eu devo ter uma RAM externa?
Sabe quem mais programa um 8051 com ROM externa? MINHA MÃE! HOOOOOOOOOOOOOOOOOO
Avatar do usuário
renan-papaco
Byte
 
Mensagens: 292
Registrado em: 17 Jun 2012 15:56

Re: tem como acessar memoria ram externa em C?

Mensagempor lopesjm » 03 Ago 2013 13:57

Olá Renan,

Não vai adiantar você querer ver a atividade no pino /WR usando um LED. Esse sinal é muito rápido. Necessita de osciloscópio e que seja uma atribuição contínua, pois é apenas um pulso por escrita.

Outra coisa, colocando uma carga (LED) nos sinais de controle, você pode comprometer o correto acesso, pois o sinal pode ficar deformado ou até mesmo a RAM não "entender" corretamente. Por isso recomendo o uso de osciloscópio para ver a atividade no pino.

No código, coloque dentro do laço while(1) a linha:
Código: Selecionar todos
tmp2=1000;              // escreve em variavel da memoria externa


Isso vai fazer com que o sinal de /WR possa ser visualizado no osciloscópio. Até pode ver alguma diminuição de instensidade num LED.

Pra fazer esse teste não precisa de RAM externa.

Jorge
lopesjm
Byte
 
Mensagens: 133
Registrado em: 26 Out 2006 12:40

Re: tem como acessar memoria ram externa em C?

Mensagempor renan-papaco » 03 Ago 2013 18:56

lopesjm escreveu:Olá Renan,


Não vai adiantar você querer ver a atividade no pino /WR usando um LED. Esse sinal é muito rápido. Necessita de osciloscópio e que seja uma atribuição contínua, pois é apenas um pulso por escrita.

Outra coisa, colocando uma carga (LED) nos sinais de controle, você pode comprometer o correto acesso, pois o sinal pode ficar deformado ou até mesmo a RAM não "entender" corretamente. Por isso recomendo o uso de osciloscópio para ver a atividade no pino.

No código, coloque dentro do laço while(1) a linha:
Código: Selecionar todos
tmp2=1000;              // escreve em variavel da memoria externa


Isso vai fazer com que o sinal de /WR possa ser visualizado no osciloscópio. Até pode ver alguma diminuição de instensidade num LED.

Pra fazer esse teste não precisa de RAM externa.

Jorge



AAAAALELUIA AAALELUIA ALELUIA ALELUIA ALEELUIAAA!!!!!

Até que enfim eu entendi!!!!

quanto a essa analise do pino WR... eu não liguei ele em nenhum outro 'CI eu apenas coloquei o led la... a ação dele é realmente rápida. talvez seja por isso q ele fica aceso fraco... mesmo usando transistor driver.

eu tenho um osciloscopio aqui... melhor usa-lo pra ver atividade neste pino... mas será que meu código funcionou?
Sabe quem mais programa um 8051 com ROM externa? MINHA MÃE! HOOOOOOOOOOOOOOOOOO
Avatar do usuário
renan-papaco
Byte
 
Mensagens: 292
Registrado em: 17 Jun 2012 15:56

Re: tem como acessar memoria ram externa em C?

Mensagempor lopesjm » 04 Ago 2013 21:38

Olá Renan,

Se o LED que você ligou no pino de /WR ficou com menor intensidade, então o sinal de /WR está em atividade.

Jorge
lopesjm
Byte
 
Mensagens: 133
Registrado em: 26 Out 2006 12:40

AnteriorPróximo

Voltar para 8051

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 3 visitantes