Foro de elhacker.net

Programación => Ejercicios => Mensaje iniciado por: Magiiq en 21 Mayo 2013, 18:47 pm



Título: Programa de leds en ensamblador (MPLAB) con PIC16F84A
Publicado por: Magiiq en 21 Mayo 2013, 18:47 pm
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:


Título: Re: Programa de leds en ensamblador (MPLAB) con PIC16F84A
Publicado por: mr.blood en 21 Mayo 2013, 18:57 pm
http://www.portalhacker.net/index.php/topic,155864.0.html

Ahí te dejo la base. Modifica el código de acuerdo a tus necesidades!

Sa1uDoS


Título: Re: Programa de leds en ensamblador (MPLAB) con PIC16F84A
Publicado por: Magiiq en 21 Mayo 2013, 19:15 pm
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