Programa de leds en ensamblador (MPLAB) con PIC16F84A

Iniciado por Magiiq, 21 Mayo 2013, 18:47 PM

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

Magiiq

Hola Comunidad!
Me podrian ayudar con este programita, la verdad es que no se mucho de este lenguaje,lo que se tiene que hacer es lo siguiente:

1.- Ultilice RAX como pipn de control y como salida PORTB (RB0 - RB7) de modo que:

a) Si el bit 0 del PORTA = 1, Se encienden todos los bits del nibble alto (de RB4 a RB7)

b) Si el bit 0 del PORTA = 0, se encienden todos los bits del nibble bajo (de RB0 a RB3)

por favor espero puedan ayudarme, de antemano GRACIAS! C:

mr.blood


Magiiq

Gracias Mr.Blood !
la verdad casi no le entiendo, y no supe que modificar xD
mira el maestro nos dio este!

__CONFIG   _CP_OFF &  _WDT_OFF & _PWRTE_ON & _XT_OSC
LIST P=16F84A
INCLUDE <P16F84A.INC>

Numero   EQU   d'13'

      ORG      0               ; El programa comienza en la direccion 0.
Inicio
      bsf      STATUS,RP0         ; Acceso al banco 1.
      clrf   TRISB            ; Las lineas del puerto B se configuran como salida.
      movlw   b'00011111'         ; Las 5 lineas del puerto A se configuran como entrada.
      movwf   TRISA
      bcf      STATUS,RP0         ; Acceso al banco 0.
Principal
      movlw   Numero            ; Carga el numero a comparar.
      subwf   PORTA,W            ; (PORTA) - Numero --> (W)
      movlw   b'11110000'         ; Supone (PORTA) es menor.
      btfss   STATUS,C         ; ¿C=1?, ¿(W) positivo?, ¿(PORTA) >= Numero?.
      goto   ActivaSalida      ; No. C=0, por tanto (PORTA) < Numero.
      movlw   b'11111111'         ; Supone que son iguales.
      btfsc   STATUS,Z         ; ¿Z=0?, ¿son distintos?.
      goto   ActivaSalida      ; No. Son iguales ya que z = 1,
      movlw   b'01010101'      ; Si, por tanto (PORTA) > Numero.
      
ActivaSalida
      movwf   PORTB            ; Resultado se visualiza por el puerto de salida.
      goto   Principal         ; Crea un bucle cerrado e infinito.
      END


& lo que yo hice fue modificar solo los ActivaSalida!

__CONFIG   _CP_OFF &  _WDT_OFF & _PWRTE_ON & _XT_OSC
LIST P=16F84A
INCLUDE <P16F84A.INC>

Numero   EQU   d'13'

      ORG      0               ; El programa comienza en la direccion 0.
Inicio
      bsf      STATUS,RP0         ; Acceso al banco 1.
      clrf   TRISB            ; Las lineas del puerto B se configuran como salida.
      movlw   b'00011111'         ; Las 5 lineas del puerto A se configuran como entrada.
      movwf   TRISA
      bcf      STATUS,RP0         ; Acceso al banco 0.
Principal
      movlw   Numero            ; Carga el numero a comparar.
      subwf   PORTA,W            ; (PORTA) - Numero --> (W)
      movlw   b'11110000'         ; Supone (PORTA) es menor.
      btfss   STATUS,C         ; ¿C=1?, ¿(W) positivo?, ¿(PORTA) >= Numero?.
      goto   ActivaSalida      ; No. C=0, por tanto (PORTA) < Numero.
      movlw   b'11110000'         ; Supone que son iguales.
      btfsc   STATUS,Z         ; ¿Z=0?, ¿son distintos?.
      goto   ActivaSalida      ; No. Son iguales ya que z = 1,
      movlw   b'00001111'      ; Si, por tanto (PORTA) > Numero.
      
ActivaSalida
      movwf   PORTB            ; Resultado se visualiza por el puerto de salida.
      goto   Principal         ; Crea un bucle cerrado e infinito.
      END


esta bien ???
jaja es que de plano estoy en ceros en esto ! :SS