Está en la página 1de 91

MANUAL DE PRÁCTICAS

DIVISIÓN ACADÉMICA DE MECÁNICA INDUSTRIAL

MANUAL DE PRÁCTICAS DE LABORATORIO DE


Título de la práctica
MICROCONTROLADORES EN CCS C

Carrera MECATRÓNICA / AUTOMATIZACIÓN

Asignatura MICROCONTROLADORES

Unidades de
Cuatrimestre HORAS
aprendizaje

Teóricas Prácticas Totales


II. Compilador “C”
para 5
microcontroladores 10 20 30

Elaboró M.C. ABRAHAM LEYVA MANCILLA

Pedro Ixcaret Rodriguez Alarcon


Angel Gael Benhumea Ortega
Alumno (s):
Jorge Maza Rojas
Jordan Rodolfo Ortiz Jaimes

Año de elaboración Año de actualización

2020 24 de Febrero del 2021


MANUAL DE PRÁCTICAS

CONTENIDO
Página

1. Objetivo de la Asignatura 3
2. Competencia 3
3. Objetivo de la Unidad 3
4. Marco teórico 4
5. Equipo, componentes y software. 7
5.1. Software. 7
5.1.1 CCS C 7
5.1.2 PROTEUS 10
5.2. Componentes Físicos. 11
6. Desarrollo de Prácticas. 27
Practica# 1. Configuración de Puertos digitales I / O. 28
Practica# 2. Declaración de Variables. 31
Practica# 3. Uso de Funciones. 34
Practica# 4. Uso de Array. 36
Practica# 5. Uso de ciclos condicionales. 38
Practica# 6. Uso de Interrupciones. 40
MANUAL DE PRÁCTICAS

1. Objetivo de la Asignatura

Los y las estudiantes desarrollarán aplicaciones con microcontroladores para la solución de


problemas específicos de instrumentación y control de procesos.

2. Competencia

Implementar sistemas de medición y control bajo los estándares establecidos, para el


correcto funcionamiento de los procesos industriales.

3. Objetivo de la Unidad

El alumnado elaborará aplicaciones de control con microcontroladores utilizando lenguajes


C para la instrumentación y control de procesos.
MANUAL DE PRÁCTICAS

4. Marco teórico

Un microcontrolador es un dispositivo electrónico encapsulado en un circuito de alto nivel


de integración. Los cuales se pueden adquirir comercialmente de diferentes fabricantes
como: Freescale, Motorola, Intel, Philips, y Microchip.

Microchip en particular es una empresa fabricante de dispositivos electrónicos, entre los


cuales se encuentran los microcontroladores PICMicro, estos se pueden adquirir en
diferentes familias, algunas de ellas son: 12F, 16F, 18F, 24F, 30F, y 33F.

De acuerdo con la necesidad de la aplicación, el desarrollador debe elegir la familia y la


referencia que más satisfaga a su necesidad, por ejemplo, el microcontrolador 12F675 es
un PIC de 8 pines con módulos integrados básicos como: Timer y ADC. Un
microcontrolador como el 16F877 cuenta con 40 pines y módulos como: Timer, ADC,
USART, I2C, PWM, entre otros. De acuerdo con lo anterior, es posible identificar las
diferencias y similitudes que permiten crear aplicaciones diferentes entre estos dos
ejemplos, la figura 3.1 presenta los encapsulados de algunos microcontroladores.

Figura 3.1 Encapsulados de los diversos Microcontroladores de Microchip.

La empresa Microchip cuenta con el portal WEB www.microchip.com en donde se puede


descargar información y aplicaciones de software que facilitan los desarrollos con sus
microcontroladores.
MANUAL DE PRÁCTICAS

Implementar una solución o proyecto con un microcontrolador PIC consiste en identificar el


problema o la necesidad, crear, editar y compilar un programa mediante software y
programar eléctricamente el microcontrolador con un programador específico para los
PICMicro.

La programación de microcontroladores está basada en un código de software, la cual es


posible gracias a la creación de compiladores de alto nivel, ya que facilita la edición y
creación de programas comercialmente existen varios compiladores de diferentes
fabricantes y diferentes lenguajes de alto nivel.

Es posible adquirir compiladores como el PICC, CCS, PIC Basic, entre otros. Este manual
de prácticas se centra en el compilador MikroC PRO, que es un compilador en lenguaje C
para microcontroladores PICMicro para las familias 12F, 16F, y 18F. La paquetería del
software de MikroC PRO tiene una amplia variedad de ayudas y herramientas que facilita la
creación de proyectos y aplicaciones para los microcontroladores PICMicro.

Antes de iniciar las prácticas con microcontroladores es necesario que el alumnado


(estudiante) cuente con conocimientos básicos que den sustento y explicación al porqué
del desarrollo de las presentes prácticas.

Los conocimientos mencionados enseguida se impartieron en las materias de Electrónica


Digital y Dispositivos Digitales.

▪ Conocer los sistemas numéricos: binario, decimal y hexadecimal.


▪ Conocer el funcionamiento de las compuertas lógicas básicas (AND, OR, NOT,
XOR).
▪ Desarrollar simulaciones de circuitos digitales en el software (ISIS PROTEUS), para
comprobar su funcionamiento.
▪ Construir circuitos lógicos Combinacionales empleando los métodos de
simplificación de algebra de Boole o mapas de Karnaugh, para realizar aplicaciones
específicas definidas por una tabla de verdad.
MANUAL DE PRÁCTICAS

▪ Desarrollar circuitos lógicos secuenciales: contadores y registros de corrimiento a


través del uso de flip-flops para la implementación de contadores de eventos y de
transferencia de datos binarios.
▪ Programar circuitos lógicos Combinacionales y secuenciales a través del uso de
dispositivos lógicos programables (PLD) para la reducción de circuitos digitales.
▪ Desarrollar aplicaciones básicas de control, identificando la arquitectura y
características de un microcontrolador para la simulación y programación de un
sistema.

También es necesario que el alumnado (estudiante) cuente con los conocimientos básicos
de las materias de:

▪ Dispositivos analógicos (Filtros pasa bajas, entre otros).


▪ Lenguaje de programación (Sentencias de control: If-else, Case, While, For, Do
while, entre otras).
▪ Análisis de circuitos eléctricos (Impedancias en CA).
▪ Sistemas de control automático (Control On-Off, Lazo abierto, Control en lazo
cerrado, Controladores P, PI, PID).
▪ Controladores lógicos programables (Automatización y control de procesos).
▪ Electrónica analógica (Señales analógicas, comportamiento de sensores,
transistores, diodos, relevadores).
▪ Sensores (temperatura, presión, distancia, fotorresistores).
▪ Instrumentación industrial (variables de un proceso, calibración de instrumentos de
medición).

Lo anterior es indispensable para la correcta comprensión y asimilación de este manual de


prácticas, por lo que se recomienda ampliamente al alumnado que, si carece de algunos de
los conocimientos mencionados anteriormente, se dedique a dar un repaso con el objetivo
de adquirir o esclarecer dichos conocimientos.
MANUAL DE PRÁCTICAS

5. Equipo, componentes y software.

En esta sección se describen los equipos, materiales y softwares que se utilizaran para el
desarrollo de las practicas descritas en la sección 5.

5.1. Software.

Los dos softwares que se utilizarán para la programación, desarrollo y simulación de las
prácticas antes de la implementación físicas de las misma, se describen a continuación:

5.1.1 CCS C

CCS C es una herramienta que permite programar un microcontrolador por medio de


lenguaje C, a diferencia del lenguaje máquina o ensamblador (ASM) que se maneja por
defecto, este hace los programas más fáciles de escribir, analizar y comprender. CCS C ha
sido desarrollado por PIC CMU, y cuenta con una gran cantidad de librerías o drivers que
permiten optimizar los programas en el momento de manejar dispositivos externos, tales
como pantallas LCD, memorias, conversores, etc.

CCS es un proveedor líder mundial de software integrado y herramientas de desarrollo de


hardware, que permiten a las empresas desarrollar productos premium basados en
dispositivos Microchip PIC® MCU y dsPIC® DSC.

Los compiladores IDE del CCS C (PCW, PCWH y PCWHD) tienen el exclusivo entorno de
desarrollo integrado C para compilar, analizar y depurar en tiempo real. Otras funciones y
herramientas integradas se pueden ver en el archivo de ayuda. En comparación con un
compilador de C más tradicional, PCB, PCM y PCH tienen algunas limitaciones.

PCB, PCM y PCH son compiladores independientes. PCB es para códigos de operación de
12 bits, PCM es para códigos de operación de 14 bits y PCH es para microcontroladores
PIC® de código de operación de 16 bits. Estos compiladores están diseñados
MANUAL DE PRÁCTICAS

específicamente para satisfacer las necesidades únicas del microcontrolador PIC®. Esto
permite a los desarrolladores diseñar rápidamente aplicaciones de software en un lenguaje
de alto nivel más legible.

En particular el compilador PCWHD admite MCU Microchip de 8 y 16 bits (PIC10 /


12/16/18/24 MCU y familias dsPIC DSC), lo que permite a los desarrolladores gestionar
todos los aspectos del desarrollo de sus sistemas integrados, desde la creación del código
hasta la programación del dispositivo.

Las características incluyen:

▪ Cientos de funciones integradas


▪ Bibliotecas de código fuente para RS232, LCD, HID, USB, SPI, I2C, capacitive
Touch y más.
▪ Programas de ejemplo para código altamente optimizado
▪ Directivas de preprocesador para RTC, CAN, TCP / IP, CDC y más
▪ Optimización de nivel profesional: hasta un 60% de reducción de la memoria del
programa (en comparación con compiladores de otras marcas)
▪ Cumple con ANSI
▪ Editor sensible al contexto, C-Aware
▪ Herramienta C Profiler para monitorear visualmente su programa
▪ Asistentes de proyectos: USB, TCP / IP, temporizadores, LCD, táctil capacitiva y
más.
▪ Verificador de sintaxis en vivo y edición de bloques de código

La figura 4.1 muestra el icono del programa CCS C, que es el mismo para los diferentes
IDE de este programa, simplemente cambia el compilador interno para ejecutar la
instrucción programada.
MANUAL DE PRÁCTICAS

Figura 4.1 Icono de software CCS C de Microchip.

