Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Práctica 2
Gestion de puertos de salida
Competencias de La Unidad:
• Emplea el microcontrolador en la comunicación de datos y control de periféricos de forma
multiplexada.
• Usa diferentes elementos periféricos utilizando los puertos del microcontrolador de forma
multiplexada.
• Utiliza los puertos del microcontrolador de forma bidireccional en la solución de un problema.
.
Objetivos de la Práctica:
2. Desarrolla programas que habilite y deshabilite las salidas de microcontrolador por cierto tiempo.
Introducción Teórica
Puertos de Entrada y salida
Las líneas de E/S están agrupadas en 3 puertos: A (6 bits), B (8 bits), C (8 bits). Cada puerto de E/S
tiene asociados dos registros TRISX y PORTX. El primer registro dispone de un bit por cada línea del
puerto, y controlará si funciona como entrada (Input, 1) o como salida (Output, 0). El segundo registro
nos permite acceder al puerto. Con una escritura se modifican los bits configurados como salida,
y con una lectura accedemos tanto a los de entrada como a los de salida. Si se realiza una escritura y
de forma inmediata una lectura, puede que la salida no haya alcanzado el nivel adecuado generando
incoherencias
.
Para inicializar los puertos se realiza las siguientes instrucciones en ensamblador
Como entrada
• Colocarse en el banco 1,
• Cargar “1’s” en el registro TRISX, si se desea que se comporte el puerto como entrada, si solo
desea configurar como entrada bits individuales colocar 1 en los bits que desee.
• Regresar al banco 0.
Como Salida
• Colocarse en el banco 1.
• Cargar “0’s” en el registro TRISX, si se desea que se comporte el puerto como salida, si solo
desea configurar como salida bits individuales colocar 0 en los bits que desee.
• Regresar al banco 0
9
Dr. Oscar Octavio Gutiérrez Frías Microelectrónica Programable
Academia de Sistemas Digitales T.V.
Para cambiar de banco se utiliza los bits 5 y 6 del registro de estado. Al cambiar al banco 1, configure todos
los puertos. En el caso del PIC16F876, debe configurarse los pines del Puerto A como entradas digitales
colocan el valor 06H en el registro ADCON1
En el caso del compilador de C, los paso anteriores se realizan utilizando las directivas
#use standard_io(X)
set_tris_X(0x00);
Bits de Configuración
Todos los PIC disponen de un cierto número de bits de configuración que están disponibles en la memoria
EEPROM, y solo se accede a ellos cuando se programa el dispositivo, permitiendo determinar ciertas
necesidades con el fin de adaptarlo a las aplicaciones que se realice, debido a que dependen del
dispositivo.
Las características que se programan en los bits de configuración son las siguientes:
El tipo de oscilador.
La habilitación o no del perro guardián.
La protección de la memoria de programa.
La protección de la memoria EEPROM de datos, si existe en el dispositivo.
Las características del RESET y la alimentación del dispositivo.
En el caso del PIC 16F876 los bits de configuración se encuentran en la dirección 2007H y podemos
almacenar el valor 3F71H, En el caso de requerir utilizar una dispositivos diferente, se debe verificar en
las hojas de especificaciones, cuales son los bits y posición en la cual están implementados.
13 12 11 10 9 8 7 6 5 4 3 2 1 0
CP1 CP0 DEBUG - WRT CPD LVP BODEN CP1 CP0 PWRTE# WDTE FOSC1 FOSC2
1 1 1 1 1 1 0 1 1 1 0 0 0 1
Definiendo las siguientes características:
Oscilador: XT
Watchdog (WDT) Deshabilitado (Apagado)
PWRT: (PUT) Habilitado (Apagado)
CP: Deshabilitado (Apagado)
CPD: Deshabilitado (Apagado)
BODEN Habilitado (Encendido)
LVP Deshabilitado (Apagado)
Otra manera de hacerlo es especificando en el código fuente los bit de configuración , por lo cual el
ensamblador de MPASM tiene la características de permitir definir los valores que tomaran al programar
el dispositivo , mediante la directiva __CONFIG y en lenguaje C es con la directica fuses
Oscilador: XT
Watchdog (WDT) Deshabilitado (Apagado)
PWRT: (PUT) Habilitado (Apagado)
CP: Deshabilitado (Apagado)
CPD: Deshabilitado (Apagado)
BODEN Habilitado (Encendido)
LVP Deshabilitado (Apagado)
11
Dr. Oscar Octavio Gutiérrez Frías Microelectrónica Programable
Academia de Sistemas Digitales T.V.
que equivalen a almacenar el valor 3F71H en dirección 2007H en el caso del PIC 16F876 .
Cabe comentar que los símbolos utilizados en la directiva __CONFIG o fuses no son los mismos para
todos los dispositivos, pero pueden ser verificados el archivo include de Microchip o .h del compilado de
C que se utilice.
ACTIVIDADES PREVIAS
• Crear un proyecto de nombre pra2 en la carpeta c:\MEPIC\practica2. Los programas de cada
ejercicio deben ser guardados con el nombre practica2.c con X= 1, 2, 3…,A.
ACTIVIDADES PRÁCTICAS
Parte 1
R1
A. Armar el siguiente circuito 5V
1k
2
RA0/AN0 3
5V RA1/AN1 4 PINA0
RA2/AN2 5
RA3/AN3/REF 6
RA4/T0CLK 7
RA5/AN4/SS 21
C1 1 RB0/INT 22 0
9 MCLR/VPP RB1 23
OSC1/CLK RB2 24
39p 20 RB3 25
VDD RB4 26 220 Verde1
RB5 27
RB6 28
RB7 11 220 Amarillo1
Y1 RC0/T1OSO/T1CLK 12
RC1/T1OSI/CCP2 13
4 Mhz RC2/CCP1 14 220 Rojo1
RC3/SCK/SCL 15
RC4/SDI/SDA 16 0
0 RC5/SDO 17 220 Verde2
RC6/TX/CK 18
RC7/RX/DT 10
OSC2/CLKOUT 220 Amarillo2
C2
220 Rojo2
39p
PIC16F876
Figura 1.1
Nota: La terminal 8 o 19 del PIC16F876 se conectan a tierra.
12
Dr. Oscar Octavio Gutiérrez Frías Microelectrónica Programable
Academia de Sistemas Digitales T.V.
Realizar el siguiente programa de salida de datos y observar su funcionamiento utilizando la opción
watch y stopwatch del simulador y posteriormente grabarlo en el circuito de la figura 1.1 a si como
simularlo en PROTEUS
//Codigo de ejemplo
#include <16f876.h>
#use delay(clock=4000000)
#fuses NOWDT,XT,NOLVP,NOCPD,BROWNOUT, NOPROTECT, DEBUG,WRT
#use standard_io(b)
void main()
{
set_tris_b(0x00);
while(1)
{
output_b(0x00);
output_b(0x01);
delay_ms(500);
output_b(0x00);
output_b(0x02);
delay_ms(500);
output_b(0x00);
output_b(0x04);
delay_ms(500);
output_b(0x00);
}
Sugerencia: realice un tabla muestre la transición entre cada color, recuerde que existe dos led’s del
mismo color.
2. Realice un programa que enciendan los 6 primeros bits del PUERTO B de manera
ascendente durante 1 seg cada bit y al terminar enciendan de manera descendente
durante 2 seg cada bit. El programa debe ser cíclico. y efectué la simulación en PROTEUS
13
Dr. Oscar Octavio Gutiérrez Frías Microelectrónica Programable
Academia de Sistemas Digitales T.V.
1. Conclusiones
2. Cuestionario
a) Menciona la estructura función para realizar una subrutina de tiempo
b) ¿Que función tiene la sentencia while?
c) ¿Cuál es la instrucción para sacar datos por le puerto?
d) Menciona que función tiene la directiva # fuses y #use delay
e) ¿Cuántos puertos cuenta el PIC16F876?
f) Menciona las características de los puertos del PIC16F877
Comentarios Finales
14
Dr. Oscar Octavio Gutiérrez Frías Microelectrónica Programable
Academia de Sistemas Digitales T.V.