Manual de Practicas Para PIC

51
División de Ingenierías Campus Irapuato-Salamanca Universidad de Guanajuato M.en I. J. ANTONIO ALVAREZ JAIME MANUAL DE MICROCONTROLADORES PIC

description

Manual de prácticas de electrónica usando microcontroladores PIC mediante programación en lenguaje ensamblador.Contenido:Introducción a los microcontroladores PICDescripción General del PIC 16F874Instrucciones de Rango medioMPLABAplicaciones prácticas con PIC's 16F873, 16F877, 16F874 y 16F84

Transcript of Manual de Practicas Para PIC

Page 1: Manual de Practicas Para PIC

División de Ingenierías

Campus Irapuato-Salamanca

Universidad de Guanajuato

M.en I. J. ANTONIO ALVAREZ JAIME

MANUAL

DE MICROCONTROLADORES PIC

Page 2: Manual de Practicas Para PIC

Contenido:

CAPITULO 1 Introducción a los microcontroladores (Microcontroladores PIC de Microchip) CAPITULO 2 Descripción General del PIC16F874

CAPITULO 3 Conjunto de Instrucciones de Rango Medio

CAPITULO 4 Una mirada rápida al MPLAB

CAPITULO 5 Aplicaciones prácticas con PIC´s (PIC16F873, PIC16F877, PIC 16F874, PIC16F84)

Page 3: Manual de Practicas Para PIC

CAPITULO 1 Introducción a los microcontroladores (Microcontroladores PIC de Microchip)

Recibe el nombre de controlador el dispositivo que se emplea para el gobierno de uno o varios procesos.

Un microcontrolador es un circuito integrado de alta escala de integración que incorpora la mayor parte de los elementos que configuran un controlador. El microcontrolador, por otro lado, es un sistema cerrado. Todas las partes del microcontrolador están contenidas en su interior y solo salen al exterior las líneas que gobiernan los periféricos.

El microprocesador es un circuito integrado que contiene la Unidad Central de Proceso (CPU), también llamada procesador, de una computadora.

Arquitectura básica

Aunque inicialmente todos los microcontroladores adoptaron la arquitectura clásica de von Neumann, en el momento presente se impone la arquitectura Harvard. La arquitectura de von Neumann se caracteriza por disponer de una sola memoria principal donde se almacenan datos e instrucciones de forma indistinta. A dicha memoria se accede a través de un sistema de buses único (direcciones, datos y control). La arquitectura Harvard dispone de dos memorias independientes, una que contiene solo instrucciones y otra, solo datos.

Ambas disponen de sus respectivos sistemas de buses de acceso y es posible realizar operaciones de acceso (lectura o escritura) simultáneamente en ambas memorias. Los microcontroladores PIC responden a la arquitectura Harvard.

Page 4: Manual de Practicas Para PIC

FIG. 1 Arquitectura Von Newmann

FIG. 2 Arquitectura Harvard

Aplicaciones de los microcontroladores están siendo empleados en multitud de sistemas presentes en nuestra vida diaria, como pueden ser juguetes, horno microondas, frigoríficos, televisores, computadoras, impresoras, módems, el sistema de arranque de nuestro coche, etc.

Page 5: Manual de Practicas Para PIC

CAPITULO 2

Descripción General del PIC16F874

La Familia del PIC16F874 El microcontrolador PIC16F874 de Microchip pertenece a una gran familia de microcontroladores de 8 bits (bus de datos) que tienen las siguientes características generales que los distinguen de otras familias: - Arquitectura Harvard - Tecnología RISC - Tecnología CMOS Estas características se conjugan para lograr un dispositivo altamente eficiente en el uso de la memoria de datos y programa y por lo tanto en la velocidad de ejecución. Microchip ha dividido sus microcontroladores en tres grandes subfamilias de acuerdo al número de bits de su bus de instrucciones:

Variantes principales Los microcontroladores que produce Microchip cubren un amplio rango de dispositivos cuyas características pueden variar como sigue: - Empaquetado (desde 8 terminales hasta 68 terminales) - Tecnología de la memoria incluida (EPROM, ROM, Flash) - Voltajes de operación (desde 2.5 v. Hasta 6v) - Frecuencia de operación (Hasta 20 Mhz)

Empaquetados Aunque cada empaquetado tiene variantes, especialmente en lo relativo a las dimensiones del espesor del paquete, en general se pueden encontrar paquetes tipo PDIP (Plastic Dual In Line Package), PLCC (Plastic Leaded Chip Carrier) y QFP (Quad Flat Package), los cuales se muestran en las figuras siguientes

Page 6: Manual de Practicas Para PIC

Nomenclatura

Page 7: Manual de Practicas Para PIC

Además de lo mostrado en la tabla anterior, en el nombre específico del microcontrolador pueden aparecer algunas siglas como se muestra en la siguiente tabla:

En la siguiente tabla se especifican los rangos de voltaje estándar y extendido manejados por los dispositivos

Oscilador Los PIC de rango medio permiten hasta 8 diferentes modos para el oscilador. El usuario puede seleccionar alguno de estos 8 modos programando 3 bits de configuración del dispositivo denominados: FOSC2, FOSC1 y FOSC0. En algunos de estos modos el usuario puede indicar que se genere o no una salida del oscilador (CLKOUT) a través de una terminal de Entrada/Salida. Los modos de operación se muestran en la siguiente lista: · LP Baja frecuencia (y bajo consumo de potencia) · XT Cristal / Resonador cerámico externos, (Media frecuencia) · HS Alta velocidad (y alta potencia) Cristal/resonador · RC Resistencia / capacitor externos (mismo que EXTRC con CLKOUT) · EXTRC Resistencia / capacitor externos · EXTRC Resistencia / Capacitor externos con CLCKOUT · INTRC Resistencia / Capacitor internos para 4 MHz · INTRC Resistencia / Capacitor internos para 4 MHz con CLKOUT Los tres modos LP, XT y HS usan un cristal o resonador externo, la diferencia sin embargo es la ganancia de los drivers internos, lo cual se ve reflejado en el rango de frecuencia admitido y la potencia consumida. En la siguiente tabla se muestran los rangos de frecuencia así como los capacitores recomendados para un oscilador en base a cristal.

Page 8: Manual de Practicas Para PIC

Cristal externo: En los tres modos mostrados en la tabla anterior se puede usar un cristal

o resonador cerámico externo. En la siguiente figura se muestra la conexión de un cristal a las terminals OSC1 y OS2 del PIC.

Circuito RC externo: En los modos RC y EXTRC el PIC puede generar su señal

oscilatoria basada en un arreglo RC externo conectado a la terminal OSC1 como se muestra en la siguiente figura:

Page 9: Manual de Practicas Para PIC

Este modo sólo se recomienda cuando la aplicación no requiera una gran precisión en la medición de tiempos.

Rangos.- La frecuencia de oscilación depende no sólo de los valores de Rext y Cext, sino

también del voltaje de la fuente Vdd. Los rangos admisibles para resistencia y capacitor son:

