lunes, 2 de septiembre de 2013

Actividad N°5: Programación Elemental

Manejo de PORTS
Ejercicio 1
Por el Puerto B se obtiene el dato de las cinco líneas del Puerto A al que está conectado un array de interruptores. Por ejemplo, si por el Puerto A se introduce "---11001", por el Puerto B aparecerá "xxx11001" (el valor de las tres líneas superiores no importa).


;---------------------------------------------------------------


    List p=PIC16F84A
    Include <p16f84a.inc>
    __Config    _XT_OSC    & _WDT_OFF & _PWRTE_ON & _CP_OFF      
    ERRORLEVEL -302
   
;---------------------------------------------------------------  
 

#DEFINE bank0  bcf STATUS, RP0
#DEFINE bank1  bsf STATUS, RP0

;---------------------------------------------------------------
    ORG        0x000
    goto    Main
   
    ORG        0x004
    retfie
   
;---------------------------------------------------------------  

Main

    bank1
    clrf    TRISB
    movlw    0x1F
    movwf    TRISA
    bank0
    clrf    PORTB
   
;---------------------------------------------------------------  
   
Loop
    movf    PORTA, W
    movwf    PORTB
    goto Loop
;---------------------------------------------------------------
END 




Funciones Matemáticas
Ejercicio 2
Por el Puerto B se obtiene el dato de las cinco líneas del Puerto A, al que está conectado un array de interruptores, sumándole el valor de una constante, por ejemplo 74.
Es decir: (PORTB)=(PORTA)+Constante


;---------------------------------------------------------------


    List p=PIC16F84A
    Include <p16f84a.inc>
    __Config    _XT_OSC    & _WDT_OFF & _PWRTE_ON & _CP_OFF       
    ERRORLEVEL -302
   
;---------------------------------------------------------------   
   
#DEFINE bank0  bcf STATUS, RP0
#DEFINE bank1  bsf STATUS, RP0

;---------------------------------------------------------------
    ORG        0x000
    goto    Main
   
    ORG        0x004
    retfie
   
;---------------------------------------------------------------   

Main

    bank1
    clrf    TRISB
    movlw    0x1F
    movwf    TRISA
    bank0
    clrf    PORTB
   
;---------------------------------------------------------------   
   
Loop
    movf    PORTA, W
    addlw    .74
    movwf    PORTB
    goto Loop
;---------------------------------------------------------------
    END


Ejercicio 3
Por el Puerto B se obtiene el dato del Puerto A multiplicado por 2.
Es decir: (PORTB)=2(PORTA)=(PORTA)+(PORT A).


;---------------------------------------------------------------


    List p=PIC16F84A
    Include <p16f84a.inc>
    __Config    _XT_OSC    & _WDT_OFF & _PWRTE_ON & _CP_OFF      
    ERRORLEVEL -302
  
;---------------------------------------------------------------  
  
#DEFINE bank0  bcf STATUS, RP0
#DEFINE bank1  bsf STATUS, RP0

;---------------------------------------------------------------
    ORG        0x000
    goto    Main
  
    ORG        0x004
    retfie
  
;---------------------------------------------------------------  

Main

    bank1
    clrf    TRISB
    movlw    0x1F
    movwf    TRISA
    bank0
    clrf    PORTB
  
;---------------------------------------------------------------  
  
Loop
    movf    PORTA, W
    addwf    PORTA, W
    movwf    PORTB
    goto Loop
;---------------------------------------------------------------
    END



Máscaras
Ejercicio 4
Por el Puerto B obtiene el dato del Puerto A, pero en la salida los bits pares se fijan siempre a "1". El orden de los bits será "b7 b6 b5 b4 b3 b2 b1 b0", siendo los pares el b6, b4, b2 y el b0.
Por ejemplo, si por el Puerto A se introduce el dato b'---01100', por el Puerto B se visualiza  b'01011101'. Observar que los bits pares están a "1" (efectivamente: Puerto B = b'x1x1x1x1') y los impares permanecen con el dato del puerto de entrada (efectivamente: Puerto A = b'---x1x0x' y Puerto B = b'xxxx1x0x').


;---------------------------------------------------------------


    List p=PIC16F84A
    Include <p16f84a.inc>
    __Config    _XT_OSC    & _WDT_OFF & _PWRTE_ON & _CP_OFF      
    ERRORLEVEL -302
  
;---------------------------------------------------------------  
  
#DEFINE bank0  bcf STATUS, RP0
#DEFINE bank1  bsf STATUS, RP0

;---------------------------------------------------------------
    ORG        0x000
    goto    Main
  
    ORG        0x004
    retfie
  
;---------------------------------------------------------------  

Main
    bank1
    clrf    TRISB
    movlw    0x1F
    movwf    TRISA
    bank0
Loop
    movf    PORTA,W
    iorlw    0x55
    movwf    PORTB
    goto    Loop;---------------------------------------------------------------
    END
Ejercicio 5 
Por el Puerto B obtiene el dato del Puerto A, pero en las salida los bits impares se fijan siempre a "0". El orden de los bits será "b7 b6 b5 b4 b3 b2 b1 b0", siendo los impares el b7, b5, b3 y b1.
Por ejemplo si por el Puerto A se introduce el dato b'---01100', por el Puerto B se visualiza  b'00000100'. Observar que los bits impares están a "0" (efectivamente: Puerto B = b'0x0x0x0x') y los pares permanecen con el dato del puerto de entrada (efectivamente: Puerto A = b'---0x1x0' y Puerto B = b'---0x1x0').


 ;-----------------------------------------------------------------------------------------------------------
    LIST        p=PIC16F84A
    INCLUDE    <p16F84A.inc>
    __CONFIG    _XT_OSC & _WDT_OFF & _CP_OFF & _PWRTE_ON
    ERRORLEVEL    -302
