Moderadores: 51, guest2003, Renie, gpenga
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.
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...
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.
+++
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?
C51 Evaluation ToolsThe 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.
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.aspC51 Evaluation ToolsThe 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.
mastk escreveu:...um compilador e simulador se der certo faça no seu hardware.
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.
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
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;
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
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 ...
Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante