• No se han encontrado resultados

Entrenadores

N/A
N/A
Protected

Academic year: 2021

Share "Entrenadores"

Copied!
283
0
0

Texto completo

(1)

Entrenadores de

Microcontroladores PIC

Profesor: Pedro Alonso Sanz

Instituto: I.E.S. Joan Miró

(2)

Índice

Página

1

.- Entrenador Básico 0 ... 4

1.1.- Ejemplo1.asm Leer el Puerto C y transferirlo al Puerto B ... 5

1.2.- Ejemplo2.asm Leer el Puerto C complementarlo y transferirlo al Puerto B ... 7

1.3.- Ejemplo3.asm Parpadeo de un Led ... 9

1.4.- Ejemplo3A.asm Parpadeo de un Led ,utilizando una librería de Tiempo RETAR_1S.INC... 12

1.5.- Ejemplo3B.asm Parpadeo de un Led utilizando una librería llamada RETARDOS.INC del libro de Desarrollo de Proyectos. .... 14

1.6.- Ejemplo4.asm Simular las luces del Coche Fantástico. ... 15

1.7.- Ejemplo5.asm Simular las luces del Coche Fantástico controlado por PCO. ... 18

1.8.- Nom_disp.asm Poner el Nombre en el Display. ... 21

1.9.- Sum_Nibl.asm Sumar los nibles del Puerto C y llevarlos al Puerto B. ... 24

1.10.- Dir_ind.asm Direccionamiento Indirecto. ... 26

1.11.- Pagina1.asm Trabajar con la Pagina 1 de memoria de programa. ... 28

1.12.- RETARDO_1S.INC Librería Casera de Retardo 1 Segundo. ... ... 30

1.13.- RETARDOS.INC Librería de Retardos del libro de Desarrollo de Proyectos. ... 31

2.- Entrenador Básico 1 ... 35

2.1.- Ejemplo6.asm Encender displays dependiendo de PC0. ... 36

2.2.- Ejemplo7.asm Contar pulsos procedentes de PC0 y llevarlos al Display de Unidades. ... 38

2.3.- Ejemplo8.asm Contar pulsos procedentes de PC0 y llevarlos al Display de Unidades y Decenas. ... 41

3.- Entrenador Básico 2 ... 46

3.1.- Ejemplo9.asm Contar pulsos procedentes de PC0 y llevarlos al Display de Unidades y Decenas. ... 47

4 .- Entrenador Básico 2A ... 52

4.1.- PWM_1.asm. Control de un Servomotor de Posición con PWM a través del Puerto B ... 53

4.2.- PWM_CAD.asm Control de un Servomotor de Posición con PWM a través de un Potenciómetro. ... 55

5.- Entrenador Básico 3. ... 58

(3)

Índice

Página

5.2.- Ejemp_11.asm Conversión Analógico/Digital. ... 64

5.3.- Ejemp_12.asm Contar pulsos del exterior utilizando un Temporizador TIMER 0. ... 66

5.4.- Ejemp_13.asm Transferir una Tabla de datos de memoria EPROM a RAM y Puerto B utilizando como subrutina de tiempo el TIMER 0 y direccionamiento indirecto. ... 68

5.5.- Ejemp_14.asm Detectar el numero mayor de una Tabla. ... 71

6.- Entrenador Básico 4 ... 75

6.1.- T_S_A.asm Transmisor SERIE asíncrona. ... 76

6.2.- R_S_A.asm Receptor SERIE asíncrona. ... 79

6.3.- T1_S_RF.asm Transmisor SERIE asíncrona utilizando Librería de Transmisión T_S_RF_INC. ... 82

6.4.- RE1_S_RF.asm Receptor SERIE asíncrona utilizando Librería de Recepción R_S_RF.INC. ... 84

6.5.- T_S_RF.INC Librería Transmisor SERIE vía Radiofrecuencia para una Tarjeta Emisora SAW para Datos 433,92 MHz ( CEBEK C-0503 ) Llave de entrada fija. Cargar en W el dato a transmitir... 87

6.6.- R_S_RF.INC Librería Receptor SERIE vía Radiofrecuencia para una Tarjeta Emisora SAW para Datos 433,92 MHz ( CEBEK C-0504 )

La Llave de entrada fija.

Los datos se validan si llegan dos datos idénticos consecutivos.

El dato recibido se carga en el registro

DATO_SERIE_VALIDO. ... 90

6.7.- T_M_S_RF.INC Librería de Transmisor SERIE vía Radiofrecuencia para una Tarjeta Emisora SAW para Datos 433,92 MHz. ( CEBEK C-0503 ) Cargar la llave de entrada en el registro LLAVE_ENTRADA Cargar en W el dato a transmitir. ... 94

6.8.- R_M_S_RF.INC Librería Receptor SERIE vía Radiofrecuencia para una Tarjeta Emisora ;SAW para Datos 433,92 MHz. ( CEBEK C-0504 ) La Llave de entrada aleatoria. Los datos se validan si llegan dos datos idénticos consecutivos. El dato recibido se carga en el registro DATO_SERIE_VALIDO. ... 98

(4)

Índice

Página

7.- Entrenador Básico 5 ... 102

7.1.- Tecla0.asm Manejo del Teclado utilizando la técnica de polling. ... 103 7.2.- Tecl_01.asm Manejo del Teclado utilizando la técnica de

interrupción del programa principal. ... 105

7.2.- Tecl_02.asm Manejo del Teclado utilizando la técnica de interrupción del programa principal y llevando

los datos al display de 7 segmentos. ... 108 7.4.- HEX_7SEG.INC Librería que transforma un código hexadecimal

en 7 segmentos. ... 110 7.5.-TECLADO.INC Librería de control del teclado. ... 111

8.- Entrenador Básico 6 ... 115

8.1.- LCD_01.asm Visualización de un mensaje en el LCD

carácter a carácter. ... 116 8.2.- LCD_02.asm Visualización de un mensaje en el LCD

carácter a carácter con retardo de 500 mS,

borrar pantalla y comenzar de nuevo. ... 117 8.3.- LCD_03.asm Programa ejemplo para comprender la

utilización de las subrutinas LCD_ByteCompleto,

LCD_Byte, LCD_Nibble y LCD_DosEspaciosBlancos. ... 118 8.4.- LCD_04.asm Visualización en el LCD un contador descendente. ... 120 8.5.- LCD_05.asm Visualizar en la pantalla del LCD los pulsos

generados del exterior. ... 122 8.6.- LCD_06.asm Visualizar en la pantalla del LCD los pulsos

generados del exterior hasta un número máximo,

se resetea y comienza de nuevo la cuenta. ... 123 8.7.- LCD_07.asm Mientras se mantenga presionado el pulsador

conectado al pin RA4, incrementa un contador

que se visualiza en la pantalla del LCD. ... 125 8.8.- LCD_08.asm Mientras se mantenga presionado el pulsador

conectado al pin RA4, incrementa un contador que se visualiza en la pantalla del LCD en formato

decimal ,hexadecimal y binario. ... 127 8.9.- Mens_01.asm Visualización de un mensaje fijo utilizando

la librería LCD_4BIT.INC. ... 129 8.10.- Mens_02.asm Visualización de un mensaje fijo utilizando

la librería LCD_MENS.INC. ... 131 8.11.- Mens_03.asm Visualización de varios mensajes fijo utilizando

la librería LCD_MENS.INC. ... 132 8.12.- Mens_03B.asm Visualización de varios mensajes fijo utilizando

la librería LCD_MENS.INC cuando se visualiza el

(5)

Índice

Página

8.13.- Mens_04.asm Visualización de mensajes parpadeantes

en dos líneas del LCD. ... 135 8.14.- Mens_05.asm Visualización de un mensaje fijo y parpadeantes. ... 137 8.15.- Mens_06.asm Visualización de mensajes en función de un pulsador. ... 138 8.16.- Mens_07.asm El modulo LCD visualiza un mensaje largo

(mas de 16 caracteres) que se desplaza. ... 141 8.17.- Mens_08.asm Juego de la Quiniela. ... 142 8.18.- Mens_09.asm La pantalla del LCD visualiza un mensaje

en función de un pulsador. ... 144 8.19.- BIN_BCD.INC Librería que convierte un número Binario en BCD.

El resultado se guarda en tres posiciones de memorias llamadas: BCD_Centenas, BCD_Decenas

y BCD_Unidades. ... 145 8.20.- LCD_4BIT.INC Librería que permiten realizar las tareas básicas

de control de un módulo LCD de 2 líneas por 16

caracteres, compatible con el modelo LM016L. ... 146 8.21.- LCD_MENS.INC Librería de subrutinas para el manejo de mensajes

a visualizar en un visualizador LCD. ... 151

9.- Entrenador Básico 7 ... 154

9.1.- Tecla_01.asm La pantalla del LCD visualiza el orden de la tecla

pulsada utilizando la técnica de polling. ... 155 9.2.- Tecla_02.asm La pantalla del LCD visualiza el valor hexadecimal

de la tecla pulsada utilizando la técnica de polling. ... 156 9.3.- Tecl_03.asm La pantalla del LCD visualiza el valor hexadecimal

de la tecla pulsada utilizando técnicas de interrupción. .. 157 9.4.- Tecla_04.asm La pantalla del LCD visualiza caracteres españoles

en función de la tecla pulsada. ... 159 9.5.- Tecla_05.asm La pantalla del LCD aparece un mensaje en

movimiento y fijo en la primera línea y en la

segunda línea visualiza la tecla pulsada. ……… 161 9.6.- Tecla_06.asm La pantalla del LCD aparece la tecla pulsada

primero la línea 1 y después en la línea 2

repitiéndose el proceso. ... 163 9.7.- Tecla_07.asm La pantalla del LCD aparece la tecla pulsada si esta

es decimal y si se pulsa otra tecla borra pantalla. ... 165 9.8.- Tecla_08.asm Suma el valor de tres teclas y aparece en el LCD

en decimal y hexadecimal. ... 166 9.8.- Tecla_09.asm Cerradura Electrónica. ... 169

(6)

Índice

Página

10.- Entrenador Básico 7-1 ... 173

10.1.- Tecla_10.asm Cerradura Electrónica activando un motor PAP. ... 174

11.- Entrenador Básico 8. ... 179

11.1.- I2C1.asm Leer un dato del circuito integrado expansor de bus PCF8476 y transmitirlo a través del bus I2C al microprocesador. Transferir el dato del

microprocesador a otro C.I. PCF8476. ... 180 11.2.- I2C2.asm Leer un dato del circuito integrado expansor de

bus PCF8476 y transmitirlo a través del bus I2C al microprocesador. Transferir el dato del

microprocesador a otro C.I. PCF8476 interrumpiendo

un programa principal. ... 181 11.3.- I2C3.asm Realizar una conversión Analógica / Digital y

transmitirla a los expansores de bus PCF8476. ... 183

12.- Entrenador Básico 8-1. ... 186

12.1.- I2C4.asm Leer datos cada vez que activamos un Pulsador, de circuitos integrados expansores de bus PCF8476 y transmitirlo a través del bus I2C al microprocesador. Transferir los dato del microprocesador a

otros C.I. PCF8476. ... 187 12.2.- I2C5.asm Leer datos de circuitos integrados expansores de

bus PCF8476 y transmitirlo a través del bus I2C al microprocesador.

Transferir los datos del microprocesador a otros

C.I. PCF8476, interrumpiendo un programa principal. ... 189

13.- Entrenador Básico 9. ... 192

13.1.- I2C6.asm Leer constantemente la entrada analógica ANI0 del Esclavo 1 (PCF8591) y visualiza la tensión

en la pantalla del modulo LCD. ... 193 13.2.- I2C7.asm En la salida analógica del Esclavo 2 (PCF8591)

que trabaja como DAC se obtiene una tensión seleccionada por un pulsador conectado a la línea RB6 del PIC. La tensión varia entre 0,50 y 2,50 V

en saltos de 0,25 V y se visualiza en el modulo LCD. ... 196 13.3.- I2C8.asm Leer constantemente la entrada analógica ANI0

del Esclavo 1(PCF8591), llevarla al Esclavo 2 (PCF8591) y visualiza la tensión en la pantalla

del modulo LCD. ... 199 13.4.- I2C.INC Librería de Transmisión y recepción de datos con I2C. .... 203 13.5.- I2C1.INC Librería de Transmisión y recepción de datos con I2C1.

En la subrutina (Transmitir_dato_I2C) el Esclavo no

(7)

14.- Entrenador Básico 10. ... 208

14.1.- RTS232_1.asm En la pantalla del modulo LCD se visualizaran los caracteres que se reciban a través del puerto serie del ordenador. Lo que se escriba por el teclado del ordenador aparecerá en la pantalla del sistema

con microcontrolador. ... 209 14.2.- RTS232_2.asm En el modulo LCD se visualizan los caracteres que se

escriban en el teclado del ordenador y se transmiten a través de su puerto serie. Estos datos volverán a ser enviados por el microcontrolador al ordenador, para que se visualicen en su monitor. ... 210 14.3.- RTS232_3.asm Lo que se escriba por el teclado se visualiza en el

LCD y en el monitor del ordenador, pero en este

ultimo se visualiza un solo carácter por línea. ... 211 14.4.- RTS232_4.asm En el modulo LCD se visualizan los caracteres que se

escriben en el teclado del ordenador. Si pulsa la tecla Enter se comienza a escribir en la segunda línea de la pantalla del modulo LCD. ... 213 14.5.- RTS232_5.asm Este programa envía un mensaje grabado en la

memoria de programa del microcontrolador al ordenador. Es decir, en el monitor del ordenador

aparecerá el mensaje grabado en el PIC. ... 214 14.6.- RTS232_6.asm Este programa envía varios mensajes grabados en la

memoria de programa del microcontrolador al ordenador. Cada mensaje permanecerá en pantalla durante unos

segundos hasta que sea sustituido por el siguiente. ... 216 14.7.- RTS232_7.asm En el monitor del ordenador se visualizan mensajes

grabados en la memoria de programa del

microcontrolador. El cambio de mensaje se ejecuta

cada vez que se pulse la tecla Enter. ... 218 14.8.- RTS232_8.asm Programa que visualiza en el modulo LCD el código

ASCII en formato hexadecimal de la tecla pulsada y también en el monitor del ordenador en formato

decimal. ... 220 14.9.- RTS232_9.asm SISTEMA DE MONITORIZACION: Se trata de leer el

estado de las entradas conectadas a las líneas

<RB7:RB4> del Puerto B y se envia por el puerto RS232 a un terminal para monitorizar el estado de los mismos.

El estado de las entradas se mostrara cada 1 segundos. ... 221 14.10.- RTS23_10.asm SISTEMA DE MONITORIZACION: Se trata de leer el

estado de las entradas conectadas a las líneas

<RB7:RB4> del Puerto B y se envia por el puerto RS232 a un terminal para monitorizar el estado de los mismos. Se utilizara las interrupciones por cambio de nivel en una línea del Puerto B, por ello, las entradas deben

conectarse a la parte alta del Puerto B. ... 224 14.11.- RTS23_11.asm SISTEMA DE GOBIERNO DESDE ORDENADOR:

Desde el teclado de un ordenador se desea

(8)

14.12.- RS232_RT.INC Librería de transmisión-recepción serie asíncrona

según normas RS-232. ... 230 14.13.- RS232MEN.INC Librería de transmisión de mensajes desde el

microcontrolador hacia el ordenador a través del puerto

serie RS232. ... 232

15.- Entrenador Básico 11. ... 234

15.1.- Int_T_01.asm Onda cuadrada de 10 kHz aproximadamente, mediante la interrupción por desbordamiento

del Timer 0. ... 235 15.2.- Int_T_02.asm Onda cuadrada de 10 kHz exactos, mediante la

interrupción por desbordamiento del Timer 0. ... 236 15.3.- Int_T_03.asm Led ON/OFF 500 ms utilizando la interrupción

por desbordamiento del Timer 0. ... 238 15.4.- Int_T_04.asm Led ON (800 ms) Led OFF (500 ms), utilizando la

