proyecto mplab y proteus

36
Prácticas Práctica 0010. Suma 1. Sumar dos números y depositar el resultado en una posición de memoria. A partir de la información en MPLAB escribir un programa en lenguaje ensamblado, E001.ASM , compilarlo y simularlo. Ver simulación en la arquitectura del PIC Práctica 0020. Operador programable 1. PRACTICA.ASM : Operador programable de 4 bits mediante el PIC: El dispositivo dispone de 4 entradas de datos, D, C, B, A, 3 salidas Y2, Y1, Y0 y 3 señales de control C2, C1, C0.

Upload: eddy-renato-casos-geronimo

Post on 08-Apr-2016

152 views

Category:

Documents


5 download

TRANSCRIPT

Page 1: Proyecto Mplab y Proteus

PrácticasPráctica 0010. Suma    1. Sumar dos números y depositar el resultado en una posición de memoria. A partir de la información en MPLAB escribir un programa en lenguaje ensamblado, E001.ASM, compilarlo y simularlo.

    Ver simulación en la arquitectura del PIC

Práctica 0020. Operador programable    1. PRACTICA.ASM: Operador programable de 4 bits mediante el PIC:

    El dispositivo dispone de 4 entradas de datos, D, C, B, A, 3 salidas Y2, Y1, Y0 y 3 señales de control C2, C1, C0.

Page 2: Proyecto Mplab y Proteus

    Según el estado de las entradas de control C2, C1, C0, en las salidas Y2, Y1, Y0 aparecerá el estado que corresponderá a una función predefinida para las variables de entrada D, C, B, A:

C2 C1 C0 Función lógica en Y0

0 0 0 Y=A+B+C+D OR

0 0 1 Y=A*B*C*D AND

0 1 0 Y=/[A+B+C+D] NOR

0 1 1 Y=/[A*B*C*D] NAND

1 0 0 Y=A(+)B(+)C(+)D OR-Exclusiva

1 0 1 Y=/[A(+)B(+)C(+)D] NOR-Exclusiva

C2 C1 C0 Suma binaria en Y2Y1Y0 de DC y BA

1 1 0 Y2Y1Y0 = DC + BA (Ejemplo: 11 + 11 = 110)

C2 C1 C0 Contador cíclico programable

1 1 1

'Y0'= 1 si se alcanza un número de pulsos en la entrada 'D' igual al valor numérico en 'CBA' multiplicado por 10. (la combinación '000' en 'CBA' pone 'Y0' a 1 permanentemente.)Ejemplo: 'CBA' = 101 (binario) = 5 (decimal); 'Y' = 1 cuando se introduzca el pulso 50 en 'D'.

DISPOSITIVOS LÓGICOS MICROPROGRAMABLES Dispositivos lógicos microprogramablesPráctica de microcontroladores PIC 15.13

    Cada vez que se termine una operacion y se quiera ejecutar otra primero colocamos los interruptores C2, C1, C0, A, B, C, D en la posición deseada y despues activamos el pulsador de reset.

    2. Estudiar someramente el programa en código fuente ayudándose de la lista de instrucciones del PIC.

    3. Compilar el programa para obtener PRACTICA.HEX.

    4. Montar el PIC en el programador JDMD y transferirle el programa con ic-prog.

    5. Montar el PIC en placa protoboard y comprobar su funcionamiento.

Page 3: Proyecto Mplab y Proteus

Resultados

Page 4: Proyecto Mplab y Proteus

Notas    1. En el montaje de la práctica se vió necesario incluir un condensador para evitar rebotes en el pulsador de reset.

Práctica 0030. Secuenciador de luces    La práctica trata de un secuenciador de luces controlado mediante un PIC16f84. El secuenciador dispone de 8 canales, esto es 8 salidas distintas que pueden controlar 8 luces o grupos de ellas. El juego de luces del secuenciador permite mostrar 16 efectos distintos según se establezca la posición de 4 interruptores. La velocidad a la que se muestran los movimientos se estavlecen mediante un potenciómetro.

    Nota: La practica está basada en un proyecto de 2001 traido desde http://perso.wanadoo.es/luis_ju/proyect/cqpic.html de Rueda Luis que a su vez viene de otro proyecto de Jaime Bosch, publicado en la edición nº 21 de la revista "Electrónica Práctica actual" en septiembre del 2000.

Efectos del secuenciador de luces    A continuación se muestran los 16 efectos del secuenciador y la posición de los interruptores. También se indica el número en binario y en hexadecimal que se obtiene con los interruptores:

Efecto 01 0000, 0x00 Efecto 02 0001, 0x01

Efecto 03 0010, 0x02 Efecto 04 0011, 0x03

Efecto 05 0100, 0x04 Efecto 06 0101, 0x05

Efecto 07 0110, 0x06 Efecto 08 0111, 0x07

Efecto 09 1000, 0x08 Efecto 10 1001, 0x09

Page 5: Proyecto Mplab y Proteus

Efecto 11 1010, 0x0A Efecto 12 1011, 0x0B

Efecto 13 1100, 0x0C Efecto 14 1101, 0x0D

Efecto 15 1110, 0x0E Efecto 16 1111, 0x0F

