Página 1 de 2

BRA e RCALL no 18F

MensagemEnviado: 19 Out 2009 13:24
por Alesandro F Zagui
Qual a diferença entre:

GOTO e BRA
CALL e RCALL

Obrigado.

MensagemEnviado: 19 Out 2009 15:16
por renatokodaira
O operando de BRA tem soh 11 bits (de 0 a 2047) e eh de 1 palavra, enquanto que o de GOTO tem 20 bits ( de 0 a 1048575) e gasta duas palavras.

O CALL chama uma rotina no endereço especificado pelo operando de 20 bits (portanto eh uma instrução de duas palavras), enquanto que o RCALL faz uma chamada de uma subrotina a um ponto x endereços em relação ao contador de programa atual (e eh de 1 palavra).

MensagemEnviado: 19 Out 2009 15:21
por Sergio38br
Ops GOTO usa 11 bits como endereçamento..

[ ]'s
Sergio

MensagemEnviado: 19 Out 2009 15:53
por renatokodaira
Ops GOTO usa 11 bits como endereçamento..


Como nao existem as instruçoes BRA e RCALL nos PICs de core 14 bits (e.g. 16F) presumo que a comparaçao seja com os PICs de core 16 bits (e.g. 18F) pra cima, onde a instruçao GOTO tem operando de 20 bits.

MensagemEnviado: 19 Out 2009 15:59
por Sergio38br
Tens razão retiro o que disse...

[ ]'s
Sergio

MensagemEnviado: 19 Out 2009 16:20
por Alesandro F Zagui
Obrigado pelo esclarecimento Kodaira.
Obrigado Sergio, a intenção é o que vale. hehehehe...

Não querendo abusar, mas já abusando.
O que faz a instrução DAW?
E o que significa o Borrow na instrução SUBWFB?

MensagemEnviado: 19 Out 2009 17:18
por renatokodaira
A instrucao DAW quer dizer ajuste decimal do registrador W. Isto eh, ela pega o valor que estiver no W e transforma em codigo BCD (de 00 a 99). Por exemplo, no W voce tem C7h (199 decimal), apos o DAW, ele deixa o W com 99h e 1 no flag de carry (vai um).

O borrow quer dizer "emprestimo". Quando voce subtrai um valor que existe em W maior do que o que existe no registrador F, voce precisa de um bit de emprestimo. Por exemplo na conta 1 - 2, o resultado eh 1 (-1), mas o flag carry eh setado, indicando que houve um emprestimo.

MensagemEnviado: 19 Out 2009 17:50
por Alesandro F Zagui
Mais uma vez, muito obrigado Kodaira.

Abraço

MensagemEnviado: 19 Out 2009 18:08
por Alesandro F Zagui
Fiz um teste, mas não entendi o resultado?!?!

Código: Selecionar todos
   MOVLW      .199      ; 0XC7
   DAW


Resultado:
O valor no Wreg = 39 (0x27)

É isso mesmo?

MensagemEnviado: 19 Out 2009 18:50
por renatokodaira
Desculpe Alessandro, faltou informar que o DAW ajusta o valor pra BCD que estiver no registrador W RESULTANTE DE UMA SOMA ANTERIOR de dois outros valores que estivessem tambem em formato BCD. Ou seja soh funciona depois de uma operaçao aritmetica em que os dois operandos estavam em fomato BCD.

Por exemplo: 26h + 56h = 7Ch
mas em BCD: 26 decimal + 56 decimal = 82 decimal

Apos o DAW, o 7Ch tem que virar 82h
O primeiro nibble com valor C hexa (12 decimal) eh somado a 6, resultando 18 decimal ou 12 hexa. O 1 seta o DC (digit carry) e fica o 2 no nibble. o DC eh somado ao 7 hexa = 7 decimal do outro nibble, resultando em 8 . Agrupando os dois nibbles temos 82h = 82 BCD decimal.

Se simplesmente somassemos os dois bytes em BCD o resultado nao estaria em formato BCD, por isso se usa a DAW.

MensagemEnviado: 19 Out 2009 19:20
por renatokodaira
Outra coisa: esqueça o meu exemplo com 199 decimal, foi infeliz. Porque o maior valor que podemos representar em dois digitos BCD eh 99. Se somarmos 99 com outro 99 vamos obter no maximo 198.

Ai no PIC ficaria: 99h + 99h = 132h
Fazendo o ajuste DAW o 132h (ou 32h com carry = 1) vira 98h com carry = 1 de forma a representar o 198 BCD (1 carry e 98 no W).

MensagemEnviado: 20 Out 2009 06:36
por ze
C nu6
rs

MensagemEnviado: 20 Out 2009 07:22
por Alesandro F Zagui
Beleza Renato, agora ficou tudo mais claro. Obrigado mesmo!!!!!

Lellis estou estudando o C, mas ainda não tenho a mesma habilidade como no assembly. E mesmo programando em C, acho importante conhecer a linguagem assembly.

Abraço a Todos.

MensagemEnviado: 20 Out 2009 10:13
por vtrx
Enchendo um pouco,fiz uns teste em C para µc...po da muita volta pra chegar a um ponto a linguagem C,(pelo menos para µc).
Não consigo me adaptar a ela para mesclar com asm,enquanto eu to tentando fazer uma rotina em C,ja tenho ela em ASM na cabeça,e em C eu tenho que ficar imaginando como ela ta tentando ficar em ASM...hehe.
Acho que ,pra mim,C só para O.S.

MensagemEnviado: 20 Out 2009 10:25
por fabim
vtrx escreveu:Enchendo um pouco,fiz uns teste em C para µc...po da muita volta pra chegar a um ponto a linguagem C,(pelo menos para µc).
Não consigo me adaptar a ela para mesclar com asm,enquanto eu to tentando fazer uma rotina em C,ja tenho ela em ASM na cabeça,e em C eu tenho que ficar imaginando como ela ta tentando ficar em ASM...hehe.
Acho que ,pra mim,C só para O.S.


cara, sem menospresar.
Olha, eu tambem era assim.
Não saia de ASM, ou Basic, ou PAscal, para o C de jeito nenhum.
O dia que eu resolvi estudar, e entender a sintaxi.
Não mexi mais com nada, a nãos er pascal para SO.

Brinca mais um pouquinho a fundo, que vai mudar de idéia rapidinho.