[resolvido] Operações em Assembly (<|>/=)

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

[resolvido] Operações em Assembly (<|>/=)

Mensagempor [Daniel] » 26 Abr 2010 12:28

Colegas,

Alguém sabe como fazer para comparar dois numeros e fazer saltos GOTO dependendo do resuldado?

Por exemplo, alguem tem alguma rotina para fazer as operações para saber se um numero é:
*maior que
*menor que
*maior ou igual
*menor ou igual

? Eu tinha essa rotina no meu computador (do curso) mais eu acabei perdendo junto com outros arquivos quando meu HD externo foi embora. (agulha quebrou)

Nunca precisei dela, ate hoje! ~~

Obrigado!!
Editado pela última vez por [Daniel] em 30 Abr 2010 09:14, em um total de 3 vezes.
Avatar do usuário
[Daniel]
Byte
 
Mensagens: 106
Registrado em: 18 Nov 2009 09:14

Mensagempor renatokodaira » 26 Abr 2010 13:01

Se for PIC de core 14 bits, voce pode fazer uma subtraçao com os dois numeros a serem comparados e depois testar o bit de carry, fazer ou nao o salto usando as instruçoes BTFSS e BTFSC.

Se for de core 16 bits, tem as instruçoes CPFSEG, CPFSLT e CPFSGT que comparam dois numeros e fazem o salto. Ainda tem as instruçoes BZ, BN, BC, BNC e BNN pra ajudar.
renatokodaira
Byte
 
Mensagens: 402
Registrado em: 11 Out 2006 15:15

Mensagempor [Daniel] » 26 Abr 2010 13:58

Estou usando um PIC de 8bits (16f628)

Você tem alguma rotina para mim ver e tirar alguma ideia?

voce pode fazer uma subtraçao com os dois numeros a serem comparados e depois testar o bit de carry, fazer ou nao o salto usando as instruçoes BTFSS e BTFSC.

-------------
por ex.:
MOVFW NUM1
SUBWF NUM2,W
BTFSS STATUS,C
GOTO NAO_E_MENOR
GOTO E_MENOR_QUE
-------------
?
Avatar do usuário
[Daniel]
Byte
 
Mensagens: 106
Registrado em: 18 Nov 2009 09:14

Mensagempor renatokodaira » 26 Abr 2010 16:10

Você tem alguma rotina para mim ver e tirar alguma ideia?


Acho que o que eu sugeri é a rotina que você escreveu. Precisa mais do que isso ? (tem o teste de igualdade, que você faz testando o bit zero, da mesma forma, na sequência, ou mesmo antes do teste de maior/menor que).

Obs. "mim" não faz nada, não vê nada, não escreve, "mim" não é sujeito de oração. O certo é "para EU ver e tirar". Quem fala "mim" faz alguma coisa é índio ... ;o)
renatokodaira
Byte
 
Mensagens: 402
Registrado em: 11 Out 2006 15:15

Mensagempor KrafT » 26 Abr 2010 16:42

No livro do PIC16F62x do Fabio Pereira (o primeiro dele) tem varios exemplos dessas macros.

http://www.erica.com.br/buscafinal.asp?cod=7279
Avatar do usuário
KrafT
Dword
 
Mensagens: 2228
Registrado em: 11 Out 2006 14:15
Localização: Blumenau -SC

Mensagempor [Daniel] » 26 Abr 2010 17:13

Precisa mais do que isso ?


Na verdade nao, so precisava ter nocao de como deve ser feito mesmo, estava meio confuso, obrigado.

Obs.


-.-# rs, nao sou indio.



Obrigado Kraft!
Avatar do usuário
[Daniel]
Byte
 
Mensagens: 106
Registrado em: 18 Nov 2009 09:14

Mensagempor Andre_Cruz » 26 Abr 2010 17:25

Daniel,

Ja tive essa dúvida e o proex, me respondeu;

Código: Selecionar todos
compara a parte alta primeiro   
       MOVF     RB_HI,W
       SUBWF    RA_HI,W
       BTFSC    STATUS,Z
       GOTO     BX
       BTFSS    STATUS,C
       GOTO     MENOR
       GOTO     MAIOR

compara a parte baixa
   
BX   MOVLW    RB_LOW,W
     SUBWF    RA_LOW,W
     BTFSC    STATUS,Z
     GOTO     IGUAL
     BTFSS    STATUS,C
     GOTO     MENOR
     GOTO     MAIOR

MENOR  NOP ; pula pra cá se RA for menor que RB
IGUAL  NOP ;; pula pra cá se RA for igual que RB
MAIOR  NOP ;; pula pra cá se RA for maior que RB


O tópico é esse:

http://www.asm51.eng.br/phpbb/viewtopic ... 060be8f39d

Abraço

André Cruz
Andre_Cruz
Word
 
Mensagens: 559
Registrado em: 03 Jan 2009 14:06

Mensagempor RobL » 26 Abr 2010 18:22

math compare para pics de 8 bits com 14 bits de palavra (16F628):

http://www.piclist.com/tecHREF/microchi ... .htm#8_bit