;-----------------------------------------------------------------------------------------------------------
    ORG        0x000
    goto    Main
    ORG        0x004
    retfie
;-----------------------------------------------------------------------------------------------------------
;Definiciones
;-----------------------------------------------------------------------------------------------------------
#DEFINE    bank0    bcf    STATUS,RP0
#DEFINE    bank1    bsf    STATUS,RP0
;-----------------------------------------------------------------------------------------------------------
Main
    bank1
    clrf    TRISB
    movlw    0x1F
    movwf    TRISA
    bank0
Loop
    movf    PORTA,W
    andlw    0x55
    movwf    PORTB
    goto    Loop  
;-----------------------------------------------------------------------------------------------------------
    END


Ejercicio 6
Por el Puerto B se obtiene el dato del Puerto A invirtiendo los bits pares. Los impares se dejan como en la entrada. El orden de los bits será "b7 b6 b5 b4 b3 b2 b1 b0", siendo los pares el b6, b4, b2 y el b0.
Por ejemplo, si por el Puerto A se introduce "---11001", por el Puerto B aparecerá "xxx01100".  Observar que los bits pares están invertidos (efectivamente: Puerto A = "---1x0x1" y Puerto B = "xxxx0x1x0") y en los impares permanece el dato del puerto de entrada (efectivamente: Puerto A = "---x1x0x' y Puerto B = b'xxxx1x0x').  


 ;-----------------------------------------------------------------------------------------------------------
    LIST        p=PIC16F84A
    INCLUDE    <P16F84A.INC>
    __CONFIG    _XT_OSC & _CP_OFF & _WDT_OFF & _PWRTE_ON
    ERRORLEVEL    -302
;-----------------------------------------------------------------------------------------------------------
    ORG    0X000
    goto    Main
    ORG    0x004
    retfie
;-----------------------------------------------------------------------------------------------------------
;Definiciones
;-----------------------------------------------------------------------------------------------------------
#DEFINE    bank0    bcf    STATUS,RP0
#DEFINE    bank1    bsf    STATUS,RP0
;-----------------------------------------------------------------------------------------------------------
Main
    bank1
    clrf    TRISB
    movlw    0x1F
    movwf    TRISA
    bank0
Loop
    movf    PORTA,W
    xorlw    0x55
    movwf    PORTB
    goto    Loop
  
;-----------------------------------------------------------------------------------------------------------
    END


Ejercicio 7
Por el Puerto B se obtiene el dato del Puerto A invertidos los unos y ceros. Por ejemplo, si por el Puerto A se introduce "---11001", por el Puerto B aparecerá "xxx00110" (no importa el estado de los tres bits superiores del Puerto B).


 ;-----------------------------------------------------------------------------------------------------------
    LIST        p=PIC16F84A
    INCLUDE    <P16F84A.INC>
    __CONFIG    _XT_OSC & _CP_OFF & _WDT_OFF & _PWRTE_ON
    ERRORLEVEL    -302
;-----------------------------------------------------------------------------------------------------------
    ORG    0X000
    goto    Main
    ORG    0x004
    retfie
;-----------------------------------------------------------------------------------------------------------
;Definiciones
;-----------------------------------------------------------------------------------------------------------
#DEFINE    bank0    bcf    STATUS,RP0
#DEFINE    bank1    bsf    STATUS,RP0
;-----------------------------------------------------------------------------------------------------------
Main
    bank1
    clrf    TRISB
    movlw    0x1F
    movwf    TRISA
    bank0
Loop
    movf    PORTA,F
    comf    PORTA,W
    movwf    PORTB
    goto    Loop
   
;-----------------------------------------------------------------------------------------------------------
    END


Ejercicio 8
Por el Puerto B obtiene el dato del Puerto A intercambiando los nibbles alto y bajo. Por ejemplo, si por el Puerto A se introduce "---11001" por el Puerto B aparecerá "1001xxx1".


 ;-----------------------------------------------------------------------------------------------------------
    LIST        p=PIC16F84A
    INCLUDE    <P16F84A.INC>
    __CONFIG    _XT_OSC & _CP_OFF & _WDT_OFF & _PWRTE_ON
    ERRORLEVEL    -302
;-----------------------------------------------------------------------------------------------------------
    ORG    0X000
    goto    Main
    ORG    0x004
    retfie
;-----------------------------------------------------------------------------------------------------------
;Definiciones
;-----------------------------------------------------------------------------------------------------------
#DEFINE    bank0    bcf    STATUS,RP0
#DEFINE    bank1    bsf    STATUS,RP0
;-----------------------------------------------------------------------------------------------------------
Main
    bank1
    clrf    TRISB
    movlw    0x1F
    movwf    TRISA
    bank0
Loop
    movf    PORTA,F
    swapf    PORTA,W
    movwf    PORTB
    goto    Loop
  
;-----------------------------------------------------------------------------------------------------------
    END



  

 

No hay comentarios.:

Publicar un comentario