tem como acessar memoria ram externa em C?

Software e Hardware para linha x51

Moderadores: 51, guest2003, Renie, gpenga

Re: tem como acessar memoria ram externa em C?

Mensagempor mastk » 08 Jan 2014 12:41

Sabemos Renan.
A memoria SRAM nao tao simples, tem que se obdecer as temporizacoes dela.
Mas a questao eh essa mesma que eu postei, vou dar um relida no Ds de um 8051 e vou checar aqui o problema.
Avatar do usuário
mastk
Dword
 
Mensagens: 4407
Registrado em: 14 Out 2006 20:43

Re: tem como acessar memoria ram externa em C?

Mensagempor renan-papaco » 08 Jan 2014 15:09

mastk escreveu:Sabemos Renan.
A memoria SRAM nao tao simples, tem que se obdecer as temporizacoes dela.
Mas a questao eh essa mesma que eu postei, vou dar um relida no Ds de um 8051 e vou checar aqui o problema.

eu sei qual o problema no meu circuito... a questão é: vc sabe de alguma versão do SDCC apropriada pra isso?a mais completa que existir e como compilo um programa em linha de comando pra gerar um arquivo .HEX acabo de descobrir que o meu compilador uma versão xula do sdcc teve a header 89X52 editada e não dá pra acessar barramentos externos do 89S52(ou usar um classico 8032) pelo menos é oq parece. os códigos q não são o problema, testei todos que vcs me passaram aqui e testei todos que tem neste livro:
Imagem
eu estudei tudo nesse livro, dei uma boa olhada na literatura que vcs me passaram aqui no fórum...e entendi basicamente a ideia: atribuir um endereço Xbyte a uma variavel e dentro do programa vc joga o valor q quiser nesta variavel q ela ira pro bus de dados e no endereço desejado!! eu não sou iniciante em uC a muito tempo e sinto a hora de expandir!! uughh q vontade de ver um circuito meu com RAM, ROM e I/O mapeada... ainda mais combinado com aquele lindo MC6847 daria até pra fazer um jogo com meu sistema kkkk(até q não é má ideia, não acham?)
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 andre_luis » 08 Jan 2014 18:36

renan-papaco escreveu:...acabo de descobrir que o meu compilador uma versão xula do sdcc teve a header 89X52 editada e não dá pra acessar barramentos externos do 89S52(ou usar um classico 8032) pelo menos é oq parece. os códigos q não são o problema...


Posso estar enganado, mas creio que o KEIL compile até um determinado tamanho de código compilado.
Acredito que poderia tentar usar esse compilador, pois pessoalmente foi o que mais gostei até hoje, para familia 8051.


+++
"Por maior que seja o buraco em que você se encontra, relaxe, porque ainda não há terra em cima."
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ

Re: tem como acessar memoria ram externa em C?

Mensagempor renan-papaco » 08 Jan 2014 19:23

andre_teprom escreveu:
renan-papaco escreveu:...acabo de descobrir que o meu compilador uma versão xula do sdcc teve a header 89X52 editada e não dá pra acessar barramentos externos do 89S52(ou usar um classico 8032) pelo menos é oq parece. os códigos q não são o problema...


Posso estar enganado, mas creio que o KEIL compile até um determinado tamanho de código compilado.
Acredito que poderia tentar usar esse compilador, pois pessoalmente foi o que mais gostei até hoje, para familia 8051.


+++

hm...qual a limitação pra versão free do keil? dá pra encobrir os 8KB do 89S52? e os comandos do sdcc podem funcionar tambem no keil?
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 andre_luis » 08 Jan 2014 19:46

renan-papaco escreveu:...qual a limitação pra versão free do keil? dá pra encobrir os 8KB do 89S52? e os comandos do sdcc podem funcionar tambem no keil?


As limitações da versão de avaliação estão no link abaixo, mas já dá pra antecipar que gera apenas 2K de código compilado.
Se você deseja tirar a dúvida sobre se o problema está no circuito, no programa de teste, ou no sdcc, essa versão abaixo atende ao propósito.

