BRA e RCALL no 18F

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

BRA e RCALL no 18F

Mensagempor Alesandro F Zagui » 19 Out 2009 13:24

Qual a diferença entre:

GOTO e BRA
CALL e RCALL

Obrigado.
Alesandro Freire Zagui
Alesandro F Zagui
Byte
 
Mensagens: 154
Registrado em: 12 Mai 2009 11:03
Localização: Campo Mourao, Pr

Mensagempor renatokodaira » 19 Out 2009 15:16

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).
renatokodaira
Byte
 
Mensagens: 402
Registrado em: 11 Out 2006 15:15

Mensagempor Sergio38br » 19 Out 2009 15:21

Ops GOTO usa 11 bits como endereçamento..

[ ]'s
Sergio
Avatar do usuário
Sergio38br
Word
 
Mensagens: 759
Registrado em: 22 Nov 2007 13:39
Localização: São Paulo - SP

Mensagempor renatokodaira » 19 Out 2009 15:53

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.
renatokodaira
Byte
 
Mensagens: 402
Registrado em: 11 Out 2006 15:15

Mensagempor Sergio38br » 19 Out 2009 15:59

Tens razão retiro o que disse...

[ ]'s
Sergio
Avatar do usuário
Sergio38br
Word
 
Mensagens: 759
Registrado em: 22 Nov 2007 13:39
Localização: São Paulo - SP

Mensagempor Alesandro F Zagui » 19 Out 2009 16:20

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?
Alesandro Freire Zagui
Alesandro F Zagui
Byte
 
Mensagens: 154
Registrado em: 12 Mai 2009 11:03
Localização: Campo Mourao, Pr

Mensagempor renatokodaira » 19 Out 2009 17:18

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.
Editado pela última vez por renatokodaira em 19 Out 2009 18:51, em um total de 1 vez.
renatokodaira
Byte
 
Mensagens: 402
Registrado em: 11 Out 2006 15:15

Mensagempor Alesandro F Zagui » 19 Out 2009 17:50

Mais uma vez, muito obrigado Kodaira.

Abraço
Alesandro Freire Zagui
Alesandro F Zagui
Byte
 
Mensagens: 154
Registrado em: 12 Mai 2009 11:03
Localização: Campo Mourao, Pr

Mensagempor Alesandro F Zagui » 19 Out 2009 18:08

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?
Alesandro Freire Zagui
Alesandro F Zagui
Byte
 
Mensagens: 154
Registrado em: 12 Mai 2009 11:03
Localização: Campo Mourao, Pr

Mensagempor renatokodaira » 19 Out 2009 18:50

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.
renatokodaira
Byte
 
Mensagens: 402
Registrado em: 11 Out 2006 15:15

Mensagempor renatokodaira » 19 Out 2009 19:20

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).
renatokodaira
Byte
 
Mensagens: 402
Registrado em: 11 Out 2006 15:15

Mensagempor ze » 20 Out 2009 06:36

C nu6
rs
Avatar do usuário
ze
Dword
 
Mensagens: 1655
Registrado em: 05 Jun 2007 14:32

Mensagempor Alesandro F Zagui » 20 Out 2009 07:22

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.
Alesandro Freire Zagui
Alesandro F Zagui
Byte
 
Mensagens: 154
Registrado em: 12 Mai 2009 11:03
Localização: Campo Mourao, Pr

Mensagempor vtrx » 20 Out 2009 10:13

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.
Avatar do usuário
vtrx
Dword
 
Mensagens: 2240
Registrado em: 20 Abr 2008 21:01

Mensagempor fabim » 20 Out 2009 10:25

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.
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!!!?

Próximo

Voltar para PIC

Quem está online

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

x