Sie sind auf Seite 1von 28

INICIACIN A LOS MICROCONTROLADORES PIC

Un microcontrolador, es un circuito integrado programable que contiene los elementos necesarios para controlar un sistema. PIC significa Peripheral Interface Controller, es decir un controlador de perifricos. Cuando hablamos de un circuito integrado programable que controla perifricos, estamos hablando de un sistema que contiene entre otras cosas una unidad arimtico-lgica, memorias de datos y programas, puertos de entrada y salida, es decir, estamos hablando de un pequeo ordenador diseado para realizar funciones especficas. Podemos encontrar microcontroladores en lavadoras, hornos de microondas, telfonos mviles, etc.

Un puerto es una interfaz fsica a travs del la cual pasan los datos hacia y desde los perifricos.

INICIACIN A LOS MICROCONTROLADORES PIC


MCLR/Vpp RA0 PUERTO A RA1 RA2 RA3 RA4 RA5 RE0 PEURTO E RE1 RE2 VDD VSS OSC1 OSC2 RC0 PUERTO C RC1 RC2 RC3 PUERTO D RD0 RD1 RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0 VDD VSS RD7 RD6 RD5 RD4 RC7 RC6 RC5 RC4 RD3 RD2 PUERTO B

El microcontrolador PIC 16F877A del fabricante Microchip Technology Inc. es un sistema sencillo, barato y potente para muchas aplicaciones electrnicas.

PUERTO D

PUERTO C

PUERTO D

Paquete de plstico de doble lnea, PDIP (Plastic Dual In-Line Package) de 40 pines.

Algunas de las caractersticas del microcontrolador 16F877A son: -Memoria de programa Flash: 8K x 14 words. (8K localidades de memoria, cada una con una longitud de 14 bits). Memoria reprogramable, este tipo de memoria se puede borrar electrnicamente). Contiene el programa con las instrucciones que gobiernan al microcontrolador. Es del tipo no voltil. -Memoria RAM de datos: 368 Bytes. Almacena las variables y datos. Son registros de 8 bits. Es voltil. -Memoria EEPROM de datos: 256 Bytes. Memoria de datos de lectura y escritura no voltil que permite garantizar que determinada informacin estar siempre disponible al reinicializarse el programa. -Frecuencia de operacin de hasta 20 Mhz. -Puertos de Entrada/Salida: PORTA, PORTB, PORTC, PORTD, PORTE -Timers: 3 -Nmero de pines: 40

Asignacin de pines y propsito. Todo microcontrolador requiere de un circuito que le indique la velocidad de trabajo, llamado oscilador o reloj. Este genera una onda cuadrada de alta frecuencia que se utiliza como seal para sincronizar todas las operaciones del sistema. Los pines utilizados para este fin son: OSC1 (13): Entrada del oscilador de cristal de cuarzo. OSC2 (14): Salida del cristal de cuarzo.
X1 U1
CRYSTAL 4MHz 5V 13 14 1 2 3 4 5 6 7 8 9 10 OSC1/CLKIN OSC2/CLKOUT MCLR/Vpp/THV RA0/AN0 RA1/AN1 RA2/AN2/VREFRA3/AN3/VREF+ RA4/T0CKI RA5/AN4/SS RE0/AN5/RD RE1/AN6/WR RE2/AN7/CS RB0/INT RB1 RB2 RB3/PGM RB4 RB5 RB6/PGC RB7/PGD RC0/T1OSO/T1CKI RC1/T1OSI/CCP2 RC2/CCP1 RC3/SCK/SCL RC4/SDI/SDA RC5/SDO RC6/TX/CK RC7/RX/DT RD0/PSP0 33 34 35 36 37 38 39 40 15 16 17 18 23 24 25 26 19

C2
5V 22pF

C6
100nF

C1
22pF

R2
10k

R5
330

RESET

C2
5V 22pF

C6
100nF

C1

El microcontrolador se alimenta con 5 Volts aplicados entre los pines Vdd y Vss, que son respectivamente la alimentacin y la tierra del chip. VSS (12 y 31): Conexin a tierra. VDD (11 y 32): entrada de alimentacin positiva. MCLR (1): entrada de RESET. El reset provoca la reinicializacin del funcionamiento del microcontrolador. El pin del reset en los microcontroladores se denomina Master Clear (MCLR) y produce un reset cuando se le aplica un nivel lgico bajo (0 volts).

