You are on page 1of 11

Practica 1

1.- Por los leds conectados al Puerto B visualiza el valor de una constante, por ejemplo el
numero binario b’01010101’.
PROGRAMA
LIST P = 16F84A
INCLUDE <P16F84A.INC>
NUMERO EQU 0X0C
ORG 0
GOTO INICIO
ORG 4
INICIO
BSF STATUS,RP0
CLRF TRISB
BCF STATUS,RP0
PRINCIPAL
MOVLW B’01010101’
MOVWF NUMERO
MOVWF PORTB
END
2.- Los LEDs conectados al nible bajo del Puerto B se apagan y los conectados al nible alto se
encienden.
PROGRAMA
LIST P = 16F84A
INCLUDE <P16F84A.INC>
VARIABLE EQU 0X0C
ORG 0
GOTO INICIO
ORG 4
INICIO
BSF STATUS,RP0
CLRF TRISB
BCF STATUS,RP0
PRINCIPAL
MOVLW B’11110000’
MOVWF VARIABLE
MOVWF PORTB
END
3.- Por el Puerto B se obtiene el ato de las cinco líneas del Puerto A al que esta conectado un
array de interruptores. Por ejemplo, si por el Puerto A se introduce “xxx11001”, por el
Puerto B aparcera “xx11001” (el valor de las tres líneas superiores no importa).
PROGRAMA
LIST P = 16F84A
INCLUDE <P16F84A.INC>
ORG 0
GOTO INICIO
ORG 4
INICIO
BSF STATUS,RP0
CLRF TRISB
MOVLW B’00011111’
MOVWF TRISA
BCF STATUS,RP0
PRINCIPAL
MOVWF PORTA
MOVWF PORTB
GOTO PRINCIPAL
END
4.- El Puerto B, que actúa como salida es controlada por el bit 0 del Puerto A, que actua
como entrada. De manera tal que:
- Si el bit 0 del PORTA es “1”, se encienden todos los LEDs de salida.
- Si el bit 0 del PORTB es “0”, se encienden los LEDs del nible alto y se apagan los bajos.
PORGRAMA
LIST P = 16F84A
INCLUDE <P16F84A.INC>
ORG 0
GOTO INICIO
ORG 5
INICIO
BSF STATUS,RP0
CLRF TRISB
MOVLW B’00011111’
MOVWF TRISA
BCF STATUS,RP0
PRINCIPAL
BTFSC PORTA,0
GOTO UNO
GOTO CERO
UNO
MOVLW B’1111 1111’
MOVWF PORTB
GOTO PRINCIPAL
CERO
MOVLW B’11110000’
MOVWF PORTB
GOTO PRINCIPAL
END
5.- Compara el dato del puerto de entrada PORTA y un “Numero”(por ejemplo el 13):
- Si (PORTA) = Numero, se enciende todos los LEDs de salida.
- Si (PORTB) = Numero no son iguales, se activan los LEDs pares de salida y apagan
impares.
PORGRAMA
LIST P = 16F84A
INCLUDE <P16F84A.INC>
CONST EQU D’13’
ORG 0
GOTO INICIO
ORG 5
INICIO
BSF STATUS,RP0
CLRF TRISB
MOVLW B’00011111’
MOVWF TRISA
BCF STATUS,RP0
BUCLE
MOVLW CONST
SUBWF PORTA,W
MOVLW B’1111 1111’
GOTO SALIDA
MOVLW B’01010101’
SALIDA
MOVWF PORTB
GOTO BUCLE
END
6.- Compara el dato introducido por el Puerto A que actua como entrada con un “Numero”:
- Si (PORTA) es mayor o igual que “Numero” se encienden todos los LEDs de salida
- Si (PORTA) es menor que “Numero” se activan los LEDs pares de salida.
PORGRAMA
LIST P = 16F84A
INCLUDE <P16F84A.INC>
CONST EQU D’13’
ORG 0
GOTO INICIO
ORG 5
INICIO
BSF STATUS,RP0
CLRF TRISB
MOVLW B’00011111’
MOVWF TRISA
BCF STATUS,RP0
BUCLE
MOVLW CONST
SUBWF PORTA,W
MOVLW B’1111 1111’
GOTO SALIDA
MOVLW B’10101010’
SALIDA
MOVWF PORTB
GOTO BUCLE
END
7.- Compara el dato del puerto de entrada PORTA con un “Numero” (por ejemplo el 13):
- Si (PORTA) es mayor que “Numero” se encienden todos los LEDs de salida.
- Si (PORTA) es menor o igual que “Numero”se activan los LEDs pares de salida.
PORGRAMA
LIST P = 16F84A
INCLUDE <P16F84A.INC>
CONST EQU D’13’
ORG 0
GOTO INICIO
ORG 5
INICIO
BSF STATUS,RP0
CLRF TRISB
MOVLW B’00011111’
MOVWF TRISA
BCF STATUS,RP0
BUCLE
MOVLW CONST
SUBWF PORTA,W
MOVLW B’1111 1111’
BTFSC STATUS,C
GOTO SALIDA
MOVLW B’01010101’
SALIDA
MOVWF PORTB
GOTO BUCLE
END
8.- Compara el dato del puerto de entrada PORTA con un “Numero” tres posibilidades:
- Si (PORTA) = Numero se encienden todos los LEDs de salida.
- Si (PORTA) > Numero se activan los LEDs pares de salida.
- Si (PORTA) < Numero se encienden los LEDs del nible alto y se apagan los del bajo.
Hay que destacar que al no haber instrucciones de comparación, estas se realizan mediante
restas.
PORGRAMA
LIST P = 16F84A
INCLUDE <P16F84A.INC>
CONST EQU D’13’
ORG 0
GOTO INICIO
ORG 5
INICIO
BSF STATUS,RP0
CLRF TRISB
MOVLW B’00111111’
MOVWF TRISA
BCF STATUS,RP0
BUCLE
MOVLW CONST
SUBWF PORTA,W
MOVLW B’1111 0000’
BTFSC STATUS,C
GOTO SALIDA
MOVLW B’11111111’
BTFSC STATUS,Z
GOTO SALIDA
MOVLW B’01010101’
SALIDA
MOVWF PORTB
GOTO BUCLE
END
9.- Implementar una tabla de la verdad mediante el manejo de tablas grabadas en ROM. Por
ejemplo, la tabla será de tres entradas y 6 salidas tal como la siguiente:
TABLA