Esquema y funcionamiento    Montaje en Programador-Placa de desarrollo básico, indicado en la siguiente figura dentro del recuadro. El resto de componentes se montan en la placa protoboard del programador.

    Un circuito 555 como generador de onda cuadrada proporciona el control de velocidad regulable mediante un potenciómetro. Si se requiere más velocidad se puede cambiar el condensador de 10 uf por otro mas pequeño. La salida (patilla 3) se conecta al terminal RA4 del PIC.

Page 6: Proyecto Mplab y Proteus

    Los interruptores se conectan a las patillas RA0, RA1, RA2 y RA3, con su correspondiente resistencia de 10k a positivo. Las patillas RB0 a RB7 son las salidas que atacan a los LED a través de sus correspondientes resistencias.

Programa:

jluzpic.asm jluzpic.hex

Simplificación del circuito    Para simplificar el montaje se puede prescindir del circuito integrado 555 y que sea el PIC quien genere la temporización. También se sustituye el oscilador a cristal por uno RC de manera que colocando una resistencia variable en la red RC se consigue un control de velocidad.

Page 7: Proyecto Mplab y Proteus

Programa:

jluzpic2.asm jluzpic2.hex

Señal de reloj en el osciloscopio

Page 8: Proyecto Mplab y Proteus

    La perturbación que aparece como una oscilación amortiguada cuando la señal está a nivel alto puede reducirse colocando un condensador de 100 nF entre las patillas de alimentación del PIC.

Page 9: Proyecto Mplab y Proteus

;**************************************************************;Programa E001.asm Fecha: 3 Diciembre 2004;Este programa suma dos valores inmediatos (7+8) y el resultado;lo deposita en la posición 0x10;Revisión: 0.0 Programa para PIC16F84;Velocidad de reloj: 4 MHz Instrucción: 1Mz=1 us;Perro Guardián: deshabilitado Tipo de Reloj: XT;Protección de código: OFF;**************************************************************

LIST p=16F84 ;Tipo de PIC;**************************************************************RESULTADO EQU 0x10 ;Define la posición del resultado;**************************************************************

ORG 0 ;Comando que indica al Ensamblador

;la dirección de la memoria de programa

;donde situar la siguiente instrucción;**************************************************************INICIO movlw 0x07 ;Carga primer sumando en W

addlw 0x08 ;Suma W con segundo sumando

movwf RESULTADO ;Almacena el resultado

END ;Fin del programa fuente

Page 10: Proyecto Mplab y Proteus

Práctica 0010. Suma    1. Sumar dos números y depositar el resultado en una posición de memoria. A partir de la información en MPLAB escribir un programa en lenguaje ensamblado, E001.ASM, compilarlo y simularlo.

    Ver simulación en la arquitectura del PIC

Práctica 0020. Operador programable    1. PRACTICA.ASM: Operador programable de 4 bits mediante el PIC:

    El dispositivo dispone de 4 entradas de datos, D, C, B, A, 3 salidas Y2, Y1, Y0 y 3 señales de control C2, C1, C0.

    Según el estado de las entradas de control C2, C1, C0, en las salidas Y2, Y1, Y0 aparecerá el estado que corresponderá a una función predefinida para las variables de entrada D, C, B, A:

C2 C1 C0 Función lógica en Y0

0 0 0 Y=A+B+C+D OR

0 0 1 Y=A*B*C*D AND

Page 11: Proyecto Mplab y Proteus

0 1 0 Y=/[A+B+C+D] NOR

0 1 1 Y=/[A*B*C*D] NAND

1 0 0 Y=A(+)B(+)C(+)D OR-Exclusiva

1 0 1 Y=/[A(+)B(+)C(+)D] NOR-Exclusiva

C2 C1 C0 Suma binaria en Y2Y1Y0 de DC y BA

1 1 0 Y2Y1Y0 = DC + BA (Ejemplo: 11 + 11 = 110)

C2 C1 C0 Contador cíclico programable

1 1 1

'Y0'= 1 si se alcanza un número de pulsos en la entrada 'D' igual al valor numérico en 'CBA' multiplicado por 10. (la combinación '000' en 'CBA' pone 'Y0' a 1 permanentemente.)Ejemplo: 'CBA' = 101 (binario) = 5 (decimal); 'Y' = 1 cuando se introduzca el pulso 50 en 'D'.

DISPOSITIVOS LÓGICOS MICROPROGRAMABLES Dispositivos lógicos microprogramablesPráctica de microcontroladores PIC 15.13

    Cada vez que se termine una operacion y se quiera ejecutar otra primero colocamos los interruptores C2, C1, C0, A, B, C, D en la posición deseada y despues activamos el pulsador de reset.

    2. Estudiar someramente el programa en código fuente ayudándose de la lista de instrucciones del PIC.

    3. Compilar el programa para obtener PRACTICA.HEX.

    4. Montar el PIC en el programador JDMD y transferirle el programa con ic-prog.

    5. Montar el PIC en placa protoboard y comprobar su funcionamiento.

Page 12: Proyecto Mplab y Proteus

Resultados

Page 13: Proyecto Mplab y Proteus

Notas    1. En el montaje de la práctica se vió necesario incluir un condensador para evitar rebotes en el pulsador de reset.

