Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

05/05/2014 #1


Comparar registro con un literal negativo
Buenas. Bueno mi inconveniente surge por que necesito comparar el valor de un registro con un número negativo para saber si hacer o dejar de hacer algo, ESTOY PROGRAMANDO EN ASSEMBLER. Para comparar valores uso lo siguiente

btfsc incrementa ;comprueba el estado del pulsador
goto baja ;se va a la etiqueta "baja"
movlw .31 ;mueve el valor decimal 31 al registro de trabajo
subwf volumen,w ;resta los registros
btfsc STATUS,Z ;comprueba el valor del bit Z
goto baja ;si es 1 se va hacia otra etiqueta
incf volumen ;si es 0 incrementa la variable "volumen"

Con un literal positivo no hay problema pero al querer comparar con un número negativo se complica ya que no puedo escribir movlw -7 por q no me lo toma. Si me dan alguna alternativa les estaría muy agradecido. saludos
05/05/2014 #2
Moderador

Avatar de Chico3001

No lo hace por que el PIC no maneja numeros negativos... todo lo maneja en formato complemento a 2... asi que tendrias que convertirlo a ese formato para poder compararlo

7d = 0000 0111b -> 1111 1000b + 1b = 1111 1001b = F9h = 249d

compara contra 249 en decimal o F9 en hexadecimal y no deberias tener problema....

De wikipedia:

Una forma de hallar el opuesto de un número binario positivo en complemento a dos es comenzar por la derecha (el dígito menos significativo), copiando el número original (de derecha a izquierda) hasta encontrar el primer 1, después de haber copiado el 1, se niegan (complementan) los dígitos restantes (es decir, copia un 0 si aparece un 1, o un 1 si aparece un 0). Este método es mucho más rápido para las personas, pues no utiliza el complemento a uno en su conversión.1

Por ejemplo, el complemento a dos de «0011 11010» es «1100 00110»-

Otra forma es negar todos los dígitos (se halla el complemento a 1) y después sumar un 1 al resultado, viene a ser lo mismo que lo anteriormente explicado.

100001 ---> 011110 --> 011111
05/05/2014 #3


muchas gracias por la ayuda. La verdad me aclaraste el panorama. Saludos
06/05/2014 #4


Chico3001 dijo: Ver Mensaje
No lo hace por que el PIC no maneja numeros negativos... todo lo maneja en formato complemento a 2... asi que tendrias que convertirlo a ese formato para poder compararlo

7d = 0000 0111b -> 1111 1000b + 1b = 1111 1001b = F9h = 249d

compara contra 249 en decimal o F9 en hexadecimal y no deberias tener problema....

De wikipedia:
Mira lo probé así y no me anduvo el contador se pierde y me tira cualquier cosa.El mismo tiene que ir de un mínimo de -7 a un máximo de 7. No se como puedo implementar para que eso. El máximo es fácil establecerlo ya que es positivo pero el mínimo no se como.
06/05/2014 #5
Moderador

Avatar de Chico3001

pon el resto del programa...
06/05/2014 #6


la parte del bus i2c esta obviada , todavía esta en proceso
Archivos Adjuntos
Tipo de Archivo: txt audio.txt (13,7 KB (Kilobytes), 3 visitas)
06/05/2014 #7
Moderador

Avatar de Chico3001

Mmmm estas cargando 249 en W y despues revisas Z... el resultado de la instruccion siempre sera que Z = 0 por que le cargaste 249

Código:
		btfsc	incrementa		;comprueba el estado del pulsador
		goto	baja2			;se va a la etiqueta mencionada
		movlw	.7				;mueve el literal alregistro de trabajo
		subwf	graves,w		;resta los registros
		btfsc	STATUS,Z		;comprueba el estado del bit Z
		goto	baja2			;si es 1 se mueve a la etiqueta
		incf	graves			;si es 0 incrementa el contador
;		movf	graves,W	;movemos el registro "graves" al registro W
;		call	Tabla_bass	;convertimos dato en byte
		;call	envia_dato	;llamamos a la subrutina de envio de datos
		goto	ver2
		
baja2	movlw	.249
		btfss	STATUS,Z
		goto	decre2
		goto	sigue2
Que es lo que quieres hacer?
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.