La estructura del programa en CCS C se muestra en la figura 4.2, está conformada por:

1. Directivas de Procesado. Estas controlan la conversión del programa a código máquina


por parte del compilador.
2. Programas o Funciones. Es un conjunto de instrucciones, puede haber uno o varios, en
cualquier caso siempre debe haber uno definido como el principal mediante la inclusión
de la palabra main().
3. Instrucciones. Indican como se debe de comportar el PIC en todo momento.
4. Comentarios. Permiten describir lo que significa cada línea del programa.

Figura 4.2 Estructura de un programa hecho en CCS C

Para más información sobre la directivas, librerías e instrucciones del compilador CCS C
consultar su manual en: https://www.ccsinfo.com/downloads/ccs_c_manual.pdf
MANUAL DE PRÁCTICAS

5.1.2 PROTEUS

PROTEUS es considerado uno de los mejores y más completos programas para el diseño
de circuitos electrónicos en la actualidad, no solo por su capacidad de simulación y análisis,
sino también por el hecho de poder utilizar una gran cantidad de microcontroladores de
diferentes familias.

El entorno de diseño electrónico PROTEUS VSM de LABCENTER ELECTRONICS


(www.labcenter.co.uk) ofrece la posibilidad de simular código de alto (lenguaje C) y bajo
nivel (lenguaje ensamblador) para los microcontroladores y, simultáneamente, con la
simulación en modo mixto de SPICE. Esto permite el diseño tanto a nivel de hardware
como software y realizar la simulación en un mismo y único entorno. Para ello se suministra
tres potentes entornos como son el ISIS para el diseño gráfico, VSM (Virtual System
Modelling) para la simulación y el ARES para el diseño de circuitos impresos en tarjetas.

Las siglas VSM significan Virtual System Modelling, que en español podemos traducir como
sistema de modelado virtual, ya que Proteus VSM permite modelar de forma virtual en la
computadora prácticamente cualquier circuito. La figura 4.3 muestra el icono del programa
PROTEUS, que en este manual es la versión 8.9 y en la cual se estará trabajando en la
sección 5.

Figura 4.3 Icono de software PROTEUS VSM.

Para más información referente al uso de este software se recomienda consultar el libro:
PROTEUS VMS SIMULACIÓN DE CIRCUITOS ELECTRONICOS de Víctor Rossano.
MANUAL DE PRÁCTICAS

5.2. Componentes Físicos.

Esta sección se describe los elementos electrónicos que se ocuparan en el desarrollo de


las prácticas, los cuales se describen a continuación:

▪ Jumper.

La figura 4.4 muestra los cables jumper tipo hembra - macho, necesarios para la conexión
temporal de los circuitos digitales, así como los diferentes componentes físicos como: push
Boton, leds, compuertas, display 7 segmentos, etc.

Figura 4.4 Jumpers tipo Hembra – Macho.

▪ LED.

Un led (light-emitting diode, por sus siglas en inglés) es un diodo semiconductor que,
cuando recibe tensión, genera luz. Un diodo, a su vez, es una válvula de dos electrodos
que permite el paso de la corriente eléctrica en un único sentido. Cuando se le aplica
tensión a alguna de sus dos terminales, la recombinación de sus electrones provoca la
liberación de energía en forma de fotones, cuyo color está determinado por la banda de
energía que haya sido estimulada. La figura 4.5 muestra los diodos LED más comúnmente
ocupados.

La tensión de los LEDs se puede dividir en dos grupos: con tensión entre 3V y 3.8V como
por ejemplo los azules, los blancos y algunos tipos de leds verdes azulados y entre 1.8V y
MANUAL DE PRÁCTICAS

2.1V de los cuales encontramos los leds rojos, los amarillos, los naranjas y muchos tipos de
verde. Los LED por lo general consumen entre 10 a 20 mA independientemente del color
del led. Para conocer la polaridad de los LED basta con observar la patillas, las más corta
es la polaridad negativa, mientras que es la polaridad positiva.

Figura 4.5 Diodos emisor de Luz (LED).

▪ Push Boton.

Un Push Boton es un interruptor o dispositivo simple con dos posiciones, encendido y


apagado. En el mercado existen una gran variedad de ello, la figura 4.6 muestra algunos
de estos.

Figura 4.6 Algunos tipos de Push Boton más utilizados.

En electrónica digital, nos encontramos con dos tipos de configuración, me refiero a la


polarización de una E/S, polarización alta la resistencia (término inglés Pull-up) va
conectada a + (5V) o polarización baja la resistencia (término inglés Pull-down) va
conectada a masa – (0V). La figura 4.7 muestra los esquemas antes mencionados.
MANUAL DE PRÁCTICAS

Figura 4.7 Polarización de los Push Boton.

Los pulsadores son dispositivos que tienen un defecto, el cual se llama rebote. Cuando se
presiona o se suelta el pulsador, se produce una fluctuación entre sus contactos internos,
esas fluctuaciones son también leídas y se produce un comportamiento inesperado en el
funcionamiento de nuestros proyectos. El antirrebote viene a solucionar este problema. Es
necesario poner un condensador de 10uF en el pulsador, véase figura 4.8.

Figura 4.8 Circuito antirrebote de los Push Boton.

▪ Resistores.

La figura 4.9 muestra los resistores de 5 bandas, mayor precisión, que se emplearan para
la elaboración de los circuitos físicos. En todos los resistores nos podemos encontrar tres
MANUAL DE PRÁCTICAS

características, el valor nominal expresado en óhmios (Ω), la tolerancia en % y la potencia


en Watts (W). Además, se muestra todos los colores, las bandas y los valores
correspondientes para la codificación a 5 bandas. Como en el otro caso, en la parte alta del
diseño podemos ver un ejemplo concreto.

Figura 4.9 Código de colores para resistores de alta precisión con 5 bandas.

Cabe mencionar que existen resistores variables, o también conocidos como


potenciómetros, que pueden ser útiles para aquellos resistores no son comerciales. Los
más comerciales son de 10 kΩ y 100 k Ω.

▪ Display 7 segmentos.

El display de siete segmentos es un dispositivo electrónico que se utiliza para representar


visualmente números y algunos caracteres. Este display es muy popular debido a su gran
efectividad y simplicidad al momento de utilizarlo.
MANUAL DE PRÁCTICAS

Se le conoce como siete segmentos por que cuenta con siete diodos led principales y uno
extra para representar un punto. También cuenta con una carcasa para cubrirlos y diez
terminales: dos son de alimentación (dos de Vcd o dos de Gnd), uno es para visualizar un
punto y siete son para representar cada uno de los números según la combinación que se
le ponga, véase la figura 4.10, estos están representados por una letra del abecedario
desde la “A” hasta la letra “G”.

Figura 4.10 Dispaly de siete segmentos, componente físico y terminales.

• Ánodo común

Se llama así porque todos los leds están unidos en su terminal positiva (ánodo), para
encenderlos tenemos que poner tierra en la terminal de la letra que se desee.

• Cátodo común

Este display es el opuesto del ánodo común ya que los leds están unidos en la
terminal negativa (cátodo). Para encender los leds tenemos que poner voltaje en las
terminales de las letras.

▪ LCD 16x2.

Las siglas LCD significan “Liquid Cristal Display” ó pantalla de cristal líquido. Es una
pantalla plana basada en el uso de una sustancia liquida atrapada entre dos placas de
MANUAL DE PRÁCTICAS

vidrio, haciendo pasar por este una corriente eléctrica a una zona específica, para que así
esta se vuelva opaca, y además cuenta (generalmente) con iluminación trasera.

Las pantallas LCD de color, cada pixel individual se divide en tres cédulas o sub pixeles
con los colores RGB (Rojo, Verde y Azul) respectivamente. Y así cada pixel puede
controlarse para producir una gran variedad de colores distintos.

▪ Las Características de las LCD

Existen una gran variedad de proyectos en los que se incluye una LCD para interfaz con el
usuario, lo que modifica las necesidades, las cuales es importante atender más que nada
por los precios. Y la importancia de esta en el proyecto. Algunos factores básicos para
considerar en una LCD son:

a) Tamaño: un panel LCD generalmente se mide a lo lardo de su diagonal, expresado


generalmente en pulgadas. Sin embargo, existen más características que pueden
describir las dimensiones aproximadas, como por ejemplo la LCD 16×2 (negro sobre
fondo azul) se refiere a que tiene la capacidad de tener al mismo tiempo 16 caracteres
de manera horizontal en dos renglones (cada uno).

b) Resolución: Esta se expresa con las dimensiones horizontal y vertical. las pantallas HD
tienen una resolución de 1920×1080 por ejemplo. Y esta puede alcanzar con esta
resolución una gran variedad de tamaño, pero si no se ocupa gran a gran detalle esta,
estarías desperdiciando calidad (por no utilizar algo que tienes disponible). En 5hz se
maneja, por ejemplo, la LCD gráfica 128×64 (negro sobre fondo verde). Que a pesar de
su tamaño la consideramos suficiente para las aplicaciones estudiantiles, y algunas
industriales donde se requiera tener algo claro y legible en un tamaño práctico.

c) Brillo: La luminosidad de la pantalla también es importante analizarla, ya que según la


aplicación en la que se encuentre esta, requerirá más luz para poder apreciarse, o
viceversa. Por lo que la mayoría cuentan con una luz trasera y la posibilidad de poder
controlar su luminosidad.
MANUAL DE PRÁCTICAS

Iluminación CCFL Esta iluminación básicamente consta poner detrás de la pantalla una
matriz de CCFL, o bien en las orillas o bordes de la pantalla. Sin embargo, es más
consumo que el led y tiene un menor tiempo de vida, por lo que poco a poco se ha ido
poniendo en segundo plano.

Iluminación LED Esta iluminación puede presentarse en dos maneras, en un solo color,
(generalmente blanco) o bien en RGB, los blancos suelen ser los más utilizados. Estos
al igual que la iluminación CCFL, pueden estar formando una matriz en la parte de
atrás, o bien pueden colocarse a los extremos del display.

d) Contraste: Es la relación entre la intensidad más brillante y la más oscura.

e) Angulo de visión: es el ángulo máximo en el que el usuario puede visualizar lo que está
en la LCD sin que se pierda mucha calidad.