http://www.keil.com/demo/limits.asp
C51 Evaluation Tools
    The 8051 compiler, assembler, linker, and debugger are limited to 2 Kbytes of object code. Source code may be of any size.
    Programs that generate more than 2 Kbytes of object code will not compile, assemble, or link.
    The debugger supports programs that are 2 Kbytes or smaller.
    The startup code generated includes LJMPs. Code generated cannot be used in single-chip devices that support 2 Kbytes or less of program space.
    Programs start at offset 0x0800. Programs generated with the evaluation software may not be programmed into single-chip devices with less than 2 Kbytes of on-chip ROM.
    No hardware support for multiple DPTR registers is provided.
    No support for floating-point arithmetic and no support for user libraries is provided.
    No support for in-line assembly using #pragma ASM.
    The following components which are present in the PK51 Full Version are not included in the Evaluation Version: Linker for Code Banking, Library Manager, and RTX51 Tiny Real-time Operating System.
"Por maior que seja o buraco em que você se encontra, relaxe, porque ainda não há terra em cima."
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ

Re: tem como acessar memoria ram externa em C?

Mensagempor renan-papaco » 08 Jan 2014 22:31

andre_teprom escreveu:
renan-papaco escreveu:...qual a limitação pra versão free do keil? dá pra encobrir os 8KB do 89S52? e os comandos do sdcc podem funcionar tambem no keil?


As limitações da versão de avaliação estão no link abaixo, mas já dá pra antecipar que gera apenas 2K de código compilado.
Se você deseja tirar a dúvida sobre se o problema está no circuito, no programa de teste, ou no sdcc, essa versão abaixo atende ao propósito.

http://www.keil.com/demo/limits.asp
C51 Evaluation Tools
    The 8051 compiler, assembler, linker, and debugger are limited to 2 Kbytes of object code. Source code may be of any size.
    Programs that generate more than 2 Kbytes of object code will not compile, assemble, or link.
    The debugger supports programs that are 2 Kbytes or smaller.
    The startup code generated includes LJMPs. Code generated cannot be used in single-chip devices that support 2 Kbytes or less of program space.
    Programs start at offset 0x0800. Programs generated with the evaluation software may not be programmed into single-chip devices with less than 2 Kbytes of on-chip ROM.
    No hardware support for multiple DPTR registers is provided.
    No support for floating-point arithmetic and no support for user libraries is provided.
    No support for in-line assembly using #pragma ASM.
    The following components which are present in the PK51 Full Version are not included in the Evaluation Version: Linker for Code Banking, Library Manager, and RTX51 Tiny Real-time Operating System.

hm... vou testar, mas antes... o comando e os headers no keil são os mesmos? eu ja tenho ele instalado aqui. e não entendo nada sobre o keil...
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 » 08 Jan 2014 22:59

:D Se sua mãe sabe, fala com ela o fio de vô rsrsrsrs.

Mas falando serio, Renan, faz em ASM, faz um loop para mover 0x55 e 0xAA para uma possicao de RAM e veja se o WR samba do jeito que deveria, porem confira o mapa de memória, nem toda o espaço de endereço do 8051 vai para o barramento externo, tem a RAM interna e registradores.

Outra coisa que pode lhe dar algum tempo é usar algo como o Pequi, um compilador e simulador se der certo faça no seu hardware.
Avatar do usuário
mastk
Dword
 
Mensagens: 4407
Registrado em: 14 Out 2006 20:43

Re: tem como acessar memoria ram externa em C?

Mensagempor andre_luis » 09 Jan 2014 11:11

mastk escreveu:...um compilador e simulador se der certo faça no seu hardware.


Boa dica, tem alguns simuladores que se pode baixar gratuitamente na Web, e se tiver sorte até executar online.


+++
"Por maior que seja o buraco em que você se encontra, relaxe, porque ainda não há terra em cima."
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ

Re: tem como acessar memoria ram externa em C?

Mensagempor renan-papaco » 09 Jan 2014 17:53

mastk escreveu::D Se sua mãe sabe, fala com ela o fio de vô rsrsrsrs.

Mas falando serio, Renan, faz em ASM, faz um loop para mover 0x55 e 0xAA para uma possicao de RAM e veja se o WR samba do jeito que deveria, porem confira o mapa de memória, nem toda o espaço de endereço do 8051 vai para o barramento externo, tem a RAM interna e registradores.

