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

Temas similares

12/01/2011 #1


Comparar dos registros Mplab
Hola compañeros, estoy realizando un proyecto en ensamblador con mplab y necesito hacer comparaciones entre dos registros, tambien necesito hacer comparaciones entre constantes y registros para las cuales no tengo ningun problema. Cuando realizo las comparaciones entre constantes y registros hago lo siguiente:

movlw b'11110000' ;muevo la constante a W
xorwf registro,w ;si son iguales status,z =1 si no, z=0
btfss status,z ; testeo z para ver su estado
goto diferente
goto igual

hasta aqui todo bien, pero cuando se necesito comparar registro con registro, esto no funcionaria ya que en el datasheet en la instruccion xorwf ó subwf tiene una restriccion que es: 0<=f<=127, lo que quiere decir que el registro no debe ser mayor a 127 y normalmente uso registros que se incrementan ó cambian a datos mayores a 127.

espero estar equivocado y que alguien me pueda ayudar. gracias de antemano. saludos.
12/01/2011 #2

Avatar de fdesergio

Podes hacerlos siplemente restando los 2 registros, si Z=0 entonces son diferentes , si Z=1 entonces iguales, chauuuuuuu

de todas maneras en la pagina de Microchip hay notas de aplicacion para comparar 2 regs, y determinar si es igual, mayor o menor que, chauuuuuuuuuu
12/01/2011 #3


ok muchas gracias por responder, tambien con subwf tiene la misma restriccion donde 0<=f<=127, he buscado en microchip pero no he encontrado esas notas de aplicacion. alguna liga que me puedan pasar.

ya probé con subwf y xorwf pero me retorna datos erroneos.

muchas gracias.
12/01/2011 #4

Avatar de fdesergio

No veo porque tenga esa restriccion, si en un reg se puede restar por ejemplo 220 de 240 , donde esta eso de que hablas mostranos a ver que es, Ok?
12/01/2011 #5


ok en la pagina No. 165 seccion 15.0 INSTRUCTION SET SUMMARY. anexo un dato adjunto donde se muestra la restriccion.

saludos


igual para subwf adjunto su imgen
Archivos Adjuntos
Tipo de Archivo: rar xorwf register.rar (7,6 KB (Kilobytes), 142 visitas)
Tipo de Archivo: rar subwf register.rar (6,2 KB (Kilobytes), 100 visitas)
12/01/2011 #6

Avatar de gzaloprgm

Lo que dice F es el índice del registro, no el valor del registro en sí.

Los registros son de 8 bits, por lo que pueden representar datos entre 0 y 255.

La resta anda bien con cualquier numero que entre ahí.
13/01/2011 #7

Avatar de Meta

Hola:

Código:
;**********************************************************************
;                      AqueronteBlog@gmail.com                        *
;                                                                     *
;   Este archivo es propiedad intelectual del blog Aqueronte,         *
;   cuya dirección web, es la siguiente:                              *
;                                                                     *
;                   http://unbarquero.blogspot.com/                   *
;                                                                     *
;   Se permite cualquier modificación del archivo siempre y cuando    *
;   se mantenga la autoría del autor.                                 *
;                                                                     *
;   El autor no se responsabiliza de las consecuencias que pueda      *
;   ocasionar éste código debido a un uso inadecuado del mismo.       *
;**********************************************************************
;                                                                     *
;    Filename:      Ejemplo2.asm                                      *
;    Date:          6-Octubre-08                                      *
;    File Version:  vs0.0                                             *
;                                                                     *
;    Author:        Manuel Caballero                                  *
;    Company:       Hades                                             *
;                                                                     *
;                                                                     *
;**********************************************************************
;                                                                     *
;    Files Required: P16F628A.INC                                     *
;                                                                     *
;**********************************************************************
;                                                                     *
;    Notes: Manejar instrucciones de operaciones.                     *
;                                                                     *
;**********************************************************************

   list p=16F628A ; Directiva para definir el procesador
   #include < p16F628A.inc >       ; Registros especificas del procesador

   __CONFIG   _BOREN_OFF & _CP_OFF & _DATA_CP_OFF & _PWRTE_ON & _WDT_OFF & _LVP_OFF & _MCLRE_ON & _INTOSC_OSC_NOCLKOUT

; _BOREN_OFF:               Reset por Brown-out DESACTIVADO.
; _CP_OFF:                  Protección de código DESACTIVADO.
; _DATA_CP_OFF:             Protección de datos DESACTIVADO.
; _PWRTE_ON:                Retraso al reset ACTIVADO.
; _WDT_OFF:                 Watchdog DESACTIVADO.
; _LVP_OFF:                 Programación en bajo voltaje DESACTIVADO.
; _MCLRE_ON:                Pin de reset externo ACTIVADO.
; _INTOSC_OSC_NOCLKOUT:     Oscilador interno sin salida CLK.
;***** DEFINICIÓN DE VARIABLES
       CBLOCK 0x20   ; Inicio dirección memoria de datos del Banco 0
       Numero
      ENDC

;**********************************************************************
       ORG     0x000  ; Inicio de código
       bsf STATUS,RP0 ; Banco 1
       bsf  PCON,OSCF ; Oscilador interno a 4MHz
       bcf STATUS,RP0 ; Banco 0
  goto Inicio      ; Salta a programa principal

       ORG     0x0004      ; Vector de Interrupción; El vector de interrupción se encuentra en la dirección 0x0004