Práctica 0030. Secuenciador de luces    La práctica trata de un secuenciador de luces controlado mediante un PIC16f84. El secuenciador dispone de 8 canales, esto es 8 salidas distintas que pueden controlar 8 luces o grupos de ellas. El juego de luces del secuenciador permite mostrar 16 efectos distintos según se establezca la posición de 4 interruptores. La velocidad a la que se muestran los movimientos se estavlecen mediante un potenciómetro.

    Nota: La practica está basada en un proyecto de 2001 traido desde http://perso.wanadoo.es/luis_ju/proyect/cqpic.html de Rueda Luis que a su vez viene de otro proyecto de Jaime Bosch, publicado en la edición nº 21 de la revista "Electrónica Práctica actual" en septiembre del 2000.

Efectos del secuenciador de luces    A continuación se muestran los 16 efectos del secuenciador y la posición de los interruptores. También se indica el número en binario y en hexadecimal que se obtiene con los interruptores:

Efecto 01 0000, 0x00 Efecto 02 0001, 0x01

Efecto 03 0010, 0x02 Efecto 04 0011, 0x03

Efecto 05 0100, 0x04 Efecto 06 0101, 0x05

Efecto 07 0110, 0x06 Efecto 08 0111, 0x07

Efecto 09 1000, 0x08 Efecto 10 1001, 0x09

Page 14: Proyecto Mplab y Proteus

Efecto 11 1010, 0x0A Efecto 12 1011, 0x0B

Efecto 13 1100, 0x0C Efecto 14 1101, 0x0D

Efecto 15 1110, 0x0E Efecto 16 1111, 0x0F

Esquema y funcionamiento    Montaje en Programador-Placa de desarrollo básico, indicado en la siguiente figura dentro del recuadro. El resto de componentes se montan en la placa protoboard del programador.

    Un circuito 555 como generador de onda cuadrada proporciona el control de velocidad regulable mediante un potenciómetro. Si se requiere más velocidad se puede cambiar el condensador de 10 uf por otro mas pequeño. La salida (patilla 3) se conecta al terminal RA4 del PIC.

Page 15: Proyecto Mplab y Proteus

    Los interruptores se conectan a las patillas RA0, RA1, RA2 y RA3, con su correspondiente resistencia de 10k a positivo. Las patillas RB0 a RB7 son las salidas que atacan a los LED a través de sus correspondientes resistencias.

Programa:

jluzpic.asm jluzpic.hex

Simplificación del circuito    Para simplificar el montaje se puede prescindir del circuito integrado 555 y que sea el PIC quien genere la temporización. También se sustituye el oscilador a cristal por uno RC de manera que colocando una resistencia variable en la red RC se consigue un control de velocidad.

Programa:

jluzpic2.asm jluzpic2.hex

Señal de reloj en el osciloscopio

Page 16: Proyecto Mplab y Proteus

    La perturbación que aparece como una oscilación amortiguada cuando la señal está a nivel alto puede reducirse colocando un condensador de 100 nF entre las patillas de alimentación del PIC.

Page 17: Proyecto Mplab y Proteus

;**************************************************************;Programa E001.asm Fecha: 3 Diciembre 2004;Este programa suma dos valores inmediatos (7+8) y el resultado;lo deposita en la posición 0x10;Revisión: 0.0 Programa para PIC16F84;Velocidad de reloj: 4 MHz Instrucción: 1Mz=1 us;Perro Guardián: deshabilitado Tipo de Reloj: XT;Protección de código: OFF;**************************************************************

LIST p=16F84 ;Tipo de PIC;**************************************************************RESULTADO EQU 0x10 ;Define la posición del resultado;**************************************************************

ORG 0 ;Comando que indica al Ensamblador

;la dirección de la memoria de programa

;donde situar la siguiente instrucción;**************************************************************INICIO movlw 0x07 ;Carga primer sumando en W

addlw 0x08 ;Suma W con segundo sumando

movwf RESULTADO ;Almacena el resultado

END ;Fin del programa fuente

Page 18: Proyecto Mplab y Proteus

;**************************************************************;Programa jluzpic.asm Fecha: 15 Diciembre 2005;Secuenciador de 8 Canales y 16 efectos.;;Revisión: 0.0 Programa para PIC16F84A;Velocidad de reloj: 4 MHz Instrucción: 1Mz=1 us;Perro Guardián: deshabilitado Tipo de Reloj: XT;Basado en:;cqpic.asm De Rueda Luis de:;http://perso.wanadoo.es/luis_ju/proyect/cqpic.html;que a su vez viene de otro proyecto de Jaime Bosch, publicado;en la edición nº 21 de la revista "Electrónica Práctica actual";en septiembre del 2000;************************************************************** LIST P=PIC16F84A ; Pic a usar

#INCLUDE <P16F84A.INC> ; Lista de etiquetas de microchip

; Fuses, configuran opciones externas de hardware para la programacion

__CONFIG _CP_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC

;=================== Mapa de Memoria ======================

;STATUS equ 0x03 ; Haciendo asignaciones;TRISA equ 0x05;TRISB equ 0x06 ;PORTA equ 0x05;PORTB equ 0x06

llaves equ 0x0C ; almacenara el STATUS de las llaves

;============== Configuración de puertos ==================

ORG 0x0000 GOTO inicio ORG 0x0005

inicio BSF STATUS,5 ; cambio al banco 1 del pic MOVLW 0x1f MOVWF TRISA ; Asigna al puerto A como entrada MOVLW 0x00 MOVWF TRISB ; y Al puerto B como salida BCF STATUS,5 ; Regresa al banco 0 CLRF PORTA ; limpia el puerto A CLRF PORTB ; limpia el puerto B