Rext: de 3 a 100 Kohms

Cext: mayor de 20 pf

Oscilador externo.- También es posible conectar una señal de reloj generada

mediante un oscilador externo a la terminal OSC1 del PIC. Para ello el PIC deberá estar en uno de los tres modos que admiten cristal (LP, XT o HS). La conexión se muestra en la siguiente figura:

Page 10: Manual de Practicas Para PIC

Oscilador interno de 4Mhz.- En el modo INTRC el PIC usa un arreglo RC interno que

genera una frecuencia de 4 Mhz con un rango de error calibrable de ± 1.5%. Para calibrar el error de oscilación se usan los bits CAL3, CAL2 , CAL1 Y CAL0 del registro OSCCAL.

Calibración del oscilador interno.- El fabricante ha colocado un valor de calibración

para estos bits en la última dirección de la memoria de programa. Este dato ha sido guardado en la forma de una instrucción RETLW XX. Si no se quiere perder este valor al borrar el PIC (en versiones EPROM con ventana) primero se deberá leer y copiar. Es una buena idea escribirlo en el empaquetado antes de borrar la memoria).

Recursos especiales

Cada fabricante oferta numerosas versiones de una arquitectura básica de microcontrolador. En algunas amplia las capacidades de las memorias, en otras incorporan nuevos recursos, en otras reduce las prestaciones al mínimo para aplicaciones muy simples, etc. La labor del diseñador es encontrar el modelo mínimo que satisfaga todos los requerimientos de su aplicación. De esta forma, minimizaría el coste, el hardware y el software. Los principales recursos especiales que incorporan los microcontroladores son:

Temporizadores o "Timers".

Perro guardián o "Watchdog".

Protección ante fallo de alimentación o "Brownout".

Estado de reposo o de bajo consumo.

Conversor A/D. o Conversor D/A.

Comparador analógico.

Modulador de anchura de pulsos o PWM.

Puertos de E/S digitales.

Puertos de comunicación.

Temporizadores o Timers

Se emplean para controlar periodos de tiempo (temporizadores) y para llevar la cuenta de acontecimientos que suceden en el exterior (contadores). Para la medida de tiempos se carga un registro con el valor adecuado y a continuación dicho valor se va incrementando o decrementando al ritmo de los pulsos de reloj o algún múltiplo hasta que se desborde y llegue a 0, momento en el que se produce un aviso. Cuando se desean contar acontecimientos que se materializan por cambios de nivel o bancos en alguna de las terminales del microcontrolador, el mencionado registro se va incrementando o decrementando al ritmo de dichos pulsos.

Page 11: Manual de Practicas Para PIC

Perro guardián o Watchdog

Cuando una computadora personal se bloquea por un fallo del software u otra causa, se pulsa el botón del reset y se reinicializa el sistema. Pero un microcontrolador funciona sin el control de un supervisor y de forma continuada las 24 horas del día. El Perro guardián consiste en un temporizador que, cuando se desborda y pasa por 0, provoca un reset automáticamente en el sistema. Se debe diseñar el programa de trabajo que controla la tarea de forma que refresque o inicialice al Perro guardián antes de que provoque el reset. Si falla el programa o se bloquea, no se refrescara al Perro guardián y, al completar su temporización, "ladrara y ladrara "hasta provocar el reset.

Protección ante fallo de alimentación o Brownout

Se trata de un circuito que resetea al microcontrolador cuando el voltaje de alimentación (VDD) es inferior a un voltaje mínimo ("brownout"). Mientras el voltaje de alimentación sea inferior al de brownout el dispositivo se mantiene reseteado, comenzando a funcionar normalmente cuando sobrepasa dicho valor.

Estado de reposo o de bajo consumo

Son abundantes las situaciones reales de trabajo en que el microcontrolador debe esperar, sin hacer nada, a que se produzca algún acontecimiento externo que le ponga de nuevo en funcionamiento. Para ahorrar energía, (factor clave en los aparatos portátiles), los microcontroladores disponen de una instrucción especial (SLEEP en los PIC), que les pasa al estado de reposo o de bajo consumo, en el cual los requerimientos de potencia son mínimos. En dicho estado se detiene el reloj principal y se detienen sus circuitos asociados, quedando sumido en un profundo sueño el microcontrolador. Al activarse una interrupción ocasionada por el acontecimiento esperado, el microcontrolador se despierta y reanuda su trabajo.

Conversor A/D (CAD)

Los microcontroladores que incorporan un Conversor A/D (Analógico/Digital)

Pueden procesar señales analógicas, tan abundantes en las aplicaciones. Suelen disponer de un multiplexor que permite aplicar a la entrada del CAD diversas señales analógicas desde las terminales del circuito integrado.

Conversor D/A (CDA)

Page 12: Manual de Practicas Para PIC

Transforma los datos digitales obtenidos del procesamiento de una computadora en su correspondiente señal analógica que saca al exterior por una de las terminales de la capsula. Existen muchos dispositivos que trabajan con señales analógicas.

Comparador analógico

Algunos modelos de microcontroladores disponen internamente de un Amplificador Operacional que actúa como comparador entre una señal de referencia y otra variable que se aplica por una de las terminales de la capsula. La salida del comparador proporciona un nivel lógico 1 o 0 según una señal sea mayor o menor que la otra. También hay modelos de microcontroladores con un módulo de tensión de referencia que proporciona diversas tensiones de referencia que se pueden aplicar en los comparadores.

Modulador de anchura de pulso o PWM

Son circuitos que proporcionan en su salida pulsos de anchura variable, que se ofrecen al exterior a través de las terminales del encapsulado.

Puertos de E/S digitales

Todos los microcontroladores destinan algunas de sus terminales a soportar líneas de E/S digitales. Por lo general, estas líneas se agrupan de ocho en ocho formando Puertos.

Las líneas digitales de los Puertos pueden configurarse como Entrada o

Como Salida cargando un 1 o un 0 en el bit correspondiente de un registro

Destinado a su configuración.

Puertos de comunicación

Page 13: Manual de Practicas Para PIC

Con objeto de dotar al microcontrolador de la posibilidad de comunicarse con otros dispositivos externos, otros buses de microprocesadores, buses de sistemas, buses de redes y poder adaptarlos con otros elementos bajo otras normas y protocolos. Algunos modelos disponen de recursos que permiten directamente esta tarea, entre los que destacan: UART: adaptador de comunicación serie asíncrona. USART: adaptador de comunicación serie sincronía y asíncrona Puerta paralela esclava para poder conectarse con los buses de otros microprocesadores. USB: (Universal Serial Bus), que es un moderno bus serie para las PC. Bus I2C: que es un interfaz serie de dos hilos desarrollado por Philips. CAN(Controller Area Network): , para permitir la adaptación con redes de conexionado multiplexado desarrollado conjuntamente por Bosch e Intel para el cableado de dispositivos en automóviles. En EE.UU. se usa el J185O.

Características generales del PIC16F874 La siguiente es una lista de las características que comparte el PIC16F874 con los dispositivos más cercanos de su familia:

