Está en la página 1de 15

UNIVERSIDAD NACIONAL DEL CENTRO DEL PERÚ

FACULTAD DE INGENIERÍA ELÉCTRICA Y ELÉCTRONICA

MEDICION DE MAGNITUDES
ELÉCTRICAS PROGRAMADO EN
PIC 16F877A
CURSO: MICROPROCESADORES Y ARQUITECTURA
DEL COMPUTADOR (067C)
DOCENTE: ING. RAÚL SÁNCHEZ POMA
INTEGRANTES: ARELLANO HUAMÁN MAX
CASTELLANOS MENDOZA CRISTIAN
CHUCO LAUREANO IVAN
LARA GUZMÁN KEVIN
SEMESTRE: VI

Huancayo 2018
ÍNDICE

I. MARCO TEÓRICO ...................................................................................... 2

II. SIMULACIÓN DEL CIRCUITO EN PROTEUS 8.5 ...................................... 9

III. CODIFICACIÓN EN PICBASIC PRO 2.5 .................................................... 9

IV. CODIFICACIÓN HEXADECIMAL .............................................................. 14

1
I. MARCO TEÓRICO

1. CARACTERÍSTICAS ESPECIALES PIC 16F877A:

La siguiente es una lista de las características que comparte el PIC16F877 con


los dispositivos más cercanos de su familia:

PIC16F873 - PIC16F874 - PIC16F876 - PIC16F877

 CPU:
- Tecnología 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 (200 ns de ciclo de
instrucción)
- Opciones de selección del oscilador
 Memoria:
- 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
- Lectura/escritura de la CPU a la memoria flash de programa
- Protección programable de código
- Stack de hardware de 8 niveles
 Reset e interrupciones:
- Hasta 14 fuentes de interrupción
- Reset de encendido (POR)
- Timer de encendido (PWRT)
- Timer de arranque del oscilador (OST)
- Sistema de vigilancia Watchdog timer.
 Otros:
- Modo SLEEP de bajo consumo de energía
- Programación y depuración serie “In-Circuit” (ICSP) a través de
dos patitas
- 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 (modo SLEEP).

2
2. CARACTERÍSTICAS PERIFÉRICAS:

3. DIAGRAMA DE CONEXIONES:

3
4. DIAGRAMA DE BLOQUES DEL PIC16F877A:

4
5. DESCRIPCIÓN DE LOS PINES:

5
6
7
Leyenda:
 AN = Analog input or output (entrada o salida analógica).
 CMOS = CMOS compatible input or output (entrada o salida compatible).
 D = Directo.
 TTL = TTL compatible input (TTL de entrada compatible)
 ST = Schmitt Trigger input with CMOS levels (entrada del disparador
con niveles CMOS)
 HV = High Voltage (alto voltaje).
 XTAL = Crystal.

8
II. SIMULACIÓN DEL CIRCUITO EN PROTEUS 8.5

III. CODIFICACIÓN EN PICBASIC PRO 2.5

#include <16f877A.h> //LIBRERIA DEL PIC QUE SE VA A USAR

#fuses XT,NOWDT,NOPUT,NOLVP,NOBROWNOUT,NOWRT,NOPROTECT //FUSES DE AJUSTE


PARA CRISTAL XT DE 4MHZ

#device adc=10 //CONFIGURA EL CONVERSOR AD A 10 BITS

#use delay (clock = 4000000) //CRISTAL DE 4 MHZ

#define use_portb_lcd TRUE //CONFIGURA EL PUERTO B PARA LA LCD

#include <LCD.C> //LIBRERIA PARA LA LCD 2*16

#include <math.h> //LIBRERIA PARA USO MATEMATICO

#use standard_io (All) //CONFIGURA TODOS LOS PUERTOS Y AUTOMATICAMENTE LOR


TRIS

#BYTE TRISA=0x85

9
#BYTE PORTA=0x05

float t;

float s1,s=0;

int a1=0;

void medirVol () //SE CREA LA FUNCION PARA MEDIR VOLTAJE

setup_adc (ADC_CLOCK_DIV_32); //CONFIGURA EL RELOJ PARA LA CONVESION CON UN


DIVISOR DE 32

//DE LOS CILOS DEL RELOJ

set_adc_channel (0); //habilitacion canal 0 INICIA LA CONVERSION DEL CANAL 0 PIN 2