swich MOVF PORTA,0 ; carga w con el puerto A ANDLW 0x0F ; retiene los 4 bits de interes (las llaves)

MOVWF llaves ; y los guarda en llaves XORLW 0x00 ; verifica si es el primer efecto BTFSC STATUS,2 ; si es así CALL efect1 ; lo llama y lo ejecuta MOVF llaves,0 ; sino, carga llaves en w XORLW 0x01 ; y verifica si es el segundo efecto

Page 19: Proyecto Mplab y Proteus

BTFSC STATUS,2 ; si es así CALL efect2 ; lo llama y lo ejecuta MOVF llaves,0 ; y así con los demás XORLW 0x02 ; ya me aburrí BTFSC STATUS,2 ; como verás el resto es lo mismo CALL efect3 MOVF llaves,0 XORLW 0x03 BTFSC STATUS,2 CALL efect4 MOVF llaves,0 XORLW 0x04 BTFSC STATUS,2 CALL efect5 MOVF llaves,0 XORLW 0x05 BTFSC STATUS,2 CALL efect6 MOVF llaves,0 XORLW 0x06 BTFSC STATUS,2 CALL efect7 MOVF llaves,0 XORLW 0x07 BTFSC STATUS,2 CALL efect8 MOVF llaves,0 XORLW 0x08 BTFSC STATUS,2 CALL efect9 MOVF llaves,0 XORLW 0x09 BTFSC STATUS,2 CALL efect10 MOVF llaves,0 XORLW 0x0A BTFSC STATUS,2 CALL efect11 MOVF llaves,0 XORLW 0x0B BTFSC STATUS,2 CALL efect12 MOVF llaves,0 XORLW 0x0C BTFSC STATUS,2 CALL efect13 MOVF llaves,0 XORLW 0x0D BTFSC STATUS,2 CALL efect14 MOVF llaves,0 XORLW 0x0E BTFSC STATUS,2 CALL efect15 MOVF llaves,0 XORLW 0x0F BTFSC STATUS,2 CALL efect16 GOTO swich ; Comienza a revisar de nuevo

;======================== Efectos =========================

Page 20: Proyecto Mplab y Proteus

efect1 CLRF PORTB ; limpia el puerto B BSF PORTB,7 ; (10000000) CALL clokon BSF PORTB,6 ; (11000000) CALL clokon BSF PORTB,5 ; (11100000) CALL clokon BSF PORTB,4 ; (11110000) CALL clokon BSF PORTB,3 ; (11111000) CALL clokon BSF PORTB,2 ; (11111100) CALL clokon BSF PORTB,1 ; (11111110) CALL clokon BSF PORTB,0 ; (11111111) CALL clokon BCF PORTB,7 ; (01111111) CALL clokon BCF PORTB,6 ; (00111111) CALL clokon BCF PORTB,5 ; (00011111) CALL clokon BCF PORTB,4 ; (00001111) CALL clokon BCF PORTB,3 ; (00000111) CALL clokon BCF PORTB,2 ; (00000011) CALL clokon BCF PORTB,1 ; (00000001) CALL clokon CLRF PORTB ; (00000000) CALL clokontrece BSF PORTB,0 ; (00000001) CALL clokon BSF PORTB,1 ; (00000011) CALL clokon BSF PORTB,2 ; (00000111) CALL clokon BSF PORTB,3 ; (00001111) CALL clokon BSF PORTB,4 ; (00011111) CALL clokon BSF PORTB,5 ; (00111111) CALL clokon BSF PORTB,6 ; (01111111) CALL clokon BSF PORTB,7 ; (11111111) CALL clokon BCF PORTB,0 ; (11111110) CALL clokon BCF PORTB,1 ; (11111100) CALL clokon BCF PORTB,2 ; (11111000) CALL clokon BCF PORTB,3 ; (11110000) CALL clokon BCF PORTB,4 ; (11100000) CALL clokon BCF PORTB,5 ; (11000000)

Page 21: Proyecto Mplab y Proteus

CALL clokon BCF PORTB,6 ; (10000000) CALL clokon RETURN ; a revisar nuevamente las llaves

efect2 CLRF PORTB ; limpia el puerto B BSF PORTB,7 ; (10000000) EFECTO ACUMULATIVO EN "0" CALL clokon BCF PORTB,7 ; (00000000) BSF PORTB,6 ; (01000000) CALL clokon BCF PORTB,6 ; (00000000) BSF PORTB,5 ; (00100000) CALL clokon BCF PORTB,5 ; (00000000) BSF PORTB,4 ; (00010000) CALL clokon BCF PORTB,4 ; (00000000) BSF PORTB,3 ; (00001000) CALL clokon BCF PORTB,3 ; (00000000) BSF PORTB,2 ; (00000100) CALL clokon BCF PORTB,2 ; (00000000) BSF PORTB,1 ; (00000010) CALL clokon BCF PORTB,1 ; (00000000) BSF PORTB,0 ; (00000001) CALL clokon BSF PORTB,7 ; (10000001) CALL clokon BCF PORTB,7 ; (00000001) BSF PORTB,6 ; (01000001) CALL clokon BCF PORTB,6 ; (00000001) BSF PORTB,5 ; (00100001) CALL clokon BCF PORTB,5 ; (00000001) BSF PORTB,4 ; (00010001) CALL clokon BCF PORTB,4 ; (00000001) BSF PORTB,3 ; (00001001) CALL clokon BCF PORTB,3 ; (00000001) BSF PORTB,2 ; (00000101) CALL clokon BCF PORTB,2 ; (00000001) BSF PORTB,1 ; (00000011) CALL clokon BSF PORTB,7 ; (10000011) CALL clokon BCF PORTB,7 ; (00000011) BSF PORTB,6 ; (01000011) CALL clokon BCF PORTB,6 ; (00000011) BSF PORTB,5 ; (00100011) CALL clokon BCF PORTB,5 ; (00000011) BSF PORTB,4 ; (00010011) CALL clokon

