Routines de comparaison#
|
|
Je suis à la recherche d'une méthode pour programmer une formule de comparaison entre deux nombres de 16 bits sur un microcontrolleur P89C51RB2. Le programme de base est écrit en assembleur.
Toute aide est appréciée.
Merci et à bientôt
Benoit
Numéro de l'article: 146322
| De: Benoit
| Date: 2004-10-22 19:28:39
|
RE: Routines de comparaison
Ben tu peux utiliser l'instruction de comparaison, ca doit exister sur le 8051. Bien sur il faut faire é comparaisons. Si tu n'as pas d'instruction de comparaison, ce dont je doute, tu peux utiliser un XOR (ou exclusif)
A XOR B = 0 si A=B sinon c'est different de 0
Voila tu as tout...
good luck
Numéro de l'article: 146352
| De: pazcal
| Date: 2004-10-22 21:32:29
|
RE: Routines de comparaison
qu'apelle-tu comparer ?
voir si deux nombre de 16 bits sont egaux ?
essaie ceci
mov a,N1H
xor a,N2H
jnz pasegal
mov a,N1L
xor a,N2L
jnz pasegal
ici, les 2 nb sont egaux
pasegal:
et ici, ils sont differents
.
N1 est le premier nb (H pour octet Hight et L pour octet Low)
N2 est le deuxieme nb (H pour octet Hight et L pour octet Low)
.
Si tu dois distinguer si l'un est plus grand que l'autre, vois l'instruction CJNE (compare et jump si non egal) et en allant tester le Cy, tu peux determiner quel est le plus grand.
amitié
Numéro de l'article: 146363
| De: Richard
| Date: 2004-10-22 22:08:13
|
RE: Routines de comparaison
petite rectification, remplacer les instruction "xor" par "xrl" (je me suis planté dans ce mnemonique)
Numéro de l'article: 146477
| De: Richard
| Date: 2004-10-23 13:39:46
|
RE: Routines de comparaison
Tiens, a titre d'exemple, voici une routine qui trie une table qui debute en 40H et qui contient 5 cellules de trois bytes.
Le premier byte est la partie haute d'un nombre destiné au timer, le deuxieme la partie basse et le troisieme le numero du servo auquel c'est destiné.
cette routine n'est pas encore debuggée.
un petit mot sur le jnc apres lbl60, les instructions dec qui precede n'affecte pas le Cy.
dis-moi si ca t'a aidé.
amitiés
;------------------------------------------------------------
;tri - trie de la position la plus petite vers la plus grande
;------------------------------------------------------------
tri:
mov R0,#40h ;cellule 1
lbl66:
clr flgchg
mov R1,B0R0 ;on pointe la cellule 2
inc R1
inc R1
inc R1
mov R2,B0R0 ;r2=r0, pas differences
lbl62:
mov A,@R1 ;compare timer high
mov B0R3,@R0
cjne A,B0R3,lbl60
inc R1 ;si identique, on compare timer low
inc R0
mov A,@R1
mov B0R3,@R0
cjne A,B0R3,lbl60a
lbl60a:
dec R1 ;remet pointeurs ds position intiale
dec R0
lbl60:
jnc lbl61 ;si permutation necessaire
mov R2,B0R1 ;retien R1 ds R2
setb flgchg ;permut demandée
lbl61:
inc R1 ;cellule suivante
inc R1
inc R1
cjne R1,#51h,lbl62 ;si pas ad de fin de tble, on boucle
mov R2,#3 ;3 mots a permuter
lbl65:
jnb flgchg,lbl64
mov A,@R0 ;on permute
xch A,@R1
mov @R0,A
lbl64:
inc R0 ;ajuste pointeurs
inc R1
djnz R2,lbl65 ;boucle sur nb mots
cjne R0,#4Fh,lbl66 ;boucle sur nb cellules
ret
Numéro de l'article: 146622
| De: Richard
| Date: 2004-10-24 10:01:19
|
RE: Routines de comparaison
et le même deboggé
;------------------------------------------------------------
;tri - trie de la position la plus petite vers la plus grande
;------------------------------------------------------------
tri:
mov R0,#40h ;cellule 1
lbl66:
clr flgchg
mov R1,B0R0 ;cellule 2
inc R1
inc R1
inc R1
mov R2,B0R0 ;ref R2=ref cellule 1 fixe
lbl62:
mov A,@R0 ;compare timer high
mov B0R3,@R1
cjne A,B0R3,lbl60
inc R1 ;si même, compare timer low
inc R0
mov A,@R0
mov B0R3,@R1
cjne A,B0R3,lbl60a
lbl60a:
dec R1
dec R0
lbl60:
jnc lbl61 ;si permutation necessaire
mov R0,B0R1 ;save idty cellule
setb flgchg ;permut demandée
lbl61:
inc R1 ;cellule suivante
inc R1
inc R1
cjne R1,#52h,lbl62 ;si pas fin, on boucle
mov R3,#3 ;3 mots a permuter
mov R1,B0R0 ;cellule petite ds R1
mov R0,B0R2 ;cellule visee ds R0
lbl65:
jnb flgchg,lbl64
mov A,@R0 ;on permute
xch A,@R1
mov @R0,A
lbl64:
inc R0 ;ajuste pointeurs
inc R1
djnz R3,lbl65 ;boucle sur nb mots
cjne R0,#4Fh,lbl66 ;boucle sur nb cellules
ret
En esperant que tu sois toujours a l'ecoute de ce post.
ca ferait plaisir de savoir qu'on ne se "casse pas le derriere" pour des prunes ;-)
amitiés
Numéro de l'article: 146719
| De: Richard
| Date: 2004-10-24 18:02:08
|