Outra coisa que pode lhe dar algum tempo é usar algo como o Pequi, um compilador e simulador se der certo faça no seu hardware.

opa maneira a ideia! mas eu não entendo muita coisa de ASM...não tenho ideia de como levantar o código...e quer dizer q no 8051 o mapeamento de memoria não começa no 0000h? como é essa divisão?
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 » 09 Jan 2014 21:11

Olá Renan,

Não vamos fazer confusão.

O 8051 tem:

posição 00h da memoria interna direta (dados/registradores)
posição 00 da área de bits endereçáveis (começa na posição 20h da memória interna e vai até 2Fh)(dados)
posição 0000h da flash (caso tenha)(instruções)
posição 0000h da memória de programa externa (instruções)(um EPROM, por exemplo)
posição 0000h da memória de dados externa.(dados)(Uma RAM, por exemplo)

Um bom livro de 8051 vai te mostrar o mapa de memória do mcu. Mas a divisão completa eu citei acima.

Cada memória tem a sua função. Portanto, tem muitas posições 0, mas são fisicamente diferentes.

Em ASM ou em C dá pra acessar cada uma delas, conforme a necessidade.

E com relação a compiladores, você não vai poder intercambiar os arquivos .h nativos de cada IDE. Por exemplo, os do Keil não servem no SDCC e vice-versa. Apesar de serem arquivos ASCII (texto puro) a sintaxe de cada IDE é diferente.
Se forem arquivos .h que você criou, pode ser que não precise alterar nada e o compilador aceite.

Renan, estamos voltando no mesmo assunto de acessar memória ram externa ou I/O Mapeado, que, para o 8051, não faz diferença. Aquelas rotinas que lhe passei nos tópicos anteriores funcionam. Se não funcionaram no seu hardware, então é problema do hardware. Se tiver um kit ou tiver montado um hardware mínimo, coloque o esquema pra verificarmos. Lembro que começou querendo gravar EPROM. Se usou um at89s52, certifique-se de ter colocado o pino 31 em vcc para que o mcu execute instruções a partir da memória interna flash. Se o pino 31 estiver em zero ou não estiver ligado, o mcu vai tentar executar o programa de uma memória externa.

Esse micro é fácil dominar. Se você tem a experiência que diz ter, insista mais um pouco. Você está quase lá.

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

Re: tem como acessar memoria ram externa em C?

Mensagempor renan-papaco » 10 Jan 2014 11:59

lopesjm escreveu:Olá Renan,

Não vamos fazer confusão.

O 8051 tem:

posição 00h da memoria interna direta (dados/registradores)
posição 00 da área de bits endereçáveis (começa na posição 20h da memória interna e vai até 2Fh)(dados)
posição 0000h da flash (caso tenha)(instruções)
posição 0000h da memória de programa externa (instruções)(um EPROM, por exemplo)
posição 0000h da memória de dados externa.(dados)(Uma RAM, por exemplo)

Um bom livro de 8051 vai te mostrar o mapa de memória do mcu. Mas a divisão completa eu citei acima.

Cada memória tem a sua função. Portanto, tem muitas posições 0, mas são fisicamente diferentes.

Em ASM ou em C dá pra acessar cada uma delas, conforme a necessidade.

E com relação a compiladores, você não vai poder intercambiar os arquivos .h nativos de cada IDE. Por exemplo, os do Keil não servem no SDCC e vice-versa. Apesar de serem arquivos ASCII (texto puro) a sintaxe de cada IDE é diferente.
Se forem arquivos .h que você criou, pode ser que não precise alterar nada e o compilador aceite.

Renan, estamos voltando no mesmo assunto de acessar memória ram externa ou I/O Mapeado, que, para o 8051, não faz diferença. Aquelas rotinas que lhe passei nos tópicos anteriores funcionam. Se não funcionaram no seu hardware, então é problema do hardware. Se tiver um kit ou tiver montado um hardware mínimo, coloque o esquema pra verificarmos. Lembro que começou querendo gravar EPROM. Se usou um at89s52, certifique-se de ter colocado o pino 31 em vcc para que o mcu execute instruções a partir da memória interna flash. Se o pino 31 estiver em zero ou não estiver ligado, o mcu vai tentar executar o programa de uma memória externa.