- CPU RISC - Sólo 35 instrucciones que aprender - Todas las instrucciones se ejecutan en un ciclo de reloj, excepto los saltos que requieren dos

- Frecuencia de operación de 0 a 20 MHz (DC a 200 nseg de ciclo de instrucción) - Hasta 8k x 14 bits de memoria Flash de programa - Hasta 368 bytes de memoria de datos (RAM) - Hasta 256 bytes de memoria de datos EEPROM - Hasta 4 fuentes de interrupción - Stack de hardware de 8 niveles - Reset de encendido (POR) - Timer de encendido (PWRT) - Timer de arranque del oscilador (OST) - Sistema de vigilancia Watchdog timer. - Protección programable de código - Modo SEP de bajo consumo de energía - Opciones de selección del oscilador - Programación y depuración serie “In-Circuit” (ICSP) a través de dos terminals - Lectura/escritura de la CPU a la memoria flash de programa - Rango de voltaje de operación de 2.0 a 5.5 volts - Alta disipación de corriente de la fuente: 25mA - Rangos de temperatura: Comercial, Industrial y Extendido - Bajo consumo de potencia: o Menos de 0.6mA a 3V, 4 Mhz

o 20 μA a 3V, 32 Khz o menos de 1μA corriente de standby.

Page 14: Manual de Practicas Para PIC

Periféricos - Timer0: Contador/Temporizador de 8 bits con pre-escalador de 8 bits - Timer1: Contador/Temporizador de 16 bits con pre-escalador - Timer0: Contador/Temporizador de 8 bits con pre-escalador y post-escalador de 8 bits y registro de periodo. - Dos módulos de Captura, Comparación y PWM - Convertidor Analógico/Digital: de 10 bits, hasta 8 canales - Puerto Serie Síncrono (SSP) - Puerto Serie Universal (USART/SCI). - Puerto Paralelo Esclavo (PSP): de 8 bits con líneas de protocolo

Diagrama de Bloques del PIC16F874 En la siguiente figura se muestra a manera de bloques la organización interna del PIC16F874, Se muestra también junto a este diagrama su diagrama de terminales, para tener una visión conjunta del interior y exterior del Chip.

Page 15: Manual de Practicas Para PIC
Page 16: Manual de Practicas Para PIC

CAPITULO 3 Conjunto de Instrucciones de Rango Medio

En la siguiente tabla se resumen las instrucciones que reconoce la CPU de los PIC de medio rango, incluyendo su mnemónico, tiempo de ejecución, código de máquina y afectación de banderas:

Table B.8: 14-Bit Core Literal and Control Operations

Hex Mnemonic Description Function

3Ekk ADDLW k Add literal to W k + W W

39kk ANDLW k AND literal and W k .AND. W W

2kkk CALL k Call subroutine PC + 1 TOS, k PC

0064 CLRWDT T Clear watchdog timer 0 WDT (and Prescaler if

assigned)

2kkk GOTO k Goto address (k is nine bits) k PC(9 bits)

38kk IORLW k Incl. OR literal and W k .OR. W W

30kk MOVLW k Move Literal to W k W

0062 OPTION Load OPTION register W OPTION Register

0009 RETFIE Return from Interrupt TOS PC, 1 GIE

34kk RETLW k Return with literal in W k W, TOS PC

0008 RETURN Return from subroutine TOS PC

0063 SLEEP Go into Standby Mode 0 WDT, stop oscillator

3Ckk SUBLW k Subtract W from literal k - W W

006f TRIS f Tristate port f W I/O control reg f

3Akk XORLW k Exclusive OR literal and W k .XOR. W W

Table B.9: 14-Bit Core Byte Oriented File Register Operations

Hex Mnemonic Description Function

07ff ADDWF f,d Add W and f W + f d

05ff ANDWF f,d AND W and f W .AND. f d

018f CLRF f Clear f 0 f

0100 CLRW Clear W 0 W

09ff COMF f,d Complement f .NOT. f d

03ff DECF f,d Decrement f f - 1 d

0Bff DECFSZ f,d Decrement f, skip if zero f - 1 d, skip if 0

0Aff INCF f,d Increment f f + 1 d

0Fff INCFSZ f,d Increment f, skip if zero f + 1 d, skip if 0

04ff IORWF f,d Inclusive OR W and f W .OR. f d

08ff MOVF f,d Move f f d

Page 17: Manual de Practicas Para PIC

CAPITULO 4. UNA MIRADA RAPIDA AL MPLAB (Herramientas de desarrollo)

¿Qué es el MPLAB? EL MPLAB es un “Entorno de Desarrollo Integrado “(Integrated Development Environment, IDE) que corre en “Windows “, mediante el cual Usted puede desarrollar aplicaciones para los microcontroladores de las familias PIC 16/17. EL MPLAB le permite a Usted escribir, depurar y optimizar los programas (firmware) de sus diseños con PIC 16/17. EL MPLAB incluye un editor de texto, un simulador y un organizador de proyectos. Además, el MPLAB soporta el emulador PICMASTER y a otras herramientas de desarrollo de Microchip como el PICSTART - Plus.

¿De qué forma le ayuda el MPLAB?

Con el MPLAB Usted puede:

Depurar sus programas fuente. Detectar errores automáticamente en sus programas fuente para editarlos. Depurar los programas utilizando puntos de corte (breakpoints) mediante valores de

los registros internos. Observar el flujo del programa con el simulador MPLAB -SIM, ó seguirlo en tiempo real

utilizando el emulador PICMASTER. Realizar medidas de tiempo utilizando un cronómetro. Mirar variables en las ventanas de observación. Encontrar respuestas rápidas a sus preguntas, utilizando la Ayuda en línea del MPLAB.

LAS HERRAMIENTAS DEL MPLAB

El Organizador de Proyectos (Proyect Manager).

El organizador de proyectos (Proyect Manager) es parte fundamental de MPLAB. Sin crear un proyecto Usted no puede realizar depuración simbólica. Con el Organizador de Proyectos (Proyect manager) puede utilizar las siguientes operaciones:

Crear un proyecto. Agregar un archivo de programa fuente de proyecto. Ensamblar o compilar programas fuente. Editar programas fuente. Reconstruir todos los archivos fuente, o compilar un solo archivo. Depurar su programa fuente.

Page 18: Manual de Practicas Para PIC

Software ensamblador:

El software ensamblador que presenta Microchip viene en dos presentaciones, una, para entorno DOS llamado MPASM.EXE y la otra, para entorno Windows llamado MPASMWIN.EXE Las dos presentaciones soportan a TODOS los microcontroladores de la familia PIC de Microchip.

El conjunto de instrucciones de los microcontroladores PIC es en esencia la base del lenguaje ensamblador soportado por este software.

Directivas de uso frecuente: Son instrucciones para el compilador.

#DEFINE ej. #define <nombre> [<valor a remplazar>] explicación: declara una cadena de texto como substituto de otra

END ej. end explicación: indica fin de programa