Page 22: Proyecto Mplab y Proteus

BCF PORTB,4 ; (00000011) BSF PORTB,3 ; (00001011) CALL clokon BCF PORTB,3 ; (00000011) BSF PORTB,2 ; (00000111) CALL clokon BSF PORTB,7 ; (10000111) CALL clokon BCF PORTB,7 ; (00000111) BSF PORTB,6 ; (01000111) CALL clokon BCF PORTB,6 ; (00000111) BSF PORTB,5 ; (00100111) CALL clokon BCF PORTB,5 ; (00000111) BSF PORTB,4 ; (00010111) CALL clokon BCF PORTB,4 ; (00000111) BSF PORTB,3 ; (00001111) CALL clokon BSF PORTB,7 ; (10001111) CALL clokon BCF PORTB,7 ; (00001111) BSF PORTB,6 ; (01001111) CALL clokon BCF PORTB,6 ; (00001111) BSF PORTB,5 ; (00101111) CALL clokon BCF PORTB,5 ; (00001111) BSF PORTB,4 ; (00011111) CALL clokon BSF PORTB,7 ; (10011111) CALL clokon BCF PORTB,7 ; (00011111) BSF PORTB,6 ; (01011111) CALL clokon BCF PORTB,6 ; (00011111) BSF PORTB,5 ; (00111111) CALL clokon BSF PORTB,7 ; (10111111) CALL clokon BCF PORTB,7 ; (00111111) BSF PORTB,6 ; (01111111) CALL clokon BSF PORTB,7 ; (11111111) CALL clokon RETURN

efect3 CLRF PORTB ; limpia el puerto B CALL clokon BSF PORTB,0 ; (00000001) CALL clokon BCF PORTB,0 ; (00000000) BSF PORTB,1 ; (00000010) CALL clokon BCF PORTB,1 ; (00000000) BSF PORTB,2 ; (00000100) CALL clokon BCF PORTB,2 ; (00000000) BSF PORTB,3 ; (00001000) CALL clokon

Page 23: Proyecto Mplab y Proteus

BCF PORTB,3 ; (00000000) BSF PORTB,4 ; (00010000) CALL clokon BCF PORTB,4 ; (00000000) BSF PORTB,5 ; (00100000) CALL clokon BCF PORTB,5 ; (00000000) BSF PORTB,6 ; (01000000) CALL clokon BCF PORTB,6 ; (00000000) BSF PORTB,7 ; (10000000) CALL clokon BSF PORTB,0 ; (10000001) CALL clokon BCF PORTB,0 ; (10000000) BSF PORTB,1 ; (10000010) CALL clokon BCF PORTB,1 ; (10000000) BSF PORTB,2 ; (10000100) CALL clokon BCF PORTB,2 ; (10000000) BSF PORTB,3 ; (10001000) CALL clokon BCF PORTB,3 ; (10000000) BSF PORTB,4 ; (10010000) CALL clokon BCF PORTB,4 ; (10000000) BSF PORTB,5 ; (10100000) CALL clokon BCF PORTB,5 ; (10000000) BSF PORTB,6 ; (11000000) CALL clokon BSF PORTB,0 ; (11000001) CALL clokon BCF PORTB,0 ; (11000000) BSF PORTB,1 ; (11000010) CALL clokon BCF PORTB,1 ; (11000000) BSF PORTB,2 ; (11000100) CALL clokon BCF PORTB,2 ; (11000000) BSF PORTB,3 ; (11001000) CALL clokon BCF PORTB,3 ; (11000000) BSF PORTB,4 ; (11010000) CALL clokon BCF PORTB,4 ; (11000000) BSF PORTB,5 ; (11100000) CALL clokon BSF PORTB,0 ; (11100001) CALL clokon BCF PORTB,0 ; (11100000) BSF PORTB,1 ; (11100010) CALL clokon BCF PORTB,1 ; (11100000) BSF PORTB,2 ; (11100100) CALL clokon BCF PORTB,2 ; (11100000) BSF PORTB,3 ; (11101000) CALL clokon BCF PORTB,3 ; (11100000)

Page 24: Proyecto Mplab y Proteus

BSF PORTB,4 ; (11110000) CALL clokon BSF PORTB,0 ; (11110001) CALL clokon BCF PORTB,0 ; (11110000) BSF PORTB,1 ; (11110010) CALL clokon BCF PORTB,1 ; (11110000) BSF PORTB,2 ; (11110100) CALL clokon BCF PORTB,2 ; (11110000) BSF PORTB,3 ; (11111000) CALL clokon BSF PORTB,0 ; (11111001) CALL clokon BCF PORTB,0 ; (11111000) BSF PORTB,1 ; (11111010) CALL clokon BCF PORTB,1 ; (11111000) BSF PORTB,2 ; (11111100) CALL clokon BSF PORTB,0 ; (11111101) CALL clokon BCF PORTB,0 ; (11111100) BSF PORTB,1 ; (11111110) CALL clokon BSF PORTB,0 ; (11111111) CALL clokon RETURN

efect4 CLRF PORTB ; limpia el puerto B BSF PORTB,7 ; (10000000)

BSF PORTB,0 ; (10000001) CALL clokon BSF PORTB,6 ; (11000001) BSF PORTB,1 ; (11000011) CALL clokon BSF PORTB,5 ; (11100011) BSF PORTB,2 ; (11100111) CALL clokon BSF PORTB,4 ; (11110111) BSF PORTB,3 ; (11111111) CALL clokon BCF PORTB,7 ; (01111111) BCF PORTB,0 ; (01111110) CALL clokon BCF PORTB,6 ; (00111110) BCF PORTB,1 ; (00111100) CALL clokon BCF PORTB,5 ; (00011100) BCF PORTB,2 ; (00011000) CALL clokon BCF PORTB,4 ; (00001000) BCF PORTB,3 ; (00000000) CALL clokon CALL clokon BSF PORTB,3 ; (00001000) BSF PORTB,4 ; (00011000) CALL clokon BSF PORTB,5 ; (00111000) BSF PORTB,2 ; (00111100)

Page 25: Proyecto Mplab y Proteus

CALL clokon BSF PORTB,6 ; (01111100) BSF PORTB,1 ; (01111110) CALL clokon BSF PORTB,7 ; (11111110) BSF PORTB,0 ; (11111111) CALL clokon

BCF PORTB,3 ; (11110111) BCF PORTB,4 ; (11100111) CALL clokon BCF PORTB,5 ; (11000111) BCF PORTB,2 ; (11000011) CALL clokon BCF PORTB,6 ; (10000011) BCF PORTB,1 ; (10000001) CALL clokon BCF PORTB,7 ; (00000001) BCF PORTB,0 ; (00000000) CALL clokon RETURN

efect5 CLRF PORTB ; limpia el puerto BMOVLW 0x01 ; comienza con (00000001)MOVWF PORTB ; lo envía a la salida

cinco BSF STATUS,0 ; pone a 0 el bit C de status (carry)CALL clokonMOVWF PORTB ; lo envía a la salida

RLF PORTB,0 ; rota a la derecha y pasa el valor a W

MOVWF PORTB ; lo envía a la salidaCALL clokonCLRF PORTB ; (00000000)CALL clokonMOVWF PORTB ; repiteCALL clokonCLRF PORTB ; (00000000)CALL clokonMOVWF PORTB ; lo envía a la salida

BTFSS PORTB,7 ; ve si terminó de rotar GOTO cinco

CALL clokon BCF PORTB,7 ; (01111111) CALL clokon BCF PORTB,6 ; (00111111) CALL clokon BCF PORTB,5 ; (00011111) CALL clokon BCF PORTB,4 ; (00001111) CALL clokon BCF PORTB,3 ; (00000111) CALL clokon BCF PORTB,2 ; (00000011) CALL clokon BCF PORTB,1 ; (00000001) CALL clokon

RETURN

efect6 CLRF PORTB ; limpia el puerto BMOVLW 0x01 ; comienza con (00000001)MOVWF PORTB ; lo envía a la salida

Page 26: Proyecto Mplab y Proteus

tres BCF STATUS,0 ; pone a 0 el bit C de status (carry)CALL clokonMOVWF PORTB ; lo envía a la salida

RLF PORTB,0 ; rota a la derecha y pasa el valor a W

MOVWF PORTB ; lo envía a la salidaCALL clokonCLRF PORTB ; (00000000)CALL clokonMOVWF PORTB ; repiteCALL clokonCLRF PORTB ; (00000000)CALL clokonMOVWF PORTB ; lo envía a la salida

BTFSS PORTB,7 ; ve si terminó de rotar GOTO tres

CALL clokonRETURN

efect7 CLRF PORTB ; limpia el puerto B CALL clokon BSF PORTB,0 ; (00000001) CALL clokon BCF PORTB,0 ; (00000000) BSF PORTB,1 ; (00000010) CALL clokon BCF PORTB,1 ; (00000000) BSF PORTB,2 ; (00000100) CALL clokon BCF PORTB,2 ; (00000000) BSF PORTB,3 ; (00001000) CALL clokon BCF PORTB,3 ; (00000000) BSF PORTB,4 ; (00010000) CALL clokon BCF PORTB,4 ; (00000000) BSF PORTB,5 ; (00100000) CALL clokon BCF PORTB,5 ; (00000000) BSF PORTB,6 ; (01000000) CALL clokon BCF PORTB,6 ; (00000000) BSF PORTB,7 ; (10000000) CALL clokon BSF PORTB,6 ; (11000000) CALL clokon BCF PORTB,6 ; (10000000) BSF PORTB,5 ; (10100000) CALL clokon BCF PORTB,5 ; (10000000) BSF PORTB,4 ; (10010000) CALL clokon BCF PORTB,4 ; (10000000) BSF PORTB,3 ; (10001000) CALL clokon BCF PORTB,3 ; (10000000) BSF PORTB,2 ; (10000100) CALL clokon BCF PORTB,2 ; (10000000) BSF PORTB,1 ; (10000010) CALL clokon