22pF

X1 U1
CRYST AL 4MHz 5V 13 14 1 2 3 4 5 6 7 8 9 10 OSC1/CLKIN OSC2/CLKOUT MCLR/Vpp/T HV RA0/AN0 RA1/AN1 RA2/AN2/VREFRA3/AN3/VREF+ RA4/T 0CKI RA5/AN4/SS RE0/AN5/RD RE1/AN6/WR RE2/AN7/CS RB0/INT RB1 RB2 RB3/PGM RB4 RB5 RB6/PGC RB7/PGD RC0/T 1OSO/T 1CKI RC1/T 1OSI/CCP2 RC2/CCP1 RC3/SCK/SCL RC4/SDI/SDA RC5/SDO RC6/T X/CK RC7/RX/DT RD0/PSP0 RD1/PSP1 RD2/PSP2 RD3/PSP3 RD4/PSP4 RD5/PSP5 RD6/PSP6 RD7/PSP7 PIC16F877 33 34 35 36 37 38 39 40 15 16 17 18 23 24 25 26 19 20 21 22 27 28 29 30 5V

R2
10k

R5
330

RESET

BAT1

U2 D1
IN4007 7805 1 VI GND VO 3

9V

C3
100nF

C4
1000uF/25V

C5

100uF

Pines de entradas/salidas digitales, trabajan con niveles de 0 y 5 volts. PORTA: 6 pines (2 a 7). RA0 a RA5. PORTB: 8 pines (33 a 40). RB0 a RB7. PORTC: 8 pines (15 a 18 y 23 a 26). RC0 a RC7. PORTD: 8 pines (19 a 22 y 27 a 30). RD0 a RD7. PORTE: 3 pines. (8 a 10). RE0 a RE2. En resumen tenemos 33 patillas de entrada y salida. Cada una de ellas puede ser configurada como entrada para recibir datos o como salidas para gobernar dispositivos externos.

C2
5V 22pF

C6
100nF

C1
22pF

X1 U1
CRYST AL 4MHz 5V 13 14 1 2 3 4 5 6 7 8 9 10 OSC1/CLKIN OSC2/CLKOUT MCLR/Vpp/T HV RA0/AN0 RA1/AN1 RA2/AN2/VREFRA3/AN3/VREF+ RA4/T 0CKI RA5/AN4/SS RE0/AN5/RD RE1/AN6/WR RE2/AN7/CS RB0/INT RB1 RB2 RB3/PGM RB4 RB5 RB6/PGC RB7/PGD RC0/T 1OSO/T 1CKI RC1/T 1OSI/CCP2 RC2/CCP1 RC3/SCK/SCL RC4/SDI/SDA RC5/SDO RC6/T X/CK RC7/RX/DT RD0/PSP0 RD1/PSP1 RD2/PSP2 RD3/PSP3 RD4/PSP4 RD5/PSP5 RD6/PSP6 RD7/PSP7 PIC16F877 33 34 35 36 37 38 39 40 15 16 17 18 23 24 25 26 19 20 21 22 27 28 29 30 5V

R1
330

R2
10k

x8

R5
330

RESET

BAT1

U2 D1
IN4007 7805 1 VI GND VO 3

9V

C3
100nF

C4
1000uF/25V

C5
100uF/16V

El diodo LED es un dispositivo que permite comprobar el funcionamiento de los circuitos mediante la emisin de luz. El PIC puede gobernar diodos leds, conectando el ctodo del diodo a la salida del microcontrolador y el nodo al positivo de la alimentacin a travs de una resistencia limitadora de corriente. En este caso el LED se ilumina con un nivel lgico bajo (0 V). Otra forma de encender el LED es conectando el nodo del diodo a la salida del microcontrolador a travs de una resistencia, y el ctodo a tierra, el LED se ilumina con un nivel alto de salida (5 V).

5V

D5

R7
330

Nivel lgico bajo, 0 v


MICROCONTROLADOR

D6 R6

Nivel lgico alto, 5 v

330