; En este ejemplo no se usará interrupciones.
        retfie

Inicio
  movlw   0x03       ; 3 -> (W) 
       movwf   Numero ; (W) -> Numero 

Bucle_Dec
       decfsz Numero,F ; --Numero, Salta si Numero = 0
       goto Bucle_Dec ; Si Numero != 0 vuelve a Bucle_Dec

       subwf Numero,F ; Numero = Numero - W

Bucle_Inc
      incfsz Numero,F ; ++Numero, Salta si Numero = 0
       goto Bucle_Inc   ; Si Numero != 0 vuelve a Bucle_Inc

       goto    Inicio ; Vuelve a Inicio

       END ; directiva 'fin de programa'
Para la realización de este programa, se ha empleado una variable definida en memoria RAM. Para tal propósito, se ha usado la instrucción:

cblock---endc

En este caso, el PIC 16F628A comienza la dirección de memoria de datos en la dirección 0x20, se declarará la variable Numero.

El propósito de este programa es familiarizarse con las instrucciones de programación en lenguaje ensamblador, donde se usará instrucciones que serán comunes en nuestros códigos.

En este programa se muestra como se utilizan las instrucciones de decremento e incremento con posibilidad de salto y también se muestra como usar la instrucción de resta entre un registro y W.


Para ver el resultado, compilamos el código y seleccionamos el MPLAB SIM para poder simularlo.

Abrimos la ventana de Watch y seleccionamos en la categoría de Symbol la variable definida como Numero, y el la categoría de SFR, el registro WREG.

Simulamos el código paso a paso.

Se puede apreciar como el valor de la constante se almacena en el registro de trabajo W, después se iniciará la variable Numero con el valor contenido en W, y a partir de ahí, el programa decrementa la variable Numero hasta que sea cero su valor, posteriormente, se incrementara dicha variable hasta que sea cero su valor.


http://unbarquero.blogspot.com/2008/...ejemplo-2.html

http://unbarquero.blogspot.com/2008/07/subwf.html

Saludo.
13/01/2011 #8


ok esta bien, muchas gracias por su ayuda y amabilidad. me ha servido mucho esa informacion.
saludos.
15/12/2013 #9


comparar dos registros mplab
He intentando comparar valores de distintas formas, para que salten a subrutinas como lo hace la instrucción if pero ninguna me ha funcionado;ninguno de los programas salta donde yo quiero, estoy usando el mplab, estos son los códigos que he usado:

Código:
programa1:
    movlw     04H
    movwf     cnt
    movlw     05H
    movwf     cn

    movf     cnt,w
    subwf     cn,W
    btfss     STATUS,C
    goto    carry_es0 
    goto     carry_es1
carry_es0
decf cnt
return

carry_es1
incf cnt
return

;**********************************************
programa2:

movlw 26h
movwf cnt

MOVLW 26H; carga el acumulador con el valor a comparar.
XORWf cnt,w ; compara el acumulador con NUMERO.
BTFSS STATUS, Z ; salta la instrucción siguiente si XOR = 0.
GOTO DISTINTO ; salta a DISTINTO si XOR no es 0.
GOTO IGUAL ; salta a IGUAL.

IGUAL:
decf cnt

DISTINTO:
incf cnt
07/01/2014 #10


Intenta revisando el estado del bit Z (zero) y recuerda declarar tus variables en la seccion de memoria adecuada (CBLOCK).

Código:
        MOVF	REGISTRO_A,W	;REGISTRO 'A' A COMPARAR, ES RESTADO DEL REGISTRO 'B',
	SUBWF	REGISTRO_B,0	;EL RESULTADO SE GUARDA EN W, PARA NO AFECTAR NINGUNO DE LOS REGISTROS
	BTFSS	STATUS,Z	;REVISAMOS EL ESTADO DEL BIT Z (ZERO), SI EL RESULTADO ES CERO
	GOTO	NO_IGUALES	;QUIERE DECIR QUE AMBOS REGISTROS SON IGUALES
IGUALES
	;PON TU RUTINA DE IGUALES
	;...
	;...
	;TERMINA TU RUTINA CON UN 'RETURN' PARA FINALIZAR ESTA RUTINA Y REGRESAR UN VALOR
	;O CON UN 'GOTO' PARA IR A OTRA RUTINA

NO_IGUALES
	;PON TU RUTINA DE NO IGUALES
	;...
	;...
	;TERMINA TU RUTINA CON UN 'RETURN' PARA FINALIZAR ESTA RUTINA Y REGRESAR UN VALOR
	;O CON UN 'GOTO' PARA IR A OTRA RUTINA
17/11/2014 #11


LOL amigos yo tambien tenia el mismo problema pero era porqué usaba MOVLW para cargar un registro en W y por esos no me lo leía bien, aqui dejo un codigo que si me funciono para comparar dos registros:

MOVF CONTAR1,W; MUEVO CONTAR1 A W
XORWF CONTAR2,0 ;USO XORWF PARA HACER UNA OPERACION XOR SOBRE CONTAR2 Y W
BTFSC STATUS,2 ; EL RESULTADO DEL XOR SE GUARDA EN Z QUE ES EL BIT 2 DE STATUS
GOTO IGUAL
GOTO DIFERENTE
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.