Page 27: Proyecto Mplab y Proteus

BCF PORTB,1 ; (10000000) BSF PORTB,0 ; (10000001) CALL clokon BSF PORTB,1 ; (10000011) CALL clokon BCF PORTB,1 ; (10000001) BSF PORTB,2 ; (10000101) CALL clokon BCF PORTB,2 ; (10000001) BSF PORTB,3 ; (10001001) CALL clokon BCF PORTB,3 ; (10000001) BSF PORTB,4 ; (10010001) CALL clokon BCF PORTB,4 ; (10000001) BSF PORTB,5 ; (10100001) CALL clokon BCF PORTB,5 ; (10000001) BSF PORTB,6 ; (11000001) CALL clokon BSF PORTB,5 ; (11100001) CALL clokon BCF PORTB,5 ; (11000001) BSF PORTB,4 ; (11010001) CALL clokon BCF PORTB,4 ; (11000001) BSF PORTB,3 ; (11001001) CALL clokon BCF PORTB,3 ; (11000001) BSF PORTB,2 ; (11000101) CALL clokon BCF PORTB,2 ; (11000001) BSF PORTB,1 ; (11000011) CALL clokon BSF PORTB,2 ; (11000111) CALL clokon BCF PORTB,2 ; (11000011) BSF PORTB,3 ; (11001011) CALL clokon BCF PORTB,3 ; (11000011) BSF PORTB,4 ; (11010011) CALL clokon BCF PORTB,4 ; (11000011) BSF PORTB,5 ; (11100011) CALL clokon BSF PORTB,4 ; (11110011) CALL clokon BCF PORTB,4 ; (11100011) BSF PORTB,3 ; (11101011) CALL clokon BCF PORTB,3 ; (11100011) BSF PORTB,2 ; (11100111) CALL clokon BSF PORTB,3 ; (11101111) CALL clokon BCF PORTB,3 ; (11100111) BSF PORTB,4 ; (11110111) CALL clokon BSF PORTB,3 ; (11111111) CALL clokon BCF PORTB,2 ; (11111011)

Page 28: Proyecto Mplab y Proteus

CALL clokon BSF PORTB,2 ; (11111111) CALL clokon BCF PORTB,1 ; (11111101) CALL clokon BSF PORTB,1 ; (11111111) CALL clokon BCF PORTB,0 ; (11111110) CALL clokon

BSF PORTB,0 ; (11111111) CALL clokon BCF PORTB,0 ; (11111110) CALL clokon BCF PORTB,1 ; (11111100) CALL clokon BCF PORTB,2 ; (11111000) CALL clokon BCF PORTB,3 ; (11110000) CALL clokon BCF PORTB,4 ; (11100000) CALL clokon BCF PORTB,5 ; (11000000) CALL clokon BCF PORTB,6 ; (10000000) CALL clokon BCF PORTB,7 ; (00000000) CALL clokon

RETURN

efect8 CALL efect3 ; combinan el efecto 3CALL efect2 ; con el efecto 2RETURN

efect9 CLRF PORTB ; limpia el puerto BMOVLW 0xEE ; comienza con (11101110)MOVWF PORTB ; lo pasa a PORTBBSF STATUS,0 ; pone el carry a 1

rotar CALL clokonRLF PORTB,1 ; inicia la rotaciónBTFSC PORTB,7 ; ve si terminó de rotarGOTO rotar ; sino continúaCALL clokonRETURN ; terminó, ver si cambió efecto

efect10 CLRF PORTB ; limpia el puerto BMOVLW 0xFE ; comienza con (11111110)MOVWF PORTB ; lo pasa a PORTBBSF STATUS,0 ; pone el carry a 1

rotar1 CALL clokonRLF PORTB,1 ; inicia la rotaciónBTFSC PORTB,7 ; ve si terminó de rotarGOTO rotar1 ; sino continúa

rotar2 CALL clokonRRF PORTB,1 ; ahora rota al revésBTFSC PORTB,0 ; ve si terminó de rotarGOTO rotar2 ; sino continúaCALL clokonRETURN ; terminó, ver si cambió efecto

efect11 CLRF PORTB ; limpia el puerto BBSF PORTB,0 ; (00000001)

Page 29: Proyecto Mplab y Proteus

CALL clokonBSF PORTB,1 ; (00000011)

CALL clokonBSF PORTB,2 ; (00000111)

CALL clokonBSF PORTB,3 ; (00001111)

CALL clokonBSF PORTB,4 ; (00011111)

CALL clokonBSF PORTB,5 ; (00111111)

CALL clokonBSF PORTB,6 ; (01111111)

CALL clokonBSF PORTB,7 ; (11111111)BCF STATUS,0 ; pone el carry a 0

uno CALL clokonRRF PORTB,1 ; rotará uno apagadoBTFSC PORTB,0 ; ve si es (11111110)GOTO uno ; sino continúa

CALL clokonBCF PORTB,1 ; (11111100)

CALL clokonBCF PORTB,2 ; (11111000)

CALL clokonBCF PORTB,3 ; (11110000)