f) Número de caracteres. Hay diversos tamaños de LCD y con ello nos limitamos o nos
expandamos la posibilidad de mostrar en el display cierto número de caracteres, los
tamaños estándar que manejamos son: 16×2, 20×4, 8×2.

La figura 4.11 muestra las diversas pantallas LCD existentes en el mercado para
aplicaciones en electrónica digital.

Figura 4.11 Diferentes tipos de LCD aplicadas a proyectos escolares.


MANUAL DE PRÁCTICAS

▪ KEYPAD 4x4.

El Teclado matricial de botones plásticos formado por 4 filas y 4 columnas para un total de
16 teclas permite agregar una entrada de usuario a tus proyectos. El teclado es de tipo
membrana, por lo que entre sus ventajas se encuentra el poco espacio que requiere para
ser instalado. Posee una cubierta adhesiva y un cable flexible de conexión. Puede ser
conectado a cualquier microcontrolador o tarjetas de desarrollo como Arduino.

El teclado matricial 4x4 está formado por una matriz de pulsadores dispuestos en filas (L1,
L2, L3, L4) y columnas (C1, C2, C3, C4), véase figura 4.12, con la intención de reducir el
número de pines necesarios para su conexión. Las 16 teclas necesitan sólo 8 pines del
microcontrolador en lugar de los 16 pines que se requerirían para la conexión de 16 teclas
independientes. Para poder leer que tecla ha sido pulsada se debe de utilizar una técnica
de barrido y no solo leer un pin de microcontrolador.

Figura 4.12 Keypad 4x4 tipo membrana.

La conexión del teclado matricial 4x4 con Arduino u otra plataforma de microcontroladores
es simple: se necesitan 8 pines digitales en total. Puede trabajar con microcontroladores de
3.3V o 5V sin problema. Es necesario colocar resistencias pull-up entre los pines de las
columnas y VCC o activar por software las resistencias Pull-up internas. En cuanto a la
programación, la lectura de las teclas se debe realizar mediante un "barrido" de las filas. Si
bien es posible realizar este procedimiento dentro del loop principal del programa, es una
MANUAL DE PRÁCTICAS

mejor práctica realizar el barrido utilizando interrupciones por TIMER y así asegurar la
lectura de las teclas en un intervalo conocido y exacto, además de dejar al loop libre para
realizar otras operaciones

▪ Microcontrolador PIC16F877a.

PIC16F877a es un microcontrolador PIC de 40 pines y se utiliza principalmente en


proyectos y aplicaciones integrados. Algunas de sus características son las siguientes:

▪ Cuenta con cinco puertos en él a partir de Puerto de A a E puerto.


▪ Tiene tres temporizadores, dos de los cuales son temporizadores de 8 bits, mientras
que 1 es de 16 bits.
▪ Es compatible con muchos protocolos de comunicación como: Protocolo serial,
Protocolo paralelo y Protocolo I2C.
▪ Admite interrupciones de pines de hardware y de temporizador.
▪ Alimentación de + 5V.
▪ Oscilador de cristal externo con un rango de frecuencia de 4MHz a 40MHz.
▪ Convertidor A / D.
▪ Recepción / transmisión en serie.
▪ PWM (CCP1 / CCP2).
▪ Operación de escritura EEPROM.

La figura 4.13, muestra al PIC16F877a, el cual tiene 5 puertos en total que son:

▪ Puerto A: Tiene 6 pines en total comenzando desde el Pin # 2 al Pin # 7. Los pines del
puerto A están etiquetados de RA0 a RA5 donde RA0 es la etiqueta del primer pin del
puerto A.
▪ Puerto B: Tiene 8 pines en total comenzando desde el pin # 33 al pin # 40. Los pines
del puerto B están etiquetados de RB0 a RB7 donde RB0 es la etiqueta del primer pin
del puerto B.
MANUAL DE PRÁCTICAS

▪ Puerto C: Tiene 8 pines en total. Sus pines no están alineados. Los primeros cuatro
pines del puerto C se encuentran en el pin n. ° 15 - pin n. ° 18, mientras que los últimos
cuatro se encuentran en el pin n. ° 23 - pin n. ° 26.
▪ Puerto D: Tiene 8 pines en total. Sus pines tampoco están alineados. Los primeros
cuatro pines del puerto D se encuentran en el pin # 19 - pin # 22, mientras que los
últimos cuatro se encuentran en el pin # 27 - pin # 30.
▪ Puerto E: Tiene 3 pines en total comenzando desde el pin # 8 al pin # 10. Los pines del
puerto E están etiquetados de RE0 a RE2 donde RE0 es la etiqueta del primer pin del
puerto E.

Figura 4.13 Microcontrolador PIC16F877a.


De la figura 4.13 también podemos describir alginas de las características de los puertos,
como son:

▪ Pin # 1: Este Pin se llama MCLR (Master Clear) y necesitamos proporcionar 5V a este
pin a través de una resistencia de 10k-ohmios.
▪ Pin # 11 y # 32: estos pines están etiquetados como Vdd, por lo que también debemos
proporcionarle + 5V.
▪ Pin # 12 y # 31: estos pines son Vss, por lo que hemos proporcionado GND (tierra).
MANUAL DE PRÁCTICAS

▪ Pin # 13 y 14: Estos pines se denominan OSC1 (oscilador 1) y OSC2 (oscilador 2).
▪ Pin # 25, RC6 del Puerto C puede ser usado como entrada/salida digital o como un
Transmisor (TX) para la comunicación serial.
▪ Pin # 26, RC7 del Puerto C puede ser usado como entrada/salida digital o como un
Receptor (RX) para la comunicación serial.
▪ Las entradas analógicas están en los pines #2 al #5 y de #7 al #10.

Para más información referente al uso de este microcontrolador se recomienda consultar el


datasheet disponible en: https://ww1.microchip.com/downloads/en/devicedoc/39582b.pdf

▪ Protoboard.

La Protoboard, llamada en inglés breadboard, es una placa de pruebas en los que se


pueden insertar elementos electrónicos y cables con los que se arman circuitos sin la
necesidad de soldar ninguno de los componentes. Las Protoboards tienen orificios
conectados entre sí por medio de pequeñas laminas metálicas. Usualmente, estas placas
siguen un arreglo en el que los orificios de una misma fila están conectados entre sí y los
orificios en filas diferentes no. Los orificios de las placas normalmente están tienen una
separación de 2.54 milímetros (0.1 pulgadas).

Una Protoboard es un instrumento que permite probar el diseño de un circuito sin la


necesidad de soldar o desoldar componentes. Las conexiones en una Protoboard se hacen
con solo insertar los componentes lo que permite armar y modificar circuitos con mayor
velocidad.

Normalmente estas placas son usadas para realizar pruebas experimentales. Si la prueba
resulta satisfactoria el circuito se construye de una forma más permanente para evitar el
riesgo de que algún componente pueda desconectarse. En caso de que la prueba no sea
satisfactoria, puede modificarse el circuito fácilmente.
MANUAL DE PRÁCTICAS

Las Protoboards tienen tres partes: el canal central, las pistas, y los buses. En el canal
central, ubicado en la parte media, se conectan los circuitos integrados para mantener
aislados los pines de ambos lados del circuito integrado. Los buses se encuentran en los
lados de la Protoboard, y generalmente se emplean para conectar la tierra del circuito y sus
voltajes de alimentación. La mayoría de las veces los buses están indicados con franjas
color negro o azul para indicar el bus de tierra, y con franjas color rojo para indicar el bus
de voltaje positivo. El resto de los orificios de la Protoboard pertenecen a las pistas. Como
se mencionó anteriormente, las pistas están separadas por filas. Las filas están indicadas
con números y las columnas están indicadas con letras, véase la figura 4.14.

Figura 4.14 Placa Protoboard, existen distintos tamaños y diversos modelos según el fabricante.

La corriente con la que puede operar una Protoboard varía entre 3 y 5 A, y esto depende
del fabricante. Suelen operar a bajas frecuencias, entre 10 – 20 MHz.

▪ Oscilador de cristal.

Un oscilador de cristal, véase la figura 4.15, es un oscilador electrónico cuyo


funcionamiento se aprovecha de la resonancia mecánica de un cristal vibratorio de material
piezoeléctrico, esto con el fin de crear una señal eléctrica con una frecuencia precisa, la
cual, es obtenida en base a su composición interna.
MANUAL DE PRÁCTICAS

La frecuencia que el cristal es capaz de crear se utiliza comúnmente para controlar o tener
una noción del tiempo, con el fin de para proporcionar una señal de reloj estable para
circuitos integrados digitales y para estabilizar las frecuencias de los transmisores y
receptores de radio.

Figura 4.15 Diferentes tipos de osciladores de cristal de cuarzo.

▪ Capacitores.

Existe diferentes formas y materiales de tener capacitores en los sistemas eléctricos, por lo
tanto, existen diversas formas o métodos para codificarlos, caso contario con los resistores.

A excepción de los capacitores electrólitos que generalmente superan ampliamente el valor


de 1 µF, el universo de los capacitores usados en electrónica está compuesto por
capacitores con valores que van desde pocos picofarad, capacitores cerámicos o disco que
parecen lentejas, hasta los cercanos a 1µF, capacitores de poliester multiestrato.

La figura 4.16 muestra el sistema de codificación para capacitores entre 1pF y 1 µF, donde
el valor se encuentra indicado con un número de tres dígitos seguido por una letra.
MANUAL DE PRÁCTICAS

Figura 4.16 Codificación para los capacitores entre 1 pF y 1 µF, a excepción de los electrolíticos.

Los dos primeros dígitos indican el número inicial mientras que el tercer dígito representa la
cantidad de ceros que es necesario agregar al número inicial para obtener el valor final. El
resultado obtenido es necesario considerarlo en picofarad.

Ahora hablemos de la letra que se encuentra al final del número de tres dígitos. Es
simplemente la tolerancia del componente, es decir, cuanto puede ser diverso el valor real
respecto al valor indicado.

La figura 4.17 podemos observar que cada letra la tolerancia correspondiente, por ejemplo,
la "P", es decir, el componente puede tener una mayor capacidad respecto a la indicada
pero no una menor. Este tipo de tolerancia es usada con los capacitores de "filtro" donde
un posible valor mayor de lo indicado no perjudica mínimamente el funcionamiento del
circuito.