C B C S5 S4 S3 S2 S1 S0
0 0 0 0 0 1 0 1 0
0 0 1 0 0 1 0 0 1
0 1 0 1 0 0 0 1 1
0 1 1 0 0 1 1 1 1
1 0 0 1 0 0 0 0 0
1 0 1 0 0 0 1 1 1
1 1 0 0 1 0 1 1 1
1 1 1 1 1 1 1 1 1

Las entradas C,B,A se conectaran a las líneas del puerto A: RA2 (C), RA1 (B), RA0 (A).
Las salidas se obtienen en el puerto B:
RB5 (S5), RB4 (S4), RB3 (S3), RB2 (S2), RB1 (S1) y RB0 (S0).
PORGRAMA
LIST P = 16F84A
INCLUDE <P16F84A.INC>
ORG 0
GOTO INICIO
ORG 5
INICIO BSF STATUS,RP0
CLRF TRISB
MOVLW B’00011111’
MOVWF TRISA
BCF STATUS,RP0
PRINCIPAL MOVF PORTA,W
ANDLW B’00000111’
CALL TABLA DE VERDAD
MOVWF PORTB
GOTO PRINCIPAL
TABLA DE VERDAD ADDWF PCL,F
RETLW B’00001010’
RETLW B’00001001’
RETLW B’10000011’
RETLW B’00001111’
RETLW B’00100000’
RETLW B’00000111’
RETLW B’00010111’
RETLW B’00111111’
END

