Newsgroup: it.hobby.elettronica.digitale
Titolo: IF in assembler..

Sono da poco in questo ng, ho molto interesse nell'elettronica digitale e
sono quì proprio per imparare, se commetto qualche errore perdonatemi.
Da un pò sto cercando di imparare a programmare un PIC 16F84; il problema
principale adesso è legato a come fare un confronto tra due informazioni,
per esempio:
se io volessi scrivere un comando come questo:
IF A=B THEN GOTO "label"
in assembler che dovrei fare?
Qualcuno conosce il modo?
P.S. Se sono fuori tema rendetemelo noto....

 in assembler che dovrei fare?
Dunque... dovresti utilizzare l'istruzione di sottrazione... sottraendo A da
B (o viceversa)... ovviamente dovrai  muoverti oppoirtunamente A e/o B in
registri ...
dopodiche utilizzi una istruzione con salto condizionato che verifica lo
stato della flag zero dopo l'istruzione di sottrazione... quando A=B la flag
sarà impostata su 1
Penso di essermi spiegato
CIAO

 ha scritto nel messaggio
news:HGt39.168175$Jj7.3...@news1.tin.it...

Un'altra soluzione è fare un AND bit a bit tra registri. In uno metti il
dato "variabile" nell'altro la "costante" e fai un and. Se il risultato è
uguale alla costante OK, altrimenti non sono uguali.
In pratica fai un confronto usando una MASCHERA che è il valore costante che
utilizzi per il confronto.

ElectricMan wrote:





Provo a spiegarmi:
nel Pic c'è il registro STATUS che ha il bit Z che diventa 1 quando il
risultato di un'operazione aritmetica è 0.
Quindi per vedere se due variabili o cumunque due registri sono uguali li
puoi sottrarre. Se effettivamente sono uguali il bit Z varrà uno,
altrimenti varrà zero.
Se le due variabili sono A e B puoi fare cosi:
      movf  A,w             ; Mette il valore di A in W
      subwf B,w             ; Sottrae B a W (mettendo il risulato in W)
      btfss STATUS,Z        ; Controlla Z: se è 1 salta l'istruzione succ.
      goto SONO_DIVERSI     
      goto SONO_UGUALI
SONO_UGUALI
      ...
      ...
      ...
SONO_DIVERSI
      ...
      ...
      ...
      END
Spero di esserti stato utile!
      Ciao Fil
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

Io per verificare se due numeri sono uguali non utilizzerei la
sottrazione,
quest'ultima č molto utile nel caso in cui tu voglia capire se un numero
č maggiore di un altro.
Per un confronto del tipo A=B? puoi utilizzare l'operatore XOR.
esempio:
     cblock 0x0C
A                ;0x0C
B                ;0x0D
...              ;0x0E
     endc
   org 0x00
       goto Main
Main   movlw d'25'  ; carica nel W. register il valore decimale 25
       movwf A      ; e lo trasferisce nel registro A
       movlw d'26'  ; cerica nel W. register il valore decimele 26
       movwf B      ; e lo trasferisce in B
 
       movfw A      ; trasferisce il contenuto di A in W
       xorwf B,W    ; confronta W con B cioč praticamente A con B
       skpz
       goto  Diversi
       goto  Uguali   
Diversi ....        ; i due numeri sono diversi
        ....
        ....
        goto $ 
Uguali  ....        ; i due numeri sono uguali
        ....
        ....
        goto $
Spero di essere stato chiaro...
ciao
Roberto
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

        goto  Uguali
Cos'e' l'istruzione skpz????????
Sarebbe   btfss  status,z   ??

 alla cosa e non vorrei dire barzellette
Claudio ti faccio i miei complimenti, cosě come dici rendi il prog molto piů
snello.......