EQU ej. status equ 05 explicación: define una constante de ensamble

INCLUDE ej. include <PIC16F84.h> explicación: incluye en el programa un archivo con código fuente

ORG ej. org 0x100 explicación: ensambla a partir de la dirección especificada

Page 19: Manual de Practicas Para PIC

CAPITULO 5

Aplicaciones prácticas con PIC´s (PIC16F873, PIC16F877, PIC 16F874, PIC16F84)

Page 20: Manual de Practicas Para PIC

Práctica No. 1 SISTEMA BÁSICO DEL MICROCONTROLADOR PIC16F87X

OBJETIVOS:

Implementar el sistema básico para operar los microcontroladores PIC 16F873 o 16F877.

Utilizar el entorno gráfico MPLAB IDE para editar, compilar y depurar el primer programa en ensamblador para programar los PIC 16F873 o 16F877.

COMPONENTES:

1 Microcontrolador PIC 16f873 o 16F877 8 LEDS 8 resistores de 220kΩ 1 resistor menor a 40KΩ 1 resistor mayor a 1KΩ 1 capacitor electrolítico de cualquier valor 1 cristal 4MHz 2 Capacitores cerámicos 15-68pF

Cable

EQUIPO:

1 Fuente de +5V 1 Punta lógica 1 Multímetro 1 Plantilla Pinzas de punta y de corte 1 Computadora (software MPLAB y software WinPic800) 1 Programador de PIC

Page 21: Manual de Practicas Para PIC

1.1 INTRODUCCIÓN.

Los microcontroladores son dispositivos versátiles que tienen una infinidad de aplicaciones. En este curso se utilizará el microcontrolador PIC16F873 (o 16F877) de Microchip Technology, una de las empresas líderes en el mercado de los microcontroladores. El diagrama de los pines para los PIC16F873 en la fig1. y PIC16F877 en la fig2. son los siguientes:

Fig1. PIC16F873A (Diagrama de 28 pines )

Page 22: Manual de Practicas Para PIC

Fig2. PIC16F877A (Diagrama de 40 pines ) Las características de estos PICs están resumidas en el siguiente cuadro:

1.2 DESARROLLO.

Para editar, depurar y simular el código con el que se programará el microcontrolador se

utilizará el entorno gráfico MPLAB IDE (Integrated Development Environment). Los pasos a seguir son los siguientes: 1. Se abre el programa y se selecciona la opción Project Wizard del menú PROJECT.

2. En las ventanas emergentes se selecciona el tipo de microcontrolador a usar, el nombre del proyecto, así como el directorio de trabajo (tener cuidado de determinar este directorio para saber donde guardará sus archivos de trabajo).

Page 23: Manual de Practicas Para PIC
Page 24: Manual de Practicas Para PIC

3. Una vez determinado su proyecto, abrirá una ventana nueva que guardará bajo el nombre que desee con la extensión .asm.

Page 25: Manual de Practicas Para PIC

4. Este archivo se llamará después en la ventana que tiene el nombre del proyecto con la extensión mcw. Esto se hace al seleccionar con el botón derecho del mouse “Source Files”.

Page 26: Manual de Practicas Para PIC

5. El código en ensamblador que se escribirá en la nueva ventana es el siguiente:

; Programa contador de 4 bits con 'clear' LIST P = 16f873 ; Comando que indica el PIC usado #include "P16F873.INC" RADIX HEX ; Los valores se representan en hexadecimal AUX1 EQU 0x20 ; Registros auxiliares AUX2 EQU 0x21 AUX3 EQU 0x22 ORG 5 ; Comando que indica al ensamblador la dirección ; de la memoria donde se situará la instrucción ; siguiente bsf STATUS,5 ; Pone a 1 el bit 5 de ESTADO para direccionar ; el banco 1 de la memoria de datos movlw 0xff ; W <= ff movwf PORTA ; Las líneas de PA como entradas clrf PORTB ; Puerta B como salidas bcf STATUS,5 ; Pone a 0 el bit 5 de ESTADO pasando a acceder ; al banco 0 bsf STATUS,C clrf AUX1 ; Inicializa el contador a 0 inicio btfsc PORTA,0 ; Si bit 0 = 1 entonces resetea el contador clrf AUX1 incf AUX1 ; Incrementa el contador movf AUX1,w ; W <= AUX1 movwf PORTB ; W => Puerta B. El valor de W sale por las líneas ; de Puerta B a los led call retardo ; Llama subrutina de retardo goto inicio ; Se salta a la instrucción precedida por la ; etiqueta inicio ;********* SUBRUTINA DE RETARDO ************************ ;Esta rutina se utiliza como un divisor de frecuencia, ya que no ;se puede utilizar la frecuencia del PIC de manera directa. retardo movlw 0xff movwf AUX2 ;se lleva este valor a AUX2 one call retardo2 decfsz AUX2,1 ;Se decrementa AUX2 y se deposita en ;ella misma goto one ;si llega a cero sale de la rutina return ;Una vez completados los ciclos se regresa ;al programa principal retardo2 movlw 0xff

Page 27: Manual de Practicas Para PIC

movwf AUX3 ;se lleva este valor a AUX2 two decfsz AUX3,1 ;Se decrementa AUX2 y se deposita en ;ella misma goto two ;si llega a cero sale de la rutina return ;Una vez completados los ciclos se regresa ;al programa principal END ; Directiva que indica el final del programa Ya que se haya escrito este código se guardaran los cambios en nuestro archivo con extensión .asm (en el menu FILE --- SAVE) y se seleccionará la opción Build All en el menú PROJECT o el ícono en la barra de botones.

Al haberse compilado el código sin errores se utilizará el programa WINPIC800 para programar el PIC.

El Pic que utilizamos es el PIC16F873A

Se generara un archivo con extensión “.HEX”, el cual llamaremos al programa que nos va a cargar el PIC

Page 28: Manual de Practicas Para PIC

El programa que se utilizó para programar el pic fue el WinPic800. y se empleo tambien un hardware para el cargador del PIC16F873A B. Ya que se haya programado el PIC, este se pasa a la plantilla de trabajo y se conectará de acuerdo a los siguientes diagramas de la fig3 y la fig4. Tener cuidado al manejar el PIC de no dañarlo con electricidad estática (utilizar pinzas para su manejo). El voltaje que se utilizará es de 5V para VDD y 0V para VSS.

Page 29: Manual de Practicas Para PIC

Fig 3. Diagrama de contador de 8 bits

Fig. 4 Diagrama de las salidas puerto B, del contador de 8 Bits.

Donde los valores para los componentes se dan en la siguiente tabla:

Símbolo

Valor Min

Valor Max

VDD 5V 5V

R1 - 40KΩ

R2 1KΩ -

C1 ND ND

C2 15pF 68pF

C3 15pF 68pF

Las resistencias R1, R2 y el capacitor C1 son recomendados por el fabricante para evitar que voltajes fuera de rango lleven el dispositivo a reinicios o consumos de energía más allá de los especificados para el dispositivo.

Page 30: Manual de Practicas Para PIC