Practica 2
ELABORAR LAS SIGUIENTES PROGRAMAS EN LENGUAJE ASSEMBLER PARA EL PIC 16C84
1.- Sumar el binario 00FE y 001B. Guardar el resultado en 0x10.
PROGRAMA
LIST P = 16F84A
INCLUDE <P16F84A.INC>
RESULTADO EQU OX10
NUM1 EQU OXOD
NUM2 EQU OXOC
ORG 0
GOTO INICIO
ORG 5
INICIO MOVLW B’11111110’
MOVWF NUMI
MOVLW B’OOO11011’
MOVWF NUM2
ADDWF NUM1,W
MOVWF RESULTADO
END
2.- Restar dos números binarios y almacenar el resultado en la dirección 0x20
PROGRAMA
LIST P = 16F84A
INCLUDE <P16F84A.INC>
RESULTADO EQU 0X20
NUM1 EQU 0X0D
NUM2 EQU 0X0C
ORG 0
GOTO INICIO
ORG 5
INICIO MOVLW B’0000 1001’
MOVWF NUM1
MOVLW B’0000 0011’
MOVWF NUM2
SUBWF NUM1,W
MOVWF RESULTADO
END
3.- Decrementar el valor 20 ocho veces y almacenar en la dirección 0x2C.
PROGRAMA
LIST P = 16F84A
INCLUDE <P16F84A.INC>
NUM EQU 0X2C
ORG 0
GOTO INICIO
ORG 5
INICIO BSF STATUS,RP0
BCF PORTB,5
BCF STATUS,RP0

SIGUE MOVLW 0X14


MOVWF NUM
PRINCIPAL DECF NUM,0
MOVWF NUM
SUBLW 0X08
BTFSS STATUS,2
GOTO PRINCIPAL
MOVWF NUM
BSF PORTB,5
GOTO SIGUE
END
4.- Realizar un decrementador de 250 a 20 y que al llegar a 20 entre en un bucle no operativo
PROGRAMA
LIST P = 16F84A
INCLUDE <P16F84A.INC>
DECRE EQU 0X0D
ORG 0
GOTO INICIO
ORG 5
INICIO MOVLW 0XFA
MOVWF DECRE
REPITE MOVWF DECRE
DECFSZ DECRE,W
GOTO REPITE
BSF PORTB,5
TABLA GOTO TABLA
END
5.- Que genere la serie de FIBONACI en sus primeros 11 números. Usar como datos iniciales
el 0 y 1. Los números generados deben verse en la PUERTA B donde se tienen conectados
diodos led.