Por último, nos falta una información que en cierto caso podría ser útil, que es la tensión
máxima que el capacitor puede soportar sin que se rompa. La codificación numérica que
usan algunos fabricantes consiste en un número seguido por una letra.
MANUAL DE PRÁCTICAS

Figura 4.17 Codificación de tolerancia para capacitores entre 1 pF y 1 µF.

La tabla completa de los códigos EIA que indican la tensión máxima de trabajo de los
capacitores en tensión continua (VDC) se muestra en la figura 4.18.

Figura 4.18 Codificación de Voltajes para capacitores entre 1 pF y 1 µF.

▪ Programador, grabador o quemador de PIC’s.

Master Prog, véase la figura 4.19, es un programador de microcontroladores USB para


todas las familias de microcontroladores PIC, dsPIC, PIC32 y memorias EEPROM. Es una
MANUAL DE PRÁCTICAS

poderosa herramientas para programar estos dispotitivos, compatible para cualquier


computadora y con soporte para Windows.

Entre las Ventajas de este programador están: la autoprogramacion (automáticamente


cargas el programa en el pic al momento de compilar utilizando cualquier compilador), alta
compatibilidad, protección contra corto circuito, soporte para múltiples encapsulados (el
zócalo del programador soporta pics de 8,14,18,28,40 Pines y de 8,14, 18, 28,40, 44, 64,
80 y 100 pines en encapsulados DIP, SSOP, TQFP y QFN (colocados en una protoboard)

Figura 4.19 Tarjeta Programadora de Pic’s Master Prog

▪ Fuentes de Alimentación.
Aquí, no hay mucho que comentar solo es necesario tener una fuente simétrica de
voltaje para alimentación de los amplificadores operacionales, por ejemplo, de ± 12 Vcc
@ 1 A.

▪ Sentencia If - else
Cuando el programa llega a una sentencia condicional del tipo If …Else, primero evalúa
una expresión; si se cumple (es cierta) se ejecuta un bloque de sentencias y si es falsa
se ejecuta otro bloque. En la figura 1.1 se muestra el funcionamiento del diagrama de
flujo de dicha sentencia, la cual al ser verdadera pasa directamente al bloque 1 y si
resulta ser falsa, pasará a un plan B que se pondrá en la estructura del else.
MANUAL DE PRÁCTICAS

▪ Bucle WHILE
Estos bucles se utilizan cuando queremos repetir la ejecución de unas sentencias un
número indefinido de veces, siempre que se cumpla una condición. Se más sencillo de
comprender que el bucle FOR, pues no incorpora en la misma línea la inicialización de
las variables su condición para seguir ejecutándose y su actualización. Sólo se indica,
como veremos a continuación, la condición que se tiene que cumplir para que se realice
una iteración.
MANUAL DE PRÁCTICAS

▪ Bucle do – while
Se utiliza generalmente cuando no sabemos cuántas veces se habrá de ejecutar el
bucle, igual que el bucle WHILE, con la diferencia de que sabemos seguro que el bucle
por lo menos se ejecutará una vez.
MANUAL DE PRÁCTICAS

Como se muestra en la imagen en su diagrama de flujo el bucle se ejecuta siempre una vez
y al final se evalúa la condición para decir si se ejecuta otra vez el bucle o se termina su
ejecución.

▪ Ciclo for:
El bucle for permite indicar estos tres elementos en un solo lugar, al principio del bucle,
facilitando así la obtención de un código compacto, pero legible. Se puede apreciar su
sintaxis y diagrama de flujo en la siguiente imagen viendo mas a detalle el
funcionamiento y es que el ciclo for actualizara el estado del programa hasta n veces
que el usuario introduzca.
MANUAL DE PRÁCTICAS

▪ Sentencia switch
El bucle for permite indicar estos tres elementos en un solo lugar, al principio del bucle,
facilitando así la obtención de un código compacto, pero legible. Se puede apreciar su
sintaxis y diagrama de flujo en la siguiente imagen viendo más a detalle el
funcionamiento y es que el ciclo for actualizara el estado del programa hasta n veces
que el usuario introduzca.
MANUAL DE PRÁCTICAS
MANUAL DE PRÁCTICAS

6 Desarrollo de Prácticas.

El objetivo general de esta serie de prácticas es que el alumnado aprenda a programar


microcontroladores mediante el uso del software CCS C, así como conocer y utilizar de
acuerdo con el datashhet las funciones más ocupadas de los microcontroladores, que en
este caso particular al PIC16f877a, apoyado en la simulación del programa PROTEUS y su
posterior aplicación física.

Para ello, a través de las clases impartidas por el o la docente, en alumno debe
implementar los conocimientos adquiridos en el aula, como son:

❖ Estructuras en C (for, while, do-while,if-else, etc)


❖ Códigos hexadecimales o binarios.
❖ Instrucciones propias de CCS C (output_x(valor), set_tris_x(valor), delay_ms
(), etc)
❖ El uso correcto de las librerías de CCS C (LCD, Keypad 4x4, etc)
❖ Entre otras.
MANUAL DE PRÁCTICAS

Practica# 1. Configuración de Puertos digitales I / O.

Objetivo particular: El alumnado deberá de aplicar las diferentes formas de instrucciones


para configurar los puertos del PIC16F877A según las necesidades del proyecto.

A1. Instrucción SET_TRIS_X(VALOR)


A2. Directiva #USE STANDARD_IO(X)
A3. Registro #BYTE TRISX= 0xVal y #BYTE PORTX= 0xVal

En este caso se dispone a encender y apagar un led en el puerto RB0 del puerto B del
pic16F877a, teniendo un tiempo de encendido de 500 ms y un tiempo de apagado de 300
ms.

❖ Lista de Materiales: ❖ Software:


▪ CCs C.
▪ Un Led.
▪ Jumpers Hembra – Macho. ▪ PROTEUS
▪ Protoboard.
❖ Equipo:
▪ Una resistencia de 330 Ohms.
▪ PIC16F877a. ▪ Fuente de alimentación 5 Vcc
▪ Cristal de 20 MHz.
Programador de PIC’s.
▪ Un Push Botton.
▪ Dos capacitores de 15 - 32 pF.

Paso I. Realizar el código de programación en CCS C para los tres incisos A1, A2 y A3.
A1)
#include <16F877A.h>
#fuses hs,nowdt,noprotect
#use delay(clock=20M)
#define retardo delay_ms(500)
#define retardo1 delay_ms(300)
#define espera delay_ms(5000)

void main()
MANUAL DE PRÁCTICAS

{
set_tris_b(0x00);
output_b(0x00);
espera;

while(true)
{
output_b(0x01);
retardo;
output_b(0x00);
retardo1;
}
}
A2)
#include <16F877a.h>
#fuses HS, NOWDT,NOPUT,NOPROTECT,BROWNOUT, NOLVP, NOCPD
#USE DELAY(CLOCK=20 M)
#USE STANDARD_IO(B)
#DEFINE RETARDO DELAY_MS(500)
void main()
{
OUTPUT_B(0X00);

RETARDO ;
WHILE(TRUE)
{
OUTPUT_HIGH(PIN_B0);

RETARDO;

OUTPUT_LOW(PIN_B0);
MANUAL DE PRÁCTICAS

(PIN_B0);

RETARDO;
}
}
A3)
#include <16F877a.h>
#fuses HS, NOWDT,NOPUT,NOPROTECT,BROWNOUT, NOLVP, NOCPD
#use DELAY(CLOCK=20M)
#BYTE TRISB = 0X86
#BYTE PORTB = 0X06
#DEFINE RETARDO DELAY_MS(500)

void main()
{
TRISB=0X00;

PORTB=0X00;

RETARDO ;
WHILE(TRUE)
{
PORTB=0X01;

RETARDO;
PORTB=0X00;

RETARDO;
}
}
MANUAL DE PRÁCTICAS

Paso II. Realizar la conexión de los componentes en el software PROTEUS.

Paso III. Insertar los resultados de la simulación en el software PROTEUS.


MANUAL DE PRÁCTICAS

Instrumento de evaluación

Cuestionario

1. ¿Cuál es el voltaje de alimentación para el microcontrolador?


5 volts

2. ¿Para qué sirve el botón pulsador en esta práctica?


Para la conexión master clear de nuestro pic, esto para reiniciar el código.

3. ¿Por qué es necesario que el valor numérico en MHz para el cristal sea el mismo
valor numérico asignado en el código de programación?
Porque en el programa estamos indicando con que frecuencia de reloj va a trabajar
nuestro microcontrolador, de no ser así afectaría a nuestro código a la hora de
correrlo.

4. Si conecta un segundo led en RB5, ¿Qué instrucciones debemos cambiar en el


código para que esto suceda?
Dentro de nuestro ciclo while (true) agregaríamos una nueva salida (output) con el
pin que desearíamos agregar (RB5), por ejemplo, en nuestro código A2:

WHILE(TRUE)
{
OUTPUT_HIGH(PIN_B0);
OUTPUT_HIGH(PIN_B5);
RETARDO;
OUTPUT_LOW(PIN_B0);
OUTPUT_LOW(PIN_B5);
RETARDO;
}
MANUAL DE PRÁCTICAS

