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