ImageImageImageImage
Hazte Socio (El Foro siempre Gratis)
Paga con Tarjetas+ Info www.arde.cc/socios

Instrucciones del 16F690 en ensamblador

Foro para postear los temas de ensamblador

Moderator: Junta Directiva

Post Reply
User avatar
REYES
Posts: 2
Joined: Wed Apr 02, 2008 5:12 pm

Instrucciones del 16F690 en ensamblador

Post by REYES » Wed Apr 02, 2008 5:25 pm

:oops: soy nuevo en este foro y me gustaria saber dos cosas, ¿las instrucciones de ensamblador son las mismas para todos los PIC? y ... he investigado sobre como comparar dos registros y encontre la instruccion CMP para comparar los registros o variables NUM1 y NUM2, pero cuando pongo la instruccion

CMP NUM1,NUM2

no ensambla el programa de microchip que tengo, reporta un error que dice illegal opcode

¿que instruccion debo utilizar para comparar estos dos registros para el 16F690?

GRACIAS!!!

User avatar
Luison
Usuario de baja
Posts: 493
Joined: Mon Dec 24, 2007 12:03 pm
Location: Guecho

Re: Instrucciones del 16F690 en ensamblador

Post by Luison » Wed Apr 02, 2008 6:20 pm

Google--> 16F690 --> 7200 páginas encontradas, y las primeras son sus respectivos datasheet (manual). El primero es el manual completo de 258 páginas. En la 196 están las instrucciones. Google no muerde ;)

User avatar
REYES
Posts: 2
Joined: Wed Apr 02, 2008 5:12 pm

Re: Instrucciones del 16F690 en ensamblador

Post by REYES » Wed Apr 02, 2008 6:46 pm

este foro si que sirve.. gracias.. .. .. .. .. .. ya lo habia buscado en google pero no lo habia encontrado.. pero gracias

User avatar
Lorth
Forero Habitual
Forero Habitual
Posts: 188
Joined: Sat Oct 27, 2007 4:16 am
Nombre: Sergi Consul
Location: Barcelona
Contact:

Re: Instrucciones del 16F690 en ensamblador

Post by Lorth » Wed Apr 02, 2008 9:09 pm

No existe esa instruccion.

La instruccion es: BTFSC

Segun el Datasheet:

Code: Select all

Syntax: [ label ] BTFSC   f,b 
Operands: 0 ≤ f ≤ 127 
0 ≤ b ≤ 7 
Operation: skip if (f<b>) = 0 
Status Affected: None 
Description: If bit ‘b’ in register ‘f’ is ‘1’, the next 
instruction is executed. 
If bit ‘b’ in register ‘f’ is ‘0’, the next 
instruction is discarded, and a NOP 
is executed instead, making this a 
two-cycle instruction.
Se me ocurre, sin pensarlo mucho, que podrias restar los dos numeros, y si es 0, es que son iguales. y usas la funcion de arriba para saltar o no a otra parte del codigo.


Acostumbrate a usar los Datasheets, porque es muy basico, para saberlo todo... no te aprendas los comandos de memoria.

Ranganok
Usuario Desarrollador
Usuario Desarrollador
Posts: 3874
Joined: Mon Nov 07, 2005 3:10 pm
Location: Barbaros del Valle
Contact:

Re: Instrucciones del 16F690 en ensamblador

Post by Ranganok » Wed Apr 02, 2008 9:16 pm

REYES, los juegos de instrucciones en los PICs va por familias, la 16F tiene 35 instrucciones y esa no existe, generalmente para comparar lo que se hace es restar los registros:

Code: Select all

 MOVF num1     ; mueve la variable num1 al acumulador
 SUBWF num2   ; resta el acumulador a la variable num2
 BTFSC Z           ; compara el zero (iguales)
  GOTO num1_igual_num2

 BTFSC C           ; compara el carry (desboramiento)
   GOTO num1_mayor_num2

 GOTO num1_menor_num2
No he comprobado si esta correcto, así que puede ser que los GOTOs del Carry estén intercambiados, pero por lo demás se hace así.

S2

Ranganok Schahzaman
skiras.blogspot.com

"En igualdad de condiciones la explicación más sencilla es la cierta"

User avatar
TumBos
Forero Habitual
Forero Habitual
Posts: 158
Joined: Tue Jan 17, 2006 7:59 pm

Re: Instrucciones del 16F690 en ensamblador

Post by TumBos » Thu Apr 03, 2008 8:09 am

otra forma usando XOR:

movf num1 ; Carga num1 en accu
xorfw num2,W ; Al hacer el XOR si son iguales el flag Z se pone a 1
btfss STATUS,Z ; Salta el goto si num1=num2
goto no_es_igual ;
;---- codigo para num1=num2 ---
;
no_es_igual


1saludo

User avatar
Luison
Usuario de baja
Posts: 493
Joined: Mon Dec 24, 2007 12:03 pm
Location: Guecho

Re: Instrucciones del 16F690 en ensamblador

Post by Luison » Thu Apr 03, 2008 8:16 am

TumBos wrote:otra forma usando XOR:

movf num1 ; Carga num1 en accu
xorfw num2,W ; Al hacer el XOR si son iguales el flag Z se pone a 1
btfss STATUS,Z ; Salta el goto si num1=num2
goto no_es_igual ;
;---- codigo para num1=num2 ---
;
no_es_igual


1saludo
Sí, pero no sacas cual es el mayor :roll:

Post Reply

Who is online

Users browsing this forum: No registered users and 1 guest