5. Si queremos que el Led en RB5 tenga un tiempo distinto de encendido de 300 ms,
conservando el mismo tiempo de apagado en ambos leds. ¿Cómo sería el código
para que esto suceda?
Definiríamos una nueva variable (#DEFINE RETARDO2 DELAY_MS(300)) y en
nuestro while (true) agregaríamos nuestra salida RB5 en estado alto ocupando
nuestra variable nueva (RETARDO2) y después la mandaríamos a estado bajo
ocupando la variable predeterminada de apagado (RETARDO).
6. Ahora bien, conectamos 4 leds en el puerto C, de RC4 a RC7, para encender y
apagar en 500 ms, ¿Qué instrucción debo cambiar en el código para ocupar el
registro TRIS y PORT?
Cambiaríamos los TRISB=0X86 y PORTB=0X06 por TRISC=0X87 y PORTC=0X07 y
en nuestro void main la letra B por C y por último en nuestro while pondríamos
PORTC=0XF0 para prender desde el RC4 al RC7.

7. ¿Qué sucede si se desconecta la señal (conductor) del pin 1 del microcontrolador?


No estaría habilitado nuestro master clear.

8. Menciona tus recomendaciones, comentarios y conclusiones:


Debido a las practicas realizadas el conocimiento adquirido hacia la programación
de pics fue muy satisfactorias ya que los softwares que se utilizaron fueron de
mucha ayuda para realizar las tareas requeridas.
Sin embargo, debido a que se contaba con material se pudo realizar la práctica de
manera física y es por ello que no recomendamos ni sugerimos alguna mejora por el
momento ya que se entiende que por la situación actual no se puede trabajar de la
manera más adecuada.
MANUAL DE PRÁCTICAS

Practica# 2. Declaración de Variables.

Objetivo particular: El alumnado aprenderá a definir variables por medido de uso la


directiva #define que permita al programa principal identificar una instrucción definida por el
usuario.

Par ello, se dispone a programa para un Semáforo utilizando el puerto D de PIC16F877A,


conectados en los pines RD0, RD1 Y RD2. En donde el funcionamiento será:

▪ Verde 40 seg. (parpadeo último 5 seg.)


▪ Rojo 40 seg. (parpadeo último 5 seg.)
▪ Amarillo 5 segundos (parpadeo).

❖ Lista de Materiales: ❖ Software:


▪ CCs C.
▪ Led’s.
▪ Jumpers Hembra – Macho. ▪ PROTEUS
▪ Protoboard.
❖ Equipo:
▪ Una resistencia de 330 Ohms.
▪ PIC16F877a. ▪ Fuente de alimentación 5 Vcc
▪ Cristal de 20 MHz.
Programador de PIC’s.
▪ Un Push Botton.
▪ Dos capacitores de 15 - 32 Pf.

Paso I. Realizar el código de programación en CCS C.


#include <16f877a.h>
#fuses hs, nolvp, nowdt, nocpd, noprotect, noput
#use delay(clock=20M)
#byte trisD=0x88
#byte portD=0x08
#define tiempo delay_ms(5000);
#define parpadeo delay_ms(500);
#define rojo portD=0x04;
#define verde portD=0x01;
MANUAL DE PRÁCTICAS

#define amarillo portD=0X02;


#define apagado portD=0x00;

int i;

void main()
{
trisD=(0x00);
portD=(0x00);
parpadeo;

while(true)
{
rojo;tiempo;

for(i=0;i<5;++i)
{
apagado;parpadeo;
rojo;parpadeo;
}
verde;tiempo;

for(i=0;i<5;++i)
{
apagado;parpadeo;
verde;parpadeo;
}

for(i=0;i<5;++i)
{
amarillo;parpadeo;
MANUAL DE PRÁCTICAS

apagado;parpadeo;
}
}
}
Paso II. Realizar la conexión de los componentes en el software PROTEUS.

Paso III. Insertar los resultados de la simulación en el software PROTEUS.


MANUAL DE PRÁCTICAS

Instrumento de evaluación

Cuestionario

1. Explique con sus propias palabras ¿para qué sirve la directiva #define?
Nos ayuda definir un nombre y el valor de macro para ser remplazado con un valor
de referencia a la hora de compilar el código.

2. Explique con sus propias palabras ¿para qué sirve el ciclo For y como es su
estructura?
Ejecuta repetitivamente un bloque de instrucciones conociendo previamente un valor
de inicio, de incremento y otro final para el ciclo.

for (valor_inicial, valor_final, incremento)


{
instrucciones;
}

3. Mencione al menos tres tipos de datos que se pueden utilizar en programación C, y


sus características particulares.
Entero corto: tamaño de 1 bit con un rango de 0 a 1.
Coma flotante: tamaño de 32 bit con un rango de +- 1.175x10^-38 a +-3.402x10^38.
Carácter: tamaño de 8 bits con un rango de 0 a 255.

4. Mencione al menos tres tipos de operadores que se pueden utilizar en programación


C, y sus características particulares.
++ incremento: va aumentado el valor del operando. Ejem. for (j=0; j<=9; ++j)
-- decremento: va disminuyendo el valor del operando. Ejem. for (j=9; j<=0; --j)
* multiplicación: genera el producto del operando. Ejem. A=6 B=9 C=A*B
MANUAL DE PRÁCTICAS

5. Para qué sirve la palabra Parpadeo en el código de programación, en otras palabras,


que indica o interpretación señala el usuario.
Nos indica que será un retardo de 500 ms.

6. Si se ocupan los registros TRIS y PORT para el puerto D, ¿Cuáles son los valores
hexadecimales debemos utilizar?
TRISD=0x88 y PORTD=0x08

7. Menciona tus recomendaciones, comentarios y conclusiones:


Debido a las practicas realizadas el conocimiento adquirido hacia la programación
de pics fue muy satisfactorias ya que los softwares que se utilizaron fueron de
mucha ayuda para realizar las tareas requeridas.
Sin embargo, debido a que se contaba con material se pudo realizar la práctica de
manera física y es por ello que no recomendamos ni sugerimos alguna mejora por el
momento ya que se entiende que por la situación actual no se puede trabajar de la
manera más adecuada.
MANUAL DE PRÁCTICAS

Practica# 3. Uso de Funciones.

Objetivo particular: El alumnado aprenderá a realizar funciones propias para ser


implementadas en el programa principal, definiendo instrucciones y las características de
las variables de entrada para su función.

Par ello, se retomará el programa realizado en la práctica número dos, la cual consta de
realizar un Semáforo utilizando el puerto D de PIC16F877A, conectados en los pines RD0,
RD1 Y RD2. En donde el funcionamiento será:

▪ Verde 40 seg. (parpadeo último 5 seg.)


▪ Rojo 40 seg. (parpadeo último 5 seg.)
▪ Amarillo 5 segundos (parpadeo).

❖ Lista de Materiales: ❖ Software:


▪ CCs C.
▪ Led’s.
▪ Jumpers Hembra – Macho. ▪ PROTEUS
▪ Protoboard.
❖ Equipo:
▪ Una resistencia de 330 Ohms.
▪ PIC16F877a. ▪ Fuente de alimentación 5 Vcc
▪ Cristal de 20 MHz.
Programador de PIC’s.
▪ Un Push Botton.
▪ Dos capacitores de 15 - 32 Pf.

Paso I. Realizar el código de programación en CCS C.


#include <16f877a.h>
#fuses hs,nowdt,noprotect
#use delay(clock=20M)
#byte trisd=0x88
#byte portd=0x08
#define tiempo delay_ms(5000);
#define tiempo2 delay_ms(500);
#define rojo portd=0x01;
MANUAL DE PRÁCTICAS

#define verde portd=0x04;

int i,c;

void parpadeo (c)


{
for(i=0;i<5;++i)
{
bit_set(portd,c);tiempo2;
bit_clear(portd,c);tiempo2;
}
}

void main()
{
trisd=0;
portd=0;
tiempo2;

while(true)
{
rojo;tiempo;
portd=0x00;tiempo2;
parpadeo(0);
verde;tiempo;
portd=0x00;tiempo2;
parpadeo(2);
parpadeo(1);
}
}
Paso II. Realizar la conexión de los componentes en el software PROTEUS.
MANUAL DE PRÁCTICAS

Paso III. Insertar los resultados de la simulación en el software PROTEUS.


MANUAL DE PRÁCTICAS

Instrumento de evaluación

Cuestionario

1. Explique con sus propias palabras ¿para qué sirve declarar funciones definidas por el
usuario?
Nos sirve para acortar nuestro void principal donde se mandan a llamar todas las
funciones y retornar parámetros en los cuales esos métodos tendrán.

2. Explique con sus propias palabras ¿para qué sirve la palabra Void en el programa CCS
C?
Es vacío es decir que no va a retornar ningún valor.

3. Explique con sus propias palabras ¿para qué sirve la instrucción Bit_set(var,bit) y
Bit_clear(var,bit) en el programa CCS C?
Bit_set: va a poner en 1 el digito especificado en bit o la palabra en var.
Bit_clear: va a poner en 0 el digito especificado en bit o la palabra en var.

4. ¿Por qué fue necesario definir una variable en la función parpadeo y de qué tipo de
datos debió ser?
Para que tomara el valor de nuestra función principal y así inicializara el valor límite de
nuestro ciclo for para las terminales y así únicamente si están dentro del rango se van a
repetir de acuerdo con la condición de nuestro ciclo for. Debió ser de tipo entero.

5. Menciona tus recomendaciones, comentarios y conclusiones:

Debido a las practicas realizadas el conocimiento adquirido hacia la programación de


pics fue muy satisfactorias ya que los softwares que se utilizaron fueron de mucha
ayuda para realizar las tareas requeridas.
Sin embargo, debido a que se contaba con material se pudo realizar la práctica de
manera física y es por ello que no recomendamos ni sugerimos alguna mejora por el
MANUAL DE PRÁCTICAS

momento ya que se entiende que por la situación actual no se puede trabajar de la


manera más adecuada.
MANUAL DE PRÁCTICAS

Practica# 4. Uso de Array.

Objetivo particular: El alumnado aprenderá a realizar arreglos tipo Array, que contenga
valores binarios y/o hexadecimal, con la finalidad de enviar estos datos hacia un display de
7 segmentos.

Para ello, el alumnado realizará un contador decimal ascendente utilizando el puerto D de


PIC16F877a. El tiempo de cambio de los números del contador será cada segundo.

❖ Lista de Materiales: ❖ Software:


▪ CCs C.
▪ Display 7 segmentos.
▪ Jumpers Hembra – Macho. ▪ PROTEUS
▪ Protoboard.
❖ Equipo:
▪ Resistencia de 330 Ohms.
▪ PIC16F877a. ▪ Fuente de alimentación 5 Vcc
▪ Cristal de 20 MHz.
Programador de PIC’s.
▪ Un Push Botton.
▪ Dos capacitores de 15 - 32 Pf.

Paso I. Realizar el código de programación en CCS C.


#include <16f877a.h>
#fuses hs,nowdt,noprotect
#use delay(clock=20M)
int8 unid[10]={63,6,91,79,102,109,125,7,127,103};
int i;

void main()
{
set_tris_d(0b00000000);
output_d(unid[0]);

while(true)
{
MANUAL DE PRÁCTICAS

for(i=0;i<10;i++)
{
output_d(unid[i]);
delay_ms(500);
}
}
}
Paso II. Realizar la conexión de los componentes en el software PROTEUS.

Paso III. Insertar los resultados de la simulación en el software PROTEUS.


MANUAL DE PRÁCTICAS
MANUAL DE PRÁCTICAS

Instrumento de evaluación

Cuestionario

1. Explique con sus propias palabras ¿Qué es un arreglo tipo Array?


Es un tipo de arreglo donde se pueden guardar diferentes tipos de datos, ya sea entero,
flotante, carácter, etc.

2. Explique con sus propias palabras ¿Cómo es la estructura de un arreglo tipo array en
CCS C?
int8 unid[10]={63,6,91,79,102,109,125,7,127,103}

VALOR NOMBRE
CANTIDAD DE DATOS
ENTERO DEL DATOS
ARREGLO
S

3. Explique con sus propias palabras ¿Por qué el ciclo For debe iniciara en la variable I=0?
El conteo del array empieza desde cero, si no empezara desde ahí se saltaría una
posición empezando desde el 1 y no mostraría el número 0.

4. Explique con sus propias palabras ¿Qué significan los valores hexadecimales escritos
en el Arreglos Dispaly?
Serian los numero que le darán el valor al display, es decir, para que muestre el cero
seria 3F.

5. Menciona tus recomendaciones, comentarios y conclusiones:

Debido a las practicas realizadas el conocimiento adquirido hacia la programación de


pics fue muy satisfactorias ya que los softwares que se utilizaron fueron de mucha
ayuda para realizar las tareas requeridas.
Sin embargo, debido a que se contaba con material se pudo realizar la práctica de
manera física y es por ello por lo que no recomendamos ni sugerimos alguna mejora por
el momento ya que se entiende que por la situación actual no se puede trabajar de la
manera más adecuada.
MANUAL DE PRÁCTICAS

Practica# 5. Uso de ciclos condicionales.

Objetivo particular: El alumnado aprenderá a realizar ciclos condicionales con la


estructura Do -While, con la finalidad de ejecutar tareas predefinidas por el usuario siempre
que la condición sea verdadera.

Para ello, el alumnado realizará un contador decimal ascendente-descendente utilizando el


puerto D de PIC16F877a, y que a través de un botón en RB0 se especifique el cambio de
giro de la cuenta. El tiempo de cambio de los números del contador será cada segundo.

❖ Lista de Materiales: ❖ Software:


▪ CCs C.
▪ Display 7 segmentos.
▪ Jumpers Hembra – Macho. ▪ PROTEUS
▪ Protoboard.
❖ Equipo:
▪ Resistencia de 330 Ohms.
▪ PIC16F877a. ▪ Fuente de alimentación 5 Vcc
▪ Cristal de 20 MHz.
Programador de PIC’s.
▪ Push Botton.
▪ Dos capacitores de 15 - 32 pF.

Paso I. Realizar el código de programación en CCS C.


#INCLUDE <16F877A.H>
#FUSES HS, NOLVP, NOWDT, NOPUT, NOPROTECT, BROWNOUT, NOCPD
#USE DELAY(CLOCK=20MHZ)
#BYTE TRISD = 0X88
#BYTE PORTD = 0X08
#BYTE TRISB = 0X86
#BYTE PORTB = 0X06
#DEFINE TIME DELAY_MS(500);
#DEFINE BOTON PIN_B0
INT DISPLAY[10] = {0X3F, 0X06, 0X5B, 0X4F, 0X66, 0X6D, 0X7D, 0X07, 0X7F,
0X6F};
INT I;
MANUAL DE PRÁCTICAS

VOID ASCENDENTE(){
I++;
IF(I>9)
I=0;
}
VOID DESCENDENTE(){
I--;
IF(I==-1)
I=9;
}
VOID MAIN(){

TRISD= 0X00; PORTD = 0X00;


TRISB = 0X01; PORTB = 0X00;
TIME;

IF(INPUT(BOTON)==1)
I=10;
ELSE I=-1;

DO{
IF(INPUT(BOTON)==1)
DESCENDENTE();
ELSE ASCENDENTE();

PORTD=DISPLAY[I];
TIME;

} WHILE(TRUE);
MANUAL DE PRÁCTICAS

Paso II. Realizar la conexión de los componentes en el software PROTEUS.

Paso III. Insertar los resultados de la simulación en el software PROTEUS.


MANUAL DE PRÁCTICAS

Instrumento de evaluación

Cuestionario

1. Explique con sus propias palabras ¿Cómo funciona el ciclo Do-While?


Hace que el programa entre en un bucle siempre y cuando se esté cumpliendo la
condición.

2. Explique con sus propias palabras ¿Para qué sirve la instrucción Input(pin) en CCS C?
Para asignar entradas a los pines.

3. Explique con sus propias palabras el funcionamiento de la función ascendente ().


El conteo va de menor a mayor (0 a 9).

4. Explique con sus propias palabras el funcionamiento de la función descendente ().


El conteo va de mayor a menor (9 a 0).

5. Menciona tus recomendaciones, comentarios y conclusiones:


Debido a las practicas realizadas el conocimiento adquirido hacia la programación de
pics fue muy satisfactorias ya que los softwares que se utilizaron fueron de mucha
ayuda para realizar las tareas requeridas.
Sin embargo, debido a que se contaba con material se pudo realizar la práctica de
manera física y es por ello por lo que no recomendamos ni sugerimos alguna mejora por
el momento ya que se entiende que por la situación actual no se puede trabajar de la
manera más adecuada.
MANUAL DE PRÁCTICAS

Practica# 6. Uso de Interrupciones.

Objetivo particular: El alumnado aprenderá a conocer los tipos de interrupciones con las
que cuenta el microcontrolador pic16f877a, en particular por interrupción externa (pin RB0).

Para ello, el alumnado realizará tres programas, los cuales se describen a continuación:

A1. programar de una secuencia de luces, utilizando el puerto D para su conexión física y
un botón que gobierne el sentido de la secuencia conectado en el pin RB4 del
PIC16F877A. Si el botón B está presionado la secuencia va de arriba hacia abajo, sino de
abajo hacia arriba.

A2. Realizar el programa de encendido de una serie de secuencia de luces en el puerto D


del microcontrolador mediante las condiciones siguientes:

▪ Si el botón A esta presionado la secuencia va del centro hacia afuera en pares de


dos y regresa.
▪ Si el botón B está presionado la secuencia va de arriba hacia abajo en pares de dos
y regresa.
▪ Cualquier otra combinación con los botones los leds deben estar apagados.

A3. Realizar el programa de una serie de un contador ascendente – descendente,


conectando en el puerto D un display 7 segmentos, controlados por dos botones que
permitirán lo siguiente:

▪ Cada vez que se presione el botón RB4 la cuenta será ascendente de uno en uno.
Ejemplo si está en el 5 pasa al 6.
▪ Cada vez que se presione el botón RB5 la cuenta será descendente de uno en uno.
Ejemplo si está en el 6 pasa al 5.
MANUAL DE PRÁCTICAS

❖ Lista de Materiales: ❖ Software:


▪ CCs C.
▪ LED’s.
▪ Jumpers Hembra – Macho. ▪ PROTEUS
▪ Protoboard.
❖ Equipo:
▪ Resistencia de 330 Ohms.
▪ PIC16F877a. ▪ Fuente de alimentación 5 Vcc
▪ Cristal de 20 MHz.
Programador de PIC’s.
▪ Push Botton.
▪ Dos capacitores de 15 - 32 pF.

Paso I. Realizar el código de programación en CCS C.

A1)
#include <16f877a.h>
#fuses hs, nolvp, nowdt, noput, noprotect, brownout, nocpd
#use delay(clock=20MHz)
#byte trisd=0x88
#byte portd=0x08
#byte trisb=0x86
#byte portb=0x06
#define time delay_ms(500)
#define boton pin_b4
int sec[8]={0x01, 0x02, 0x04,0x08,0x10,0x20,0x40,0x80};
int i=4;

void ascendente()
{
i++;
if(i>7)
i=0;
}

void descendente()
MANUAL DE PRÁCTICAS

{
i--;
if(i==-1)
i=7;
}

#int_rb

void rb0()
{
do
{
descendente();
portd=sec[i];
time;
}while(input(boton)==1);
}

void main()
{
trisd=0x00; portd=0x00;
trisb=0x01; portb=0x00;
time;

enable_interrupts(int_RB);
ext_int_edge(l_to_h);
enable_interrupts(global);

do
{
ascendente();
MANUAL DE PRÁCTICAS

portd=sec[i];
time;
}while(input(boton)==0);
}

A2)
#include <16f877a.h>
#fuses hs, nolvp, nowdt
#use delay(clock=20MHz)
#use standard_io(b)
#byte trisd=0x88
#byte portd=0x08
#define time delay_ms(500)
#define arriba pin_b4
#define centro pin_b5

