Programación de microcontroladores PIC16f877a en linux Dia 3 Por: Ing. Fernando E. Serrano...
-
Upload
angeles-santos-villanueva -
Category
Documents
-
view
216 -
download
1
Transcript of Programación de microcontroladores PIC16f877a en linux Dia 3 Por: Ing. Fernando E. Serrano...
![Page 1: Programación de microcontroladores PIC16f877a en linux Dia 3 Por: Ing. Fernando E. Serrano E-mail:serranofer@ieee.org.](https://reader035.fdocuments.net/reader035/viewer/2022062808/56a188a41a28abe545957a0c/html5/thumbnails/1.jpg)
Programación de microcontroladores PIC16f877a en linux
Dia 3Por: Ing. Fernando E. SerranoE-mail:[email protected]
![Page 2: Programación de microcontroladores PIC16f877a en linux Dia 3 Por: Ing. Fernando E. Serrano E-mail:serranofer@ieee.org.](https://reader035.fdocuments.net/reader035/viewer/2022062808/56a188a41a28abe545957a0c/html5/thumbnails/2.jpg)
PIC16F877A
![Page 3: Programación de microcontroladores PIC16f877a en linux Dia 3 Por: Ing. Fernando E. Serrano E-mail:serranofer@ieee.org.](https://reader035.fdocuments.net/reader035/viewer/2022062808/56a188a41a28abe545957a0c/html5/thumbnails/3.jpg)
CaracteristicasCaracteristica PIC16F877A
Frecuencia de operación 20 MHz
Memoria flash de programa 8K
Memoria de datos (Bytes) 368
Memoria EEPROM (Bytes) 256
Interrupciones 15
Puertos entrada/salida A,B,C,D,E
Temporizadores 3
Módulo captura/comparación/PWM 2
Comunicacion serie MSSP/USART
Comunicación paralela PSP
Modulo de conversión analoga-digital 10 bits
8
Comparadores analogos 2
Conjunto de instrucciones 35
Ciclo de instruccion 200 ns
![Page 4: Programación de microcontroladores PIC16f877a en linux Dia 3 Por: Ing. Fernando E. Serrano E-mail:serranofer@ieee.org.](https://reader035.fdocuments.net/reader035/viewer/2022062808/56a188a41a28abe545957a0c/html5/thumbnails/4.jpg)
Diagrama de bloques
![Page 5: Programación de microcontroladores PIC16f877a en linux Dia 3 Por: Ing. Fernando E. Serrano E-mail:serranofer@ieee.org.](https://reader035.fdocuments.net/reader035/viewer/2022062808/56a188a41a28abe545957a0c/html5/thumbnails/5.jpg)
Memoria de programa
![Page 6: Programación de microcontroladores PIC16f877a en linux Dia 3 Por: Ing. Fernando E. Serrano E-mail:serranofer@ieee.org.](https://reader035.fdocuments.net/reader035/viewer/2022062808/56a188a41a28abe545957a0c/html5/thumbnails/6.jpg)
Memoria de datos (Registros)
![Page 7: Programación de microcontroladores PIC16f877a en linux Dia 3 Por: Ing. Fernando E. Serrano E-mail:serranofer@ieee.org.](https://reader035.fdocuments.net/reader035/viewer/2022062808/56a188a41a28abe545957a0c/html5/thumbnails/7.jpg)
Partes del PIC16F877A PORTA
Es un puerto de 6 bits configurable como entrada o salida.
PORTB Es un puerto de ocho bits configurable como
entradas o salidas. PORTC
Es un puerto de ocho bits configurable como entradas o salidas.
PORTD Es un puerto con entradas con disparador
Schmitt, que pueden configurarse como entradas y salidas.
PORTE Tiene tres pines los cuales se configuran
como entrada y salidas individualmente.
![Page 8: Programación de microcontroladores PIC16f877a en linux Dia 3 Por: Ing. Fernando E. Serrano E-mail:serranofer@ieee.org.](https://reader035.fdocuments.net/reader035/viewer/2022062808/56a188a41a28abe545957a0c/html5/thumbnails/8.jpg)
Partes del PIC16F877A
TIMER0 Es un temporizador que se puede usar con
entradas externas o internas. TIMER1
Es un temporizador de 16 bits. TIMER2
Es un temporizador de 8 bits con un prescalador y post escalador.
CAPTURA/COMPARACION/PWM Registro de captura de 16 bits. Registro de comparacion de 16 bits. Generador de PWM amo/esclavo.
MASTER SYNCRONOUS SERIAL PORT MODULE
Tiene tres pines los cuales se configuran como entrada y salidas individualmente.
![Page 9: Programación de microcontroladores PIC16f877a en linux Dia 3 Por: Ing. Fernando E. Serrano E-mail:serranofer@ieee.org.](https://reader035.fdocuments.net/reader035/viewer/2022062808/56a188a41a28abe545957a0c/html5/thumbnails/9.jpg)
Partes del PIC16F877A
ADDRESSABLE UNIVERSAL SYNCHRONOUS ASYNCHRONOUS RECEIVER TRANSMITTER (USART)
Se utiliza para la comunicación en serie con otros dispositivos como PC's.
ANALOG-TO-DIGITAL CONVERTER (A/D) MODULE
Convertidor analogo a digital.
![Page 10: Programación de microcontroladores PIC16f877a en linux Dia 3 Por: Ing. Fernando E. Serrano E-mail:serranofer@ieee.org.](https://reader035.fdocuments.net/reader035/viewer/2022062808/56a188a41a28abe545957a0c/html5/thumbnails/10.jpg)
Partes del PIC16F877A
TIMER0 Es un temporizador que se puede usar con
entradas externas o internas. TIMER1
Es un temporizador de 16 bits. TIMER2
Es un temporizador de 8 bits con un prescalador y post escalador.
CAPTURA/COMPARACION/PWM Registro de captura de 16 bits. Registro de comparacion de 16 bits. Generador de PWM amo/esclavo.
MASTER SYNCRONOUS SERIAL PORT MODULE
Tiene tres pines los cuales se configuran como entrada y salidas individualmente.
![Page 11: Programación de microcontroladores PIC16f877a en linux Dia 3 Por: Ing. Fernando E. Serrano E-mail:serranofer@ieee.org.](https://reader035.fdocuments.net/reader035/viewer/2022062808/56a188a41a28abe545957a0c/html5/thumbnails/11.jpg)
Partes del PIC16F877A
TIMER0 Es un temporizador que se puede usar con
entradas externas o internas. TIMER1
Es un temporizador de 16 bits. TIMER2
Es un temporizador de 8 bits con un prescalador y post escalador.
CAPTURA/COMPARACION/PWM Registro de captura de 16 bits. Registro de comparacion de 16 bits. Generador de PWM amo/esclavo.
MASTER SYNCRONOUS SERIAL PORT MODULE
Tiene tres pines los cuales se configuran como entrada y salidas individualmente.
![Page 12: Programación de microcontroladores PIC16f877a en linux Dia 3 Por: Ing. Fernando E. Serrano E-mail:serranofer@ieee.org.](https://reader035.fdocuments.net/reader035/viewer/2022062808/56a188a41a28abe545957a0c/html5/thumbnails/12.jpg)
Configuración del temporizador 0 TIMER0
La interrupción TMR0 es generada cuando el registro TMR0 se desborda de FFh a 00h. Este desborde pone el bit TMR0IF (INTCON<2>) a 1. El bit TMR0IF (INTCON<2>) debe ponerse a cero al salir debe ser puesta a cero en software por la interrupción del timer0.
![Page 13: Programación de microcontroladores PIC16f877a en linux Dia 3 Por: Ing. Fernando E. Serrano E-mail:serranofer@ieee.org.](https://reader035.fdocuments.net/reader035/viewer/2022062808/56a188a41a28abe545957a0c/html5/thumbnails/13.jpg)
Configuración del temporizador 0 TIMER0
El temporizador 0 TIMER0 tiene las siguientes características
Temporizador/contador de 8 bits Lectura y escritura Selección de reloj externo e interno. Interrupción en desbordamiento de FFh a
00h
![Page 14: Programación de microcontroladores PIC16f877a en linux Dia 3 Por: Ing. Fernando E. Serrano E-mail:serranofer@ieee.org.](https://reader035.fdocuments.net/reader035/viewer/2022062808/56a188a41a28abe545957a0c/html5/thumbnails/14.jpg)
Configuración del temporizador 0 TIMER0
Prescaler El prescaler es un divisor de frecuencia que
se utiliza para el timer 0 tanto como temporizador como contador.
Este se configura modificando los siguientes bits del registro option_reg
![Page 15: Programación de microcontroladores PIC16f877a en linux Dia 3 Por: Ing. Fernando E. Serrano E-mail:serranofer@ieee.org.](https://reader035.fdocuments.net/reader035/viewer/2022062808/56a188a41a28abe545957a0c/html5/thumbnails/15.jpg)
Configuración del temporizador 0 TIMER0
Prescaler El prescaler es un divisor de frecuencia que
se utiliza para el timer 0 tanto como temporizador como contador.
Este se configura modificando los siguientes bits del registro option_reg
![Page 16: Programación de microcontroladores PIC16f877a en linux Dia 3 Por: Ing. Fernando E. Serrano E-mail:serranofer@ieee.org.](https://reader035.fdocuments.net/reader035/viewer/2022062808/56a188a41a28abe545957a0c/html5/thumbnails/16.jpg)
Configuración del temporizador 0 TIMER0 OPTION_REG
![Page 17: Programación de microcontroladores PIC16f877a en linux Dia 3 Por: Ing. Fernando E. Serrano E-mail:serranofer@ieee.org.](https://reader035.fdocuments.net/reader035/viewer/2022062808/56a188a41a28abe545957a0c/html5/thumbnails/17.jpg)
Configuración del temporizador 0 TIMER0 OPTION_REG
Donde se debe poner el bit PSA del registro option_reg a 1 para asignarlo al temporizador watchdog y a 0 para asignarlo al TIMER0.
El bit T0CS del OPTION_REG debe estar en cero para activar el TIMER0 como temporizador o en uno como contador.
![Page 18: Programación de microcontroladores PIC16f877a en linux Dia 3 Por: Ing. Fernando E. Serrano E-mail:serranofer@ieee.org.](https://reader035.fdocuments.net/reader035/viewer/2022062808/56a188a41a28abe545957a0c/html5/thumbnails/18.jpg)
Configuración del temporizador 0 TIMER0 INTCON
El bit 6 (PEIE) del registro INTCON debe estar a 1 para habilitar todas las interrupciones .
El bit 5 (TMR0IE) del INTCON debe estar a 1 para habilitar todas la interrupción del TIMER0.
El bit 7 (GIE) del INTCON debe estar a 1 para habilitar todas las interrupciones.
![Page 19: Programación de microcontroladores PIC16f877a en linux Dia 3 Por: Ing. Fernando E. Serrano E-mail:serranofer@ieee.org.](https://reader035.fdocuments.net/reader035/viewer/2022062808/56a188a41a28abe545957a0c/html5/thumbnails/19.jpg)
Configuración generador de PWM (Pulse Width Modulation)
El generador de PWM sirve para generar pulsos con modulación de anchura el cual se utiliza para variar la velocidad en motores ya sea de corriente directa o corriente continua. Para configurarlo se necesita el TIMER2. Para esto los pines CCPx se deben configurar como salidas estos están en el puerto C. Por lo que se debe configurar CCP2 como salida poniendo a cero el bit TRISC<1>
![Page 20: Programación de microcontroladores PIC16f877a en linux Dia 3 Por: Ing. Fernando E. Serrano E-mail:serranofer@ieee.org.](https://reader035.fdocuments.net/reader035/viewer/2022062808/56a188a41a28abe545957a0c/html5/thumbnails/20.jpg)
Periodo PWM
Periodo PWM=(PR2+1)*4*Tosc*(TMR2 prescale value)
![Page 21: Programación de microcontroladores PIC16f877a en linux Dia 3 Por: Ing. Fernando E. Serrano E-mail:serranofer@ieee.org.](https://reader035.fdocuments.net/reader035/viewer/2022062808/56a188a41a28abe545957a0c/html5/thumbnails/21.jpg)
Ciclo de duración PWM
CD PWM=(CCPR2L:CCP2CON<5:4>) •TOSC • (TMR2 Prescale Value)
![Page 22: Programación de microcontroladores PIC16f877a en linux Dia 3 Por: Ing. Fernando E. Serrano E-mail:serranofer@ieee.org.](https://reader035.fdocuments.net/reader035/viewer/2022062808/56a188a41a28abe545957a0c/html5/thumbnails/22.jpg)
Pasos para configurar el generador PWM
Poner el bit 2 (TMR2ON) del T2CON a 1 y los bit 0 y 1 del T2CON de acuerdo a la tabla en la siguiente diapositiva.
Asigne el periodo PWM escribiendo en el registro PR2.
Asigne el ciclo de duracion PWM escribiendo en el registro CCPR2L y CCP2CON<5:4>
Configurar el pin CCP2 poniendo a cero el bit TRISC<1>
Configure el modulo CCP2 para la operación en PWM en CCP2CON bit 3-0 con 11xx
![Page 23: Programación de microcontroladores PIC16f877a en linux Dia 3 Por: Ing. Fernando E. Serrano E-mail:serranofer@ieee.org.](https://reader035.fdocuments.net/reader035/viewer/2022062808/56a188a41a28abe545957a0c/html5/thumbnails/23.jpg)
Pasos para configurar el generador PWM
![Page 24: Programación de microcontroladores PIC16f877a en linux Dia 3 Por: Ing. Fernando E. Serrano E-mail:serranofer@ieee.org.](https://reader035.fdocuments.net/reader035/viewer/2022062808/56a188a41a28abe545957a0c/html5/thumbnails/24.jpg)
![Page 25: Programación de microcontroladores PIC16f877a en linux Dia 3 Por: Ing. Fernando E. Serrano E-mail:serranofer@ieee.org.](https://reader035.fdocuments.net/reader035/viewer/2022062808/56a188a41a28abe545957a0c/html5/thumbnails/25.jpg)
Programacion en C para el PIC16F877A
#include <pic16f877.h>
int main(){
Return 0; }
![Page 26: Programación de microcontroladores PIC16f877a en linux Dia 3 Por: Ing. Fernando E. Serrano E-mail:serranofer@ieee.org.](https://reader035.fdocuments.net/reader035/viewer/2022062808/56a188a41a28abe545957a0c/html5/thumbnails/26.jpg)
Programacion en C para el PIC16F877A
Para modificar los registros estos están almacenados en variables por ejemplo
#include <pic16f877.h>
int main(){ TRISA=0x0C; PORTA=0x01; Return 0; }
![Page 27: Programación de microcontroladores PIC16f877a en linux Dia 3 Por: Ing. Fernando E. Serrano E-mail:serranofer@ieee.org.](https://reader035.fdocuments.net/reader035/viewer/2022062808/56a188a41a28abe545957a0c/html5/thumbnails/27.jpg)
Programacion en C para el PIC16F877A-Interrupciones
#include <pic16f877.h>
void isr(void) __interrupt n { ... } Donde n es el número de interrupción.
![Page 28: Programación de microcontroladores PIC16f877a en linux Dia 3 Por: Ing. Fernando E. Serrano E-mail:serranofer@ieee.org.](https://reader035.fdocuments.net/reader035/viewer/2022062808/56a188a41a28abe545957a0c/html5/thumbnails/28.jpg)
http://sdcc.sourceforge.net/http://gputils.sourceforge.net/http://gsim.sourceforge.net/http://www.utp.edu.co/~eduque/arquitec/Instruc%20877.pdf
Referencias