Página 1 de 1

IF entre duas variaveis

MensagemEnviado: 23 Nov 2006 20:58
por Juliano
alguem sabe se tem como comparar duas variaveis com a diretriz IF,ELSE,ENDIF, exemplo:

IF VARIAVEL A <VARIAVEL B

rotina se o resultado for X

ELSE

rotina se o resulatado for XX

ENDIF

MensagemEnviado: 23 Nov 2006 21:03
por moacir
Juliano, ve se isso que voce quer

IF(a<b)
{
execute esta rotina
}
Else
{
execute esta rotina
}

z = (a>b) ? a : b;

MensagemEnviado: 23 Nov 2006 21:37
por tcpipchip
ou assim
z = (a<b) ? a : b;
tcpipchip

MensagemEnviado: 23 Nov 2006 23:42
por Red Neck Guy
Em assembly, como está no inicio do post, não tem como não.

MensagemEnviado: 23 Nov 2006 23:54
por Renie
Olá pessoALL!

Concordo e discordo de todas as respostas dos colegas que post'aram antes!

Sem saber o ambiente ( IDE) que o colega está utilizando, compilador
(linguagem), etc. Todas as respostas serão corretas ou erradas!!!!!!!!

O Fábio Pereira, já deu um "toque"sobre isso ha poucos post's!!!!!

Seja mais claro, dê todas as informações pertinentes ( que possam
ser passadas), para não poluir o fórum nem receber uma resposta
que não tem nada a haver com seu problema!

MensagemEnviado: 24 Nov 2006 09:19
por andre_luis
Concordo c/ o Renie quanto à especificacao do problema, mas já podemos antecipar alguma coisa:

- Em C, pode fazerr isso com váriáveis, mas por comando.
- Em assembly, pode usar a diretiva IF ELSE ENDIF apenas para constantes.

PORÉM, voce pode criar uma MACRO em assembly para realizar essa comparacao com variáveis.

+++

assembly

MensagemEnviado: 24 Nov 2006 10:01
por tcpipchip
Em assembly

movf A,W
subwf B,W

Depois disto, teste flag Z para verificar se A=B
Para A<B ou A>B use o flag C

TCPIPCHIP

Re: assembly

MensagemEnviado: 24 Nov 2006 10:13
por andre_luis
Talvez isso ajude:
Código: Selecionar todos
;*****************************************************************************************************
; LISTING 1 - COMPARISON MACRO
;
; "Comparison macro for PIC processors," EDN, March 2, 2000, pg 122
;
; http://www.ednmag.com/ednmag/reg/2000/030200/designideas.htm#05di4
;****************************************************************************************************
   

#define eq      1      ; if equal
#define ne      2      ; if not equal
#define bl      3      ; if below (unsigned comparison)
#define ae      4      ; if above or equal (unsigned)
#define WREG   0xFFFD   ; if immediate-value specified as the W reg

b2       MACRO      target, ram_reg, cond, lval
   nolist
   if lval != WREG      ; if lval spec'd as "WREG", don't move lval to W
      movlw   lval
   endif
; subtract will set carry if ram_reg >= lval, clear it if reg < lval (unsigned)
      subwf   ram_reg, W   ; ram_reg minus W -> W, ram_reg unchanged
   if cond == eq      ; if cond is "eq", skip if non 0, branch if 0
      skpnz
   else
    if cond == ne      ; if cond is "ne", skip if 0, branch if non 0
       skpz
    else
     if cond == bl      ; if cond is "bl", skip if carry, branch if not
        skpc
     else
      if cond == ae      ; if cond is "ae", skip if not carry, else branch
         skpnc
      else         ; if condition none of the above, error
         error   "b2 macro condition argument not a valid choice"
           endif      ; cond = ae
          endif      ; cond = bl
    endif      ; cond = ne
   endif         ; cond = eq
      b   target   ; skip this if condition not true, take it if true
   list
      ENDM   ; b2

o problema

MensagemEnviado: 26 Nov 2006 19:04
por Juliano
uso o MPLAB 6.61,programo em ASM
o que eu preciso é fazer um shift light com pic para usar com contagiros automotivo,só que o seguinte preciso comparar o que entrou com o que esta na eeprom do pic ,até ai é facil só que eu preciso que ele sete uma porta do pic se o que entrou for igual ou maior do que esta na eeprom do pic pois se eu usar "xor"e testar o status,z ele só vai setar a porta se bater igual e não maior,se poderem me ajudar agradeço

MensagemEnviado: 27 Nov 2006 19:29
por a.rairan
subtrai o valo do work e testa o carry bit

MensagemEnviado: 27 Nov 2006 19:59
por zielpunkt
Juliano, tenta esse código ai:

Código: Selecionar todos
   movfw   valor1
   subwf   valor2,w
   btfss   status, c
   goto    isso    ; valor1 > valor2
   goto    aquilo  ; valor1 < ou = valor2


Ih, deu fome....

if

MensagemEnviado: 28 Nov 2006 18:47
por Juliano
valeu pessoal pela força vo tentar terminar o programa

MensagemEnviado: 28 Nov 2006 23:05
por Juliano
Pessoal deu certo a minha rotina valeu pela força de vcs
se precisarem de algo me add no MSN falowwwwww