int sec1[15]={0x03, 0x06, 0x0c, 0x18, 0x30, 0x60, 0xc0, 0x60, 0x30, 0x18, 0x0c,
0x06};
int sec2[6]={0x18, 0x24, 0x42, 0x81, 0x42, 0x24};
int cont=-1;

void arriba_abajo()
{
cont++;
if(cont==12)
cont=0;
}

void centro_afuera()
{
cont++;
MANUAL DE PRÁCTICAS

if(cont==6)
cont=0;
}

#int_rb

void interruciones()
{
do{
arriba_abajo();
portd=sec1[cont];
time;
}while(input(arriba)==1 & input(centro)==0);
portd=0x00;

do{
centro_afuera();
portd=sec2[cont];
time;
}while(input(arriba)==0 & input(centro)==1);
portd=0x00;
}

void main()
{
trisd=0x00; portd=0x00;
time;
enable_interrupts(int_rb);
ext_int_edge(l_to_h);
enable_interrupts(global);
while(true)
MANUAL DE PRÁCTICAS

{
cont=0;
portd=0x00;
}
}

A3)
#include <16f877a.h>
#fuses hs, nowdt, nolvp, brownout, noput, nocpd
#use delay(clock=20Mhz)
#use standard_io(b)
#byte trisd=0x88
#byte portd=0x08
#define down pin_b5
#define up pin_b4
#define time delay_ms(200)
int display[10]={0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f};
int cont;

void ascendente()
{
cont++;
if(cont>9)
cont=0;
}

