Página 1 de 1
Dúvida com tabela em ASM !!!

Enviado:
31 Jul 2009 13:33
por Andre_Cruz
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

Enviado:
31 Jul 2009 14:45
por Alesandro F Zagui
Andre, não seria melhor fazer um calculo com o valor do A/D?

Enviado:
31 Jul 2009 16:03
por Djalma Toledo Rodrigues
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.
.

Enviado:
31 Jul 2009 16:28
por Djalma Toledo Rodrigues
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.
.

Enviado:
31 Jul 2009 17:26
por Andre_Cruz
Alesandro,
Fazer os cálculos vai gastar muito tempo do PIC, e eu dou preferência para o uso da tabela.

Enviado:
31 Jul 2009 18:08
por Andre_Cruz
Djalma, como eu faço pra saber o tamanho do meu programa em assembler ?

Enviado:
31 Jul 2009 18:15
por Beto_s
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

Enviado:
31 Jul 2009 19:06
por Djalma Toledo Rodrigues
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:
10013000
3F0156702B5E712B722B732146013421C7
: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.

Enviado:
31 Jul 2009 19:21
por Andre_Cruz
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.

Enviado:
31 Jul 2009 19:36
por Andre_Cruz
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

Enviado:
02 Ago 2009 00:37
por Beto_s
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
.
.

Enviado:
02 Ago 2009 10:50
por Andre_Cruz
Beto_s,
Não conhecia não, valew pela dica vou adicionar ela no programa.
Abraço

Enviado:
02 Ago 2009 11:08
por Djalma Toledo Rodrigues
Uma boa norma é a primeira posição da Tabela conter o seu comprimento.
O motivo é óbvio. Delimitar
Especialmente se as Tabelas tem comprimento diferentes.
.