delay_us (20); //RETARDO PARA DAR TIEMPO A LA CONVERSION

t = read_adc(); //LO QUE LEE EN EL CONVESROR AD LO GUARDA EN LA VARIABLE t

s= 55.0 *t / 1024; //LO CONVIERTE A VOLTAJE 5V DE VOLTAJE DE REFERENCIA DIVIDIDO


EN 2^10

// QUE ES LA RESOLUCION DEL CONVERSOR

void medirRes ()

setup_adc (ADC_CLOCK_DIV_32);

set_adc_channel (1); //habilitacion canal 1 INICIA LA CONVERSION DEL CANAL 1 PIN 3

delay_us (20);

t = read_adc();

if(t<=930)

{ s= 1000*t / (1024-t);

s1=s1*4/5+s/5; }

else

s=0;

void publicaVol () //FUNCION DE PUBILAR EN EL DISPLAY LO MEDIDO

10
lcd_putc('\f'); //BORRA LA LCD YA DEBE ESTAR INICIALIZADA CUANDO LA LLAME

lcd_gotoxy (1,1);

printf (lcd_putc, "VOLTAJE :");//DESPLIEGA EN LA PANTALLA

lcd_gotoxy (6,2);

printf(lcd_putc, " +\%2.1f v",(s*7)); //DESPLIEGA EL CARACTER + Y LO QUE ESTA EN

//LA VARIABLE FLOTANTE CON DOS CARACTERES ENTEROS Y UN DECIMAL

void publicaRes ()

lcd_putc('\f');

lcd_gotoxy (1,1);

printf (lcd_putc, "RESISTENCIA :");

lcd_gotoxy (4,2);

printf(lcd_putc, " +\%2.1f Ohm",s1);

void main () //FUNCION PRINCIPAL ,PROGAMA PRICIPAL

bit_set(TRISA,2);

setup_adc_ports (RA0_RA1_RA3_ANALOG);

lcd_init(); //INICIALIZA LA LDC

lcd_gotoxy (3,1); //CORDENADAS

printf (lcd_putc, "MULTIMETRO");

lcd_gotoxy (6,2); //CORDENADAS DEL TEXTO

printf (lcd_putc, "FIEE");

delay_ms (2200); //RETARDO DE 2.2

lcd_putc('\f'); //BORRA LCD

lcd_gotoxy (2,1); //CORDENADAS

printf (lcd_putc, "INTEGRANTES");

lcd_gotoxy (6,2); //CORDENADAS DEL TEXTO

printf (lcd_putc, "FIEE");

delay_ms (2200); //RETARDO DE 2.2

11
lcd_putc('\f'); // BORRA LCD

lcd_gotoxy (1,1); //CORDENADAS

printf (lcd_putc, "ARELLANO");

lcd_gotoxy (1,2); //CORDENADAS DEL TEXTO

printf (lcd_putc, "HUAMAN");

delay_ms (2200); //RETARDO DE 2.2

lcd_putc('\f'); // BORRA LCD

lcd_gotoxy (1,1); //CORDENADAS

printf (lcd_putc, "CASTELLANOS");

lcd_gotoxy (1,2); //CORDENADAS DEL TEXTO

printf (lcd_putc, "MENDOZA");

delay_ms (2200); //RETARDO DE 2.2

lcd_putc('\f'); // BORRA LCD

lcd_gotoxy (1,1); //CORDENADAS

printf (lcd_putc, "CHICO");

lcd_gotoxy (1,2); //CORDENADAS DEL TEXTO

printf (lcd_putc, "LAUREANO");

delay_ms (2200); //RETARDO DE 2.2

lcd_putc('\f'); // BORRA LCD

lcd_gotoxy (1,1); //CORDENADAS

printf (lcd_putc, "LARA");

lcd_gotoxy (1,2); //CORDENADAS DEL TEXTO

printf (lcd_putc, "GUZMAN");

delay_ms (2200); //RETARDO DE 2.2 SEGUNDOS

while (true) // BUCLE SIN FIN

if(BIT_TEST(PORTA,2)==1){

if(a1==0)

a1=1;

else

12
a1=0;

while(BIT_TEST(PORTA,2)==1);

if(a1==0){

medirVol();

publicaVol();

else {

medirRes();

publicaRes ();

delay_ms (100); //RETARDO DE 100ms

13
IV. CODIFICACIÓN HEXADECIMAL

14

También podría gustarte