CALL clokonBCF PORTB,4 ; (11100000)

CALL clokonBCF PORTB,5 ; (11000000)

CALL clokonBCF PORTB,6 ; (10000000)BCF STATUS,0 ; pone el carry a 0

dos CALL clokonRRF PORTB,1 ; rotará uno encendidoBTFSS PORTB,0 ; ve si es (00000001)GOTO dos ; sino continúa

CALL clokonRETURN ; terminó, ver si cambió efecto

efect12 CLRF PORTB ; limpia el puerto BBSF PORTB,0 ; (00000001)

CALL clokonBSF PORTB,1 ; (00000011)

CALL clokonBSF PORTB,2 ; (00000111)

CALL clokonBSF PORTB,3 ; (00001111)

CALL clokonBSF PORTB,4 ; (00011111)

CALL clokonBSF PORTB,5 ; (00111111)

CALL clokonBSF PORTB,6 ; (01111111)

CALL clokonBSF PORTB,7 ; (11111111)

CALL clokonCLRF PORTB ; (00000000)

CALL clokonMOVLW 0xFF MOVWF PORTB ; (11111111) enciendo todo

CALL clokon

Page 30: Proyecto Mplab y Proteus

CLRF PORTB ; (00000000) CALL clokon

MOVLW 0xFF MOVWF PORTB ; (11111111) enciendo todo

CALL clokonCLRF PORTB ; (00000000)

CALL clokonMOVLW 0xFF MOVWF PORTB ; (11111111) enciendo todo

CALL clokonCLRF PORTB ; (00000000)

CALL clokonMOVLW 0xFF MOVWF PORTB ; (11111111) enciendo todo

CALL clokon BCF PORTB,7 ; (01111111) CALL clokon BCF PORTB,6 ; (00111111) CALL clokon BCF PORTB,5 ; (00011111) CALL clokon BCF PORTB,4 ; (00001111) CALL clokon BCF PORTB,3 ; (00000111) CALL clokon BCF PORTB,2 ; (00000011) CALL clokon BCF PORTB,1 ; (00000001) CALL clokon

RETURN

efect13 CLRF PORTB ; limpia el puerto BCALL trece ; ejecuta parte del efecto 1RETURN

efect14 CLRF PORTB ; limpia el puerto B BSF PORTB,7 ; (10000000) EFECTO ENCIENDE DE AFUERA AL CENTRO BSF PORTB,0 ; (10000001)----- CALL clokon

CLRF PORTB BSF PORTB,6 ; (01000000) BSF PORTB,1 ; (01000010)----- CALL clokon

CLRF PORTB BSF PORTB,5 ; (00100000) BSF PORTB,2 ; (00100100)----- CALL clokon

CLRF PORTB BSF PORTB,4 ; (00010000) BSF PORTB,3 ; (00011000)----- CALL clokon BSF PORTB,5 ; (00111000) BSF PORTB,2 ; (00111100) CALL clokon BSF PORTB,6 ; (01111100) BSF PORTB,1 ; (01111110) CALL clokon BSF PORTB,7 ; (11111110) BSF PORTB,0 ; (11111111) CALL clokon

Page 31: Proyecto Mplab y Proteus

BCF PORTB,3 ; (11110111) BCF PORTB,4 ; (11100111) CALL clokon BCF PORTB,5 ; (11000111) BCF PORTB,2 ; (11000011) CALL clokon BCF PORTB,6 ; (10000011) BCF PORTB,1 ; (10000001) CALL clokon BCF PORTB,7 ; (00000001) BCF PORTB,0 ; (00000000) CALL clokon RETURN

efect15 CLRF PORTB ; limpia el puerto BMOVLW 0x80 ; comienza con (10000000)MOVWF PORTB ; lo envía a la salida

cuatro BCF STATUS,0 ; pone a 0 el bit C de status (carry)CALL clokonMOVWF PORTB ; lo envía a la salida

RRF PORTB,0 ; rota a la izquierda y pasa el valor a W

MOVWF PORTB ; lo envía a la salidaCALL clokonCLRF PORTB ; (00000000)CALL clokonMOVWF PORTB ; repiteCALL clokonCLRF PORTB ; (00000000)CALL clokonMOVWF PORTB ; lo envía a la salida

BTFSS PORTB,0 ; ve si terminó de rotar GOTO cuatro

CALL clokonRETURN

efect16 CLRF PORTB ; limpia el puerto B BSF PORTB,7 ; (10000000) BCF STATUS,0 ; pone a 0 el bit C de status (el 1º bit)seis CALL clokon RRF PORTB,1 ; rota a la derecha BTFSS PORTB,0 ; ve si terminó de rotar GOTO seis CLRF PORTB ; (00000000) BSF PORTB,0 ; (00000001) BCF STATUS,0 ; pone el carry a 0siete CALL clokon RLF PORTB,1 ; rota a la izquierda BTFSS PORTB,7 ; ve si terminó de rotar GOTO siete

CALL clokon RETURN

;============ control de pulsos de clock ==================

clokon BTFSS PORTA,4 ; prueba si es 1 GOTO clokon ; sino esperaclokoff BTFSC PORTA,4 ; prueba si termina el pulso GOTO clokoff ; sino espera que termine RETURN ; regresa y continúa

Page 32: Proyecto Mplab y Proteus

;========================= final ==========================

END