INCLUDE <P16F84A.INC> ; Definición de algunos operandos utilizados. Constante EQU d'74' ; En sistema decimal se pone así. ; ZONA DE CÓDIGOS ************************************************************** ***** ORG 0 ; El programa comienza en la dirección 0. Inicio bsf STATUS,RP0 ; Pone a 1 el bit 5 del STATUS. Acceso al Banco 1. clrf TRISB ; Las líneas del Puerto B configuradas como salidas. movlw b'00011111' ; Las 5 líneas del Puerto A configuradas como entradas. movwf TRISA bcf STATUS,RP0 ; Pone a 0 el bit 5 de STATUS. Acceso al Banco 0. Principal movf PORTA,W ; Carga el registro de datos del Puerto A en (W). addlw Constante ; (W)=(PORTA)+Constante. movwf PORTB ; El contenido de W se deposita en el puerto de salida. goto Principal ; Crea un bucle cerrado e infinito. END ; Fin del programa. ; =================================================================== ; Del libro "MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS" ; E. Palacios, F. Remiro y L. López. ; Editorial Ra-Ma. www.ra-ma.es ; =================================================================== ;*********************************** Elemental_02.asm ************************** ********* ; ; =================================================================== ; Del libro "MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS" ; E. Palacios, F. Remiro y L. López. ; Editorial Ra-Ma. www.ra-ma.es ; =================================================================== ; ; Por el Puerto B se obtiene el dato del Puerto A multiplicado por 2. ; Es decir: (PORTB)=2(PORTA)=(PORTA)+(PORT A). ; ZONA DE DATOS **************************************************************** ***** __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC LIST P=16F84A ; Procesador utilizado. INCLUDE <P16F84A.INC> ; Definición de algunos operandos utilizados. ; ZONA DE CÓDIGOS ************************************************************** ***** ORG 0 ; El programa comienza en la dirección 0. Inicio bsf STATUS,RP0 ; Pone a 1 el bit 5 del STATUS. Acceso al Banco 1. clrf TRISB ; Las líneas del Puerto B se configuran como salidas. movlw b'00011111' movwf TRISA ; Las líneas del Puerto A como entradas. bcf STATUS,RP0 ; Pone a 0 el bit 5 de STATUS. Acceso al Banco 0. Principal movf PORTA,W ; Carga el registro de datos del Puerto A en (W). addwf PORTA,W ; (W)=(PORTA)+(PORTA)=2(PORTA). movwf PORTB ; El contenido de W se deposita en el Puerto B. goto Principal ; Crea un bucle cerrado e infinito. END ; Fin del programa. ; =================================================================== ; Del libro "MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS" ; E. Palacios, F. Remiro y L. López. ; Editorial Ra-Ma. www.ra-ma.es ; =================================================================== ;*********************************** Elemental_03.asm ************************** ********** ; ; =================================================================== ; Del libro "MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS" ; E. Palacios, F. Remiro y L. López. ; Editorial Ra-Ma. www.ra-ma.es ; =================================================================== ; ; 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", sien do los ; pares el b6, b4, b2 y el b0. ; ; Por ejemplo, si por el Puerto A se introduce el dato b'---01100', por el Puert o 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 ent rada ; (efectivamente: Puerto A = b'---x1x0x' y Puerto B = b'xxxx1x0x'). ; ZONA DE DATOS **************************************************************** ***** __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC LIST P=16F84A ; Procesador utilizado. INCLUDE <P16F84A.INC> ; Definición de algunos operandos utilizados. Mascara EQU b'01010101' ; Máscara de bits pares siempre a "1". ; ZONA DE CÓDIGOS ************************************************************** ***** ORG 0 ; El programa comienza en la dirección 0. Inicio bsf STATUS,RP0 ; Pone a 1 el bit 5 del STATUS. Acceso al Banco 1. clrf TRISB ; Las líneas del Puerto B se configuran como salidas. movlw b'00011111' movwf TRISA ; Las líneas del Puerto A se configuran como entradas. bcf STATUS,RP0 ; Pone a 0 el bit 5 de STATUS. Acceso al Banco 0. Principal movf PORTA,W ; Carga el registro de datos del Puerto A en W. iorlw Mascara ; Pone a "1" los bits pares. movwf PORTB ; El contenido de W se deposita en el Puerto B. goto Principal ; Crea un bucle cerrado e infinito. END ; Fin del programa. ; =================================================================== ; Del libro "MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS" ; E. Palacios, F. Remiro y L. López. ; Editorial Ra-Ma. www.ra-ma.es ; =================================================================== ;*********************************** Elemental_04.asm ************************** ********* ; ; =================================================================== ; Del libro "MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS" ; E. Palacios, F. Remiro y L. López. ; Editorial Ra-Ma. www.ra-ma.es ; =================================================================== ; ; Por el Puerto B obtiene el dato del Puerto A, pero en las salida los bits impa res se ; fijan siempre a "0". El orden de los bits será "b7 b6 b5 b4 b3 b2 b1 b0", sien do 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" (efectivament e: ; Puerto B = b'0x0x0x0x') y los pares permanecen con el dato del puerto de entra da ; (efectivamente: Puerto A = b'---0x1x0' y Puerto B = b'---0x1x0'). ; ZONA DE DATOS **************************************************************** ***** __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC LIST P=16F84A ; Procesador utilizado. INCLUDE <P16F84A.INC> ; Definición de algunos operandos utilizados. Mascara EQU b'01010101' ; Máscara de bits impares siempre a "0". ; ZONA DE CÓDIGOS ************************************************************** ***** ORG 0 ; El programa comienza en la dirección 0. Inicio bsf STATUS,RP0 ; Pone a 1 el bit 5 del STATUS. Acceso al Banco 1. clrf TRISB ; Las líneas del Puerto B se configuran como salidas. movlw b'00011111' movwf TRISA ; Las 5 líneas del Puerto A como entrada. bcf STATUS,RP0 ; Pone a 0 el bit 5 de STATUS. Acceso al Banco 0. Principal movf PORTA,W ; Carga el registro de datos del Puerto A en W andlw Mascara ; Pone a "0" los bits pares. movwf PORTB ; El contenido de W se deposita en la salida. goto Principal ; Se crea un bucle cerrado e infinito. END ; Fin del programa. ; =================================================================== ; Del libro "MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS" ; E. Palacios, F. Remiro y L. López. ; Editorial Ra-Ma. www.ra-ma.es ; =================================================================== ;*********************************** Elemental_05.asm ************************** ********* ; ; =================================================================== ; Del libro "MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS" ; E. Palacios, F. Remiro y L. López. ; Editorial Ra-Ma. www.ra-ma.es ; =================================================================== ; ; Por el Puerto B se obtiene el dato del Puerto A invertidos los unos y ceros. P or ejemplo, ; si por el Puerto A se introduce "---11001", por el Puerto B aparecerá "xxx0011 0" (no ; importa el estado de los tres bits superiores del Puerto B). ; ZONA DE DATOS **************************************************************** ***** __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC LIST P=16F84A ; Procesador utilizado. INCLUDE <P16F84A.INC> ; Definición de algunos operandos utilizados. ; ZONA DE CÓDIGOS ************************************************************** ***** ORG 0 ; El programa comienza en la dirección 0. Inicio bsf STATUS,RP0 ; Acceso al Banco 1. clrf TRISB ; Las líneas del Puerto B se configuran como salida. movlw b'00011111' ; Las 5 líneas del Puerto A se configuran como entrada. movwf TRISA bcf STATUS,RP0 ; Acceso al Banco 0. Principal comf PORTA,W ; Invierte el contenido del Puerto A y el resultado lo movwf PORTB ; lleva a la salida para que se visualice. goto Principal ; Crea un bucle cerrado e infinito. END ; Fin del programa. ; =================================================================== ; Del libro "MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS" ; E. Palacios, F. Remiro y L. López. ; Editorial Ra-Ma. www.ra-ma.es ; =================================================================== ;*********************************** Elemental_06.asm ************************** ********* ; ; =================================================================== ; Del libro "MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS" ; E. Palacios, F. Remiro y L. López. ; Editorial Ra-Ma. www.ra-ma.es ; =================================================================== ; ; 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". ; ; ZONA DE DATOS **************************************************************** ****** __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC LIST P=16F84A ; Procesador utilizado. INCLUDE <P16F84A.INC> ; Definición de algunos operandos utilizados. ; ZONA DE CÓDIGOS ************************************************************** ****** ORG 0 ; El programa comienza en la dirección 0. Inicio bsf STATUS,RP0 ; Acceso al Banco 1. clrf TRISB ; Las líneas del Puerto B se configuran como salida. movlw b'00011111' ; Las 5 líneas del Puerto A se configuran como entrada. movwf TRISA bcf STATUS,RP0 ; Acceso al Banco 0. Principal swapf PORTA,W ; Intercambia nibbles del Puerto A y el resultado lo movwf PORTB ; lleva al Puerto B para que se visualice. goto Principal ; Crea un bucle cerrado e infinito. END ; Fin del programa. ; =================================================================== ; Del libro "MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS" ; E. Palacios, F. Remiro y L. López. ; Editorial Ra-Ma. www.ra-ma.es ; =================================================================== ;*********************************** Elemental_07.asm ************************** ********* ; ; =================================================================== ; Del libro "MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS" ; E. Palacios, F. Remiro y L. López. ; Editorial Ra-Ma. www.ra-ma.es ; =================================================================== ; ; Por el Puerto B obtiene el dato del Puerto A desplazando un bit hacia la izqui erda, por la ; derecha entrará un "1". Por ejemplo, si por el Puerto A se introduce "---11001 ", por el ; Puerto B aparecerá "xx110011" (no importa el estado de los dos bits superiores del Puerto B). ; ; ZONA DE DATOS **************************************************************** ***** __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC LIST P=16F84A ; Procesador utilizado. INCLUDE <P16F84A.INC> ; Definición de algunos operandos utilizados. ; ZONA DE CÓDIGOS ************************************************************** ****** ORG 0 ; El programa comienza en la dirección 0. Inicio bsf STATUS,RP0 ; Acceso al Banco 1. clrf TRISB ; Las líneas del Puerto B se configuran como salida. movlw b'00011111' ; Las 5 líneas del Puerto A se configuran como entrada. movwf TRISA bcf STATUS,RP0 ; Acceso al Banco 0. Principal bsf STATUS,C ; Este es el "1" que entrará por la derecha. rlf PORTA,W ; Rota los bits una posición a la izquierda y lo movwf PORTB ; lleva al Puerto B para que se visualice. goto Principal ; Se crea un bucle cerrado e infinito. END ; Fin del programa. ; =================================================================== ; Del libro "MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS" ; E. Palacios, F. Remiro y L. López. ; Editorial Ra-Ma. www.ra-ma.es ; =================================================================== ;*********************************** Elemental_08.asm ************************** ********* ; ; =================================================================== ; Del libro "MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS" ; E. Palacios, F. Remiro y L. López. ; Editorial Ra-Ma. www.ra-ma.es ; =================================================================== ; ; Por el Puerto B se obtiene el dato del Puerto A desplazando un bit hacia la de recha, por ; la izquierda entrará un "0". Por ejemplo, si por el Puerto A se introduce "--- 11001", ; por el Puerto B aparecerá "0xxx1100". ; ZONA DE DATOS **************************************************************** ***** __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC LIST P=16F84A ; Procesador utilizado. INCLUDE <P16F84A.INC> ; Definición de algunos operandos utilizados. ; ZONA DE CÓDIGOS ************************************************************** ****** ORG 0 ; El programa comienza en la dirección 0. Inicio bsf STATUS,RP0 ; Acceso al Banco 1. clrf TRISB ; Las líneas del Puerto B se configuran como salida. movlw b'00011111' ; Las 5 líneas del Puerto A se configuran como entrada. movwf TRISA bcf STATUS,RP0 ; Acceso al Banco 0. Principal bcf STATUS,C ; Este "0" es el que entrará por la izquierda. rrf PORTA,W ; Rota los bits una posición a la derecha y lo movwf PORTB ; lleva al Puerto B para que se visualice. goto Principal ; Se crea un bucle cerrado e infinito. END ; Fin del programa. ; =================================================================== ; Del libro "MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS" ; E. Palacios, F. Remiro y L. López. ; Editorial Ra-Ma. www.ra-ma.es ; =================================================================== ;*********************************** Elemental_09.asm ************************** ********* ; ; =================================================================== ; Del libro "MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS" ; E. Palacios, F. Remiro y L. López. ; Editorial Ra-Ma. www.ra-ma.es ; =================================================================== ; ; Por el Puerto B se obtiene el dato del Puerto A invirtiendo los bits pares. Lo s impares ; se dejan como en la entrada. El orden de los bits será "b7 b6 b5 b4 b3 b2 b1 b 0", siendo ; los pares el b6, b4, b2 y el b0. ; ; Por ejemplo, si por el Puerto A se introduce "---11001", por el Puerto B apare cerá ; "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'xxxx1x0 x'). ; ; Ayuda: Utiliza la función XOR y la máscara b'01010101' ; ZONA DE DATOS **************************************************************** ***** __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC LIST P=16F84A ; Procesador utilizado. INCLUDE <P16F84A.INC> ; Definición de algunos operandos utilizados. Mascara EQU b'01010101' ; Máscara para invertir los bits pares mediante la ; función XOR con "1". ; ZONA DE CÓDIGOS ************************************************************** ****** ORG 0 ; El programa comienza en la dirección 0. Inicio bsf STATUS,RP0 ; Acceso al Banco 1. clrf TRISB ; Las líneas del Puerto B se configuran como salida. movlw b'00011111' ; Las 5 líneas del Puerto A se configuran como entrada. movwf TRISA bcf STATUS,RP0 ; Acceso al Banco 0. Principal movf PORTA,W ; Carga el registro de datos del Puerto A en W. xorlw Mascara ; Invierte los bits pares, dejando igual los impares. movwf PORTB ; El resultado se visualiza por el puerto de salida. goto Principal ; Se crea un bucle cerrado e infinito. END ; Fin del programa. ; =================================================================== ; Del libro "MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS" ; E. Palacios, F. Remiro y L. López. ; Editorial Ra-Ma. www.ra-ma.es ; =================================================================== ;*********************************** Elemental_10.asm ************************** ********* ; ; =================================================================== ; Del libro "MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS" ; E. Palacios, F. Remiro y L. López. ; Editorial Ra-Ma. www.ra-ma.es ; =================================================================== ; ; Por el Puerto B se obtiene el dato de las cinco líneas del Puerto A al que est án conectado ; un array de interruptores. Por ejemplo, si por el Puerto A se introduce "---11 001", por ; el Puerto B aparecerá "xxx11001" (el valor de las tres líneas superiores no im porta). ; ; Esta operación la realizará una única vez. Después el programa entrará en modo ; "Standby" o de bajo consumo del cual no podrá salir después. ; ZONA DE DATOS **************************************************************** ****** __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC ; Configuración para el ; grabador. LIST P=16F84A ; Procesador utilizado. INCLUDE <P16F84A.INC> ; Definición de algunos operandos utilizados. ; ZONA DE CÓDIGOS ************************************************************** ****** ORG 0 ; El programa comienza en la dirección 0. Inicio bsf STATUS,RP0 ; Acceso al Banco 1. clrf TRISB ; Las líneas del Puerto B configuradas como salida. movlw b'00011111' ; Las 5 líneas del Puerto A configuradas como entrada. movwf TRISA bcf STATUS,RP0 ; Acceso al Banco 0. Principal movf PORTA,W ; Carga el registro de datos del Puerto A en W. movwf PORTB ; El contenido de W se deposita en el Puerto B. sleep ; El programa entra en modo "Bajo Consumo" del cual no ; podrá salir. END ; Fin del programa. ; =================================================================== ; Del libro "MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS" ; E. Palacios, F. Remiro y L. López. ; Editorial Ra-Ma. www.ra-ma.es ; =================================================================== ;************************************** Ensam_01.asm *************************** ********* ; ; =================================================================== ; Del libro "MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS" ; E. Palacios, F. Remiro y L. López. ; Editorial Ra-Ma. www.ra-ma.es ; =================================================================== ; ; Por los LEDs conectados al Puerto B visualiza el valor de una constante, por e jemplo el ; número binario b'01010101'. ; ZONA DE DATOS **************************************************************** ****** __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _RC_OSC ; Configuración para el ; grabador. LIST P=16F84A ; Procesador utilizado. INCLUDE <P16F84A.INC> ; En este fichero se definen las etiquetas del PIC. Constante EQU b'01010101' ; Por ejemplo, la constante tiene este valor. ; ZONA DE CÓDIGOS ************************************************************** ****** ORG 0 ; El programa comienza en la dirección 0 de la Inicio ; memoria de programa. bsf STATUS,RP0 ; Pone a 1 el bit 5 del STATUS. Acceso al Banco 1. clrf TRISB ; Las líneas del Puerto B configuradas como salida. bcf STATUS,RP0 ; Pone a 0 el bit 5 del STATUS. Acceso al Banco 0. movlw Constante ; Carga el registro de trabajo W con la constante. Principal movwf PORTB ; El contenido de W se deposita en el puerto de salida. goto Principal ; Crea un bucle cerrado e infinito END ; Fin del programa. ; =================================================================== ; Del libro "MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS" ; E. Palacios, F. Remiro y L. López. ; Editorial Ra-Ma. www.ra-ma.es ; =================================================================== ;************************************** Ensam_02.asm *************************** ********* ; ; =================================================================== ; Del libro "MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS" ; E. Palacios, F. Remiro y L. López. ; Editorial Ra-Ma. www.ra-ma.es ; =================================================================== ; ; Los LEDs conectados al nibble bajo del Puerto B se apagan y los conectados al nibble alto ; se encienden. ; ; ZONA DE DATOS **************************************************************** ****** __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC ; Configuración para el ; grabador. LIST P=16F84A ; Procesador utilizado. INCLUDE <P16F84A.INC> ; En este fichero se definen las etiquetas del PIC. Constante EQU b'11110000' ; ZONA DE CÓDIGOS ************************************************************** ****** ORG 0 ; El programa comienza en la dirección 0 de la Inicio ; memoria de programa. bsf STATUS,RP0 ; Pone a 1 el bit 5 del STATUS. Acceso al Banco 1. clrf TRISB ; Las líneas del Puerto B configuradas como salida. bcf STATUS,RP0 ; Pone a 0 el bit 5 del STATUS. Acceso al Banco 0. movlw Constante ; Carga el registro de trabajo W con la constante. Principal movwf PORTB ; El contenido de W se deposita en el puerto de salida. goto Principal ; Crea un bucle cerrado e infinito END ; Fin del programa. ; =================================================================== ; Del libro "MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS" ; E. Palacios, F. Remiro y L. López. ; Editorial Ra-Ma. www.ra-ma.es ; =================================================================== ;************************************** Ensam_03.asm *************************** ********* ; ; =================================================================== ; Del libro "MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS" ; E. Palacios, F. Remiro y L. López. ; Editorial Ra-Ma. www.ra-ma.es ; =================================================================== ; ; 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 "---11 001", por ; el Puerto B aparecerá "xxx11001" (el valor de las tres líneas superiores no im porta). ; ZONA DE DATOS **************************************************************** ****** __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC ; Configuración para el ; grabador. LIST P=16F84A ; Procesador. INCLUDE <P16F84A.INC> ; Definición de los operandos utilizados. ; ZONA DE CÓDIGOS ************************************************************** ****** ORG 0 ; El programa comienza en la dirección 0 de memoria de ; programa. Inicio bsf STATUS,RP0 ; Pone a 1 el bit 5 del STATUS. Acceso al Banco 1. clrf TRISB ; Las líneas del Puerto B se configuran como salidas. movlw b'11111111' movwf TRISA ; Las líneas del Puerto A se configuran como entradas. bcf STATUS,RP0 ; Pone a 0 el bit 5 de STATUS. Acceso al Banco 0. Principal movf PORTA,W ; Lee el Puerto A. movwf PORTB ; El contenido de W se visualiza por el Puerto B. goto Principal ; Crea un bucle cerrado. END ; Fin del programa. ; =================================================================== ; Del libro "MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS" ; E. Palacios, F. Remiro y L. López. ; Editorial Ra-Ma. www.ra-ma.es ; =================================================================== ;************************************ Saltos_01.asm **************************** ********* ; ; =================================================================== ; Del libro "MICROCONTROLADOR PIC16F84A. DESARROLLO DE PROYECTOS" ; E. Palacios, F. Remiro y L. López. ; Editorial Ra-Ma. www.ra-ma.es ; =================================================================== ; ; El Puerto B, que actúa como salida es controlado por el bit 0 del Puerto A, qu e actúa 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 PORTA es "0", se encienden los LEDs del nibble alto y se apa gan los bajo. ; ; ZONA DE DATOS **************************************************************** ***** __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC LIST P=16F84A INCLUDE <P16F84A.INC> ; ZONA DE CÓDIGOS ************************************************************** ****** ORG 0 ; El programa comienza en la dirección 0. Inicio bsf STATUS,RP0 ; Acceso al Banco 1. clrf TRISB ; Las líneas del Puerto B se configuran como salida. movlw b'00011111' ; Las 5 líneas del Puerto A se configuran como entrada. movwf TRISA bcf STATUS,RP0 ; Acceso al Banco 0. Principal ; Supone que el bit de entrada estará a "1" y por movlw b'11111111' ; tanto se van encender todos los LEDs de salida. btfss PORTA,0 ; ¿Bit 0 del PORTA es "1"? movlw b'11110000' ; No, entonces se enciende sólo el nibble alto. movwf PORTB ; Resultado se visualiza por el puerto de salida. goto Principal ; Crea un bucle cerrado e infinito. END ; Fin del programa. ; =================================================================== ; Del libro "MICROCONTROLADOR PIC16F84A. DESARROLLO DE PROYECTOS" ; E. Palacios, F. Remiro y L. López. ; Editorial Ra-Ma. www.ra-ma.es ; =================================================================== ;************************************ Saltos_02.asm **************************** ********* ; ; =================================================================== ; Del libro "MICROCONTROLADOR PIC16F84A. DESARROLLO DE PROYECTOS" ; E. Palacios, F. Remiro y L. López. ; Editorial Ra-Ma. www.ra-ma.es ; =================================================================== ; ; Compara el dato del puerto de entrada PORTA y un "Numero" (por ejemplo el 13): ; - Si (PORTA) = Numero, se encienden todos los LEDs de salida. ; - Si (PORTA) y Numero no son iguales, se activan los LEDs pares de salida y ap agan impares. ; ; ZONA DE DATOS **************************************************************** ****** __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC LIST P=16F84A INCLUDE <P16F84A.INC> Numero EQU d'13' ; Por ejemplo, este número a comparar. ; ZONA DE CÓDIGOS ************************************************************** ****** ORG 0 ; El programa comienza en la dirección 0. Inicio bsf STATUS,RP0 ; Acceso al Banco 1. clrf TRISB ; Las líneas del Puerto B se configuran como salida. movlw b'00011111' ; Las 5 líneas del Puerto A se configuran como entrada. movwf TRISA bcf STATUS,RP0 ; Acceso al Banco 0. Principal movlw Numero ; Carga el número a comparar. subwf PORTA,W ; (W)=(PORTA)-Numero. movlw b'11111111' ; Supone que son iguales y por tanto va a ; encender todos los LEDs de salida. btfss STATUS,Z ; ¿Z=1?, ¿(PORTA) = Numero? movlw b'01010101' ; No, son distintos. Se encienden pares. movwf PORTB ; Resultado se visualiza por el puerto de salida. goto Principal ; Crea un bucle cerrado e infinito. END ; Fin del programa. ; =================================================================== ; Del libro "MICROCONTROLADOR PIC16F84A. DESARROLLO DE PROYECTOS" ; E. Palacios, F. Remiro y L. López. ; Editorial Ra-Ma. www.ra-ma.es ; =================================================================== ;************************************ Saltos_03.asm **************************** ********* ; ; =================================================================== ; Del libro "MICROCONTROLADOR PIC16F84A. DESARROLLO DE PROYECTOS" ; E. Palacios, F. Remiro y L. López. ; Editorial Ra-Ma. www.ra-ma.es ; =================================================================== ; ; Compara el dato introducido por el Puerto A que actúa como entrada, con un "Nu mero": ; - Si (PORTA) es mayor o igual que "Numero" se encienden todos los LEDs de sali da. ; - Si (PORTA) es menor que "Numero" se activan los LEDs pares de salida. ; ; ZONA DE DATOS **************************************************************** ****** __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC LIST P=16F84A INCLUDE <P16F84A.INC> Numero EQU d'13' ; Por ejemplo, este número a comparar. ; ZONA DE CÓDIGOS ************************************************************** ****** ORG 0 ; El programa comienza en la dirección 0. Inicio bsf STATUS,RP0 ; Acceso al Banco 1. clrf TRISB ; Las líneas del Puerto B se configuran como salida. movlw b'00011111' ; Las 5 líneas del Puerto A se configuran como entrada. movwf TRISA bcf STATUS,RP0 ; Acceso al Banco 0. Principal movlw Numero ; Carga el número a comparar. subwf PORTA,W ; (W)=(PORTA)-Numero. movlw b'11111111' ; Supone que son iguales y por tanto va a ; encender todos los LEDs de salida. btfss STATUS,C ; ¿C=1?, ¿(W) positivo?, ¿(PORTA)>=Numero? movlw b'01010101' ; No, PORTA es menor (ha resultado C=0). movwf PORTB ; Resultado se visualiza por el puerto de salida. goto Principal ; Crea un bucle cerrado e infinito. END ; Fin del programa. ; =================================================================== ; Del libro "MICROCONTROLADOR PIC16F84A. DESARROLLO DE PROYECTOS" ; E. Palacios, F. Remiro y L. López. ; Editorial Ra-Ma. www.ra-ma.es ; =================================================================== ;************************************ Saltos_04.asm **************************** ********* ; ; =================================================================== ; Del libro "MICROCONTROLADOR PIC16F84A. DESARROLLO DE PROYECTOS" ; E. Palacios, F. Remiro y L. López. ; Editorial Ra-Ma. www.ra-ma.es ; =================================================================== ; ; 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 . ; ; ZONA DE DATOS **************************************************************** ****** __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC LIST P=16F84A INCLUDE <P16F84A.INC> Numero EQU d'13' ; Por ejemplo, este número a comparar. ; ZONA DE CÓDIGOS ************************************************************** ****** ORG 0 ; El programa comienza en la dirección 0. Inicio bsf STATUS,RP0 ; Acceso al Banco 1. clrf TRISB ; Las líneas del Puerto B se configuran como salida. movlw b'00011111' ; Las 5 líneas del Puerto A se configuran como entrada. movwf TRISA bcf STATUS,RP0 ; Acceso al Banco 0. Principal movf PORTA,W ; Carga el número con el dato de entrada. sublw Numero ; (W)=Numero-(PORTA). movlw b'11111111' ; Supone que (PORTA)>Numero, por tanto va a ; encender todos los LEDs de salida. btfsc STATUS,C ; ¿C=0?, ¿(W) negativo?, ¿Numero<(PORTA)? movlw b'01010101' ; NO, PORTA es menor o igual (ha resultado C=1). movwf PORTB ; Resultado se visualiza por el puerto de salida. goto Principal END ; =================================================================== ; Del libro "MICROCONTROLADOR PIC16F84A. DESARROLLO DE PROYECTOS" ; E. Palacios, F. Remiro y L. López. ; Editorial Ra-Ma. www.ra-ma.es ; =================================================================== ;************************************ Saltos_05.asm **************************** ********* ; ; =================================================================== ; Del libro "MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS" ; E. Palacios, F. Remiro y L. López. ; Editorial Ra-Ma. www.ra-ma.es ; =================================================================== ; ; Compara el dato del puerto de entrada PORTA con un "Numero". Tres posibilidade s: ; - 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 nibble alto y se apagan los de l bajo. ; ; Hay que destacar que al no haber instrucciones de comparación, estas se realiz an ; mediante restas. ; ZONA DE DATOS **************************************************************** ****** __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC LIST P=16F84A ; Procesador utilizado. INCLUDE <P16F84A.INC> ; Fichero donde se definen las etiquetas del PIC. Numero EQU d'13' ; Por ejemplo, este número a comparar. ; ZONA DE CÓDIGOS ************************************************************** ****** ORG 0 ; El programa comienza en la dirección 0. Inicio bsf STATUS,RP0 ; Acceso al Banco 1. clrf TRISB ; Las líneas del Puerto B se configuran como salida. movlw b'00011111' ; Las 5 líneas del Puerto A se configuran como entrada. movwf TRISA bcf STATUS,RP0 ; Acceso al Banco 0. Principal movlw Numero ; Carga el número 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' ; Sí, por tanto (PORTA) > Numero. ActivaSalida movwf PORTB ; Resultado se visualiza por el puerto de salida. goto Principal ; Crea un bucle cerrado e infinito. END ; Fin del programa. ; =================================================================== ; Del libro "MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS" ; E. Palacios, F. Remiro y L. López. ; Editorial Ra-Ma. www.ra-ma.es ; =================================================================== ;************************************* Saltos_06.asm *************************** ********* ; ; =================================================================== ; Del libro "MICROCONTROLADOR PIC16F84A. DESARROLLO DE PROYECTOS" ; E. Palacios, F. Remiro y L. López. ; Editorial Ra-Ma. www.ra-ma.es ; =================================================================== ; ; Lee las tres líneas más bajas del puerto A, que fijan la cantidad del número d e LEDs a ; iluminar. Por ejemplo, si (PORTA)=b'---00101' (cinco) se encenderán cinco diod os LEDs ; (D4, D3, D2, D1 y D0). Hay que utilizar la instrucción de rotación "rlf". ; ; ZONA DE DATOS **************************************************************** ****** __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC LIST P=16F84A INCLUDE <P16F84A.INC> CBLOCK 0x0C ; RAM de usuario a partir de esta dirección. Contador ; Contará las veces que tiene que rotar el diodo. RegDesplaza ; Registro que se desplazará. ENDC ; ZONA DE CÓDIGOS ************************************************************** ****** ORG 0 ; El programa comienza en la dirección 0. Inicio bsf STATUS,RP0 ; Acceso al Banco 1. clrf TRISB ; Las líneas del Puerto B se configuran como salida. movlw b'00011111' ; Las 5 líneas del Puerto A se configuran como entrada. movwf TRISA bcf STATUS,RP0 ; Acceso al Banco 0. Principal movf PORTA,W ; Lee el dato de entrada. andlw b'00000111' ; Se queda con los tres bits más bajos. movwf Contador ; El dato de entrada pasará al Contador. movf Contador,F ; Solo sirve para posicionar flag Z del STATUS. btfsc STATUS,Z ; ¿Z=0?, ¿(Contador) es distinto de cero? goto ActivaSalida ; No. Es cero. Los LEDs se apagan. clrf RegDesplaza ; Si, efectivamente es distinto de cero. Rota. DesplazaOtraVez ; La primera vez con todos los LEDs apagados. bsf STATUS,C ; Pone a 1 el Carry. Este 1 será el que rote a rlf RegDesplaza,F ; izquierdas por el registro RegDesplaza. decfsz Contador,F ; Rota tantas veces como indique el (Contador). goto DesplazaOtraVez movf RegDesplaza,W ; Se carga en W para visualizarlo a la salida. ActivaSalida movwf PORTB ; Resultado se visualiza por el puerto de salida. goto Principal END ; =================================================================== ; Del libro "MICROCONTROLADOR PIC16F84A. DESARROLLO DE PROYECTOS" ; E. Palacios, F. Remiro y L. López. ; Editorial Ra-Ma. www.ra-ma.es ; =================================================================== ;************************************ BCD_01.asm ******************************* ********* ; ; =================================================================== ; Del libro "MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS" ; E. Palacios, F. Remiro y L. López. ; Editorial Ra-Ma. www.ra-ma.es ; =================================================================== ; ; Un número binario de 8 bits es convertido a BCD. El resultado se guarda en tre s posiciones ; de memorias llamadas Centenas, Decenas y Unidades. Además al final las unidade s estarán en el ; nibble bajo del registro W y las decenas en el nibble alto. En los diodos LEDs conectados al ; puerto de salida se visualizarán las decenas y las unidades. ; ; El máximo número a convertir será el 255 que es el máximo valor que puede adqu irir el ; número binario de entrada de 8 bits. ; ; El procedimiento utilizado es mediante restas de 10 tal como se explica en el siguiente ; ejemplo que trata de la conversión del número 124 a BCD: ; ; (Centenas) (Decenas) (Unidades) ¿(Unidades)<10? ¿(Decenas)=10? ; ---------- --------- ---------- -------------- ------------------------- ; ; 0 0 124 NO, resta 10 Incrementa (Decenas). ; 0 1 114 NO, resta 10 NO. Incrementa (Decenas). ; 0 2 104 NO, resta 10 NO. Incrementa (Decenas). ; 0 3 94 NO, resta 10 NO. Incrementa (Decenas). ; 0 4 84 NO, resta 10 NO. Incrementa (Decenas). ; 0 5 74 NO, resta 10 NO. Incrementa (Decenas). ; 0 6 64 NO, resta 10 NO. Incrementa (Decenas). ; 0 7 54 NO, resta 10 NO. Incrementa (Decenas). ; 0 8 44 NO, resta 10 NO. Incrementa (Decenas). ; 0 9 34 NO, resta 10 NO. Incrementa (Decenas). ; 1 0 24 NO, resta 10 Sí. (Decenas)=0, y además ; incrementa (Centenas) ; 1 1 14 NO, resta 10 NO. Incrementa (Decenas) ; 1 2 4 SÍ, se acabó. ; ; El número a convertir será la constante "Numero". ; ; ZONA DE DATOS **************************************************************** ****** __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC LIST P=16F84A INCLUDE <P16F84A.INC> CBLOCK 0x0C ; La zona de memoria de usuario comienza en esta Centenas ; dirección de memoria RAM de datos. Decenas ; Posición 0x0D de RAM. Unidades ; Posición 0x0E de RAM. ENDC Numero EQU .124 ; Por ejemplo. ; ZONA DE CÓDIGOS ************************************************************** ****** ORG 0 ; El programa comienza en la dirección 0. Inicio bsf STATUS,RP0 ; Acceso al Banco 1. clrf TRISB ; Las líneas del Puerto B se configuran como salida. bcf STATUS,RP0 ; Acceso al Banco 0. Principal clrf Centenas ; Carga los registros con el resultado inicial. clrf Decenas ; En principio (Centenas)=0 y (Decenas)=0. movlw Numero movwf Unidades ; Se carga el número binario a convertir. BCD_Resta10 movlw .10 ; A las unidades se les va restando 10 en cada subwf Unidades,W ; pasada. (W)=(Unidades)-10. btfss STATUS,C ; ¿(C)=1?, ¿(W) positivo?, ¿(Unidades)>=10?. goto BIN_BCD_Fin ; No, es menor de 10. Se acabó. BCD_IncrementaDecenas movwf Unidades ; Recupera lo que queda por restar. incf Decenas,F ; Incrementa las decenas y comprueba si llega a movlw .10 ; 10. Lo hace mediante una resta. subwf Decenas,W ; (W)= (Decenas)-10. btfss STATUS,C ; ¿(C)=1?, ¿(W) positivo?, ¿(Decenas)>=10?. goto BCD_Resta10 ; No. Vuelve a dar otra pasada, restándole 10. BCD_IncrementaCentenas clrf Decenas ; Pone a cero las decenas incf Centenas,F ; e incrementa las centenas. goto BCD_Resta10 ; Otra pasada, resta 10 al número a convertir. BIN_BCD_Fin swapf Decenas,W ; En el nibble alto de W también las decenas. addwf Unidades,W ; En el nibble bajo de W las unidades. movwf PORTB ; Se visualiza por el puerto de salida. sleep ; Se queda permanentemente en reposo. END ; Fin del programa. ; =================================================================== ; Del libro "MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS" ; E. Palacios, F. Remiro y L. López. ; Editorial Ra-Ma. www.ra-ma.es ; ===================================================================
referencia: MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS"
; E. Palacios, F. Remiro y L. López. ; Editorial Ra-Ma. www.ra-ma.es