Autor Tema: Ayuda con una comparacion en el puerto B pic16f84  (Leído 2741 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado darck_khronos

  • PIC18
  • ****
  • Mensajes: 493
Ayuda con una comparacion en el puerto B pic16f84
« 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

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Ayuda con una comparacion en el puerto B pic16f84
« Respuesta #1 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.
No contesto mensajes privados, las consultas en el foro


 

anything