La memoria RAM de datos del microcontrolador est particionada en mltiples bancos, los cuales contienen los Registros de Funciones Especiales. Para tener claro como debemos empezar a programar se debe conocer la tabla de registros. Esta tabla est dividida en 4 bancos.

PUERTOS DE ENTRADA/SALIDA (I/O PORTS)


Los puertos del microcontrolador son puertos bidireccionales, es decir, pueden ser configurados como puertos de entrada o de salida digital, capaz de sensar o producir seales binarias 1 0 (5V 0V respectivamente). El puerto A tiene un ancho de 6 bits (6 pines). La asignacin de pines como entradas o salidas digitales del puerto A, se hace programando el registro llamado TRISA. En este registro se almacenan los bits que asignan los pines del puerto A como entradas o salidas. Si se asigna un 0 a un pin este ser configurado como salida (Output), mientras que si se asigna un 1 a un pin este ser configurado como entrada (Input).

C2
5V 22pF

C6 PUERTOS DE ENTRADA SALIDA (I/O PORTS)

100nF As mismo, los registros TRISB, TRISC, TRISD y TRISE se utilizan para configurar los puertos B (de 8 bits), C (de 8 bits), D (de 8 bits) y E (de 3 bits) respectivamente. 22pF

C1

Ejemplo:
U1
OSC1/CLKIN TRISB CRYSTAL = 0b00000000; OSC2/CLKOUT 4MHz // se configuraMCLR/Vpp/THV B el puerto // como salida para poder 2 RA0/AN0 R2 3 // encender los LEDs. RA1/AN1 13 14 1 10k 4 5 6 7 RA2/AN2/VREFRA3/AN3/VREF+ RA4/T0CKI RA5/AN4/SS RB0/INT RB1 RB2 RB3/PGM RB4 RB5 RB6/PGC RB7/PGD RC0/T1OSO/T 1CKI RC1/T1OSI/CCP2 RC2/CCP1 RC3/SCK/SCL RC4/SDI/SDA RC5/SDO RC6/TX/CK RC7/RX/DT RD0/PSP0 RD1/PSP1 RD2/PSP2 RD3/PSP3 RD4/PSP4 RD5/PSP5 RD6/PSP6 RD7/PSP7 33 34 35 36 37 38 39 40 15 16 17 18 23 24 25 26 19 20 21 22 27 28 29 30

X1

R1
330

x8

Los registros PORTA, 8 RE0/AN5/RD PORTB, PORTC, PORTD y PORTE, contienen el estado de los 9 RE1/AN6/WR 10 pines 330 entrada/salida correspondiente. de RE2/AN7/CS RESET Ejemplo: PORTB = 0b00001111;

R5

// Los pines RB0 a RB3 tienen 5 V y los pines RB4 a RB7 // tienen 0 V. Slo se encienden 4 LEDs.

PIC16F877

5V

PUERTOS DE ENTRADA SALIDA (I/O PORTS)


Existen varios formatos para asignarle un valor constante a un registro:

Definicin del valor constante Decimal Hexadecimal Binario

Formato ## 0x## 0b########

Ejemplo TRISB=73; TRISB=0x49; TRISB=0b01001001;

PUERTOS DE ENTRADA SALIDA (I/O PORTS)


En ocasiones slo es necesario configurar slo algunos pines de un puerto y no todo el puerto. Para esto los bits de los registros TRIS se pueden referenciar como TRIS&#, donde & representa el puerto y # el pin de ese puerto. Por ejemplo: TRISB4 = 0 ; // configura el pin 4 del puerto B como salida. TRISC5 = 0; // configura el pin 5 del puerto C como salida.

Para leer (sensar) o escribir (enviar) seales slo en algunos pines de entrada/salida , estos se pueden referenciar usando el formato R&# , donde & representa el puerto y # representa el pin del puerto. Por ejemplo: RB4=0; RC5=1; // enva 0V por el pin 4 del puerto B, se enciende el LED. // enva 5V por el pin 5 del puerto C, se enciende el LED.
5V

D5

RB4 Nivel lgico bajo, 0 v


MICROCONTROLADOR

R7
330

D6 R6
330

RC5 Nivel lgico alto, 5 v

// Ejemplo1 #include<htc.h> #include"delay.h" #include <pic.h> __CONFIG(0b11111100110001);


X1

C2
5V 22pF