1.3 Ejercicios 1. Consulte el conjunto de instrucciones para determinar cual o cuales se pueden utilizar para modificar el código de esta práctica con el objeto de generar la siguiente secuencia de salida en la puerta B. ;Programa que se avienta la secuencia de taxista :) LIST P = 16f873 ; Comando que indica el PIC usado #include "P16F873.INC" RADIX HEX ; Los valores se representan en hexadecimal AUX1 EQU 0x20 ; Registros auxiliares AUX2 EQU 0x21 AUX3 EQU 0x22 ORG 5 ; Comando que indica al ensamblador la dirección ; de la memoria donde se situará la instrucción ; siguiente bsf STATUS,5 ; Pone a 1 el bit 5 de ESTADO para direccionar ; el banco 1 de la memoria de datos movlw 0xff ; W <= ff movwf PORTA ; Las líneas de PA como entradas clrf PORTB ; Puerta B como salidas bcf STATUS,5 ; Pone a 0 el bit 5 de ESTADO pasando a acceder ; al banco 0 bsf STATUS,C AUX1 EQU 0x80 ; Inicializa el contador a "1000 000" inicio rlf AUX1 ; Desplaza a la izquierda el bit de AUX1 btfsc AUX1,0 ;Checa cuando dio una vuelta para entrar a CERO call cero ;Llama subrutina para mostrar cero en el puerto B movf AUX1,w ; W <= AUX1 movwf PORTB ; W => Puerta B. El valor de W sale por las líneas ; de Puerta B a los led call retardo ; Llama subrutina de retardo goto inicio ; Se salta a la instrucción precedida por la ; etiqueta inicio ;********* SUBRUTINA DE RETARDO ************************ ;Esta rutina se utiliza como un divisor de frecuencia, ya que no ;se puede utilizar la frecuencia del PIC de manera directa.

Page 31: Manual de Practicas Para PIC

retardo movlw 0xff movwf AUX2 ;se lleva este valor a AUX2 one call retardo2 decfsz AUX2,1 ;Se decrementa AUX2 y se deposita en ;ella misma goto one ;si llega a cero sale de la rutina return ;Una vez completados los ciclos se regresa ;al programa principal retardo2 movlw 0xff movwf AUX3 ;se lleva este valor a AUX2 two decfsz AUX3,1 ;Se decrementa AUX2 y se deposita en ;ella misma goto two ;si llega a cero sale de la rutina return ;Una vez completados los ciclos se regresa ;al programa principal cero clrf PORTB ;Limpia el puerto para que muestre "0000 0000" call retardo ;Llama a retardo return ;Regresa al programa principal END ; Directiva que indica el final del programa

Práctica No. 2 MANEJO DE INTERRUPCIÓN EXTERNA

Objetivo: Programar el microcontrolador para que acepte una interrupción externa analizando el uso de la pila. Componentes:

1 Microcontrolador PIC 16f873 o 16F877 8 LEDS 8 resistores de 220kΩ 1 resistor menor a 40KΩ 1 resistor mayor a 1KΩ 1 capacitor electrolítico de cualquier valor 1 cristal 4MHz 2 Capacitores cerámicos 15-68pF

Equipo: 1 Fuente de +5V 1 Punta lógica

Page 32: Manual de Practicas Para PIC

1 Multímetro 1 Plantilla Pinzas de punta y de corte 1 Computadora (software MPLAB y software WinPic800) 1 Programador de PIC

1.1 Introducción. El microcontrolador PIC16F87X tiene un máximo de 15 interrupciones. Las interrupciones son llamadas asíncronas a subrutinas que desvían el flujo del control del programa. Pueden ser externas como el cambio de estado de un pin de entrada o internas como el desbordamiento de un temporizador. Al ejecutarse una interrupción se detiene la ejecución del programa en curso, se guarda la dirección actual del contador de programa en la pila y se carga el contador con la dirección reservada 0004H, donde comienza la rutina de servicio a la interrupción (RSI). La interrupción que se utilizará en esta práctica es una externa a través del pin 0 del puerto B. Consulte en la hoja de datos del PIC la configuración de las interrupciones mediante el registro INTCON.

