Dúvida com tabela em ASM !!!

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

Dúvida com tabela em ASM !!!

Mensagempor Andre_Cruz » 31 Jul 2009 13:33

Eita mais uma dúvida rsrsrss

Estou programando em assembler, usando o 12F675 preciso retornar valores armazenados em 2 tabelas, a primeira tabela com a parte baixa do byte e a segunda tabela com a parte alta do byte, o problema é que cada tabela tem 150 posições, e não sei se tera espaço na memória para armazenar as 2 tabelas, como eu vejo se terá espaço para as duas tabelas ?

O programa basicamente pega um valor pelo A/D e procura nas tabelas o valor correto.

Agradeço a ajuda
Andre_Cruz
Word
 
Mensagens: 559
Registrado em: 03 Jan 2009 14:06

Mensagempor Alesandro F Zagui » 31 Jul 2009 14:45

Andre, não seria melhor fazer um calculo com o valor do A/D?
Alesandro Freire Zagui
Alesandro F Zagui
Byte
 
Mensagens: 154
Registrado em: 12 Mai 2009 11:03
Localização: Campo Mourao, Pr

Mensagempor Djalma Toledo Rodrigues » 31 Jul 2009 16:03

Espaço disponível = (Total de Memória menos Tamanho de seu programa) menos hum(*).

No seu PIC12F675:
Ed = 1750 -1 - Prg
Bytes

(*) Menos hum que a última posição da Memória Flash contem o valor de calibração do oscilador.

O Compilador ou o Programa de gravar informa o tamanho de seu Programa.
.
Editado pela última vez por Djalma Toledo Rodrigues em 31 Jul 2009 16:29, em um total de 1 vez.
Avatar do usuário
Djalma Toledo Rodrigues
Dword
 
Mensagens: 2334
Registrado em: 03 Ago 2008 13:22

Mensagempor Djalma Toledo Rodrigues » 31 Jul 2009 16:28

Se preferir Converter através de Cálculo como sugerio o Alesandro, o que aliás seria mais recomendável e elegante, use Tensão de Referêcia de 4.096 Vdc
para obter 4 mV por Bit .
Isto facilitará os Cálculos.

Depois qualquer que seja o método poste aqui os resultados.
.
Avatar do usuário
Djalma Toledo Rodrigues
Dword
 
Mensagens: 2334
Registrado em: 03 Ago 2008 13:22

Mensagempor Andre_Cruz » 31 Jul 2009 17:26

Alesandro,

Fazer os cálculos vai gastar muito tempo do PIC, e eu dou preferência para o uso da tabela.
Andre_Cruz
Word
 
Mensagens: 559
Registrado em: 03 Jan 2009 14:06

Mensagempor Andre_Cruz » 31 Jul 2009 18:08

Djalma, como eu faço pra saber o tamanho do meu programa em assembler ?
Andre_Cruz
Word
 
Mensagens: 559
Registrado em: 03 Jan 2009 14:06

Mensagempor Beto_s » 31 Jul 2009 18:15

André , qual compilador vc está usando ?
Está simulando no Proteus por acaso?


Tenho um programa gerando crc16 em asm num PIC16877 com duas tabelas de 256 bytes cada e sempre me referenciei ou no simulado do proteus ou no mplab para saber onde alocar a tabela ( org 0x0??) .

Beto
Beto_s
Bit
 
Mensagens: 43
Registrado em: 06 Set 2007 23:36

Mensagempor Djalma Toledo Rodrigues » 31 Jul 2009 19:06

Andre_Cruz escreveu:Djalma, como eu faço pra saber o tamanho do meu programa em assembler ?

Se o programa for grande Compile-o aí você vai obter o Arquivo .Hex formato Intel.

http://pl.wikipedia.org/wiki/Wikipedyst ... /Intel_Hex

A última linha foi, no exemplo da wiki:
100130003F0156702B5E712B722B732146013421C7
:00000001FF é o final do arquivo