void descendente()
{
cont--;
if(cont==-1)
cont=9;
MANUAL DE PRÁCTICAS

#int_rb

void interruciones()
{
if (input(up)== 1 & input(down)== 0)
ascendente();
else if (input(up)==0 & input(down)==1)
descendente();
time;
}

void main()
{
trisd=0x00; portd=0x00;
time;

enable_interrupts(int_rb);
ext_int_edge(l_to_h);
enable_interrupts(global);

while(true)
{
portd=display[cont];
}
}

Paso II. Realizar la conexión de los componentes en el software PROTEUS.


MANUAL DE PRÁCTICAS
MANUAL DE PRÁCTICAS

Paso III. Insertar los resultados de la simulación en el software PROTEUS.


MANUAL DE PRÁCTICAS
MANUAL DE PRÁCTICAS

Instrumento de evaluación

Cuestionario

1. Explique con sus propias palabras ¿Cómo funciona la interrupción por señal externa en
el pic16f877a?
Sirven para detectar un estado lógico o un cambio de estado en alguna de las
terminales de entrada de un microcontrolador.

2. Explique con sus propias palabras ¿Para qué sirve la instrucción #int_RB0 en CCS C?
Es para una activar una interrupción externa en ese puerto.

3. Explique con sus propias palabras cuales son las instrucciones para activar las
interrupciones en un microcontrolador en CCS C.
Declarar la función que corresponde a la interrupción. La función comienza con # y la
interrupción correspondiente, por ejemplo, para la función de interrupción por RB0 se
digita #int_EXT
En el programa principal se habilitan las interrupciones en forma global, con la
instrucción: enable_interrupts (GLOBAL) y habilita la interrupción correspondiente, por
ejemplo, habilita la interrupción externa por RB0: enable_interrupts (INT_EXT);

4. Explique la diferencia entre el ciclo While y el ciclo Do-While.


El do while se ejecuta la comprobación y después de ejecuta el código mientras que en
el while se ejecuta primero el código dentro de él y después lo compara.

5. Explique la estructura de la instrucción if-else.


Ejecuta una instrucción o instrucciones solamente si una condición se cumple.

6. Menciona tus recomendaciones, comentarios y conclusiones:


MANUAL DE PRÁCTICAS

Debido a las practicas realizadas el conocimiento adquirido hacia la programación de


pics fue muy satisfactorias ya que los softwares que se utilizaron fueron de mucha
ayuda para realizar las tareas requeridas.
Sin embargo, debido a que se contaba con material se pudo realizar la práctica de
manera física y es por ello por lo que no recomendamos ni sugerimos alguna mejora por
el momento ya que se entiende que por la situación actual no se puede trabajar de la
manera más adecuada.
MANUAL DE PRÁCTICAS

Práctica# 7. Uso de Timer 0.

Objetivo particular: El alumnado aprenderá a conocer el uso del temporizador timer0 EN


SU MODO temporizador Y contador, así como la activación de su interrupción para el
microcontrolador PIC16f877a.

Para ello, el alumnado realizará dos programas, los cuales se describen a continuación:

A1. Programar un contador ascendente decimal mediante el uso del Timer0 y la patilla RA4
con flancos descendentes, cada número decimal se imprimirá cada dos pulsos del botón
conectado en el pin RA4. No utilizar decodificador conectado al microcontrolador.

A2. Programar un minutero (60 segundos) mediante el uso del Timer0 como temporizador,
cada número decimal se imprimirá cada segundo en los display de 7 segmentos. No utilizar
decodificador conectado al microcontrolador.

❖ Lista de Materiales: ❖ Software:


▪ CCs C.
▪ LED’s.
▪ Jumpers Hembra – Macho. ▪ PROTEUS
▪ Protoboard.
❖ Equipo:
▪ Resistencia de 330 Ohms.
▪ PIC16F877a. ▪ Fuente de alimentación 5 Vcc
▪ Cristal de 20 MHz.
Programador de PIC’s.
▪ Push Botton.
▪ Dos capacitores de 15 - 32 Pf.

Paso I. Realizar el código de programación en CCS C.


A1)
#include <16F877A.H>
#fuses HS, NOWDT, NOLVP
#use delay(clock=8M)
#use FAST_IO(B)
MANUAL DE PRÁCTICAS

#DEFINE TIME DELAY_MS(1000)


INT CUENTA=0;
#INT_TIMER0

VOID DES_TIMER0 (){


CUENTA++;
IF(CUENTA==31)
{ OUTPUT_TOGGLE(PIN_B0);
CUENTA=0;}
SET_TIMER0(2);}

VOID MAIN ( ){
SET_TRIS_B(0X00);
OUTPUT_B(0X00);
SETUP_TIMER_0(RTCC_INTERNAL|RTCC_DIV_256|RTCC_8_BIT);
SET_TIMER0(2);
ENABLE_INTERRUPTS(INT_TIMER0);
ENABLE_INTERRUPTS(GLOBAL);

WHILE(TRUE){
OUTPUT_LOW(PIN_B7); TIME;
OUTPUT_HIGH(PIN_B7); TIME;

}}
A2)
#include <16F877A.H>
#fuses HS, NOWDT, NOLVP
#use delay(clock=8M)
#use STANDARD_IO(A)
#use STANDARD_IO(B)
MANUAL DE PRÁCTICAS

#use STANDARD_IO(C)
INT16 CUENTA, RESULTADO;
#INT_TIMER0

VOID DES_TIMER0 (){


IF (CUENTA ==256) CUENTA=0;
SET_TIMER0(241);
}

VOID MAIN ( ){
SETUP_ADC_PORTS(NO_ANALOGS);
OUTPUT_A(0X00);
OUTPUT_B(0X00);
OUTPUT_C(0X00);
SETUP_TIMER_0(RTCC_EXT_L_TO_H|RTCC_DIV_1|RTCC_8_BIT);
SET_TIMER0(241);
ENABLE_INTERRUPTS(INT_TIMER0);
ENABLE_INTERRUPTS(GLOBAL);

WHILE(TRUE){
CUENTA=GET_TIMER0();
RESULTADO =15-(256-CUENTA);
OUTPUT_B(RESULTADO);
IF(RESULTADO<9) OUTPUT_LOW(PIN_C0);
ELSE OUTPUT_HIGH(PIN_C0);

}}

Paso II. Realizar la conexión de los componentes en el software PROTEUS.


MANUAL DE PRÁCTICAS

Paso III. Insertar los resultados de la simulación en el software PROTEUS.


MANUAL DE PRÁCTICAS
MANUAL DE PRÁCTICAS

Instrumento de evaluación

Cuestionario

1. Explique con sus propias palabras ¿Cómo caracterizar el timer0 del pic16f877a como
temporizador?
Funciona como temporizador cuando cuenta lo pulsos internos del reloj.

2. Explique con sus propias palabras ¿Para qué sirve la instrucción #int_timer0 en CCS C?
Es la función de atención a la interrupción.

3. Explique con sus propias palabras ¿Cómo caracterizar el timer0 del pic16f877a como
contador?
Funciona como contador cuando cuenta los eventos externos que hay mediante el pin
RA4/SOCK1.
4. Menciona tus recomendaciones, comentarios y conclusiones:

Debido a las practicas realizadas el conocimiento adquirido hacia la programación de


pics fue muy satisfactorias ya que los softwares que se utilizaron fueron de mucha
ayuda para realizar las tareas requeridas.
Sin embargo, debido a que se contaba con material se pudo realizar la práctica de
manera física y es por ello por lo que no recomendamos ni sugerimos alguna mejora por
el momento ya que se entiende que por la situación actual no se puede trabajar de la
manera más adecuada.
MANUAL DE PRÁCTICAS

Prácticas vistas en clase.


Primera practica realizada en clase, la cual consiste en un semáforo que va a ir
cambiando de estado cada determinado tiempo, el código fue realizado con while por cada
alumno del salón.
MANUAL DE PRÁCTICAS

Código:
/* CONDICIONES GENERALES DEL MICRO SELECCIONADO */
#include <16F877A.h>
#Fuses HS,NOWDT,NOPUT,NOLVP
#USE DELAY(CLOCK=20M)

/* DECLARACIÓN DE VARIABLES */
#DEFINE RETARDO DELAY_MS(10000)
#DEFINE RETARDO1 DELAY_MS(5000)
#DEFINE RETARDO2 DELAY_MS(10000)

VOID MAIN(){
SET_TRIS_D(0X00); // PUERTO D TRABAJA COMO SALIDAS
OUTPUT_D(0X00); // INICIALIZACIÓN DEL PUERTO D

WHILE(TRUE){
OUTPUT_D(0X01);
RETARDO;
OUTPUT_D(0X02);
RETARDO1;
OUTPUT_D(0X04);
RETARDO2;

}
}
MANUAL DE PRÁCTICAS

Segunda practica realizada en clase, la cual consiste en un semáforo que va a ir


cambiando de estado cada determinado tiempo, el código fue realizado con el ciclo for por
cada alumno del salón.

Código:
#include <16F877A.H>
#fuses HS, NOWDT, NOPUT, NOPROTECT BROWNOUT, NOLVP,NOCPD
#use delay(clock=20M)
MANUAL DE PRÁCTICAS

#byte TRISD=0x88
#byte PORTD=0x08

void main(){

#define TIEMPO DELAY_MS(15000);


#define PARPADEO DELAY_MS(500);
#define ROJO PORTD=0x01;
#define VERDE PORTD=0x04;
#define AMARILLO PORTD=0x02;
#define APAGADO PORTD=0x00;

int I;

TRISD=(0x00);
PORTD=(0x00);
PARPADEO;

while(TRUE){
ROJO; TIEMPO;

for (I=0;I<5;++I){
APAGADO; PARPADEO;
ROJO; PARPADEO;
}
VERDE; TIEMPO;

for(I=0;I<5;++I){
APAGADO; PARPADEO;
VERDE; PARPADEO;
}
MANUAL DE PRÁCTICAS

AMARILLO; TIEMPO;

for(I=0;I<5;++I){
APAGADO; PARPADEO;
AMARILLO; PARPADEO;
}
}
}

Tercer practica realizada en clase, la cual consiste en un conteo de leds que va de abajo
hacia arriba y viceversa utilizando el ciclo while el código fue realizado por cada alumno del
salón.
MANUAL DE PRÁCTICAS

