TODOPIC

Microcontroladores PIC => Almacén del Assembler => Mensaje iniciado por: darck_khronos en 02 de Marzo de 2009, 03:29:39

Título: Ayuda con una comparacion en el puerto B pic16f84
Publicado por: darck_khronos en 02 de Marzo de 2009, 03:29:39
Disculpen soy nuevo en esto de mplab.

Estoy programando en el pic 16f84 y me dejaron hacer un comparador:

comprar portb los 4 Bist Mas significativos con los 4 menos isgnificativos

Y dar un resultado en port A

Si los BMS son mayores se prenden los pares
Si los BMS son menores se prenden los nones
Si los BMS son iguales se prende solo del port A el bms
Título: Re: Ayuda con una comparacion en el puerto B pic16f84
Publicado por: Suky en 02 de Marzo de 2009, 14:28:04
 Preparar los datos a comparar. Guardo el nible bajo de PORTB en LSB y el nible alto en MSB:

Código: ASM
  1. movf                    PORTB,w         ; por ej. si PORTB = 0xA5
  2.                 movwf                   LSB                     ; LSB = 0xA5
  3.                 swapf                   LSB,w           ; W = 0x5A
  4.                 movwf                   MSB                     ; MSB = 0x5A
  5.                 movlw                   0x0F            ; Mascara para borrar nible alto.
  6.                 andwf                   LSB,1           ; LSB = 0x05
  7.                 andwf                   MSB,1           ; MSB = 0x0A

Hacer la comparacion:
Primero comparo si son iguales. Si no lo son determino cual es mayor.

Código: ASM
  1. movf                    MSB,w           ;si el reg msb = lsb
  2.                 xorwf                   LSB,w
  3.                 btfsc                   STATUS,Z
  4.                 goto                    MSB_igual_a_LSB
  5. ; No son iguales, determino cual es el mayor.
  6.                 movf                    MSB,w       ;si el reg msb > lsb
  7.                 subwf                   LCB,w       ;si el reg msb > lsb
  8.                 btfsc                   STATUS,C
  9.                 goto                    MSB_menor_a_LSB
  10.                 goto                    MSB_mayor_a_LSB

esa es mas o menos la idea.