Fig2. PIC16F877A (Diagrama de 40 pines ) 1.2 Desarrollo. A. Se programa el PIC con el siguiente código en ensamblador (en caso de duda de cómo hacerlo consulte la Práctica No. 1 ; Programa interrupción por pin 0 de puerto B LIST P = 16f877 #include <p16f877.inc> ; Archivo que define configuraciones, ; registros, etc. para el PIC 16F877 AUX1 EQU 0x20 AUX2 EQU 0x21 AUX3 EQU 0x22 AUX4 EQU 0x23 goto startup ; Va al inicio del programa ORG 0X04 ; Define la sig. línea en la dirección 0004H goto inter ; Va a inter después de una interrupción startup movlw 0x90

Page 33: Manual de Practicas Para PIC

movwf INTCON ; Habilita la interrupción del pin RB0 bsf STATUS,RP0 ; Establece a 1 el bit 5 clrf TRISC ; Puerto C como salidas movlw 0xF movwf TRISB ; Puerto B como entradas bcf STATUS,RP0 ; Establece a 1 el bit 5 ciclo btfsc PORTB,1 ; Si bit 1 = 1 entonces resetea el contador clrf AUX1 incf AUX1,1 ; Incrementa el contador movf AUX1,W ; W <= AUX1 movwf PORTC ; W => PORTC. El valor de W sale por las líneas ; de Puerto C a los LEDs call retardo ; Llama subrutina de retardo goto ciclo ; Se salta a la instrucción precedida por la ; etiqueta ciclo ;********* SUBRUTINA DE INTERRUPCIÓN ******************* inter movlw 0x0A movwf AUX4 iciclo decfsz AUX4,F goto twinkle bcf INTCON,1 retfie ; Esta instrucción regresa la última dirección ; de la pila al contador de programa twinkle movlw 0xFF ; Esta subrutina hace que los leds conectados movwf PORTC ; al puerto C prendan y apaguen 10 veces call retardo clrf PORTC call retardo goto iciclo ;********* SUBRUTINA DE RETARDO ************************ ;Esta rutina se utiliza como un divisor de frecuencia retardo movlw 0xff movwf AUX2 one call retardo2 decfsz AUX2,1 goto one return retardo2

Page 34: Manual de Practicas Para PIC

movlw 0xff movwf AUX3 two decfsz AUX3,1 goto two return END B. Ya que se haya programado el PIC, este se pasa a la plantilla de trabajo y se conectará de acuerdo con el siguiente diagrama que es para el PIC16F873. Si utiliza el PIC16F877 cambie los pines de acuerdo al diagrama correspondiente en la hoja de datos. Tenga cuidado al manejar el PIC de no dañarlo con electricidad estática (utilizar pinzas para su manejo). El voltaje que se utilizará es de 5V para VDD y 0V para VSS.

Page 35: Manual de Practicas Para PIC

Practica N. 3 “Manejo del convertidor A/D”

Objetivo:

Programar el microcontrolador para que realice la conversión de una señal analógica a digital utilizando el convertidor A/D interno.

Componentes:

1 Microcontrolador PIC 16f873 o 16F877 8 LEDS 8 Resistores de 220kΩ 1 Resistor menor a 40KΩ 1 Resistor mayor a 1KΩ 1 Capacitor electrolítico de cualquier valor 1 Cristal 4MHz 2 Capacitores cerámicos 15-68pF 1 Potenciómetro 0-10KΩ

Equipo:

1 Fuente de +5V 1 Punta lógica 1 Multímetro 1 Plantilla

Introducción: El microcontrolador PIC16F87X tiene cinco canales analógicos de entrada para el dispositivo de 28 pines y ocho canales para el de 40 pines. Todos estos canales dirigen una señal a un convertidor analógico-digital de 10 bits de resolución. El modulo del convertidor A/D tiene la opción de seleccionar los valores de voltaje de referencia alto y bajo mediante software entre la opciones de VDD, VSS, RA2 o RA3. Aquí RA2 es el pin para el voltaje de referencia bajo VREF- y RA3 es el pin para el voltaje de referencia alto VREF+ .Los valores de voltaje máximo y mínimo para estos pines se indican en la siguiente tabla.

Símbolo Característica Valor mínimo Valor máximo Unidades

VREF+ voltaje de referencia alto

VDD - 2.5V VDD + 0.3VV V

VREF- voltaje de referencia bajo

VSS - 0.3V VREF+ - 2.0V V

Para el manejo del módulo A/D se requiere acceder a los siguientes registros:

Page 36: Manual de Practicas Para PIC

ADCON0, ADCON1 → Para la configuración del modulo ADRESH, ADRESL → Para leer el resultado de la conversión TRISA, PORTA, TRISE, PORTE → Para definir el canal o los canales de entrada INTCON, PIR1, PIE1 → Para configurar el manejo de la interrupción el terminar la conversión. El convertidor A/D puede operar en el estado SLEEP del microcontrolador usando como señal de reloj el oscilador interno RC del módulo. Al terminar la conversión el resultado se guarda en los registros ADRES. Si la interrupción A/D está habilitada, el microcontrolador sale del estado SLEEP para atender dicha interrupción. El tiempo de conversión A/D por bits se define como TAD. La conversión A/D requiere un mínimo de 12 TAD para una conversión de 10 bit. El tiempo mínimo de TAD es de 1.6μSm por lo que la selección del TAD en función del TOSC (periodo del reloj) se debe seleccionar de acuerdo a la frecuencia del reloj que se utiliza según la siguiente tabla.

Relación del TOSC ADCON1<6>:ADCON0<7:6>

Máxima frecuencia de reloj

2 TOSC 000 1.25MHz

4 TOSC 100 2.5MHz

8 TOSC 001 5MHz

16 TOSC 101 10MHz

32 TOSC 010 20MHz

64 TOSC 110 20MHz

RC X11 TSD típico entre 2-6μS

Desarrollo: Se programa el PIC con el siguiente código en ensamblador.

;Programa que convierte un valor de voltaje analógico en el pin AN0 (pin 2) ;y el resultado lo despliega en el puerto b LIST P= 16f873 ;comando que indica el PIC usado #include "P16F873.INC" RADIX HEX ;Los valores se representan en hexadecimal ORG 5 ;Comando que indica al ensamblador la dirección ;de la memoria donde se situará la instrucción siguiente bsf STATUS,5 ;Cambio al banco 1 movlw 0xFF ;W<=ff(hex) movwf TRISA ;W=>TRISA clrw 0xff ;W<=0 movwf TRISB ;W=>TRISB (las líneas de PB salidas) movlw 0x0E movwf ADCON1 ;Envía '00001110 al registro ADCON1 bcf STATUS,5 ;Cambio al banco 0 movlw 0x81 movwf ADCON0 ;Envía '10000001' al registro ADCON0

Page 37: Manual de Practicas Para PIC

inicio bsf ADCON0,2 ;Indica conversión conv btfsc ADCON0,2 ;Comprueba que el bit GO/DONE sea cero goto conv ;Ciclo para verificar bit 2 de ADCON0 movf ADRESH,W ;Mueve el resultado a W movwf PORTB ;Mueve W al puerto B goto inicio ;Salta a la instrucción precedida por la etiqueta inicio END ;Directiva que indica el final del programa

Ya que se haya programado el PIC, este se inserta en la plantilla y se conectara de acuerdo con el siguiente diagrama que es para el PIC16F873, si utiliza el PIC16F877 cambie los pines de acuerdo al diagrama correspondiente en la hoja de datos. Tenga cuidado al manejar el PIC de no dañarlo con electricidad estática (utilizar pinzas para su manejo). El voltaje que se utilizara es de 5V para VDD y 0V para VSS.

Page 38: Manual de Practicas Para PIC

Los valores para los componentes descritos en la figura se dan en la siguiente tabla

Símbolo Valor Mínimo Valor Máximo

VDD 5V 5V

R1 - 40KΩ

R2 1KΩ -

C1 ND ND

C2 15pF 68pF

C3 15pF 68pF

P1 0Ω 10KΩ

Page 39: Manual de Practicas Para PIC

Practica N. 4 Operaciones Entrada / Salida Objetivos:

Verificar el modo en el que se debe programar el sentido de los puertos Realizar la entradas por puerto mediante la lectura de interruptores "dip-switch" Escribir sobre un puerto de salida visualizando sobre LEDs

FIG. 4.1.1 Hardware para ejercicio Entrada/Salida

Procedimiento: En el proceso de utilización de un puerto debe tenerse en cuenta como primera instancia la programación del sentido en que dicho puerto va a utilizarse. Una vez energizado el microcontrolador todos y cada uno de los puertos quedan programados como entrada, entonces, tan solo deben programarse los que se quieren utilizar como salida.

En el hardware de la figura 4.1.1 se observa que se han colocado 4 dip switch al puerto B y estos no poseen resistencia de pull up lo cual nos obliga a habilitar las resistencias internas con las que cuenta el microcontrolador PIC16F84, el programa debe entonces en un repetitivo infinito leer el nivel lógico que colocan los switch y pasar este resultado al puerto A complementando el estado de la información puesto que de acuerdo a la disposición de los LEDs un estado bajo en el puerto enciende el LED correspondiente y por ende un estado alto en el puerto, apaga el LED.

Page 40: Manual de Practicas Para PIC

Programa:

status equ 03h optionr equ 81h trisa equ 85h porta equ 05h trisb equ 86h portb equ 06h ; Inicio: bsf status,5 ;se pasa al banco 1 de RAM clrf trisa ;se programa el puerto A como salida movlw 0Fh ;dato para la programación del puerto B movwf trisb ;parte alta como salida y parte baja como entrada bcf optionr,7 ;se habilitan resistencias de Pull Up bcf status,5 ;se pasa al banco 0 de RAM Loop: comf portb,0 ;se lee el puerto B, se complementa su valor y el ;resultado pasa a W movwf porta ;se pasa el resultado de W al puerto A goto Loop ;ejecuta un ciclo infinito end

En un proceso de lectura de interruptores, casi siempre cuando se detecta un cambio en el estado, es aconsejable amortiguar la lectura de estos con un retardo de software.

Dependiendo de la calidad del interruptor el tiempo del retardo puede estar alrededor de 50 mS. En el caso de este ejercicio en particular no es requerido puesto que un cambio en el interruptor debe reflejarse inmediatamente en el puerto de salida. Se debe tener en cuenta que nunca una entrada debe quedar al aire puesto que los microcontroladores PIC son hechos con tecnología CMOS. Es por este motivo que en el programa se programó la parte alta del puerto B como salida.

Page 41: Manual de Practicas Para PIC

Practica N. 5 Exploración de teclado

FIG. 5.1.1 Hardware correspondiente al experimento de exploración de teclado

Para la lectura del teclado debemos tener en cuenta la disposición de las filas y las columnas como se observa en la FIGURA 5.1.2 con la cual realizando la operación allí descrita se debe obtener un número consecutivo de las teclas en la organización aquí mostrada. Luego, mediante el acceso a una tabla se decodifica la tecla leída para obtener el patrón final observado en el diagrama del hardware FIG. 5.1.1. Ej. Sí se oprimiese la tecla C del teclado ( FIG. 5.1.1), el código de exploración correspondiente a esta es el 13d (FIG. 5.1.2) que debe ser representado como el 1100b en las salidas DCBA ( FIG. 5.1.1).

Page 42: Manual de Practicas Para PIC

FIG. 5.1.2 Distribución del teclado, numeración en filas y columnas y la fórmula para hallar la tecla oprimida

En este experimento se realiza la emulación del integrado decodificador de teclado 74C922 en cuanto a su funcionamiento, pero de acuerdo a la configuración de hardware de la FIG. 5.1.1.

Listado del programa para exploración de teclado:

list p=16f84 #include <p16f84.inc> ;archivo de encabezado por Microchip® ; ;ESTE PROGRAMA EMULA UN 74C922 DECODIFICADOR DE TECLADO ; CONTFIL EQU 0x12 ;Contador de Filas CONTCOL EQU 0x13 ;Contador de Columnas COLKBD EQU 0x14 ;DATO EN COLUMNAS Temp EQU 0x15 R1 EQU 0x16 ;Variable para Retardo R2 EQU 0x17 ;Variable para Retardo R3 EQU 0x18 ;Variable para Retardo R4 EQU 0x19 ;Variable para Retardo COUNT EQU 0x1A CHAR EQU 0x1B ;Almacenamiento temporal SCAN AUX EQU 0x1C ;Variable Auxiliar

#define _z STATUS,2 #define _c STATUS,0 #define OE PORTA,4 #define BANK0 bcf STATUS,RP0 #define BANK1 bsf STATUS,RP0 ; ;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ORG 0x00 MAIN BANK1 CLRF TRISA BANK0 CLRF PORTA NOP NOP Muestre BCF OE RUSCAN CALL SCAN XORLW 0x00 ;espera una Tecla BTFSC _z GOTO Muestre MOVWF PORTA MOVLW .50 MOVWF COUNT LOOPSCAN CALL DEL5MS DECFSZ COUNT,1

Page 43: Manual de Practicas Para PIC

GOTO LOOPSCAN GOTO RUSCAN ;*************************************************************************** DEL5MS MOVLW .12 MOVWF R1 MOVLW 7 MOVWF R2 MOVLW 1 MOVWF R3 MOVLW 1 MOVWF R4 LOOPDEL5 DECFSZ R1,F GOTO LOOPDEL5 DECFSZ R2,F GOTO LOOPDEL5 DECFSZ R3,F GOTO LOOPDEL5 DECFSZ R4,F GOTO LOOPDEL5 NOP RETURN ;*************************************************************** ;RETORNA W=00 NO HAY TECLA OPRIMIDA, ;RETORNA W=COD SI TECLA OPRIMIDA. ;************************************************************** SCAN BANK1 MOVLW 0x0F ;el puerto que lee teclado <0:3> filas (in) MOVWF TRISB BANK0 MOVLW 0x01 MOVWF CONTCOL MOVLW 0x7F MOVWF COLKBD RSTFIL CLRF CONTFIL ;RESET CONT FILAS MOVF COLKBD,W MOVWF PORTB ;COLOCAR UN CERO EN COLUMNAS nop nop nop MOVF PORTB,W ;LEER FILAS DE TECLADO MOVWF AUX RLF AUX,F RLF AUX,F RLF AUX,F RLF AUX,F TESTFIL RLF AUX,F BTFSS _c GOTO ACERTADO INCF CONTFIL,F MOVF CONTFIL,W XORLW 0x04

Page 44: Manual de Practicas Para PIC

BTFSS _z GOTO TESTFIL

BSF _c RRF COLKBD,F ;rotacion del cero a colocar INCF CONTCOL,F MOVF CONTCOL,W XORLW 0x05 BTFSS _z GOTO RSTFIL RETLW 0x00

ACERTADO MOVF CONTFIL,W XORLW 0x00 BTFSC _z GOTO ESCERO MOVLW 0x00 MUL ADDLW 0x04 DECFSZ CONTFIL GOTO MUL SUMACOL ADDWF CONTCOL,W CALL TABKBD RETURN TABKBD addwf PCL,F retlw 0 ;inválido retlw 0x10 retlw 0x11 retlw 0x12 retlw 0x13 retlw 0x14 retlw 0x15 retlw 0x16 retlw 0x17 retlw 0x18 retlw 0x19 retlw 0x1A retlw 0x1B retlw 0x1C retlw 0x1D retlw 0x1E retlw 0x1F ESCERO MOVLW 0x00 GOTO SUMACOL end

Page 45: Manual de Practicas Para PIC

Practica N. 6

Regulación de velocidad de motor D.C.

Por medio de la presente práctica se pretende hacer la variación de la velocidad a un motor DC aplicando un voltaje variable a este por medio del método de modulación por ancho de pulso o PWM.

Onda rectangular y sus características

El método de modulación por ancho de pulso está basado en la obtención de un voltaje DC variable a partir de una onda rectangular de frecuencia constante y ciclo útil variable, de tal manera que:

Vdc = (Ciclo útil) * Vm

Ó

Vdc = (ton/T) * Vm

Siendo:

ton el tiempo en alto de la onda cuadrada

T el periodo de la onda rectangular (T = ton + toff )

Vm el voltaje máximo de la onda

Se puede concluir a partir de esta simple ecuación que sí hacemos variar el ciclo útil de la onda rectangular obtendremos una variación en el voltaje promedio y sí este es aplicado como alimentación del motor DC, el efecto será el de la variación de la velocidad.

Page 46: Manual de Practicas Para PIC

Para la aplicación de este principio nos basamos en el siguiente circuito:

El programa que comanda sobre este Hardware funciona basado en el pulsador S1 como control de 10 pasos discretos de velocidad los cuales son indicados sobre el display 7 segmentos (0 a 9) y cuyo

efecto final se observa directamente en la velocidad del motor M1.

Listado del programa

LIST P= 16F84 #INCLUDE<P16F84.INC> DIG EQU 0CH VROFF EQU 0DH VRON EQU 0EH CONT1 EQU 0FH CONT2 EQU 10H X EQU .250 Y EQU .12 ;************************************************************************* INICIO

BSF STATUS,RP0 ; PROGRAMACIÓN DEL SENTIDO DE PUERTOS CLRF TRISB MOVLW B'11100001' MOVWF TRISA

Page 47: Manual de Practicas Para PIC

BCF STATUS,RP0 MOVLW 00H MOVWF DIG BCF PORTA,4

DIS_LOOP: CALL DISPLAY ; VISUALIZACIÓN DE DIGITO BTFSC PORTA,0 ; LA TECLA ESTA OPRIMIDA? GOTO RMOTOR CALL RETAR ; TIEMPOS DE ANTIREBOTE CALL RETAR CALL RETAR CALL RETAR CALL RETAR CALL RETAR CALL RETAR CALL RETAR CALL RETAR CALL RETAR CALL RETAR INCF DIG,1 MOVLW .11 XORWF DIG,0 BNZ RMOTOR CLRF DIG

RMOTOR CALL MOTOR GOTO DIS_LOOP

;************************************************************************* DISPLAY

MOVF DIG,0 CALL TABLA MOVWF PORTB RETURN

;************************************************************************* TABLA: ; TABLA DE DATOS PARA DECODIFICACIÓN A SIETE SEGMENTOS

ADDWF PCL,1 RETLW 0x3F RETLW 0x06 RETLW 0x5B RETLW 0x4F RETLW 0x66 RETLW 0x6D RETLW 0x7D RETLW 0x07 RETLW 0x7F RETLW 0x6F RETLW 0x77

;************************************************************************** MOTOR: ; ACTIVA MOTOR CON TIEMPOS: Ton Y Toff

MOVF DIG,0 SUBLW .10

Page 48: Manual de Practicas Para PIC

MOVWF VROFF CLRW XORWF DIG,0 BZ OFFMOTOR MOVF DIG,0 MOVWF VRON BSF PORTA,4 ; ENCIENDE EL MOTOR

MOTOR1: CALL RETAR DECFSZ VRON,1 GOTO MOTOR1

OFFMOTOR BCF PORTA,4 ; APAGA MOTOR MOVF DIG,0 XORLW .10 BZ MOTOR3

MOTOR2 CALL RETAR DECFSZ VROFF,1 GOTO MOTOR2

MOTOR3 RETURN

;*************************************************************************** RETAR

MOVLW X MOVWF CONT1

CICLO1 MOVLW Y MOVWF CONT2

CICLO2 DECFSZ CONT2,1 GOTO CICLO2 DECFSZ CONT1,1 GOTO CICLO1 RETURN

;**************************************************************************** END

Page 49: Manual de Practicas Para PIC

Practica N. 7

Uso de la memoria EEPROM

Con el circuito de la practica N.1 veremos la aplicación de la memoria EEPROM del pic16F874.

Programa:

; Programa contador de 4 bits con 'clear' __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_OFF & _XT_OSC LIST P = 16f873 ; Comando que indica el PIC usado #include "P16F873.INC" RADIX HEX ; Los valores se representan en hexadecimal AUX1 EQU 0x20 ; Registros auxiliares AUX2 EQU 0x21 AUX3 EQU 0x22 ADDR EQU 0x23 ORG 5 ; Comando que indica al ensamblador la dirección ; de la memoria donde se situará la instrucción ; siguiente bsf STATUS,5 ; Pone a 1 el bit 5 de ESTADO para direccionar ; el banco 1 de la memoria de datos movlw 0xff ; W <= ff movwf PORTA ; Las líneas de PA como entradas clrf PORTB ; Puerta B como salidas bcf STATUS,5 ; Pone a 0 el bit 5 de ESTADO pasando a acceder ; al banco 0 bsf STATUS,C ;*********************************lectura********************************* BSF STATUS, 6 ; BCF STATUS, 5 ;Bank 2 MOVF ADDR, W ;Write address MOVWF EEADR ;to read from BSF STATUS, 5 ;Bank 3 BCF EECON1, 7 ;Point to Data memory BSF EECON1, 0 ;Start read operation BCF STATUS, 5 ;Bank 2 MOVF EEDATA, W ;W = EEDATA BCF EECON1, 0 ;************************************************************************* bcf STATUS,5 bcf STATUS,6 movwf AUX1 ;

Page 50: Manual de Practicas Para PIC

inicio bcf STATUS,5 bcf STATUS,6 incf AUX1 ; Incrementa el contador movf AUX1,w ; W <= AUX1 movwf PORTB ; W => Puerta B. El valor de W sale por las líneas ; de Puerta B a los led ;********************************escitura********************************* HOLA BSF STATUS, 6 ; BSF STATUS, 5 ;Bank 3 BTFSC EECON1, 1 ;Wait for GOTO HOLA ;write to finish BCF STATUS, 5 ;Bank 2 MOVF ADDR, 0 ;Address to MOVWF EEADR ;write to MOVF AUX1, 0 ;Data to MOVWF EEDATA ;write BSF STATUS, 5 ;Bank 3 BCF EECON1, 7 ;Point to Data memory BSF EECON1, 2 ;Enable writes ;Only disable interrupts BCF INTCON, 7 ;if already enabled, ;otherwise discard MOVLW 0x55 ;Write 55h to MOVWF EECON2 ;EECON2 MOVLW 0xAA ;Write AAh to MOVWF EECON2 ;EECON2 BSF EECON1, 1 ;Start write operation ;Only enable interrupts BSF INTCON, 7 ;if using interrupts, ;otherwise discard BCF EECON1, 2 ;Disable writes BCF EECON1, 1 ;************************************************************************* call retardo ; Llama subrutina de retardo goto inicio ; Se salta a la instrucción precedida por la ; etiqueta inicio ;********* SUBRUTINA DE RETARDO ************************ ;Esta rutina se utiliza como un divisor de frecuencia, ya que no

Page 51: Manual de Practicas Para PIC

;se puede utilizar la frecuencia del PIC de manera directa. retardo movlw 0xff movwf AUX2 ;se lleva este valor a AUX2 one call retardo2 decfsz AUX2,1 ;Se decrementa AUX2 y se deposita en ;ella misma goto one ;si llega a cero sale de la rutina return ;Una vez completados los ciclos se regresa ;al programa principal retardo2 movlw 0xff movwf AUX3 ;se lleva este valor a AUX2 two decfsz AUX3,1 ;Se decrementa AUX2 y se deposita en ;ella misma goto two ;si llega a cero sale de la rutina return ;Una vez completados los ciclos se regresa ;al programa principal END ; Directiva que indica el final del programa