interrupción por desbordamiento del Timer 0. ... 240 15.5.- Int_T_05.asm Sistema multitarea ( Mostrar mensajes en el

LCD y LED ON/OFF (500 ms). ……….. 242 15.6.- Int_T_06.asm Mostrar mensajes en el LCD fijo en la primera

línea e intermitente en lasegunda línea utilizando

la interrupción del Timer 0. ... 244 15.7.- Int_C_01.asm Generar una señal cuadrada por PB2, de frecuencia

variable en función de PB7. El modulo LCD visualiza

dicha frecuencia. ... 246 15.8.- Int_C_02.asm Generar una señal cuadrada por PB2, de frecuencia

variable desde 300Hz hasta 4000Hz. ... 250 15.9.- Int_C_03.asm Encender y apagar una sirena en función de RB7 y

RB6, mostrar en el modulo LCD como esta la sirena. ... 252 15.10.- Int_C_04.asm Control del Ciclo de Trabajo de un señal cuadrada. ... 256 15.11.- Int_Re_01.asm Reloj digital en tiempo real sin puesta en hora

utilizando la interrupción del Timer 0. ... 260 15.12.- Int_Re_04.asm Reloj digital en tiempo real con puesta en hora. ... 264 15.13.- Int_Temp.asm Temporizador digital de precisión. ... 270

(9)
(10)
(11)

1.1.- Ejemplo1.asm (Entrenador Básico 0)

Diagrama de Flujo

Leer el Puerto C y transferirlo al Elegimos PIC List p=16f877 , f=inhx32 Asignación de nombres de RFS a direcciones. #include <p16f877.inc> ; Igualdades ; Registros

Sección de código de Reset

ORG OOH ; Dirección del vector de Reset GOTO COMIENZO ;Comienzo del Programa

Sección de Configuración ORG 0x05 ; Inicio de Programa COMIENZO RP0  1 ; Ir al Banco 1

TRISC  11111111 B ; Poner el Puerto C como entrada de datos. TRISB  00000000 B ; Poner el Puerto B como salida de datos. RP0  0 ; Ir al Banco 0

; Principal PORTB  PORTC

(12)

title " Leer el Puerto C y transferirlo al Puerto B "

;Programa para PIC 16F877. ;Velocidad del Reloj:4 MHz. ;Reloj instrucción: 1 MHz = 1 uS. ;Perro Guardián deshabilitado. ;Tipo de Reloj XT.

;Protección de Código: OFF.

;**************************** Elegimos PIC ******************************************************************** list p=16f877, f=inhx32

;************* Asignación de nombres de Registros de Funciones especiales a direcciones ************ #include <p16f877.inc> ;Este fichero contiene los nombres y direcciones de los

; registros de funciones especiales.

; Este fichero esta localizado en el directorio ; con el nombre MPASM.

;**************************** Igualdades *********************************************************************** ;**************************** Registros ************************************************************************ ;**************************** Sección Código de Reset *******************************************************

ORG 0x00 ;Dirección del Vector Reset GOTO COMIENZO ;Comienzo del Programa

;**************************** Sección de Configuración ****************************************************** ORG 0x05 ; Inicio de Programa

;(Una posición detrás del vector de Interrupción) COMIENZO BSF STATUS,RP0

MOVLW B'11111111' ; Poner el Puerto C como entrada de datos. MOVWF TRISC

CLRF TRISB ; Poner el Puerto B como salida de datos. BCF STATUS,RP0

;**************************** Principal ************************************************************************** SEG1 MOVF PORTC,W ; Leer el Puerto C y llevarlo al Acumulador.

MOVWF PORTB ; Transferir el dato del Acumulador al Puerto B GOTO SEG1

(13)

1.2.- Ejemplo2.asm (Entrenador Básico 0)

Diagrama de Flujo

Leer el Puerto C complementarlo y transferirlo al Puerto B Elegimos PIC List p=16f877 , f=inhx32 Asignación de nombres de RFS a direcciones. #include <p16f877.inc> ; Igualdades ; Registros

Sección de código de Reset

ORG OOH ; Dirección del vector de Reset GOTO COMIENZO ;Comienzo del Programa

Sección de Configuración ORG 0x05 ; Inicio de Programa COMIENZO RP0  1 ; Ir al Banco 1

TRISC  11111111 B ; Poner el Puerto C como entrada de datos. TRISB  00000000 B ; Poner el Puerto B como salida de datos. RP0  0 ; Ir al Banco 0

; Principal PORTB  PORTC

(14)

title " Leer el Puerto C, complementarlo y transferirlo al Puerto B "

;Programa para PIC 16F877. ;Velocidad del Reloj:4 MHz. ;Reloj instrucción: 1 MHz = 1 uS. ;Perro Guardián deshabilitado. ;Tipo de Reloj XT.

;Protección de Código: OFF.

;**************************** Elegimos PIC ********************************************************************* list p=16f877, f=inhx32

;**************************** Asignación de Registros de Funciones especiales a direcciones ************ #include <p16f877.inc> ;Este fichero contiene los nombres y direcciones de los

; registros de funciones especiales.

; Este fichero esta localizado en el directorio ; con el nombre MPASM.

;**************************** Igualdades *********************************************************************** ;**************************** Registros ************************************************************************ ;**************************** Sección Código de Reset *******************************************************

ORG 0x00 ;Dirección del Vector Reset GOTO COMIENZO ;Comienzo del Programa

;**************************** Sección de Configuración ******************************************************* ORG 0x05 ; Inicio de Programa

; (Una posición detrás del vector de Interrupción) COMIENZO BSF STATUS,RP0

MOVLW B'11111111' ; Poner el Puerto C como entrada de datos. MOVWF TRISC

CLRF TRISB ; Poner el Puerto B como salida de datos. BCF STATUS,RP0

;**************************** Inicio ******************************************************************************* INICIO COMF PORTC,W ; Complementar el Puerto C y llevarlo al Acumulador.

MOVWF PORTB ; Transferir el dato del Acumulador al Puerto B GOTO INICIO

(15)

1.3.- Ejemplo3.asm (Entrenador Básico 0)

Diagrama de Flujo

Parpadeo de un Led Elegimos PIC List p=16f877 , f=inhx32 Asignación de nombres de RFS a direcciones. #include <p16f877.inc> ; Igualdades DATO1 EQU 0X10 DATO2 EQU 0X64 DATO3 EQU 0X64 ; Registros REG1 EQU 0X22 REG2 EQU 0X23 REG3 EQU 0X24

Sección de código de Reset

ORG OOH ; Dirección del vector de Reset GOTO COMIENZO ;Comienzo del Programa

Sección de Configuración ORG 0x05 ; Inicio de Programa COMIENZO RP0  1 ; Ir al Banco 1

TRISB  00000000 B ; Poner el Puerto B como salida de datos. RP0  0 ; Ir al Banco 0

PORTB  00000000 B ; Limpiar el Puerto B

; Principal PB0  1 ; Encender el Led de PB0 SEGUNDO PB0  0 ; Apagar el Led de PB0 SEGUNDO Subrutina de Tiempo REG3  # DATO3 REG2  # DATO2 REG1  # DATO1 REG1  REG1 - 1 ¿ REG1 = 0 ? REG2  REG2 - 1 ¿ REG2 = 0 ? ¿ REG3 = 0 ? RETUR SI SI SI NO NO NO REG3  REG3 - 1

(16)

title " Parpadeo de un Led "

;Programa para PIC 16F877. ;Velocidad del Reloj:4 MHz. ;Reloj instrucción: 1 MHz = 1 uS. ;Perro Guardián deshabilitado. ;Tipo de Reloj XT.

;Protección de Código: OFF.

;**************************** Elegimos PIC ********************************************************************* list p=16f877, f=inhx32

;**************************** Asignación de Registros de Funciones especiales a direcciones ************ #include <p16f877.inc> ;Este fichero contiene los nombres y direcciones de los

; registros de funciones especiales.

; Este fichero esta localizado en el directorio ; con el nombre MPASM.

;**************************** Igualdades *********************************************************************** DATO1 EQU 0X10 DATO2 EQU 0X64 DATO3 EQU 0X64 ;**************************** Registros ************************************************************************ REG1 EQU 0X22 REG2 EQU 0X23 REG3 EQU 0X24

;**************************** Sección Código de Reset ******************************************************* ORG 0x00 ;Dirección del Vector Reset

GOTO COMIENZO ;Comienzo del Programa

;**************************** Sección de Configuración ******************************************************* ORG 0x05 ; Inicio de Programa (Una posición detrás del vector de Interrupción) COMIENZO BSF STATUS,RP1

BSF STATUS,RP0

CLRF TRISB ; Configuramos el Puerto B como salidas BCF STATUS,RP0

CLRF PORTB

;**************************** Inicio **************************************************************************** SEGUIR BSF PORTB,0

(17)

BCF PORTB,0 CALL SEGUNDO GOTO SEGUIR

;**************************** Subrutina de perdida de tiempo de 1 Segundo ****************************** SEGUNDO MOVLW DATO3

MOVWF REG3 SEG7 MOVLW DATO2

MOVWF REG2 SEG6 MOVLW DATO1

MOVWF REG1 SEG5 DECFSZ REG1,F

GOTO SEG5 DECFSZ REG2,F GOTO SEG6 DECFSZ REG3,F GOTO SEG7 RETURN END

(18)

1.4.- Ejemplo3A.asm (Entrenador Básico 0)

Diagrama de Flujo

Parpadeo de un Led Utilizando una librería de

Tiempo Elegimos PIC List p=16f877 , f=inhx32 Asignación de nombres de RFS a direcciones. #include <p16f877.inc> ; Igualdades ; Registros CBLOCK 0X20 ENDC

Sección de código de Reset

ORG OOH ; Dirección del vector de Reset GOTO COMIENZO ;Comienzo del Programa

Sección de Configuración ORG 0x05 ; Inicio de Programa COMIENZO RP0  1 ; Ir al Banco 1

TRISB  00000000 B ; Poner el Puerto B como salida de datos. RP0  0 ; Ir al Banco 0

PORTB  00000000 B ; Limpiar el Puerto B

; Principal PB0  1 ; Encender el Led de PB0 SEGUNDO PB0  0 ; Apagar el Led de PB0 SEGUNDO Librería de Tiempo RETART_1S.INC

SEGUNDO REG3  # DATO3

REG2  # DATO2 REG1  # DATO1 REG1  REG1 - 1 ¿ REG1 = 0 ? REG2  REG2 - 1 ¿ REG2 = 0 ? ¿ REG3 = 0 ? RETUR SI SI SI NO NO NO ; Igualdades DATO1 EQU 0X10 DATO2 EQU 0X64 DATO3 EQU 0X64 ; Registros CBOCK REG1 REG2 REG3 ENDC REG3  REG3 - 1

(19)

title " Parpadeo de un Led utilizando una librería llamada RETAR_1S.INC "

;Programa para PIC 16F877a. ;Velocidad del Reloj:4 MHz. ;Reloj instrucción: 1 MHz = 1 uS. ;Perro Guardián deshabilitado. ;Tipo de Reloj XT.

;Protección de Código: OFF.

;**************************** Elegimos PIC ******************************************************************** list p=16f877, f=inhx32

;**************************** Asignación de Registros de Funciones especiales a direcciones ************ #include <p16f877.inc> ;Este fichero contiene los nombres y direcciones de los

; registros de funciones especiales.

; Este fichero esta localizado en el directorio ; con el nombre MPASM.

;**************************** Igualdades ************************************************************************ ;*************************** Registros ************************************************************************** CBLOCK 0X20

ENDC

;**************************** Sección Código de Reset ******************************************************* ORG 0x00 ;Dirección del Vector Reset

GOTO COMIENZO ;Comienzo del Programa

;**************************** Sección de Configuración ******************************************************* ORG 0x05 ; Inicio de Programa (Una posición detrás del vector de Interrupción) COMIENZO BSF STATUS,RP0

CLRF TRISB ; Configuramos el Puerto B como salidas BCF STATUS,RP0 CLRF PORTB ;**************************** Inicio ******************************************************************************* SEGUIR BSF PORTB,0 CALL SEGUNDO BCF PORTB,0 CALL SEGUNDO GOTO SEGUIR ;********************************** Librerías ********************************************************************* INCLUDE <RETAR_1S.INC> END

(20)

title " Parpadeo de un Led utilizando una librería llamada RETARDOS.INC del libro

de Desarrollo de Proyectos

"

;Programa para PIC 16F877. ;Velocidad del Reloj:4 MHz. ;Reloj instrucción: 1 MHz = 1 uS. ;Perro Guardián deshabilitado. ;Tipo de Reloj XT.

;Protección de Código: OFF.

;**************************** Elegimos PIC ******************************************************************** list p=16f877, f=inhx32

;**************************** Asignación de Registros de Funciones especiales a direcciones ************ #include <p16f877.inc> ;Este fichero contiene los nombres y direcciones de los

; registros de funciones especiales.

; Este fichero esta localizado en el directorio ; con el nombre MPASM.

;**************************** Igualdades ************************************************************************ ;*************************** Comienzo de registros ************************************************************ CBLOCK 0X20

ENDC

;**************************** Sección Código de Reset ******************************************************** ORG 0x00 ;Dirección del Vector Reset

GOTO COMIENZO ;Comienzo del Programa

;**************************** Sección de Configuración ******************************************************** ORG 0x05 ; Inicio de Programa (Una posición detrás del vector de Interrupción COMIENZO BSF STATUS,RP0

CLRF TRISB ; Configuramos el Puerto B como salidas BCF STATUS,RP0 CLRF PORTB ;**************************** Inicio ******************************************************************************* SEGUIR BSF PORTB,0 CALL Retardo_1s BCF PORTB,0 CALL Retardo_1s GOTO SEGUIR ;**************************** Librerías *************************************************************************** INCLUDE <RETARDOS.INC> END

(21)

Diagrama de Flujo

title " Simular las luces del Coche Fantástico "

Simular las luces del Coche Fantástico Elegimos PIC List p=16f877 , f=inhx32 Asignación de nombres de RFS a direcciones. #include <p16f877.inc> ; Igualdades ; Registros CBLOCK 0X20 CONTADOR DATO ENDC

Sección de código de Reset

ORG OOH ; Dirección del vector de Reset GOTO COMIENZO ;Comienzo del Programa

Sección de Configuración ORG 0x05 ; Inicio de Programa

COMIENZO CONTADOR  00000000 B ; Resetear CONTADOR RP0  1 ; Ir al Banco 1

TRISB  00000000 B ; Poner el Puerto B como salida de datos. RP0  0 ; Ir al Banco 0

DATO  10000000 B ; Encendemos el Led PB7 y guardamos el código en un Registro.

1

1

PORTB  DATO CONTADOR  CONTADOR + 1 Retardo_100ms ¿ CONTADOR = 8 ? CY  0 CY 7 DATO 0 CY 7 DATO 0 CONTADOR  00000000 B CY  0 PORTB  DATO Retardo_100ms CONTADOR  CONTADOR + 1 ¿ CONTADOR = 7 ? CONTADOR  00000001 B SI NO SI NO

(22)

;Programa para PIC 16F877. ;Velocidad del Reloj:4 MHz. ;Reloj instrucción: 1 MHz = 1 uS. ;Perro Guardián deshabilitado. ;Tipo de Reloj XT.

;Protección de Código: OFF.

;**************************** Elegimos PIC ******************************************************************** list p=16f877, f=inhx32

;**************************** Asignación de Registros de Funciones especiales a direcciones ************ #include <p16f877.inc> ;Este fichero contiene los nombres y direcciones de los

; registros de funciones especiales.

; Este fichero esta localizado en el directorio ; con el nombre MPASM.

;**************************** Igualdades *********************************************************************** ;*************************** Registros ************************************************************************** CBLOCK 0X20 CONTADOR DATO ENDC

;**************************** Sección Código de Reset ******************************************************** ORG 0x00 ;Dirección del Vector Reset

GOTO COMIENZO ;Comienzo del Programa

;**************************** Sección de Configuración ******************************************************** ORG 0x05 ; Inicio de Programa (Una posición detrás del vector de Interrupción COMIENZO CLRF CONTADOR

BCF STATUS,RP1 ; Selecciono la pagina 1 de la memoria BSF STATUS,RP0

MOVLW B'00000000' ; Configuro el PB salidas . MOVWF TRISB

BCF STATUS,RP0 ; Selecciono la pagina 0 de la memoria

;*************************** Principal ************************************************************************* SEGUIR MOVLW B'10000000' ; Encendemos el Led PB7

(23)

SEG1 MOVF DATO,W ;Transferimos la información del registro DATO MOVWF PORTB ; al Puerto B.

INCF CONTADOR ; Incrementamos CONTADOR.

CALL Retardo_100ms ; Llamamos a la Subrutina de Retardo TIEMPO. MOVF CONTADOR,W ; Preguntamos si CONTADOR = 8

XORLW 0X08 BTFSC STATUS,Z GOTO SEG2

SEG4 BCF STATUS,C ; Si CONTADOR <> 8 ponemos el Cy=0 y rotamos hacia RRF DATO,F ; la Derecha el registro DATO.

GOTO SEG1 ; Seguimos hacia la Derecha.

SEG2 CLRF CONTADOR ; Si CONTADOR = 8 ponemos el CONTADOR=0, Cy=0 y SEG3 BCF STATUS,C ; rotamos hacia la Izquierda el registro DATO.

RLF DATO,F

MOVF DATO,W ; Transferimos la información del registro DATO MOVWF PORTB ; al Puerto B.

CALL Retardo_100ms ; Llamamos a la Subrutina de Retardo TIEMPO. INCF CONTADOR ; Preguntamos si CONTADOR = 7

MOVF CONTADOR,W XORLW 0X07

BTFSS STATUS,Z

GOTO SEG3 ; Seguimos hacia la Izquierda.

MOVLW 0X01 ; Ponemos el CONTADOR = 1 y volvemos hacia la izquierda. MOVWF CONTADOR GOTO SEG4 ;*************************** Subrutinas ********************************************************************** INCLUDE <RETARDOS.INC> END

(24)

Diagrama de Flujo

title " Simular el Coche Fantástico, controlado por PC0"

NO Simular las luces del

Coche Fantástico controlado por PCO

Elegimos PIC List p=16f877 , f=inhx32 Asignación de nombres de RFS a direcciones. #include <p16f877.inc> ; Igualdades ; Registros CBLOCK 0X20 CONTADOR DATO ENDC

Sección de código de Reset

ORG OOH ; Dirección del vector de Reset GOTO COMIENZO ;Comienzo del Programa

Sección de Configuración ORG 0x05 ; Inicio de Programa

COMIENZO CONTADOR  00000000 B ; Resetear CONTADOR RP0  1 ; Ir al Banco 1

TRISB  00000000 B ; Poner el Puerto B como salida de datos. RP0  0 ; Ir al Banco 0

TRIRC (0)  1 ; Poner PC0 como salida de datos

DATO  10000000 B ; Encendemos el Led PB7 y guardamos el código en un Registro.

1

¿ PCO = 1 ? SI NO SI

1

PORTB  DATO CONTADOR  CONTADOR + 1 Retardo_100ms ¿ CONTADOR = 8 ? CY  0 CY 7 DATO 0 CY 7 DATO 0 CONTADOR  00000000 B CY  0 PORTB  DATO Retardo_100ms CONTADOR  CONTADOR + 1 ¿ CONTADOR = 7 ? CONTADOR  00000001 B SI NO ¿ PC0 = 1 ? SI NO ¿ PC0 = 1 ? SI NO

(25)

;Programa para PIC 16F877. ;Velocidad del Reloj:4 MHz. ;Reloj instrucción: 1 MHz = 1 uS. ;Perro Guardián deshabilitado. ;Tipo de Reloj XT.

;Protección de Código: OFF.

;**************************** Elegimos PIC ******************************************************************** list p=16f877, f=inhx32

;**************************** Asignación de Registros de Funciones especiales a direcciones ************ #include <p16f877.inc> ;Este fichero contiene los nombres y direcciones de los

; registros de funciones especiales.

; Este fichero esta localizado en el directorio ; con el nombre MPASM.

;**************************** Igualdades *********************************************************************** ;**************************** Registros ************************************************************************ CBLOCK 0X20 CONTADOR DATO ENDC

;**************************** Sección Código de Reset ******************************************************* ORG 0x00 ;Dirección del Vector Reset

GOTO COMIENZO ;Comienzo del Programa

;**************************** Sección de Configuración ******************************************************* ORG 0x05 ; Inicio de Programa (Una posición detrás del vector de Interrupción) COMIENZO CLRF CONTADOR

BCF STATUS,RP1 ; Selecciono la pagina 1 de la memoria BSF STATUS,RP0

MOVLW B'00000000' ; Configuro el PB salidas . MOVWF TRISB

BSF TRISC,0

BCF STATUS,RP0 ; Selecciono la pagina 0 de la memoria

;*************************** Principal *************************************************************************** SEGUIR BTFSS PORTC,0

GOTO SEGUIR

MOVLW B'10000000' ; Encendemos el Led PB7

(26)

SEG1 MOVF DATO,W ; Transferimos la información del registro DATO MOVWF PORTB ; al Puerto B.

PARAR1 BTFSS PORTC,0 GOTO PARAR1

INCF CONTADOR ; Incrementamos CONTADOR.

CALL Retardo_100ms ; Llamamos a la Subrutina de Retardo TIEMPO. MOVF CONTADOR,W ; Preguntamos si CONTADOR = 8

XORLW 0X08 BTFSC STATUS,Z GOTO SEG2

SEG4 BCF STATUS,C ; Si CONTADOR <> 4 ponemos el Cy=0 y rotamos hacia RRF DATO,F ; la Izquierda el registro DATO.

GOTO SEG1 ; Seguimos hacia la Izquierda.

SEG2 CLRF CONTADOR ; Si CONTADOR = 4 ponemos el CONTADOR=0,Cy=0 y SEG3 BCF STATUS,C ; rotamos hacia la Derecha el registro DATO.

RLF DATO,F

MOVF DATO,W ; Transferimos la información del registro DATO MOVWF PORTB ; al Puerto B.

PARAR2 BTFSS PORTC,0 GOTO PARAR2

INCF CONTADOR ; Preguntamos si CONTADOR = 7

CALL Retardo_100ms ; Llamamos a la Subrutina de Retardo TIEMPO. MOVF CONTADOR,W

XORLW 0X07 BTFSS STATUS,Z

GOTO SEG3 ; Seguimos hacia la Derecha.

MOVLW 0X01 ; Ponemos el CONTADOR = 1 y volvemos hacia la izquierda. MOVWF CONTADOR

GOTO SEG4

;*************************** Librerías *************************************************************************** INCLUDE <RETARDOS.INC>

END

(27)

Diagrama de Flujo

title " Poner el NOMBRE en el Display "

Poner el Nombre en el Display Elegimos PIC List p=16f877 , f=inhx32 Asignación de nombres de RFS a direcciones. #include <p16f877.inc> ; Igualdades Numero_de_caracteres EQU D '5' ; Registros CBLOCK 0X20 CONTADOR ENDC

Sección de código de Reset

ORG OOH ; Dirección del vector de Reset GOTO COMIENZO ;Comienzo del Programa

Sección de Configuración ORG 0x05 ; Inicio de Programa COMIENZO RP0  1 ; Ir al Banco 1

TRISD  00000000 B ; Poner el Puerto D como salida de datos. RP0  0 ; Ir al Banco 0

1

¿ CONTADOR = Numero_de _caracteres SI NO

1

CONTADOR  00000000 B W  CONTADOR BINARIO_CARACTER PORTD  W Retardo_500ms CONTADOR  CONTADOR + 1 BINARIO_CARACTE R PCL  PCL + W

RETLW B'01110011' ;Retorna con W cargado con P RETLW B'01111001' ;Retorna con W cargado con E RETLW B'01011110' ;Retorna con W cargado con d RETLW B'01010000' ;Retorna con W cargado con r RETLW B'01011100' ;Retorna con W cargado con o

(28)

;Programa para PIC 16F877. ;Velocidad del Reloj:4 MHz. ;Reloj instrucción: 1 MHz = 1 uS. ;Perro Guardián deshabilitado. ;Tipo de Reloj XT.

;Protección de Código: OFF.

;**************************** Elegimos PIC ******************************************************************** list p=16f877, f=inhx32

;************* Asignación de etiquetas de Registros de Funciones especiales a direcciones ************ #include <p16f877.inc> ;Este fichero contiene los nombres y direcciones de los

; registros de funciones especiales.

; Este fichero esta localizado en el directorio ; con el nombre MPASM.

;**************************** Igualdades ************************************************************************ Numero_de_caracteres EQU D'5' ;**************************** Registros ************************************************************************* CBLOCK 0X20 CONTADOR ENDC

;**************************** Sección Código de Reset ******************************************************* ORG 0x00 ;Dirección del Vector Reset

GOTO COMIENZO ;Comienzo del Programa

;**************************** Sección de Configuración ******************************************************* ORG 0x05 ; Inicio de Programa (Una posición detrás del vector de Interrupción) COMIENZO BSF STATUS,RP0 ; Selecciono la pagina 1 de la memoria

CLRF TRISD ; Configuro el Puerto D como salida BCF STATUS,RP0 ; Selecciono la pagina 0 de la memoria

;*************************** Principal *************************************************************************** SEG2 CLRF CONTADOR

SEG1 MOVF CONTADOR,W CALL BINARIO_CARACTER MOVWF PORTD CALL Retardo_500ms INCF CONTADOR,F MOVF CONTADOR,W SUBLW Numero_de_caracteres BTFSS STATUS,Z GOTO SEG1 GOTO SEG2

(29)

;***************************** Subrutina de BINARIO_CARACTER ******************************************* BINARIO_CARACTER ADDWF PCL,F ;Suma el Contador del Programa con el contenido

; de W y lo deja en el PC. RETLW B'01110011' ;Retorna con W cargado con P RETLW B'01111001' ;Retorna con W cargado con E RETLW B'01011110' ;Retorna con W cargado con d RETLW B'01010000' ;Retorna con W cargado con r RETLW B'01011100' ;Retorna con W cargado con o

;***************************** Librerías *************************************************************************** INCLUDE <RETARDOS.INC>

END

(30)

Diagrama de Flujo

title " Sumar los nibles del Puerto C y llevarlos al Puerto B "

;Programa para PIC 16F877. ;Velocidad del Reloj:4 MHz. ;Reloj instrucción: 1 MHz = 1 uS. ;Perro Guardián deshabilitado. ;Tipo de Reloj XT.

;Protección de Código: OFF.

Sumar los nibles del Puerto C y llevarlos al Puerto B Elegimos PIC List p=16f877 , f=inhx32 Asignación de nombres de RFS a direcciones. #include <p16f877.inc> ; Igualdades ; Registros CBLOCK 0X20 Numero_bajo Numero_alto ENDC

Sección de código de Reset

ORG OOH ; Dirección del vector de Reset GOTO COMIENZO ;Comienzo del Programa

Sección de Configuración ORG 0x05 ; Inicio de Programa COMIENZO RP0  1 ; Ir al Banco 1

TRISB  00000000 B ; Poner el Puerto B como salida de datos. TRISC  11111111 B ; Poner el Puerto C como

entrada de datos. RP0  0 ; Ir al Banco 0

1

1

W  PORTC W  00001111 B AND W Numero_bajo  W W  PORTC W  11110000 B AND W Numero_alto  W Numero_alto Numero_alto ( 7..4 ) ( 3..0 ) W  Numero_alto W  W + Numero_bajo PORTB  W

(31)

;**************************** Elegimos PIC ********************************************************************* list p=16f877, f=inhx32

;************* Asignación de etiquetas de Registros de Funciones especiales a direcciones ************ #include <p16f877.inc> ; Este fichero contiene los nombres y direcciones de los

; registros de funciones especiales.

; Este fichero esta localizado en el directorio ; con el nombre MPASM.

;**************************** Igualdades ************************************************************************ ;**************************** Registros ************************************************************************** CBLOCK 0X20 Numero_bajo Numero_alto ENDC

;**************************** Sección Código de Reset ******************************************************** ORG 0x00 ;Dirección del Vector Reset

GOTO COMIENZO ;Comienzo del Programa

;**************************** Sección de Configuración ******************************************************** ORG 0x05 ; Inicio de Programa (Una posición detrás del vector de Interrupción) COMIENZO BSF STATUS,RP0 ; Selecciono la pagina 1 de la memoria

CLRF TRISB ; Configuro el Puerto B como salida MOVLW B'11111111'

MOVWF TRISC

BCF STATUS,RP0 ; Selecciono la pagina 0 de la memoria

;**************************** Inicio ******************************************************************************* SEG1 COMF PORTC,W

ANDLW B'00001111' MOVWF Numero_bajo COMF PORTC,W ANDLW B'11110000' MOVWF Numero_alto SWAPF Numero_alto,F MOVF Numero_alto,W ADDWF Numero_bajo,W MOVWF PORTB GOTO SEG1 END

(32)

Diagrama de Flujo

title "Direccionamiento indirecto "

Direccionamiento Indirecto Elegimos PIC List p=16f877 , f=inhx32 Asignación de nombres de RFS a direcciones. #include <p16f877.inc> ; Igualdades ; Registros CBLOCK 0X20 REG1 REG2 REG3 ENDC

Sección de código de Reset

ORG OOH ; Dirección del vector de Reset GOTO COMIENZO ;Comienzo del Programa

Principal

ORG 0x05 ; Inicio de Programa COMIENZO FSR  # REG1 (FSR)  D’1’ FSR  FSR + 1 (FSR)  D’2’ FSR  FSR + 1 (FSR)  D’3’ FSR  FSR + 1 FIN

(33)

;Programa para PIC 16F876a. ;Velocidad del Reloj:4 MHz. ;Reloj instrucción: 1 MHz = 1 uS. ;Perro Guardián deshabilitado. ;Tipo de Reloj XT.

;Protección de Código: OFF.

;**************************** Elegimos PIC ********************************************************************* list p=16f876, f=inhx32

;************* Asignación de etiquetas de Registros de Funciones especiales a direcciones ************ #include <p16f877.inc> ;Este fichero contiene los nombres y direcciones de los

; registros de funciones especiales.

; Este fichero esta localizado en el directorio ; con el nombre MPASM.

;**************************** Igualdades ************************************************************************ ;*************************** Registros ************************************************************************** CBLOCK 0X20 REG1 REG2 REG3 ENDC

;**************************** Sección Código de Reset ******************************************************* ORG 0x00 ;Dirección del Vector Reset

GOTO COMIENZO ;Comienzo del Programa

;**************************** Principal ************************************************************************** ORG 0x05 ; Inicio de Programa (Una posición detrás del vector de Interrupción). COMIENZO MOVLW REG1

MOVWF FSR ; Cargas la dirección del Registro REG1 “20H” en el Puntero FSR. MOVLW D'1'

MOVWF INDF ; Cargas donde apunta el Puntero (FSR) el dato 1. (20H)  1.

INCF FSR ; Incrementas el Puntero FSR “21H”. MOVLW D'2'

MOVWF INDF ; Cargas donde apunta el Puntero (FSR) el dato 2. (21H)  2.

INCF FSR ; Incrementas el Puntero FSR “22H”. MOVLW D'3'

MOVWF INDF ; Cargas donde apunta el Puntero (FSR) el dato 3. (22H)  3.

INCF FSR ; Incrementas el Puntero FSR “23H”. END

(34)

Diagrama de Flujo

title " Trabajar con la Pagina 1 de memoria de Programa "

Trabajar con la Pagina 1 de memoria de Elegimos PIC List p=16f877 , f=inhx32 Asignación de nombres de RFS a direcciones. #include <p16f877.inc> ; Igualdades ; Registros CBLOCK 0X20 ENDC

Sección de código de Reset

ORG OOH ; Dirección del vector de Reset GOTO COMIENZO ;Comienzo del Programa

Sección de Configuración ORG 0X05 COMIENZO RP0  1 ; Ir al Banco 1

TRISB  00000000 B ; Poner el Puerto B como salida de datos. TRISC  11111111 B ; Poner el Puerto C como

entrada de datos. RP0  0 ; Ir al Banco 0 ; Cambio a la Página1 PCLATCH3  1 PCLATCH4  0 PAGINA1 Subrutina Prueba Pagina1 ORG 0800H PORTC  PORTB ; Cambio a la Página0 PCLATCH3  0 RETUR N

(35)

;Programa para PIC 16F876a. ;Velocidad del Reloj:4 MHz. ;Reloj instrucción: 1 MHz = 1 uS. ;Perro Guardián deshabilitado. ;Tipo de Reloj XT.

;Protección de Código: OFF.

;**************************** Elegimos PIC ******************************************************************** list p=16f876, f=inhx32

;************ Asignación de etiquetas de Registros de Funciones especiales a direcciones ************ #include <p16f877.inc> ;Este fichero contiene los nombres y direcciones de los

; registros de funciones especiales.

; Este fichero esta localizado en el directorio ; con el nombre MPASM.

;**************************** Igualdades *********************************************************************** ;**************************** Registros ************************************************************************* ;**************************** Sección Código de Reset ******************************************************

ORG 0x00 ;Dirección del Vector Reset GOTO COMIENZO ;Comienzo del Programa

;**************************** Sección de Configuración ****************************************************** ORG 0x05 ; Inicio de Programa (Una posición detrás del vector de Interrupción) COMIENZO BSF STATUS,RP0 MOVLW B'11111111' MOVWF TRISC CLRF TRISB BCF STATUS,RP0 ;**************************** Inicio ***************************************************************************** SEG1 BSF PCLATH,3 ;Ir a la Pagina1 de memoria de Programa

BCF PCLATH,4 CALL PAGINA1 GOTO SEG1

;****************************Subrutina Prueba Pagina1 ******************************************************* ORG 0800H

PAGINA1 MOVF PORTC,W

MOVWF PORTB ;Ir a la Pagina0 de memoria de Programa BCF PCLATH,3

RETURN END

(36)

;*********************** Librería Casera de Retardo 1 Segundo ********************************************** ;*********************** Igualdades ****************************************************************************** DATO1 EQU D'100' DATO2 EQU D'100' DATO3 EQU D'20' ;*********************** Registros ******************************************************************************** CBLOCK REG1 REG2 REG3 ENDC ;*********************** Subrutina SEGUNDO ***************************************************************** SEGUNDO MOVLW DATO3

MOVWF REG3 SEG7 MOVLW DATO2

MOVWF REG2 SEG6 MOVLW DATO1

MOVWF REG1 SEG5 DECFSZ REG1,F

GOTO SEG5 DECFSZ REG2,F GOTO SEG6 DECFSZ REG3,F GOTO SEG7 RETURN

(37)

;**************************** Librería "RETARDOS.INC" ***************************************************** ;

; =================================================================== ; Del libro "MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS" ; E. Palacios, F. Remiro y L. López.

; Editorial Ra-Ma. www.ra-ma.es

; =================================================================== ;

; Librería con múltiples subrutinas de retardos, desde 4 microsegundos hasta 20 segundos. ; Además se pueden implementar otras subrutinas muy fácilmente.

;

; Se han calculado para un sistema microcontrolador con un PIC trabajando con un cristal ; de cuarzo a 4 MHz. Como cada ciclo máquina son 4 ciclos de reloj, resulta que cada ; ciclo máquina tarda 4 x 1/4MHz = 1 µs.

;

; En los comentarios, "cm" significa "ciclos máquina". ;

; ZONA DE DATOS ************************************************************************************* CBLOCK

R_ContA ; Contadores para los retardos. R_ContB

R_ContC ENDC ;

; RETARDOS de 4 hasta 10 microsegundos ---;

; A continuación retardos pequeños teniendo en cuenta que para una frecuencia de 4 MHZ, ; la llamada a subrutina "call" tarda 2 ciclos máquina, el retorno de subrutina

; "return" toma otros 2 ciclos máquina y cada instrucción "nop" tarda 1 ciclo máquina. ;

Retardo_10micros ; La llamada "call" aporta 2 ciclos máquina. nop ; Aporta 1 ciclo máquina.

nop ; Aporta 1 ciclo máquina. nop ; Aporta 1 ciclo máquina. nop ; Aporta 1 ciclo máquina. nop ; Aporta 1 ciclo máquina.

Retardo_5micros ; La llamada "call" aporta 2 ciclos máquina. nop ; Aporta 1 ciclo máquina.

Retardo_4micros ; La llamada "call" aporta 2 ciclos máquina. return ; El salto del retorno aporta 2 ciclos máquina. ;

; RETARDOS de 20 hasta 500 microsegundos ---;

Retardo_500micros ; La llamada "call" aporta 2 ciclos máquina. nop ; Aporta 1 ciclo máquina.

movlw d'164' ; Aporta 1 ciclo máquina. Este es el valor de "K". goto RetardoMicros ; Aporta 2 ciclos máquina.

Retardo_200micros ; La llamada "call" aporta 2 ciclos máquina. nop ; Aporta 1 ciclo máquina.

movlw d'64' ; Aporta 1 ciclo máquina. Este es el valor de "K". goto RetardoMicros ; Aporta 2 ciclos máquina.

Retardo_100micros ; La llamada "call" aporta 2 ciclos máquina. movlw d'31' ; Aporta 1 ciclo máquina. Este es el valor de "K". goto RetardoMicros ; Aporta 2 ciclos máquina.

Retardo_50micros ; La llamada "call" aporta 2 ciclos máquina. nop ; Aporta 1 ciclo máquina.

movlw d'14' ; Aporta 1 ciclo máquina. Este es el valor de "K". goto RetardoMicros ; Aporta 2 ciclos máquina.

(38)

movlw d'5' ; Aporta 1 ciclo máquina. Este es el valor de "K". ;

; El próximo bloque "RetardoMicros" tarda:

; 1 + (K-1) + 2 + (K-1)x2 + 2 = (2 + 3K) ciclos máquina. ;

RetardoMicros

movwf R_ContA ; Aporta 1 ciclo máquina. Rmicros_Bucle

decfsz R_ContA,F ; (K-1)x1 cm (cuando no salta) + 2 cm (al saltar). goto Rmicros_Bucle ; Aporta (K-1)x2 ciclos máquina.

return ; El salto del retorno aporta 2 ciclos máquina. ;

;En total estas subrutinas tardan:

; - Retardo_500micros: 2 + 1 + 1 + 2 + (2 + 3K) = 500 cm = 500 µs. (para K=164 y 4 MHz). ; - Retardo_200micros: 2 + 1 + 1 + 2 + (2 + 3K) = 200 cm = 200 µs. (para K= 64 y 4 MHz). ; - Retardo_100micros: 2 + 1 + 2 + (2 + 3K) = 100 cm = 100 µs. (para K= 31 y 4 MHz). ; - Retardo_50micros : 2 + 1 + 1 + 2 + (2 + 3K) = 50 cm = 50 µs. (para K= 14 y 4 MHz). ; - Retardo_20micros : 2 + 1 + (2 + 3K) = 20 cm = 20 µs. (para K= 5 y 4 MHz). ; ; RETARDOS de 1 ms hasta 200 ms. ---;

Retardo_200ms ; La llamada "call" aporta 2 ciclos máquina. movlw d'200' ; Aporta 1 ciclo máquina. Este es el valor de "M". goto Retardos_ms ; Aporta 2 ciclos máquina.

Retardo_100ms ; La llamada "call" aporta 2 ciclos máquina. movlw d'100' ; Aporta 1 ciclo máquina. Este es el valor de "M". goto Retardos_ms ; Aporta 2 ciclos máquina.

Retardo_50ms ; La llamada "call" aporta 2 ciclos máquina. movlw d'50' ; Aporta 1 ciclo máquina. Este es el valor de "M". goto Retardos_ms ; Aporta 2 ciclos máquina.

Retardo_20ms ; La llamada "call" aporta 2 ciclos máquina. movlw d'20' ; Aporta 1 ciclo máquina. Este es el valor de "M". goto Retardos_ms ; Aporta 2 ciclos máquina.

Retardo_10ms ; La llamada "call" aporta 2 ciclos máquina. movlw d'10' ; Aporta 1 ciclo máquina. Este es el valor de "M". goto Retardos_ms ; Aporta 2 ciclos máquina.

Retardo_5ms ; La llamada "call" aporta 2 ciclos máquina. movlw d'5' ; Aporta 1 ciclo máquina. Este es el valor de "M". goto Retardos_ms ; Aporta 2 ciclos máquina.

Retardo_2ms ; La llamada "call" aporta 2 ciclos máquina. movlw d'2' ; Aporta 1 ciclo máquina. Este es el valor de "M". goto Retardos_ms ; Aporta 2 ciclos máquina.

Retardo_1ms ; La llamada "call" aporta 2 ciclos máquina. movlw d'1' ; Aporta 1 ciclo máquina. Este es el valor de "M". ;

; El próximo bloque "Retardos_ms" tarda:

; 1 + M + M + KxM + (K-1)xM + Mx2 + (K-1)Mx2 + (M-1) + 2 + (M-1)x2 + 2 =

; = (2 + 4M + 4KM) ciclos máquina. Para K=249 y M=1 supone 1002 ciclos máquina ; que a 4 MHz son 1002 µs = 1 ms.

;

Retardos_ms

movwf R_ContB ; Aporta 1 ciclo máquina. R1ms_BucleExterno

movlw d'249' ; Aporta Mx1 ciclos máquina. Este es el valor de "K". movwf R_ContA ; Aporta Mx1 ciclos máquina.

R1ms_BucleInterno

nop ; Aporta KxMx1 ciclos máquina.

decfsz R_ContA,F ; (K-1)xMx1 cm (cuando no salta) + Mx2 cm (al saltar). goto R1ms_BucleInterno ; Aporta (K-1)xMx2 ciclos máquina.

(39)

goto R1ms_BucleExterno ; Aporta (M-1)x2 ciclos máquina.

return ; El salto del retorno aporta 2 ciclos máquina. ;

;En total estas subrutinas tardan:

; - Retardo_200ms: 2 + 1 + 2 + (2 + 4M + 4KM) = 200007 cm = 200 ms. (M=200 y K=249). ; - Retardo_100ms: 2 + 1 + 2 + (2 + 4M + 4KM) = 100007 cm = 100 ms. (M=100 y K=249). ; - Retardo_50ms : 2 + 1 + 2 + (2 + 4M + 4KM) = 50007 cm = 50 ms. (M= 50 y K=249). ; - Retardo_20ms : 2 + 1 + 2 + (2 + 4M + 4KM) = 20007 cm = 20 ms. (M= 20 y K=249). ; - Retardo_10ms : 2 + 1 + 2 + (2 + 4M + 4KM) = 10007 cm = 10 ms. (M= 10 y K=249). ; - Retardo_5ms : 2 + 1 + 2 + (2 + 4M + 4KM) = 5007 cm = 5 ms. (M= 5 y K=249). ; - Retardo_2ms : 2 + 1 + 2 + (2 + 4M + 4KM) = 2007 cm = 2 ms. (M= 2 y K=249). ; - Retardo_1ms : 2 + 1 + (2 + 4M + 4KM) = 1005 cm = 1 ms. (M= 1 y K=249). ;

; RETARDOS de 0.5 hasta 20 segundos ---;

Retardo_20s ; La llamada "call" aporta 2 ciclos máquina. movlw d'200' ; Aporta 1 ciclo máquina. Este es el valor de "N". goto Retardo_1Decima ; Aporta 2 ciclos máquina.

Retardo_10s ; La llamada "call" aporta 2 ciclos máquina. movlw d'100' ; Aporta 1 ciclo máquina. Este es el valor de "N". goto Retardo_1Decima ; Aporta 2 ciclos máquina.

Retardo_5s ; La llamada "call" aporta 2 ciclos máquina. movlw d'50' ; Aporta 1 ciclo máquina. Este es el valor de "N". goto Retardo_1Decima ; Aporta 2 ciclos máquina.

Retardo_2s ; La llamada "call" aporta 2 ciclos máquina. movlw d'20' ; Aporta 1 ciclo máquina. Este es el valor de "N". goto Retardo_1Decima ; Aporta 2 ciclos máquina.

Retardo_1s ; La llamada "call" aporta 2 ciclos máquina. movlw d'10' ; Aporta 1 ciclo máquina. Este es el valor de "N". goto Retardo_1Decima ; Aporta 2 ciclos máquina.

Retardo_500ms ; La llamada "call" aporta 2 ciclos máquina. movlw d'5' ; Aporta 1 ciclo máquina. Este es el valor de "N". ;

; El próximo bloque "Retardo_1Decima" tarda:

; 1 + N + N + MxN + MxN + KxMxN + (K-1)xMxN + MxNx2 + (K-1)xMxNx2 + ; + (M-1)xN + Nx2 + (M-1)xNx2 + (N-1) + 2 + (N-1)x2 + 2 =

; = (2 + 4M + 4MN + 4KM) ciclos máquina. Para K=249, M=100 y N=1 supone 100011 ; ciclos máquina que a 4 MHz son 100011 µs = 100 ms = 0,1 s = 1 décima de segundo. ;

Retardo_1Decima

movwf R_ContC ; Aporta 1 ciclo máquina. R1Decima_BucleExterno2

movlw d'100' ; Aporta Nx1 ciclos máquina. Este es el valor de "M". movwf R_ContB ; Aporta Nx1 ciclos máquina.

R1Decima_BucleExterno

movlw d'249' ; Aporta MxNx1 ciclos máquina. Este es el valor de "K". movwf R_ContA ; Aporta MxNx1 ciclos máquina.

R1Decima_BucleInterno

nop ; Aporta KxMxNx1 ciclos máquina.

decfsz R_ContA,F ; (K-1)xMxNx1 cm (si no salta) + MxNx2 cm (al saltar). goto R1Decima_BucleInterno ; Aporta (K-1)xMxNx2 ciclos máquina.

decfsz R_ContB,F ; (M-1)xNx1 cm (cuando no salta) + Nx2 cm (al saltar). goto R1Decima_BucleExterno ; Aporta (M-1)xNx2 ciclos máquina.

decfsz R_ContC,F ; (N-1)x1 cm (cuando no salta) + 2 cm (al saltar). goto R1Decima_BucleExterno2 ; Aporta (N-1)x2 ciclos máquina.

return ; El salto del retorno aporta 2 ciclos máquina. ;

;En total estas subrutinas tardan:

; - Retardo_20s: 2 + 1 + 2 + (2 + 4N + 4MN + 4KMN) = 20000807 cm = 20 s. ; (N=200, M=100 y K=249).

(40)

; - Retardo_10s: 2 + 1 + 2 + (2 + 4N + 4MN + 4KMN) = 10000407 cm = 10 s. ; (N=100, M=100 y K=249). ; - Retardo_5s: 2 + 1 + 2 + (2 + 4N + 4MN + 4KMN) = 5000207 cm = 5 s. ; (N= 50, M=100 y K=249). ; - Retardo_2s: 2 + 1 + 2 + (2 + 4N + 4MN + 4KMN) = 2000087 cm = 2 s. ; (N= 20, M=100 y K=249). ; - Retardo_1s: 2 + 1 + 2 + (2 + 4N + 4MN + 4KMN) = 1000047 cm = 1 s. ; (N= 10, M=100 y K=249). ; - Retardo_500ms: 2 + 1 + (2 + 4N + 4MN + 4KMN) = 500025 cm = 0,5 s. ; (N= 5, M=100 y K=249). ; =================================================================== ; Del libro "MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS" ; E. Palacios, F. Remiro y L. López.

; Editorial Ra-Ma. www.ra-ma.es

(41)

2.- Entrenador Básico 1

(42)

2.1.- Ejemplo6.asm (Entrenador Básico 1)

Diagrama de Flujo

Encender displays dependiendo de PC0 Elegimos PIC List p=16f877 , f=inhx32 Asignación de nombres de RFS a direcciones. #include <p16f877.inc> ; Igualdades ; Registros CBLOCK 0X20 ENDC

Sección de código de Reset

ORG OOH ; Dirección del vector de Reset GOTO COMIENZO ;Comienzo del Programa

Sección de Configuración ORG 0X05 COMIENZO RP0  1 ; Ir al Banco 1

TRISD  00000000 B ; Poner el Puerto D como salida de datos.

TRISC (0)  1 ; Poner PC0 como entrada de Datos

ADCON1  00000110 B ; Configuro las patillas de los PUERTOS A y D como señales digitales.

TRISE  00000000 B ; Poner el Puerto E como salida de datos. RP0  0 ; Ir al Banco 0 PORTD  11111111 B ¿ PCO = 1?

; Encender Display de UNIDADES PORTE  00000001 B

; Encender Display de DECENAS PORTE  00000010 B

SI

(43)

title " Encender displays dependiendo de PC0 "

;Programa para PIC 16F877. ;Velocidad del Reloj:4 MHz. ;Reloj instrucción: 1 MHz = 1 uS. ;Perro Guardián deshabilitado. ;Tipo de Reloj XT.

;Protección de Código: OFF.

;**************************** Elegimos PIC ******************************************************************** list p=16f877, f=inhx32

;************** Asignación de etiquetas de Registros de Funciones especiales a direcciones ********** #include <p16f877.inc> ; Este fichero contiene los nombres y direcciones de los

; registros de funciones especiales.

; Este fichero esta localizado en el directorio ; con el nombre MPASM.

;**************************** Igualdades ************************************************************************ ;**************************** Registros ************************************************************************* ;**************************** Sección Código de Reset *******************************************************

ORG 0x00 ;Dirección del Vector Reset GOTO COMIENZO ;Comienzo del Programa

;**************************** Sección de Configuración ******************************************************* ORG 0x05 ; Inicio de Programa (Una posición detrás del vector de Interrupción) COMIENZO BCF STATUS,RP1 ; Selecciono la pagina 1 de la memoria

BSF STATUS,RP0

MOVLW B'00000000' ; Configuro el PD como salidas. MOVWF TRISD

BSF TRISC,0

CLRF PORTE ; Configuro el PE como salidas.

BCF STATUS,RP0 ; Selecciono la pagina 0 de la memoria

;*************************** Principal *************************************************************************** SEGUIR MOVLW B'11111111' MOVWF PORTD SEG1 BTFSS PORTC,0 GOTO DECENAS UNIDADES MOVLW B'00000001' MOVWF PORTE GOTO SEG1 DECENAS MOVLW B'00000010' MOVWF PORTE GOTO SEG1

(44)

END

2.2.- Ejemplo7.asm (Entrenador Básico 1)

Diagrama de Flujo

Contar pulsos procedentes de PC0 y llevarlos al Display de Elegimos PIC List p=16f877 , f=inhx32 Asignación de nombres de RFS a direcciones. #include <p16f877.inc> ; Igualdades

NMAYOR EQU 0X0A

; Registros CBLOCK 0X20 CONTADOR ENDC

Sección de código de Reset

ORG OOH ; Dirección del vector de Reset GOTO COMIENZO ;Comienzo del Programa

Sección de Configuración ORG 0X05H COMIENZO RP0  1 ; Ir al Banco 1

TRISD  00000000 B ; Poner el Puerto D como salida de datos.

TRISC (0)  1 ; Poner PC0 como entrada de Datos

ADCON1  00000110 B ; Configuro las patillas de los PUERTOS A y D como señales digitales.

TRISE  00000000 B ; Poner el Puerto E como salida de datos. RP0  0 ; Ir al Banco 0

;Poner el Display de Unidades a cero PORTD  00111111 B

1

¿ PCO = 0? CONTADOR  00000001 B PORTE  00000001 B SI NO

1

W  CONTADOR

TABLA PORT D  W CONTADOR  CONTADOR +1 ¿ CONTADOR = NMAYOR ? CONTADOR  00000000 B NO SI Subrutina TABLA PCL  PCL + W

RETLW B'00111111' ;Retorna con W cargado con 00H

RETLW B'00000110' ;Retorna con W cargado con 01H

RETLW B'01011011' ;Retorna con W cargado con 02H

RETLW B'01001111' ;Retorna con W cargado con 03H

RETLW B'01100110' ;Retorna con W cargado con 04H

(45)

title " Contar pulsos procedentes de PC0 y llevarlos al Display de Unidades "

;Programa para PIC 16F877. ;Velocidad del Reloj:20 MHz. ;Reloj instrucción: 1 MHz = 200 nS. ;Perro Guardián deshabilitado. ;Tipo de Reloj XT.

;Protección de Código: OFF.

;**************************** Elegimos PIC ******************************************************************** list p=16f877, f=inhx32

;************ Asignación de etiquetas de Registros de Funciones especiales a direcciones ************ #include <p16f877.inc> ; Este fichero contiene los nombres y direcciones de los

; registros de funciones especiales.

; Este fichero esta localizado en el directorio ; con el nombre MPASM.

;**************************** Igualdades ************************************************************************ NMAYOR EQU 0X0A

;**************************** Registros ************************************************************************** CBLOCK 0X20

CONTADOR ENDC

;**************************** Sección Código de Reset ******************************************************** ORG 00h ;Dirección del Vector Reset

GOTO COMIENZO ;Comienzo del Programa

;**************************** Sección de Configuración ********************************************************* ORG 05h ; Inicio de Programa (Una posición detrás del vector de Interrupción) COMIENZO BSF STATUS,RP0 ; Selecciono la pagina 1 de la memoria

CLRF TRISD ; Configuro el Puerto D como salida de datos. MOVLW 0X06 ; Configuro el Puerto A y D como patillas digitales. MOVWF ADCON1

CLRF TRISE ; Configuro el puerto E como salida de datos. BSF PORTC,0 ; Configuro la patilla PC0 como entrada de datos. BCF STATUS,RP0 ; Selecciono la pagina 0 de la memoria

CLRF CONTADOR MOVLW B'00111111'

(46)

INCF CONTADOR MOVLW B'00000001' MOVWF PORTE ;*************************** Principal ***************************************************************************** SEGUIR BTFSC PORTC,0 GOTO SEGUIR MOVF CONTADOR,W CALL TABLA INCF CONTADOR,F MOVWF PORTD MOVF CONTADOR,W XORLW NMAYOR BTFSS STATUS,Z GOTO SEG1 CLRF CONTADOR SEG1 BTFSS PORTC,0 GOTO SEG1 GOTO SEGUIR ;***************************** Subrutina de Tabla *************************************************************** TABLA ADDWF PCL,F ;Suma el Contador del Programa con el contenido

;de W y lo deja en el PC.

RETLW B'00111111' ;Retorna con W cargado con 00H RETLW B'00000110' ;Retorna con W cargado con 01H RETLW B'01011011' ;Retorna con W cargado con 02H RETLW B'01001111' ;Retorna con W cargado con 03H RETLW B'01100110' ;Retorna con W cargado con 04H RETLW B'01101101' ;Retorna con W cargado con 05H RETLW B'01111101' ;Retorna con W cargado con 06H RETLW B'00000111' ;Retorna con W cargado con 07H RETLW B'01111111' ;Retorna con W cargado con 08H RETLW B'01101111' ;Retorna con W cargado con 09H END

(47)

2.3.- Ejemplo8.asm (Entrenador Básico 1)

Diagrama de Flujo

Contar pulsos procedentes de PC0 y llevarlos al Display de Unidades y Decenas Elegimos PIC List p=16f877 , f=inhx32 Asignación de nombres de RFS a direcciones. #include <p16f877.inc> ; Igualdades NMAYOR EQU D’100’ ; Registros CBLOCK 0X20 CONTADOR DISPLAY UNIDADES DECENAS CENTENAS DIVIDENDO DIVISOR COCIENTE RESTO ENDC

Sección de código de Reset

ORG OOH ; Dirección del vector de Reset GOTO COMIENZO ;Comienzo del Programa

1

1

Sección de Configuración ORG 0X05H COMIENZO RP0  1 ; Ir al Banco 1

ADCON1  00000110 B ; Configuro las patillas de los PUERTOS A y D como señales digitales.

TRISD  00000000 B ; Poner el Puerto D como salida de datos. TRISE  00000000 B ; Poner el Puerto E como

salida de datos.

TRISC  11111111 B ; Poner Puerto C como entrada de datos

RP0  0 ; Ir al Banco 0

PULSOS  00000000 B ; Resetear el registro PULSOS, es un registro que contiene el numero de pulsaciones. CONTADOR  00000001 B ; Iniciar el CONTADOR a 1

¿ PCO = 0? SI NO PULSOS  CONTADOR CONTADOR  CONTADOR +1 ¿ CONTADOR = NMAYOR ? CONTADOR  00000000 B NO SI MOSTRAR_DISPLAY MOSTRAR_DISPLAY ¿ PCO = 1? SI N0

(48)

Subrutina de DIVIDIR

COCIENTE  00000000 B

DIVIDENDO  W

RESTO DIVIDENDO

DIVIDENDO  DIVIDENDO - DIVISOR

¿ DIVIDENDO < 0 ? COCIENTE  COCIENTE + 1 RETURN SI NO Subrutina de BIN_BCD DIVISOR  D’100’ W  PULSOS DIVIDIR CENTENAS  COCIENTE DIVISOR  D’10’ W  RESTO DIVIDIR DECENAS  COCIENTE UNIDADES  RESTO RETUR N Subrutina BCD_7SEG PCL  PCL + W

RETLW B'00111111' ;Retorna con W cargado con 00H RETLW B'00000110' ;Retorna con W cargado con 01H RETLW B'01011011' ;Retorna con W cargado con 02H RETLW B'01001111' ;Retorna con W cargado con 03H RETLW B'01100110' ;Retorna con W cargado con 04H RETLW B'01101101' ;Retorna con W cargado con 05H RETLW B'01111101' ;Retorna con W cargado con 06H RETLW B'00000111' ;Retorna con W cargado con 07H RETLW B'01111111' ;Retorna con W cargado con 08H

BIN_BCD Subrutina de MOSTRAR_DISPLAY

; Habilitar display de las DECENAS PORTE  00000010 B

; Temporizar. Perder tiempo con dos NOP

; Deshabilitar display de las UNIDADES y DECENAS PORTE  00000000 B

RETUR N

; Habilitar display de las UNIDADES PORTE  00000001 B

; Temporizar. Perder tiempo con dos NOP

; Deshabilitar display de las UNIDADES y DECENAS PORTE  00000000 B

W  UNIDADES BCD_7SEG PORTD  W

(49)

title " Contar pulsos procedentes de PC0 y llevarlos al Display de Unidades y

Decenas "

;Programa para PIC 16F877. ;Velocidad del Reloj:20 MHz. ;Reloj instrucción: 1 MHz = 200 nS. ;Perro Guardián deshabilitado. ;Tipo de Reloj XT.

;Protección de Código: OFF.

;**************************** Elegimos PIC ********************************************************************* list p=16f877, f=inhx32

;************* Asignación de etiquetas del Registros de Funciones especiales a direcciones ************ #include <p16f877.inc> ; Este fichero contiene los nombres y direcciones de los

; registros de funciones especiales.

; Este fichero esta localizado en el directorio ; con el nombre MPASM.

;**************************** Igualdades *********************************************************************** NMAYOR EQU D'100' ;**************************** Registros ************************************************************************* CBLOCK 0X20 CONTADOR PULSOS UNIDADES DECENAS CENTENAS DIVIDENDO DIVISOR COCIENTE RESTO ENDC

;**************************** Sección Código de Reset ************************************************** ORG 0x00 ;Dirección del Vector Reset

GOTO COMIENZO ;Comienzo del Programa

;**************************** Sección de Configuración ************************************************* ORG 0x05 ; Inicio de Programa (Una posición detrás del vector de Interrupción COMIENZO BSF STATUS,RP0 ; Selecciono la pagina 1 de la memoria

Referencias

Documento similar

Cedulario se inicia a mediados del siglo XVIL, por sus propias cédulas puede advertirse que no estaba totalmente conquistada la Nueva Gali- cia, ya que a fines del siglo xvn y en

que hasta que llegue el tiempo en que su regia planta ; | pise el hispano suelo... que hasta que el

(29) Cfr. MUÑOZ MACHADO: Derecho público de las Comunidades Autóno- mas, cit., vol. Es necesario advertir que en la doctrina clásica este tipo de competencias suele reconducirse

95 Los derechos de la personalidad siempre han estado en la mesa de debate, por la naturaleza de éstos. A este respecto se dice que “el hecho de ser catalogados como bienes de

Tras establecer un programa de trabajo (en el que se fijaban pre- visiones para las reuniones que se pretendían celebrar los posteriores 10 de julio —actual papel de los

La última de las mesas, integrada por representantes del sector privado, abordará soluciones aplicadas a situaciones reales de Datos Abiertos para que sirvan de acicate a

Por PEDRO A. EUROPEIZACIÓN DEL DERECHO PRIVADO. Re- laciones entre el Derecho privado y el ordenamiento comunitario. Ca- racterización del Derecho privado comunitario. A) Mecanismos

– Poner un hueco para guardar los valores de reotrno en la pila antes de la llamada. • La subrutina llena el hueco con los valores