Logo a próxima linha seria 0130 + 10 = 0140
E o último Byte 0140 -1 = 013F onde o conteúdo é 21
C7 é o check sum dessa linha, não conta

De 0140 para cima tudo livre.

Tudo em Hex claro.
Editado pela última vez por Djalma Toledo Rodrigues em 31 Jul 2009 19:31, em um total de 3 vezes.
Avatar do usuário
Djalma Toledo Rodrigues
Dword
 
Mensagens: 2334
Registrado em: 03 Ago 2008 13:22

Mensagempor Andre_Cruz » 31 Jul 2009 19:21

Beto_s

Uso o compilador MPASM da microchip.
Estou simulando no DEBUG do MPLAB e no Proteus.

Valew pela dica, pelo DEBUG no MPLAB visualizei que a primeira tabela começa na posição 0x104, e a segunda tabela começa na posição 0x200.

Eu manipulei o registrador PCLATH e esta funcionando no Proteus.

Muito obrigado pela ajuda, pessoal.
Andre_Cruz
Word
 
Mensagens: 559
Registrado em: 03 Jan 2009 14:06

Mensagempor Andre_Cruz » 31 Jul 2009 19:36

Ainda estou testando mas aparentemente problema resolvido !

Para alocar a tabela na posição de memória correta, eu simulei o programa no MPLAB e visualizei a parte livre na memória de programa, aloquei as duas tabelas na parte livre.
E tive que manipular o registrador PCLATH.

CHAMA_TABELA_1
BSF PCLATH,0
CALL TABELA_1
.
.

CHAMA_TABELA_2
BCF PCLATH,0
BSF PCLATH,1
CALL TABELA_2
.
.

TABELA_1
ORG 0x104
.
RETLW .1
.
.

TABELA_2
ORG 0x200
.
RETLW .1
.
.

Na subrotina CHAMA_TABELA_1 eu garanti que o bit 0 do registrador PCLATH esteja em "1", para indereçar a memória de programa apartir do 256, e na subrotina CHAMA_TABELA_2 eu garanti que o bit 0 em "0" e o bit 1 em "1" do PCLATH, para indereçar a memória de programa apartir do 512.

Esta funcionando rsrsrs

Valew pessoal
Andre_Cruz
Word
 
Mensagens: 559
Registrado em: 03 Jan 2009 14:06

Mensagempor Beto_s » 02 Ago 2009 00:37

Andre ,caso ainda nao utilize... existe uma diretriz MPASM que facilita , principalmete quando utilizar um PIC como o 16f877 com um programa relativamente grande.


´´PAGESEL <nome_da_rotina>``



O seu exemplo ficaria assim >>>


PAGESEL TABELA_1 ; acerta pclath do destino call
CALL TABELA_1
PAGESEL CHAMA_TABELA_2 ; acerta o pclath ao retornar de call
.

CHAMA_TABELA_2
PAGESEL TABELA_2
CALL TABELA_2
PAGESEL <?PROXIMA ROTINA OU VARIAVEL>
.
.

TABELA_1
ORG 0x104
.
RETLW .1
.
.

TABELA_2
ORG 0x200
.
RETLW .1
.
.
Beto_s
Bit
 
Mensagens: 43
Registrado em: 06 Set 2007 23:36

Mensagempor Andre_Cruz » 02 Ago 2009 10:50

Beto_s,

Não conhecia não, valew pela dica vou adicionar ela no programa.

Abraço
Andre_Cruz
Word
 
Mensagens: 559
Registrado em: 03 Jan 2009 14:06

Mensagempor Djalma Toledo Rodrigues » 02 Ago 2009 11:08

Uma boa norma é a primeira posição da Tabela conter o seu comprimento.

O motivo é óbvio. Delimitar
Especialmente se as Tabelas tem comprimento diferentes.
.
Avatar do usuário
Djalma Toledo Rodrigues
Dword
 
Mensagens: 2334
Registrado em: 03 Ago 2008 13:22


Voltar para PIC

Quem está online

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

x