Ir ao conteúdo
  • Cadastre-se

PIC no lugar de uma EPROM


Fjpompeo

Posts recomendados

Boa tarde a todos,

 

Sou rádio amador e preciso simular uma EPROM usando um PIC16F628a ou seja um determinado código binário de oito bits na entrada corresponderá a um outro de sete bits na saída. Tive uma dica de um colega da Inglaterra de um código em assembler mas infelizmente meus conhecimentos são mínimos e não consegui adaptar o exemplo às minhas necessidades. Segue abaixo o código do colega inglês:

 

movf PORTA,w

call lookup

movwf PORTB

 

lookup:

addwf PCL,f

DT xx, xx, xx, xx, xx, xx, xx .... and so on

Como eu uso a instrução DT, o que significa?

O que escrevo no lugar dos xx e como é possível fazer as comparações usando a instrução addwf e montar alguma tabela

 

 

Exemplos:

              HGFEDCBA     GFEDCBA

Entrada 00001101 sai 0001101;

Entrada 10001101 sai 1101101;

Entrada 01101101 sai 1101101;

Entrada 11101101 sai 1111001;

 

Preciso saber quais pinos correspondem as entradas HGFEDCBA e quais correspondem as saídas GFEDCBA.

 

 

Obrigado,

Fernando

 

Esquema PIC16F628a como EPROM.png

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

What prevents you from asking your english colleague?

 

As entradas são RA7 a RA0 e as saídas RB6 a RB0. Hás de acopla-los aos pinos correspondentes A7...A0 e os D6...D0

de sua eprom

 

se servisse em c...
 

for(;;)
switch (PORTA)
{
case 0b00001101: PORTB=0b0001101; break;
case 0b10001101: PORTB=0b1101101; break;
case 0b01101101: PORTB=0b1101101; break
case 0b11101101: PORTB=0b1111001; break;
//and so on
}

too easy

 

good luck

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Não sei porquê mas me deu vontade registrar mais isso...

 

de fato o algoritimo abaixo simula melhor uma eprom além de ser mais rápido. É praticamente o mesmo que seu colega gringo lhe propôs mas em c, menos difícil de entender e creia-me, pode ocupar os mesmos recursos como se fosse feito em assembly

unsigned char const tabela[]=
{
0b0001010, //0º byte
0b1001011, //1º byte
0b0101011, //2º byte 
0b0011010, //3º byte
0b0001111, //4º byte
0b0111011, //5º byte
0b0001010, //6º byte
0b1001011, //7º byte
0b0101011, //8º byte
0b0011010, //9º byte
0b0001111, //10º byte
0b0111011, //11º byte
//...
0b0001101, //Entrada 00001101=0x0d=12º byte => sai 0001101;
//...
0b1101101, //Entrada 01101101=0x6d=109º byte => sai 1101101;
//...
0b1101101, //Entrada 10001101=0x8d=141º byte => sai 1101101;
//...
0b1111001, //Entrada 11101101=0xed=237º byte => sai 1111001;
//...
}
for(;;) PORTB=tabela[PORTA];

Talvez você deva precisar de alguma ajuda para posicionar o dado que quer na saída no endereço correto. O excel pode te ajudar nisso em 2 palitos ordenando-os.

Entendeu? Então me explica porquê nem eu entendi nada kk

 

Bem.. pode ser que dê certo. Se algum dia quiser tentar, publique os todos os dados (bytes eprom). Quiçá aguça a curiosidade de outrem também...

 

 

 

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...