Вы находитесь на странице: 1из 18

__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC

LIST P=16F84A ; Procesador utilizado.


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

Вам также может понравиться