PROGRAMA
LIST P = 16F84A
INCLUDE <P16F84A.INC>
NUM1 EQU 0X0D
NUM2 EQU 0X0E
SUMA EQU 0X0C
ORG 0
GOTO INICIO
ORG 5
INICIO BSF STATUS,RP0
CLRF PORTB
BCF STATUS,RP0
BUCLE MOVLW 0X00
MOVWF NUM1
MOVWF PORTB
MOVLW 0X01
MOVWF NUM2
MOVWF PORTB
BUCLE1 MOVWF NUM2
ADDWF NUM1,W
MOVWF SUMA
BTFSC STATUS,B
GOTO FIN
MOVWF PORTB
MOVF NUM2,W
MOVWF NUM1
MOVF SUMA,W
GOTO BUCLE1
FIN MOVFW NUM2
MOVWF PORTB
END
6.- Que encienda los leds del PUERTO B en forma secuencial uno a uno, comenzando por el
bit 7 y seguidamente hasta el 0, luego que apague todos los leds y se repita indefinidamente
el ciclo.
PROGRAMA
LIST P = 16F84A
INCLUDE <P16F84A.INC>
ORG 0
GOTO INICIO
ORG 5
INICIO BSF STATUS,RP0
CLRF PORTB
MOVLW 0X07
MOVWF OPTION_REG
BCF STATUS, RP0
CICLO MOVLW B’10000000’
MOVWF PORTB
MOVLW B’01000000’
MOVWF PORTB
MOVLW B’00100000’
MOVWF PORTB
MOVLW B’00010000’
MOVWF PORTB
MOVLW B’00001000’
MOVWF PORTB
MOVLW B’00000100’
MOVWF PORTB
MOVLW B’00000010’
MOVWF PORTB
MOVLW B’00000001’
MOVWF PORTB
MOVLW B’00000000’
MOVWF PORTB
GOTO CICLO
END
7.- Por el PUERTO B se obtiene el dato del PUERTO A multiplicado por 2, es necesario poner 5
switches en todos los pines del PUERTO A y diodos leds en las líneas del PUERTO B.
PROGRAMA
LIST P = 16F84A
INCLUDE <P16F84A.INC>
DATO EQU 0X0C
ORG 0
GOTO INICIO
ORG 5
INICIO BSF STATUS,RP0
MOVLW 0XFF
MOVWF PORTA
CLRF PORTB
BCF STATUS,RP0
CICLO MOVF PORTA,W
MOVWF DATO
RLF DATO,W
MOVWF PORTB
GOTO CICLO
END
8.- Se tiene el No.0.3h en el registro 0Ch y el No.FFh en el registro 0Dh. Mientras el No. En el
registro 0Ch se va incrementando de una unidad en una unidad. El programa debe detenerse
en un bucle infinito encendiendo todos los leds conectados al puerto A cuando ambos Nos
coincidan (el uno que va incrementándose y el otro que va decrementandose ).
PROGRAMA
LIST P = 16F84A
INCLUDE <P16F84A.INC>
NUM1 EQU 0X0C
NUM2 EQU 0X0D
ORG 0
GOTO INICIO
ORG 5
INICIO BSF STATUS,RP0
MOVLW B’00000000’
MOVWF PORTA
BCF STATUS,RP0
CLRF PORTA
BUCLE MOVLW 0X03
MOVWF NUM1
MOVLW 0X0A
MOVWF NUM2
BUCLE1 INCF NUM1,F
DECF NUM2,F
MOVWF NUM2
SUBWF NUM1,W
BTFSS STATUS,C
GOTO BUCLE1
MOVLW B’11111111’
MOVWF PORTA
REPITE GOTO REPITE
END
9.-
INICIO BSF STATUS,RP0
CLRF TRISB
BCF STATUS,RP0
MOVLW D'127'
MOVWF CONTADOR
MOVLW D'0'
MOVWF DATO
MOVLW D'2';
MOVWF INCREMENTO
PRINCIPAL MOVF DATO,W
MOVWF PORTB
ADDWF INCREMENTO,W
MOVWF DATO
DECFSZ CONTADOR,F
GOTO PRINCIPAL
BUCLE_INFINITO
GOTO BUCLE_INFINITO
END

10.-

11.-
LIST P=16F84A
INCLUDE <P16F84A.INC>
CONTADOR EQU 0X0C
DATO EQU 0X0D
INCREMENTO EQU 0X0F
ORG 0
INICIO BSF STATUS,RP0
CLRF TRISB
BCF TRISA,RA0
BCF STATUS,RP0
MOVLW D'5'
MOVWF CONTADOR
MOVLW D'0'
MOVWF DATO
MOVLW D'2';
MOVWF INCREMENTO
PRINCIPAL MOVF DATO,W
MOVWF PORTB
ADDWF INCREMENTO,W
MOVWF DATO
SUBLW D'102'
BTFSC STATUS,Z
GOTO YAES100
GOTO PRINCIPAL
YAES100
BSF PORTA,RA0
GOTO YAES100
END

12.-
LIST P=16F84A
INCLUDE <P16F84A.INC>
DATO EQU 0X0C
INDICADOR1 EQU 0X0D
INDICADOR2 EQU 0X0F
INICIO BSF STATUS,RP0
CLRF TRISB
BCF STATUS,RP0
CLRF DATO
MOVLW D'240'
MOVWF INDICADOR1
MOVLW D'16'
MOVWF INDICADOR2
PRINCIPAL MOVF DATO,W
MOVWF PORTB
INCF DATO,F
MOVF DATO,W
SUBWF INDICADOR1,W
BTFSC STATUS,Z
GOTO INCREMENTOMAXIMO
GOTO PRINCIPAL
INCREMENTOMAXIMO
DECF DATO,F
MOVF DATO,W
MOVWF PORTB
SUBWF INDICADOR2,W
BTFSC STATUS,Z
GOTO PRINCIPAL
GOTO INCREMENTOMAXIMO
END

You might also like