Moderadores: 51, guest2003, Renie, gpenga
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
#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);
}
//---------------------------------------------------------------
}
//***************************************************************
lellis escreveu:
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
lellis escreveu:edit: imagem deve aparecer agora
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
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
#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);
}
}
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.
tmp2=1000; // escreve em variavel da memoria externa
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
Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante