Dúvida assembler no Hitech PICC !!!

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

Dúvida assembler no Hitech PICC !!!

Mensagempor Andre_Cruz » 06 Out 2009 18:57

Estou fazendo um termometro usando o compilador hitech picc, e por curiosidade eu quero colocar uma tabela usando a instrução RETLW do assembler para retornar o valor adquado da conversão.

Estou tentando fazer da seguinte maneira:


Código:
Código: Selecionar todos
.
.
.
            ctemp =  (ADRESH*256 + ADRESL);       
           
#asm   // INICIO DO BLOCO EM ASSEMBLER
           
   movf   _ctemp,w
   call   tab_temp
   movwf   _temp
   goto   fa


tab_temp
       addwf   pcl,f
   retlw   10
   retlw   11

   
fa   
#endasm // FIM DO BLOCO EM ASSEMBLER


O que eu quero fazer é:

Realizar a conversão do A/D e buscar esse valor em uma tabela.
Usar uma matriz consome muita memória e eu acho que usar a tabela em assembler é possivel só não consegui ainda.

No proteus da erro na instrução RETLW

Toda ajuda é bem vinda

Muito obrigado
Andre_Cruz
Word
 
Mensagens: 559
Registrado em: 03 Jan 2009 14:06

Mensagempor fabim » 06 Out 2009 19:13

o andré, só me diz uma coisa.
essa tabela tem quantas casas, e qual pic esta usando.
Um mixo ponteirinho em C, não vai consumir nadinha.
Vai ser o mesmo tamanho da table em ASM, mais alguns bytes de comando..

Abraços

Fabim
Mano, ve só.
Sou responsável pelo que escrevo!!! E não pelo que você entende !!!
fabim
Dword
 
Mensagens: 5001
Registrado em: 16 Out 2006 10:18
Localização: aqui uái!!!?

Mensagempor Andre_Cruz » 06 Out 2009 19:23

fabim,

A tabela n�o tem casa decimal, � numero inteiro variando de 0 a 120, uma matriz com 121 posições, acredito que vai consumir uma boa parte da memória.
Esta em um 16F628.

Eu ja resolvi o problema.

Mas por motivo de aprendizado gostaria de fazer funcionar dessa maneira.

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

Mensagempor vtrx » 06 Out 2009 22:41

Ae Andre,te dou a maior força,C para microcontroladores é disperdício.
Avatar do usuário
vtrx
Dword
 
Mensagens: 2240
Registrado em: 20 Abr 2008 21:01

Mensagempor Andre_Cruz » 07 Out 2009 08:39

vtrx,

Programar em C para microcontroladores é uma faca de dois gumes, em C a construção do programa é mais rapida, mas consome mais memória e a execução do programa é mais lenta. Já no assembler a construção do programa é mais demorada, consome uma quantidade menor de memória e a execução do programa é mais rapida.

Estes novos PICs que trabalham com o clock acima de 20 MHz, acredito que eles ja estão sendo construidos de tal forma que otimize, a execução dos programas escritos em C, esta é a tendência eu acho.

Mas o preço é maior que um PIC simples, que em assembler trabalha com folga.

Mas meu objetivo é tentar usar as coisas boas das duas linguagens, em C eu efetuo os calculos e em assembler procuro na tabela, para deixar o código menor e mais rapido.

Agradeço a todos que visitaram o tópico.

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

Mensagempor fabim » 07 Out 2009 08:50

maior força, tu ta enganado.
Eu programo em ASM, PASCAL, BASIC E C.
Quer source gerado bem grandinho ?
basic.. esse sim.
o montador pascal e c, deixam o asm para hex bem parecidos, apesar do pascal ainda ganhar.
Essa lenda de á fica grande isso fica grande aquilo.

Pô meu, se você sabe pegar uma string, formatar e tal´s em asm, porque demonios você quer usar librarys sprintf printf print ?

pô.
int a;

a = 1024; isso em C.


Olha o asm gerado.
movlw 0x04
movwf _a+0
movlw 0x00
movwf _a+1

tem alguma outra forma de fazer isso em ASM ? se tem não aprendi, fiquei 8 anos escovando bit, e mesmo assim não aprendi..rs

O pessoal confunde muito e se assusta.

quer ver uma coisa, num 16f877, usa o sprintf para formatação!!
Ele aloga uma pá de tabela, de funções etc.
um simples sprintf come quase 4K..

reveja os conceitos irmão, eu ja pensei como você, depois que comecei a colocar a mão na massa!!! a istoria mudou.
Mano, ve só.
Sou responsável pelo que escrevo!!! E não pelo que você entende !!!
fabim
Dword
 
Mensagens: 5001
Registrado em: 16 Out 2006 10:18
Localização: aqui uái!!!?

Mensagempor Andre_Cruz » 07 Out 2009 09:21

fabim,

Acho que me expressei mau.

É exatamente isso que eu quero fazer, fugir dessas bibliotecas que consomem um número absurdo de memória, por isso eu disse que o código fica maior.

Concordo com você no código assembler gerado, é a unica maneira de fazer um inteiro de 16 Bits.

No meu caso eu preciso de uma matriz com 121 posições, mas se eu declarar uma matriz desse tamanho vai consumir muita memória, estou procurando uma solução, para criar essa tabela, consumindo a menor quantidade de memória, e eu pensei em colocar essa tabela em assembler mas não estou conseguindo implementar.

Que futuramente esse código vai para um 12F675 também.

Obrigado pela resposta.

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

Mensagempor Djalma Toledo Rodrigues » 07 Out 2009 10:38

fabim escreveu:maior força, tu ta enganado.
Eu programo em ASM, PASCAL, BASIC E C.
Quer source gerado bem grandinho ?
basic.. esse sim.
o montador pascal e c, deixam o asm para hex bem parecidos, apesar do pascal ainda ganhar.
Essa lenda de á fica grande isso fica grande aquilo.

Pô meu, se você sabe pegar uma string, formatar e tal´s em asm, porque demonios você quer usar librarys sprintf printf print ?

pô.
int a;

a = 1024; isso em C.


Olha o asm gerado.
movlw 0x04
movwf _a+0
movlw 0x00
movwf _a+1

tem alguma outra forma de fazer isso em ASM ? se tem não aprendi, fiquei 8 anos escovando bit, e mesmo assim não aprendi..rs ... .

Fabim
1024 Decimal -----> 400 Hexadecimal

Se o uC for de 8 Bits óbvio que ocupará dois Bytes , duas posições de Memória.
04 00 ou
00 04

Que dificuldade há em "Assemblar" isso ?

--------------------------------------------

André_Cruz - Matriz existe na idéia , no papel
a Memória, ou o Arquivo, é uma fila

Uma boa prática ao construir Tabela é colocar na primeira Posição o Comprimento da dita cuja.

.
Editado pela última vez por Djalma Toledo Rodrigues em 07 Out 2009 13:00, em um total de 1 vez.
Avatar do usuário
Djalma Toledo Rodrigues
Dword
 
Mensagens: 2334
Registrado em: 03 Ago 2008 13:22

Mensagempor vtrx » 07 Out 2009 12:49

Algumas pessoas me levam a mal quando tento incentivar a usar ASM.
Quero que os programadores saibam bem todas as linguagens possíveis,pois só assim´os brazucas não serão alienados dos alemães ou americanos.
Sei que para muitos ASM é demorado ou complicado,mas aí que está a diferença,se voce entende-la bem,será o melhor(pois as outras linguagens parecerão 'brincadeira').
No meu caso,tenho muita afinidade com ASM pois programo em ASM desde o Z80.
Garanto que ninguem deixou de fazer os 'windows' da vida,os video-games etc por não ter C disponível.
Eu programo para PC em Delphi,mas uso as rotinas principais em Assembly,por isso comentei que não usaria C em microcontroladores,pois o espaço de memoria é pequeno e as intruções são poucas,mas não desprezo a linguagem C,apenas acho que se alguem quer conhece-la(ASM),tem essa oportunidade de aprende-la ou usa-la com microcontroladores.
Avatar do usuário
vtrx
Dword
 