C6
100nF

C1
22pF

void main() { unsigned int tiempo=250; TRISB=0; // Puerto B como salida while(1==1){ PORTB=0b00000010; DelayMs(tiempo); //PORTB=0b00000010; PORTB=0x02; DelayMs(tiempo); //PORTB=0b00000100; PORTB=0x04; DelayMs(tiempo); PORTB=0b00001000; DelayMs(tiempo); PORTB=0b00010000; DelayMs(tiempo); PORTB=0b00100000; DelayMs(tiempo); PORTB=0b01000000; DelayMs(tiempo); PORTB=0b10000000; DelayMs(tiempo);

U1
CRYST AL 4MHz 5V 13 14 1 2 3 4 5 6 7 8 9 10 OSC1/CLKIN OSC2/CLKOUT MCLR/Vpp/T HV RA0/AN0 RA1/AN1 RA2/AN2/VREFRA3/AN3/VREF+ RA4/T 0CKI RA5/AN4/SS RE0/AN5/RD RE1/AN6/WR RE2/AN7/CS RB0/INT RB1 RB2 RB3/PGM RB4 RB5 RB6/PGC RB7/PGD RC0/T 1OSO/T 1CKI RC1/T 1OSI/CCP2 RC2/CCP1 RC3/SCK/SCL RC4/SDI/SDA RC5/SDO RC6/T X/CK RC7/RX/DT RD0/PSP0 RD1/PSP1 RD2/PSP2 RD3/PSP3 RD4/PSP4 RD5/PSP5 RD6/PSP6 RD7/PSP7 PIC16F877 33 34 35 36 37 38 39 40 15 16 17 18 23 24 25 26 19 20 21 22 27 28 29 30 5V

R1
330

R2
10k

x8

R5
330

RESET

BAT1

U2 D1
IN4007 7805 1 VI GND VO 3

9V

C3
100nF

C4
1000uF/25V

C5
100uF/16V

PUERTOS DE ENTRADA SALIDA (I/O PORTS)


Resumen de registros asociados con los puertos del microcontrolador. PUERTOA Bit 7 registros PORTA TRISA PUERTOB registros PORTB TRISB PUERTOC Registros PORTC TRISC --Bit 7 RB7 TRISB7 Bit 7 RC7 TRISC7 Bit 6 --Bit 6 RB6 TRISB6 Bit 6 RC6 TRISC6 Bit 5 RA5 TRISA5 Bit 5 RB5 TRISB5 Bit 5 RC5 TRISC5 Bit 4 RA4 TRISA4 Bit 4 RB4 TRISB4 Bit 4 RC4 TRISC4 Bit 3 RA3 TRISA3 Bit 3 RB3 TRISB3 Bit 3 RC3 TRISC3 Bit 2 RA2 TRISA2 Bit 2 RB2 TRISB2 Bit 2 RC2 TRISC2 Bit 1 RA1 TRISA1 Bit 1 RB1 TRISB1 Bit 1 RC1 TRISC1 Bit 0 RA0 TRISA0 Bit 0 RB0 TRISB0 Bit 0 RC0 TRISC0

PUERTOS DE ENTRADA SALIDA (I/O PORTS)


Resumen de registros asociados con los puertos del microcontrolador. PUERTOD Registros PORTD
TRISD

Bit 7 RD7
TRISD7

Bit 6 RD6
TRISD6

Bit 5 RD5
TRISD5

Bit 4 RD4
TRISD4

Bit 3 RD3
TRISD3

Bit 2 RD2
TRISD2

Bit 1 RD1
TRISD1

Bit 0 RD0
TRISD0

PUERTOE Registros PORTE TRISE

Bit 7 ---

Bit 6 ---

Bit 5 ---

Bit 4 ---

Bit 3 ---

Bit 2 RE2 TRISE2

Bit 1 RE1 TRISE1

Bit 0 RE0 TRISE0

Palabra de configuracin. Puede ser programada para seleccionar varias opciones del dispositivo. Bit 13
CP

Bit 12
--

Bit 11
DEBUG

Bit 10
WRT1

Bit 9 Bit 8 Bit 7 Bit 6


WRT0 CDP LVP BOREN

Bit 5
--

Bit 4
--

Bit 3
PWRTEN

Bit 2
WDTEN

Bit 1 Bit 0
Fosc1 Fosc2

1 3

1 F

1 3

1 1

Palabra de configuracin // Fosc0-Fosc1: Oscilador de cristal // WDTEN: Watchdog timer. (0) deshabilitado // PWRTEN: Timer de encendido. (0) habilitado // BORDEN: Reset por bajo voltaje. (0) deshabilitado // LVP: Programacion en bajo voltaje. (0) deshabilitado // CDP: Proteccin de cdigo en memoria EEPROM. (1) deshabilitado // WRT0- WRT1: Proteccin contra escritura. (1 1) deshabilitado. // DEBUG: depuracin de cdigo con el uC conectado al resto del circuito. (1) deshabilitado // CP: Proteccin de cdigo en la memoria Flash. (1) deshabilitado.

Para editar el programa se hace uso de MPLAB, software proporcionado por Microchip, si se edita el programa en lenguaje C, el archivo que se genera tiene extensin .c .

Iniciar el asistente de proyecto.

Clic en siguiente.

Seleccionar el PIC 16F877A

Seleccionar el compilador HI-TECH C Compiler

Crear nuevo proyecto. Clic en Browse. Escribir nombre del proyecto (ejemplo1.mcp) y clic en Guardar.

Clic en siguiente.

Se ha creado el proyecto, clic en finalizar.

Crear un nuevo archivo.

Capturar el programa. Guardar el programa como ejemplo1.c y activar la casilla Add file to project.

Agregar la librera htc.h. Clic derecho en Header Files de la ventana de proyecto. Seleccionar la librera de D:\Archivos de programa\HI-TECH Software\PICC\9.71a\include

Copiar los archivos delay.c y delay.h de la carpeta C:\Program files\HITECH Software \ PICC \ lite \ 9.71a \ samples \ LCDemo en la carpeta del cdigo fuente y agregarlos al proyecto.

Compilar el proyecto. Clic en el botn Build project.

Grabacin de PICs con PIC-600 y USBURN. Grabar el programa del ejemplo al PIC16F877A. Conectar el grabador PIC600 a la computadora. Insertar el microcontrolador en el zcalo ZIF (zero insertion force). Verificar la orientacin del microcontrolador. Ejecutar el programa USBURN. En la seccion IC-Socket / ICSP, seleccionar la opcin 28/40 Pins.

Clic en Identify PIC in Programmer.

Clic en Select HEX File as source.

Clic en write FEX-File into PIC.

///////// EJEMPLO 2 #include<htc.h> #include"delay.h" #include <pic.h> __CONFIG(0x3F31); void main() { int tiempo=250; TRISC=0xFF; TRISB=0;

C2
22pF

C6
100nF

C1
22pF

// Puerto C como //entrada // Puerto B como salida

X1 U1
CRYSTAL 4MHz 5V 13 14 1 2 3 4 5 6 7 8 9 10 OSC1/CLKIN OSC2/CLKOUT MCLR/Vpp/THV RA0/AN0 RA1/AN1 RA2/AN2/VREFRA3/AN3/VREF+ RA4/T 0CKI RA5/AN4/SS RE0/AN5/RD RE1/AN6/WR RE2/AN7/CS RB0/INT RB1 RB2 RB3/PGM RB4 RB5 RB6/PGC RB7/PGD RC0/T 1OSO/T1CKI RC1/T 1OSI/CCP2 RC2/CCP1 RC3/SCK/SCL RC4/SDI/SDA RC5/SDO RC6/T X/CK RC7/RX/DT RD0/PSP0 RD1/PSP1 RD2/PSP2 RD3/PSP3 RD4/PSP4 RD5/PSP5 RD6/PSP6 RD7/PSP7 PIC16F877 33 34 35 36 37 38 39 40 15 16 17 18 23 24 25 26 19 20 21 22 27 28 29 30 5V 1 2 3 4 5 6 7 8 SW-DIP8

5V

R1
330

while(1==1){ if(RC1==0){ PORTB=0b00000001; DelayMs(tiempo); PORTB=0b00000010; DelayMs(tiempo); PORTB=0b00000100; DelayMs(tiempo); PORTB=0b00001000; DelayMs(tiempo); PORTB=0b00010000; DelayMs(tiempo); PORTB=0b00100000; DelayMs(tiempo); PORTB=0b01000000; DelayMs(tiempo); PORTB=0b10000000; DelayMs(tiempo); } else if(RC1==1){ PORTB=0b10000000; DelayMs(tiempo); PORTB=0b01000000; DelayMs(tiempo); PORTB=0b00100000; DelayMs(tiempo); PORTB=0b00010000; DelayMs(tiempo); PORTB=0b00001000; DelayMs(tiempo); PORTB=0b00000100; DelayMs(tiempo); PORTB=0b00000010; DelayMs(tiempo); PORTB=0b00000001; DelayMs(tiempo); } } }