Para 1 byte (8 bits) e comparação para 16bits (2 bytes):
Código: Selecionar todos
                        ****  8 bit  ****





                       *** Branch True ***



RAM > X          RAM < X          RAM >= X         RAM <= X



movf RAM,w       movlw X          movlw X          movf RAM,w

sublw X          subwf RAM,w      subwf RAM,w      sublw X

btfss status,c   btfss status,c   btfsc status,c   btfsc status,c

goto true        goto true        goto true        goto true





                      *** Branch False ***



RAM > X          RAM < X          RAM >= X         RAM <= X



movf RAM,w       movlw X          movlw X          movf RAM,w

sublw X          subwf RAM,w      subwf RAM,w      sublw X

btfsc status,c   btfsc status,c   btfss status,c   btfss status,c

goto false       goto false       goto false       goto false





                       *** Branch True ***



RAM0 > RAM1      RAM0 < RAM1      RAM0 >= RAM1     RAM0<= RAM1



movf RAM0,w      movf RAM1,w      movf RAM1,w      movf RAM0,w

subwf RAM1,w     subwf RAM0,w     subwf RAM0,w     subwf RAM1,w

btfss status,c   btfss status,c   btfsc status,c   btfsc status,c

goto true        goto true        goto true        goto true





                       *** Branch False ***



RAM0 > RAM1      RAM0 < RAM1      RAM0 >= RAM1     RAM0<= RAM1



movf RAM0,w      movf RAM1,w      movf RAM1,w      movf RAM0,w

subwf RAM1,w     subwf RAM0,w     subwf RAM0,w     subwf RAM1,w

btfsc status,c   btfsc status,c   btfss status,c   btfss status,c

goto false       goto false       goto false       goto false







                        ****  16 bit  ****





                        *** Branch True ***



RAM > X          RAM < X          RAM >= X         RAM <= X



movf RAML,w      movlw XL         movlw XL         movf RAML,w

sublw XL         subwf RAML,w     subwf RAML,w     sublw XL

movf RAMH,w      movlw XH         movlw XH         movf RAMH,w

btfss status,c   btfss status,c   btfss status,c   btfss status,c

addlw 1h         addlw 1h         addlw 1h         addlw 1h

sublw XH         subwf RAMH,w     subwf RAMH,w     sublw XH

btfss status,c   btfss status,c   btfsc status,c   btfsc status,c

goto true        goto true        goto true        goto true





                        *** Branch False ***



RAM > X          RAM < X          RAM >= X         RAM <= X



movf RAML,w      movlw XL         movlw XL         movf RAML,w

sublw XL         subwf RAML,w     subwf RAML,w     sublw XL

movf RAMH,w      movlw XH         movlw XH         movf RAMH,w

btfss status,c   btfss status,c   btfss status,c   btfss status,c

addlw 1h         addlw 1h         addlw 1h         addlw 1h

sublw XH         subwf RAMH,w     subwf RAMH,w     sublw XH

btfsc status,c   btfsc status,c   btfss status,c   btfss status,c

goto false       goto false       goto false       goto false





                        *** Branch True ***



RAM0 > RAM1      RAM0 < RAM1      RAM0 >= RAM1     RAM0 <= RAM1



movf RAM0L,w     movf RAM1L,w     movf RAM1L,w     movf RAM0L,w

subwf RAM1L,w    subwf RAM0L,w    subwf RAM0L,w    subwf RAM1L,w

movf RAM0H,w     movf RAM1H,w     movf RAM1H,w     movf RAM0H,w

btfss status,c   btfss status,c   btfss status,c   btfss status,c

addlw 1h         addlw 1h         addlw 1h         addlw 1h

subwf RAM1H,w    subwf RAM0H,w    subwf RAM0H,w    subwf RAM1H,w

btfss status,c   btfss status,c   btfsc status,c   btfsc status,c

goto true        goto true        goto true        goto true





                        *** Branch False ***



RAM0 > RAM1      RAM0 < RAM1      RAM0 >= RAM1     RAM0 <= RAM1



movf RAM0L,w     movf RAM1L,w     movf RAM1L,w     movf RAM0L,w

subwf RAM1L,w    subwf RAM0L,w    subwf RAM0L,w    subwf RAM1L,w

movf RAM0H,w     movf RAM1H,w     movf RAM1H,w     movf RAM0H,w

btfss status,c   btfss status,c   btfss status,c   btfss status,c

addlw 1h         addlw 1h         addlw 1h         addlw 1h

subwf RAM1H,w    subwf RAM0H,w    subwf RAM0H,w    subwf RAM1H,w

btfsc status,c   btfsc status,c   btfss status,c   btfss status,c

goto false       goto false       goto false       goto false



RobL
Dword
 
Mensagens: 1546
Registrado em: 20 Fev 2007 17:56

Mensagempor [Daniel] » 30 Abr 2010 09:12

Nossa! Obrigado a todos pelas respostas, resolvi o problema, funcionou!

[resolvido]

Abraço
Avatar do usuário
[Daniel]
Byte
 
Mensagens: 106
Registrado em: 18 Nov 2009 09:14


Voltar para PIC

Quem está online

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

cron

x