Mensagens: 2240
Registrado em: 20 Abr 2008 21:01

Mensagempor fabim » 07 Out 2009 13:07

vtrx, de forma alguma te levei a mal.
Apenas coloquei que.
Se o programador não for um completo xupinho de tecnologia, que apenas pega o que ja esta pronto e CTRL+C, V, compila e faz funcionar.
Ele com certeza, conhece o ASM, que é o basico para saber o que passa no hw do uC.
Ja vi foristas aqui, querendo saber no CCS, como faz pra desligar os comparadores analogicos.. tipo qual o comando do CCS.
Pô meu,
CMCON = 0x07;

Olha o carilho do datasheet, se a IDE for um pouquinho inteligente vai ter um header do uC com o nome CMCON, e não um comando alienado ao endereço do registrador apenas.

Por isso eu digo.
Quem aprende apenas em alto nivel, apanha, apanha, apanha.
Até que um dia descobre que o C, pode ser encarado como um ASM em alto nivel..rsrs
Quer pior.?

Código: Selecionar todos
XXXX diz:
   Fabim, como separar "DM, M, C, D, U". De uma variavel de 16 bits ?
   Eu uso o comando IntToStr, e os valores não são decimais, são ASCII.

  Fabim diz:
  Bom, realmente cara, não tem como. Vou ficar te devendo.

  XXX diz:
  Blz, Obrigado assim mesmo


Pô meu.
Char variavel[6], cont;

for(cont=0; cont<6; cont++){

if(variavel[cont]!=null){ variavel[cont] -= '0'; }

}

Tendeu agora ?

Em alto nivel, PC, existem comandos prontos.
Alto nivel para uC, tambem existe os mesmos comandos. Sabe-se La Deus, que tamanho e como ele pega ASC, tira DEC.

Tendeu ? Tendeu ?

Abração Cara!!

Fabim
Mano, ve só.
Sou responsável pelo que escrevo!!! E não pelo que você entende !!!
fabim
Dword
 
Mensagens: 5001
Registrado em: 16 Out 2006 10:18
Localização: aqui uái!!!?

Mensagempor Djalma Toledo Rodrigues » 07 Out 2009 13:47

fabim escreveu: Pô meu,
CMCON = 0x07;

Olha o carilho do datasheet, se a IDE for um pouquinho inteligente vai ter um header do uC com o nome CMCON, e não um comando alienado ao endereço do registrador apenas. ... Fabim

Comando Alienado ?

Movlw 0x07
Movwf CMCON

Você tem a ousadia de chamar uma coisa tão clara, que até dispensa comentário de Comando Alienado Fabim ?
.
Avatar do usuário
Djalma Toledo Rodrigues
Dword
 
Mensagens: 2334
Registrado em: 03 Ago 2008 13:22

Mensagempor fabim » 07 Out 2009 13:52

Ja programou em CCS? ja usou ? ja teve o saco cheio de explicar pra um iniciante ?

Intão cale-se.rs
Mano, ve só.
Sou responsável pelo que escrevo!!! E não pelo que você entende !!!
fabim
Dword
 
Mensagens: 5001
Registrado em: 16 Out 2006 10:18
Localização: aqui uái!!!?

Mensagempor Andre_Cruz » 07 Out 2009 16:11

Pessoal só pra constar.

O código que eu postei no inicio do tópico, funciona corretamente !

Estava com problema na variavál "ctemp", efetuo mais alguns calculos para tratar o resultado do A/D para buscar o valor correspondente na tabela e ai estava o problema.

Consumiu pouca memória, acredito que foi uma boa solução para criar uma tabela consumindo pouca memória em C, ai vai minha dica para quem também precisa economizar memória do uC.

Agradeço a todos que ajudaram!

A discussão sadia sobre as linguagens de baixo, médio e alto nivel esta interessante.

Fabim nesse ponto do CCS eu concordo contigo, é muito cheio de nove horas rsrsrss

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


Voltar para PIC

Quem está online

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

x