Esse micro é fácil dominar. Se você tem a experiência que diz ter, insista mais um pouco. Você está quase lá.

[]s
Jorge

sim, eu agradeço as explicações... mas creio q deve ser meu compilador q deve ter sido alterado, acredito q o cara q desenvolveu o curso deva ter posto uns headers alterados, ai eu num consigo acessar barramento externo mesmo com suas explicações corretas e ate msm testando os codigos do livro q tenho aki... eu vou tentar de novo depois e depois conto a vocês os meus resultados, ok?
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 » 10 Jan 2014 12:44

Aprenda o ASM do 8051, eh simples e vai te ajudar a entender o MCU e vc precisa poucas instrucoes para esse teste:

1 - Mover um valor contante para uma posicao de memoria.
2 - salto.

Se fosse nos HCS08 que eu uso seria assim o codigo:

teste:
mov #0xAA, 0x1000; //Considerando 0x1000 uma posicao no barramento externo.
mov #0x55, 0x1000;
bra teste;
Avatar do usuário
mastk
Dword
 
Mensagens: 4407
Registrado em: 14 Out 2006 20:43

Re: tem como acessar memoria ram externa em C?

Mensagempor renan-papaco » 10 Jan 2014 13:21

mastk escreveu:Aprenda o ASM do 8051, eh simples e vai te ajudar a entender o MCU e vc precisa poucas instrucoes para esse teste:

1 - Mover um valor contante para uma posicao de memoria.
2 - salto.

Se fosse nos HCS08 que eu uso seria assim o codigo:

teste:
mov #0xAA, 0x1000; //Considerando 0x1000 uma posicao no barramento externo.
mov #0x55, 0x1000;
bra teste;

pode ser uma boa... mas se eu for usar ASM oq eu teria q definir algo nos SFR's? como eu começo no ASM? sempre quis tentar mas tenho meus medos a respeito dessa linguagem
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 Jairo15 » 10 Jan 2014 16:08

Em ASM ficaria assim :

Código: Selecionar todos
INFRAM     EQU     00100H  ; Declaracao posicao da memeoria

; ---------------------------------------------------------------------------
; Rotina de escrita memoria externa
; ---------------------------------------------------------------------------
EscreveRam: 
        mov     DPTR,#INFRAM    ; Move para ponteiro o endereco externo
        movx    @DPTR,a            ; Move para saida o acumulador
        ; Escreve na posicao INFRAM o que estiver no acumulador
        ret

; ---------------------------------------------------------------------------
; Rotina de leitura memoria externa
; ---------------------------------------------------------------------------
LeituraRam: 
        mov     DPTR,#INFRAM    ; Move para ponteiro o endereco externo
        movx    a,@DPTR            ; Move para acumulador leitura do endereco
        ; Nesse momento o acumulador contem o que foi lido na RAM
        ret


Me mande uma MP que envio um compilador junto e o .BIN junto para testar ...
Jairo15
Nibble
 
Mensagens: 52
Registrado em: 06 Fev 2009 12:59

Re: tem como acessar memoria ram externa em C?

Mensagempor renan-papaco » 10 Jan 2014 17:53

Jairo15 escreveu:Em ASM ficaria assim :

Código: Selecionar todos
INFRAM     EQU     00100H  ; Declaracao posicao da memeoria

; ---------------------------------------------------------------------------
; Rotina de escrita memoria externa
; ---------------------------------------------------------------------------
EscreveRam: 
        mov     DPTR,#INFRAM    ; Move para ponteiro o endereco externo
        movx    @DPTR,a            ; Move para saida o acumulador
        ; Escreve na posicao INFRAM o que estiver no acumulador
        ret

; ---------------------------------------------------------------------------
; Rotina de leitura memoria externa
; ---------------------------------------------------------------------------
LeituraRam: 
        mov     DPTR,#INFRAM    ; Move para ponteiro o endereco externo
        movx    a,@DPTR            ; Move para acumulador leitura do endereco
        ; Nesse momento o acumulador contem o que foi lido na RAM
        ret


Me mande uma MP que envio um compilador junto e o .BIN junto para testar ...

perdoe-me minha ignorância mas o que é um MP? e qual compilador uso pra programar ASM?
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

AnteriorPróximo

Voltar para 8051

Quem está online

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

x