Código:
/* CONDICIONES GENERALES DEL MICRO SELECCIONADO */
#include <16F877A.h>
#Fuses HS,NOWDT,NOPUT,NOLVP
#USE DELAY(CLOCK=20M)

/* DECLARACIÓN DE VARIABLES */
#DEFINE RETARDO DELAY_MS(1000)

VOID MAIN(){
SET_TRIS_C(0X00); // PUERTO D TRABAJA COMO SALIDAS
OUTPUT_C(0X00); // INICIALIZACIÓN DEL PUERTO D

WHILE(TRUE){
OUTPUT_C(0X01);
MANUAL DE PRÁCTICAS

RETARDO;
OUTPUT_C(0X02);
RETARDO;
OUTPUT_C(0X04);
RETARDO;
OUTPUT_C(0X08);
RETARDO;
OUTPUT_C(0X10);
RETARDO;
OUTPUT_C(0X20);
RETARDO;
OUTPUT_C(0X40);
RETARDO;
OUTPUT_C(0X80);
RETARDO;
OUTPUT_C(0X40);
RETARDO;
OUTPUT_C(0X20);
RETARDO;
OUTPUT_C(0X10);
RETARDO;
OUTPUT_C(0X08);
RETARDO;
OUTPUT_C(0X04);
RETARDO;
OUTPUT_C(0X02);
RETARDO;

}
}
MANUAL DE PRÁCTICAS

Cuarta practica realizada en clase, la cual consiste en escribir mediante una combinación
de interruptores un numero de manera binaria para que así muestre el numero de forma
decimal en una matriz de leds y un display de 7 segmentos, el código fue realizado por
cada alumno del salón.
MANUAL DE PRÁCTICAS

Código:
#include <leddisplayw.h>

INT LED[8] = {0b00000000, 0b00000001, 0b00000011, 0b00000111,0b00001111,


0b00011111, 0b00111111, 0b01111111};
INT DISPLAY[8]= {0b00111111, 0b00000110, 0b01011011, 0b01001111, 0b01100110,
0b01101101, 0b01111101, 0b00000111};

VOID MAIN(){
WHILE(TRUE){
IF(INPUT(PIN_B0)==0 & INPUT(PIN_B1)==0 & INPUT(PIN_B2)==0)
OUTPUT_C(LED[0]);

IF(INPUT(PIN_B0)==0 & INPUT(PIN_B1)==0 & INPUT(PIN_B2)==1)


OUTPUT_C(LED[1]);
MANUAL DE PRÁCTICAS

IF(INPUT(PIN_B0)==0 & INPUT(PIN_B1)==1 & INPUT(PIN_B2)==0)


OUTPUT_C(LED[2]);

IF(INPUT(PIN_B0)==0 & INPUT(PIN_B1)==1 & INPUT(PIN_B2)==1)


OUTPUT_C(LED[3]);

IF(INPUT(PIN_B0)==1 & INPUT(PIN_B1)==0 & INPUT(PIN_B2)==0)


OUTPUT_C(LED[4]);

IF(INPUT(PIN_B0)==1 & INPUT(PIN_B1)==0 & INPUT(PIN_B2)==1)


OUTPUT_C(LED[5]);

IF(INPUT(PIN_B0)==1 & INPUT(PIN_B1)==1 & INPUT(PIN_B2)==0)


OUTPUT_C(LED[6]);

IF(INPUT(PIN_B0)==1 & INPUT(PIN_B1)==1 & INPUT(PIN_B2)==1)


OUTPUT_C(LED[7]);

IF(INPUT(PIN_B0)==0 & INPUT(PIN_B1)==0 & INPUT(PIN_B2)==0)


OUTPUT_D(DISPLAY[0]);

IF(INPUT(PIN_B0)==0 & INPUT(PIN_B1)==0 & INPUT(PIN_B2)==1)


OUTPUT_D(DISPLAY[1]);

IF(INPUT(PIN_B0)==0 & INPUT(PIN_B1)==1 & INPUT(PIN_B2)==0)


OUTPUT_D(DISPLAY[2]);

IF(INPUT(PIN_B0)==0 & INPUT(PIN_B1)==1 & INPUT(PIN_B2)==1)


OUTPUT_D(DISPLAY[3]);

IF(INPUT(PIN_B0)==1 & INPUT(PIN_B1)==0 & INPUT(PIN_B2)==0)


MANUAL DE PRÁCTICAS

OUTPUT_D(DISPLAY[4]);

IF(INPUT(PIN_B0)==1 & INPUT(PIN_B1)==0 & INPUT(PIN_B2)==1)


OUTPUT_D(DISPLAY[5]);

IF(INPUT(PIN_B0)==1 & INPUT(PIN_B1)==1 & INPUT(PIN_B2)==0)


OUTPUT_D(DISPLAY[6]);

IF(INPUT(PIN_B0)==1 & INPUT(PIN_B1)==1 & INPUT(PIN_B2)==1)


OUTPUT_D(DISPLAY[7]);

}}

Quinta practica realizada en clase, la cual consiste en un contador ascendente del 0 al 9


aplicada en un display, con una interrupción con un determinado tiempo que se ejecuta a
través de un push botón, el código fue realizado por cada alumno del salón.
MANUAL DE PRÁCTICAS

Código:
#include <16F877A.H>
#fuses HS, NOWDT, NOLVP
#use delay(clock=20M)
#use standard_IO(B)
#use standard_IO(D)

// DEFINIR VARIABLES
#DEFINE BOTON PIN_B0
#DEFINE LED PIN_B7
#DEFINE TIME DELAY_MS(500)
#DEFINE ESPERA DELAY_MS(2000)
INT DISPLAY[10] = {0X3F, 0X06, 0X5B, 0X4F, 0X66, 0X6D, 0X7D, 0X07, 0X7F, 0X6F};
INT I,CONT;

#INT_EXT //PROGRAMA DE INTERRUPCION EXTERNA RBO


VOID INTERRUPCION (){
FOR(I=1;I<5;I++){
OUTPUT_HIGH(LED); TIME; //LED ON 0.5 SEG
MANUAL DE PRÁCTICAS

OUTPUT_LOW(LED); TIME; //LED OFF 0.5 SEG


}
}

VOID MAIN ( ){
ESPERA;
ENABLE_INTERRUPTS(INT_EXT);
EXT_INT_EDGE(L_TO_H);
ENABLE_INTERRUPTS(GLOBAL);

WHILE(TRUE){
OUTPUT_D(DISPLAY [CONT]);
TIME;
IF (CONT !=9) CONT++;
ELSE CONT = 0;
}}

Sexta practica realizada en clase, la cual consiste en un contador en una matriz de leds
del 0 al 7, con interrupciones con un determinado tiempo que se ejecutan a través de 4
push botón, el código fue realizado por cada alumno del salón.
MANUAL DE PRÁCTICAS

Código:
#include <16F877A.H>
#fuses HS, NOWDT, NOLVP
#use delay(clock=20M)
#BYTE PORTB=0X06
#BYTE TRISB=0X086
#use standard_IO(D)

// DEFINIR VARIABLES
#DEFINE TIME DELAY_MS(500)
#DEFINE STOP DELAY_MS(2000)
INT DISPLAY[8] = {0X01, 0X03, 0X07, 0X0F, 0X1F, 0X3F, 0X7F, 0XFF};
INT I,C,CONT;

//DEFINICIÓN DE FUNCIÓN DE LUCES


// EL VALOR C INDICA EL NUMERO DE CICLOS ENCENDER-APAGAR LED
VOID CICLO (C){
FOR(I=0;I<C;I++){
BIT_SET(PORTB,C-1); TIME; //LED ON 0.5 SEG
BIT_CLEAR(PORTB,C-1); TIME; //LED OFF 0.5 SEG
MANUAL DE PRÁCTICAS

}
}

//INSTRUCCIONES
#INT_RB
VOID INTERRUPCIONES () {
IF (BIT_TEST(PORTB,4)==0) CICLO(1);
ELSE IF (BIT_TEST(PORTB,5)==0) CICLO(2);
ELSE IF (BIT_TEST(PORTB,6)==0) CICLO(3);
ELSE IF (BIT_TEST(PORTB,7)==0) CICLO(4);
ELSE PORTB=0X00;
}
VOID MAIN ( ){
TRISB=0XF0;
PORT_B_PULLUPS(TRUE);
STOP;
ENABLE_INTERRUPTS(INT_RB);
EXT_INT_EDGE(H_TO_L);
ENABLE_INTERRUPTS(GLOBAL);

WHILE(TRUE){
OUTPUT_D(DISPLAY [CONT]);
TIME;
IF (CONT !=7) CONT++;
ELSE CONT = 0;
}}
MANUAL DE PRÁCTICAS

Material Bibliográfico.

1. Rossano, V. (2013). Manual Users: PROTEUS VSM Simulación de Circuitos


Electrónicos (1a ed.). Buenos Aires, Argentina: REDUSERS.

2. Garcia Bermijo, E. (2008). Compilador C CCS y Simulador PROTEUS para


microcontroladores PIC (1a ed.). Barcelona, España: Marcombo.

3. Reinoso S., Mena L., Pilatasing M &. Sánchez J. (2018). Programación de


microcontroladores PIC con Lenguaje C, Tomo I Gestión de puertos e interrupciones
externas. Sangolquí, Ecuador: Comisión Editorial de la Universidad de las Fuerzas
Armadas ESPE.

4. Custom Computer Services, Inc. (2019). CCS C Compiler Manual. Recuperado de:
https://www.ccsinfo.com/downloads/ccs_c_manual.pdf

5. Rodriguez, Pedro. (2017). Manual de Practicas con microcontroladores. Morelos,


México. Editorial: MasterOfficial.

6. Sixto Reinoso; Luis Mena; Marco Pilatasig y Jorge Sánchez. (2018). Programación de
microcontroladores PIC con Lenguaje C. Octubre 2018, de Comisión Editorial de la
Universidad de las Fuerzas Armadas ESPE Sitio web:
http://repositorio.espe.edu.ec/bitstream/21000/15406/1/Programaci%C3%B3n%20de%2
0microcontralores%20tomo%201.pdf
MANUAL DE PRÁCTICAS

También podría gustarte