R2
10k

x8

R5
330

10k

RESET

SW1
16 15 14 13 12 11 10 9

BAT1

U2 D1
IN4007 7805 1 VI GND VO 3

9V

C3
100nF

C4
1000uF/25V

C5
100uF/16V

5V

R?

///////// EJEMPLO 2 #include<htc.h> #include"delay.h" #include <pic.h> __CONFIG(0x3F31); void main() { int tiempo=250; TRISC=0b11111111; TRISB=0;

C2
22pF

C6
100nF

C1
22pF

// Puerto C como //entrada // Puerto B como salida

X1 U1
CRYSTAL 4MHz 5V 13 14 1 2 3 4 5 6 7 8 9 10 OSC1/CLKIN OSC2/CLKOUT MCLR/Vpp/THV RA0/AN0 RA1/AN1 RA2/AN2/VREFRA3/AN3/VREF+ RA4/T 0CKI RA5/AN4/SS RE0/AN5/RD RE1/AN6/WR RE2/AN7/CS RB0/INT RB1 RB2 RB3/PGM RB4 RB5 RB6/PGC RB7/PGD RC0/T 1OSO/T1CKI RC1/T 1OSI/CCP2 RC2/CCP1 RC3/SCK/SCL RC4/SDI/SDA RC5/SDO RC6/T X/CK RC7/RX/DT RD0/PSP0 RD1/PSP1 RD2/PSP2 RD3/PSP3 RD4/PSP4 RD5/PSP5 RD6/PSP6 RD7/PSP7 PIC16F877 33 34 35 36 37 38 39 40 15 16 17 18 23 24 25 26 19 20 21 22 27 28 29 30 5V 1 2 3 4 5 6 7 8 SW-DIP8

5V

R1
330

while(1==1){ if(RC1==0){ PORTB=0b00000001; DelayMs(tiempo); PORTB=0b00000010; DelayMs(tiempo); PORTB=0b00000100; DelayMs(tiempo); PORTB=0b00001000; DelayMs(tiempo); PORTB=0b00010000; DelayMs(tiempo); PORTB=0b00100000; DelayMs(tiempo); PORTB=0b01000000; DelayMs(tiempo); PORTB=0b10000000; DelayMs(tiempo); } else if(RC1==1){ PORTB=0b10000000; DelayMs(tiempo); PORTB=0b01000000; DelayMs(tiempo); PORTB=0b00100000; DelayMs(tiempo); PORTB=0b00010000; DelayMs(tiempo); PORTB=0b00001000; DelayMs(tiempo); PORTB=0b00000100; DelayMs(tiempo); PORTB=0b00000010; DelayMs(tiempo); PORTB=0b00000001; DelayMs(tiempo); } } }

R2
10k

x8

R5
330

10k

RESET

SW1
16 15 14 13 12 11 10 9

BAT1

U2 D1
IN4007 7805 1 VI GND VO 3

9V

C3
100nF

C4
1000uF/25V

C5
100uF/16V

5V

R?

// los segmentos se encienden con 0 logico dado por el pic // se muestran los digitos 0 al 3 en el display #include<htc.h> #include<pic.h> #include"delay.h" __CONFIG(0x3F31);

void main() { const int numeros7seg[]={0b11000000, 0b11111001,0b10100100,0b10110000}; int tiempo=250; int c=0;

TRISC=0; // puerto C como salidas while(1==1){ c=0; while(c<=3){ PORTC=numeros7seg[c]; DelayMs(tiempo);DelayMs(tiempo); c=c+1; }

Das könnte Ihnen auch gefallen