Descargar la presentación
La descarga está en progreso. Por favor, espere
1
CURSO BÁSICO DE MICROCONTROLADORES
(PIC16F877A)
2
SISTEMA BÁSICO DE CÓMPUTO
BUS DE DATOS CPU BUS DE DIRECCIONES MEMORIA E/S BUS DE CONTROL Curso básico de microcontroladores (PIC16F877A)
3
SISTEMA BÁSICO DE CÓMPUTO
CPU (Unidad de Control y Proceso).- Realiza las operaciones Aritméticas y lógicas que requiere la ejecución del programa. MEMORIA.- Dispositivos de almacenamiento temporal o permanente de datos e instrucciones del programa. DISPOSITIVOS DE ENTRADA/SALIDA.- Permiten la comunicación de datos con los periféricos del sistema. Curso básico de microcontroladores (PIC16F877A)
4
SISTEMA BÁSICO DE CÓMPUTO
Bus de datos.- Conjunto de líneas que permiten el intercambio de datos entre el CPU y los módulos de memoria y dispositivos E/S. Pueden ser de 8, 16 o 32 bits. Bus de direcciones.- Conjunto de líneas a través de las cuales el CPU envía la dirección de la localidad o dispositivo de E/S que requiere accesar. Bus de control.- Conjunto de líneas a través de las cuales el CPU coordina el intercambio de datos y direcciones con los módulos de memoria y E/S, por medio de señales de lectura (RD), escritura (WR), selección (CS), etc. Curso básico de microcontroladores (PIC16F877A)
5
MICROPROCESADOR Y MICROCONTROLADOR
Microprocesador.- Dispositivo que contiene la unidad de control y proceso de un sistema de cómputo y requiere la implementación externa de los módulos de memoria, E/S y los buses de datos, direcciones y control. Microcontrolador.- Dispositivo que contiene en un solo chip el CPU, memoria de datos, memoria del programa y módulos de E/S. Curso básico de microcontroladores (PIC16F877A)
6
EL MICROCONTROLADOR PIC16F877A
Curso básico de microcontroladores (PIC16F877A)
7
MICROCONTROLADOR PIC16F877A
CARACTERÍSTICAS DEL MICROCONTROLADOR PIC16F877A Set de 35 instrucciones. Todas las instrucciones se ejecutan en un ciclo de instrucción, excepto las de saltos que toman 2 ciclos. Velocidad de operación: DC-20Mhz. reloj de entrada. DC-200ns. ciclo de instrucción. Memoria del programa: 8 K, flash (14 bits) locs. Memoria de datos: 368 x 8 bits de memoria RAM. Memoria de datos EEPROM: 256 x 8 bytes. Curso básico de microcontroladores (PIC16F877A)
8
DISPOSITIVOS DE E/S (PERIFÉRICOS)
- PUERTOS DIGITALES: A (6 bits), B (8 bits), C (8 bts), D (8 bits), E (3 bits) todos ellos programables bit a bit. TIMER 0: Timer/Contador de 8 bits con preescalador programable de 8 bits. TIMER 1: Timer/Contador de 16 bits con preescalador programable. Puede funcionar en el estado sleep. TIMER 2: Timer/Contador de 8 bits con preescalador y postescalador programables. 2 módulos de Captura, Comparación y Modulación de ancho de pulso (PWM). Universal Synchronous Asinchronous Receiver Transmiter (USART/SCI). Curso básico de microcontroladores (PIC16F877A)
9
DISPOSITIVOS DE E/S (PERIFÉRICOS)
Puerto paralelo esclavo (PPS), con señales de control RD, WR, y CS. Convertidor Analógico/Digital (A/D) de 10 bits y 8 canales de entrada. 2 comparadores analógicos con voltaje de referencia (Vref) programable, con salidas externamente accesibles. Curso básico de microcontroladores (PIC16F877A)
10
CARACTERÍSTICAS ESPECIALES
100,000 ciclos borrado/escritura para la memoria flash. 1,000,000 ciclos de borrado/escritura para la memoria de datos EEPROM. Retención de datos de la memoria EEPROM > 40 años. Autoprogramable bajo software de control. - In-circuit serial programming (ICSP) por medio de dos pines. Watch Dog Timer (WDT) con su propio circuito RC interno. Protección de código programable. Modo de bajo consumo de energía SLEEP. Opciones del tipo de oscilador a seleccionar. In-circuit debug (ICD) mediante dos pines. Curso básico de microcontroladores (PIC16F877A)
11
ARQUITECTURA DE LA FAMILIA
PIC16FXX. Arquitectura RISC (Reduced Instruction Set Computer): Repertorio de instrucciones pequeño y simple que se ejecutan casi todas en un ciclo de instrucción. Arquitectura Harvard: Se caracteriza por un acceso al programa y datos por separado que proceden de diferentes memorias, lo cual mejora el ancho de banda respecto a la arquitectura Von Newman. Curso básico de microcontroladores (PIC16F877A)
12
ARQUITECTURAS DE COMPUTADORAS
ARQUITECTURA VON NEWMAN Utiliza el mismo dispositivo de almacenamiento tanto para las instrucciones como para los datos y los accesa a través del mismo bus. MEMORIA DE INSTRUCCIONES CPU 8 MEMORIA DE DATOS BUS DEL SISTEMA Curso básico de microcontroladores (PIC16F877A)
13
ARQUITECTURAS DE COMPUTADORAS
ARQUITECTURA HARVARD Utiliza dispositivos de almacenamiento físicamente separados para las instrucciones y para los datos, por lo tanto el acceso de datos e instrucciones se hace por buses separados. MEMORIA DE DATOS MEMORIA DE INSTRUCCIONES CPU 8 8 BUS DE DATOS BUS DE DIREC- CIONES Curso básico de microcontroladores (PIC16F877A)
14
ARQUITECTURA DE LA FAMILIA
PIC16FXX. MEMORIA DE DATOS MEMORIA DE INSTRUCCIONES CPU 8 14 BUS DE DATOS BUS DEL PROGRAMA Curso básico de microcontroladores (PIC16F877A)
15
ARQUITECTURA DE LA FAMILIA
PIC16FXX. MEMORIA RAM (REGISTROS) BUS DE DATOS REGISTRO DE INSTRUCCIONES 8 MPX W ALU 8 Curso básico de microcontroladores (PIC16F877A)
16
ARQUITECTURA DEL PIC16F877A
Curso básico de microcontroladores (PIC16F877A)
17
ARQUITECTURA DEL PIC16F877A
El PIC16F877A consta de 7 bloques fundamentales: 1.- Memoria del programa Flash 8K x 14 bits. 2.- Memoria de datos 368 x 8 bits de memoria RAM. 3.- Bus de datos con una ALU de 8 bits y un registro de trabajo W del que normalmente recibe un operando. El otro operando puede puede provenir del bus de datos o del propio código de la instrucción (literal). 4.- Diversos recursos conectados al bus de datos, tales como puertos de E/S, Timers, etc. 5.- Base de tiempos y circuitos auxiliares. 6.- Direccionamientode la memoria del programa en base al contador del programa (PC), ligado a un stack de 8 niveles. 7.- Direccionamiento directo e indirecto de la memoria RAM. Curso básico de microcontroladores (PIC16F877A)
18
Es la memoria en donde se almacena el programa que será
MEMORIA DEL PROGRAMA Es la memoria en donde se almacena el programa que será ejecutado por el microcontrolador. Esta memoria general- mente es del tipo flash o EEPROM, ya que se requiere que el programa permanezca almacenado aún después de retirar la alimentación del dispositivo. Tiene una capacidad de 8K palabras de 14 bits y está divi- dida en 4 páginas de 2K palabras. Es direccionada por el Contador del Programa (PC) que Tiene un tamaño de 13 bits que puede direccionar desde la localidad 0000h a la 1FFFh. Curso básico de microcontroladores (PIC16F877A)
19
MEMORIA DEL PROGRAMA Curso básico de microcontroladores (PIC16F877A)
20
Físicamente el apuntador del programa se encuentra implemen-
MEMORIA DEL PROGRAMA Físicamente el apuntador del programa se encuentra implemen- tado en dos localidades del espacio de memoria RAM, en donde los 8 bits de menor peso residen en el registro PCL y los bits de mayor peso residen en los 5 bits de menor peso del registro PCLATH. Curso básico de microcontroladores (PIC16F877A)
21
MEMORIA DEL PROGRAMA Curso básico de microcontroladores (PIC16F877A)
22
En las instrucciones GOTO y CALL los 11 bits de menor
MEMORIA DEL PROGRAMA En las instrucciones GOTO y CALL los 11 bits de menor peso del PC provienen del código de la instrucción y los dos bits restantes de los bits PCLATH<4:3>. Curso básico de microcontroladores (PIC16F877A)
23
El stack es una zona aislada de las memorias de instrucciones y
MEMORIA DEL PROGRAMA El stack es una zona aislada de las memorias de instrucciones y datos. Tiene una estructura LIFO, en la que el último valor guar- dado será el primero en salir. Tiene 8 niveles de profundidad y cada uno con 13 bits. La función del stack es almacenar la dirección de retorno al momento de saltar hacia una subrutina, de manera que después de ejecutar una subrutina pueda continuar la ejecución del pro- grama. Curso básico de microcontroladores (PIC16F877A)
24
MEMORIA DEL PROGRAMA SUB1 - - - - - - - - - - - - - - - - - 0150h
PC=0150h - - - - - - - 0157h STACK PC PC=0201h RETURN MAIN - - - - - PC=01FFh 01FFh - PC=0200h 0200h PC=PC STACK PC=SUB1 CALL SUB1 0201h STACK(1)=0201h PC=0150h - - STACK - 0201 - - Curso básico de microcontroladores (PIC16F877A)
25
MEMORIA DEL PROGRAMA SUB2 - - - - - - - - - - - - 0125h PC=0125h -
STACK PC PC=0154h RETURN SUB1 0150h - - PC=0152H - PC=0153H 0153h PC=PC STACK PC=SUB2 CALL SUB2 0154h PC=0125h - STACK(2)=0154h - STACK - 0201h 0157h RETURN 0154h Curso básico de microcontroladores (PIC16F877A)
26
VECTORES RESET E INTERRUPTION
Un vector es una localidad de la memoria del programa cuya dirección es cargada en el PC cuando ocurre un determinado evento. En un vector generalmente se almacena una instrucción GOTO que envía el programa a ejecutar una rutina de servicio o a una localidad de memoria determinada. Curso básico de microcontroladores (PIC16F877A)
27
VECTORES RESET E INTERRUPTION
Vector de RESET.- En el PIC16F877A el vector de RESET se encuentra en la localidad 0000h, que es direccionada por el PC al momento de aplicar la energía al microcontrolador o después de que ocurre un cambio de 0 a 1 en el pin MCLR/Vpp. Generalmente se guarda en el vector de RESET una instrucción de salto incondicional GOTO que manda el programa hacia la primera instrucción del programa principal. Curso básico de microcontroladores (PIC16F877A)
28
VECTORES RESET E INTERRUPTION
0000h GOTO MAIN 0001h - 0002h - 0003h - INT 0004h GOTO SERV_INT MAIN 0005h - 0006h - 0007h - 0008h - 0009h - 000Ah - 000Bh - Curso básico de microcontroladores (PIC16F877A)
29
VECTORES RESET E INTERRUPTION
Vector de INTERRUPCIÓN.- En el PIC16F877A el vector de INTERRUPCIÓN se encuentra en la localidad 0004h, que es direccionada por el PC cuando ocurre un evento que provoca una interrupción. Generalmente se guarda en el vector de INTERRUPCIÓN una instrucción de salto incondicional GOTO que manda el programa hacia la primera instrucción de la rutina de servicio de interrupción. Curso básico de microcontroladores (PIC16F877A)
30
VECTORES RESET E INTERRUPTION
0000h STACK GOTO MAIN 0061h 0001h - 0002h - 0003h - INT 0004h GOTO SERV_INT 0005h - 0006h 2° - 0007h - 1° 0008h - SERV_INT 0009h - 000Ah PC=PC STACK PC=INT - 000Bh - . STACK(1)=0061h PC=0004h - . - . - . PC=SERV_INT PC=0009h RETFIE . - - MAIN 0050h - STACK PC PC=0061h 3° - - - Interrupción 0060h - 0061h - Curso básico de microcontroladores (PIC16F877A)
31
ESTRUCTURA DE UN PROGRAMA
(Template.asm) list p=16F877A ; Indica el modelo de PIC que se usa ; Es una directiva de ensamblador #include <p16F877A.inc> ; definición de registros del microcontrolador ;***** DEFINICIÓN DE VARIABLES VAR EQU x20 VAR EQU x21 . VARn EQU x7F ;********************************************************************** ORG x ; vector de reset goto MAIN ; salta al inicio del programa ; ORG x ; vector de interrupción ; goto INT ; salta a la rutina de servicio ORG x05 SUB ;CÓDIGO DE SUBRUTINA1 return SUB ;CÓDIGO DE SUBRUTINA2 MAIN ;CÓDIGO DEL PROGRAMA PRINCIPAL END ; directiva 'fin del programa' Curso básico de microcontroladores (PIC16F877A)
32
DIRECTIVAS DE ENSAMBLADOR
list p=16F877A ; Indica el modelo de PIC que se usa #include <p16F877A.inc> ; Definición de registros del microcontrolador VAR EQU x20 ; Declara VAR1 en dirección 0x20 ORG x00 ; Asigna dirección inicial para el código ; que se lista a continuación END ; Indica que no hay más código válido a ; continuación Curso básico de microcontroladores (PIC16F877A)
33
PROGRAMA “ SUMA.ASM ” Curso básico de microcontroladores (PIC16F877A)
list p=16F877A ; Indica el modelo de PIC que se usa ; Es una directiva de ensamblador #include <p16F877A.inc> ; definición de registros del microcontrolador ;***** DEFINICIÓN DE VARIABLES OPERANDO1 EQU 0x20 OPERANDO2 EQU 0x21 RESULTADO EQU 0x22 ;********************************************************************** ORG 0x ; vector de reset goto MAIN ; salta al inicio del programa ORG 0x05 MAIN movlw 0x06 movwf OPERANDO1 movlw 0x02 movwf OPERANDO2 movf OPERANDO1,W addwf OPERANDO2,W movwf RESULTADO END ; directiva 'fin del programa' Curso básico de microcontroladores (PIC16F877A)
34
INSTRUCCIONES USADAS EN
“ SUMA.ASM ” goto MAIN ;Salto incondicional a etiqueta MAIN movlw 0x ;Mueve valor inmediato 0x06 a W movwf OPERANDO ;Mueve W a OPERANDO1 movf OPERANDO1,W ;Mueve OPERANDO1 a W addwf OPERANDO2,W ;Suma W y OPERANDO2 Curso básico de microcontroladores (PIC16F877A)
35
Usando el simulador del MPLAB editar el programa
PRÁCTICA # 1 Usando el simulador del MPLAB editar el programa SUMA.ASM y ejecutarlo usando las herramientas de visualización de variables y registros. Curso básico de microcontroladores (PIC16F877A)
36
Portada con la siguiente información: a) Nombre de la escuela
CONTENIDO DEL REPORTE Portada con la siguiente información: a) Nombre de la escuela b) Número y nombre de la práctica c) Integrantes del equipo d) Fecha de entrega Introducción Objetivo de la práctica Material y equipo utilizado Diagrama esquemático del circuito Programa documentado (si incluye programa) Desarrollo de la práctica Conclusiones Curso básico de microcontroladores (PIC16F877A)
37
Es la memoria en donde se almacenan los datos que son
MEMORIA DE DATOS RAM Es la memoria en donde se almacenan los datos que son procesados por el programa. La memoria estática RAM (SRAM) se divide en dos partes de acuerdo a su función: registros de función específica (SFR) y registros de propósito general (GPR). Curso básico de microcontroladores (PIC16F877A)
38
Registros de función específica (SFR).- Son localidades de
MEMORIA DE DATOS RAM Registros de función específica (SFR).- Son localidades de memoria reservadas para los registros que son los encargados del procesador y sus recursos. La función de cada registro ya se encuentra definida. Registros de propósito general (GPR).- Son localidades de memoria en donde se almacenan de manera temporal los datos del programa. Estos datos se manejan y reconocen como varia- bles dentro del programa y son declaradas por el programador. Curso básico de microcontroladores (PIC16F877A)
39
La memoria RAM estática también se encuentra dividida
MEMORIA DE DATOS RAM La memoria RAM estática también se encuentra dividida en 4 bancos con 128 bytes cada uno. En las posiciones iniciales de cada banco se ubican los registros de función específica (SFR) y algunos bancos se encuentran repeti- dos para simplificar su acceso. Curso básico de microcontroladores (PIC16F877A)
40
MEMORIA DE DATOS RAM Curso básico de microcontroladores (PIC16F877A)
41
MEMORIA DE DATOS RAM Curso básico de microcontroladores (PIC16F877A)
42
Para seleccionar el banco al que se desea acceder, se emplean
MEMORIA DE DATOS RAM Para seleccionar el banco al que se desea acceder, se emplean los bits 6 y 5 del registro STATUS, denominados RP1 y RP0 respectivamente, de acuerdo a la tabla siguiente: BANCO RP RP0 Curso básico de microcontroladores (PIC16F877A)
43
Para direccionar la memoria de datos RAM estructurada en
4 bancos de 128 bytes, existen dos modos diferentes: Direccionamiento directo. Direccionamiento indirecto. Curso básico de microcontroladores (PIC16F877A)
44
Direccionamiento directo.- Los bits RP1 y RP0 del registro
MEMORIA DE DATOS RAM Direccionamiento directo.- Los bits RP1 y RP0 del registro STATUS<6:5>, se encargan de seleccionar el banco, mientras que la dirección dentro del banco la determinan 7 bits proce- dentes del código de operación de la instrucción. Direccionamiento indirecto.- Se usa el registro FSR, en el que sus 7 bits de menor peso señalan la dirección dentro del banco y el banco a accesar lo determina el bit de mayor peso de FSR concatenado con el bit IRP del registro STATUS<7>. Curso básico de microcontroladores (PIC16F877A)
45
MEMORIA DE DATOS RAM Curso básico de microcontroladores (PIC16F877A)
46
El direccionamiento indirecto se usa cuando en una instrucción
MEMORIA DE DATOS RAM El direccionamiento indirecto se usa cuando en una instrucción se utiliza como operando el registro INDF que ocupa la primera localidad en todos los bancos. El registro INDF no es un registro físico. Al direccionar INDF en realidad se direcciona la localidad cuya dirección está contenida en el registro FSR (FSR es un apuntador). Curso básico de microcontroladores (PIC16F877A)
47
Ejemplo de direccionamiento indirecto:
MEMORIA DE DATOS RAM Ejemplo de direccionamiento indirecto: STATUS IRP PORTA 10h 05H FSR 05h 04H PORTB 0Ah 06H INDF 10h 00H 10h 05H 0Ah 06H FSR 06h 04H INDF 0Ah 00H Curso básico de microcontroladores (PIC16F877A)
48
REGISTRO STATUS Curso básico de microcontroladores (PIC16F877A)
49
REGISTRO STATUS Curso básico de microcontroladores (PIC16F877A)
50
PUERTOS DIGITALES (E/S)
Se conoce como puerto a un conjunto de terminales (pines) que permiten la entrada y/o salida de datos en forma digital. El PIC16F877A cuenta con 5 puertos que son conocidos por las letras A,B,C,D y E y constan del siguiente número de bits: A 6 bits (RA5 – RA0) B 8 bits (RB7 – RB0) C 8 bits (RC7 – RC0) D 8 bits (RD7 – RD0) E 3 bits (RE2 – RE0) Curso básico de microcontroladores (PIC16F877A)
51
PUERTOS DIGITALES (E/S)
Cada línea puede configurarse independientemente como entrada o como salida, según el estado del bit asociado del registro de configuración de cada puerto (TRISA, TRISB, TRISC, TRISD y TRISE). Se llaman PORTA, PORTB, PORTC, PORTD y PORTE, los re- gistros que guardan la información que entra o sale por los puertos y ocupan las direcciones 05h, 06h, 07h, 08h y 09h res- pectivamente en el banco 0 de la memoria de datos. Curso básico de microcontroladores (PIC16F877A)
52
PUERTOS DIGITALES (E/S)
Los registros TRISA, TRISB, TRISC, TRISD y TRISE ocupan las direcciones 85h, 86h, 87h, 88h y 89h respectivamente en el banco 1. Los bits de un registro TRIS configuran los pines del puerto como entrada cuando el bit correspondiente se programa con un 1 y como salida cuando el bit correspondiente se carga con 0. TRISx – Entrada (Input) 0 – Salida (Output) Curso básico de microcontroladores (PIC16F877A)
53
PUERTOS DIGITALES (E/S)
Todas las líneas de los puertos digitales admiten niveles de entrada TTL y de salida CMOS. Cada pin de salida puede suministrar una corriente máxima de 20 mA. y programado como entrada puede absorber hasta 25 mA. sin embargo, por limitaciones en la disipación máxima del chip se recomienda no exceder la corriente máxima de absorción de 90 mA. y la de suministro de 60 mA. en el puerto A. Curso básico de microcontroladores (PIC16F877A)
54
PUERTO A RA0-RA3 Curso básico de microcontroladores (PIC16F877A)
55
PUERTO A 1 1 1 RA0-RA3 1 Curso básico de microcontroladores (PIC16F877A)
56
PUERTO A 1 1 RA0-RA3 1 1 Curso básico de microcontroladores (PIC16F877A)
57
PUERTO A X 1 X RA0-RA3 1 X X Curso básico de microcontroladores (PIC16F877A)
58
La línea RA4/T0CKI dispone de un circuito Schmitt Trigger
PUERTO A La línea RA4/T0CKI dispone de un circuito Schmitt Trigger que proporciona un buena inmunidad al ruido cuando funciona como entrada. La salida es de colector abierto, debido a lo cual se recomienda conectar una resistencia entre esta terminal y Vdd cuando se quiera manejar como el resto de los pines del puerto. Curso básico de microcontroladores (PIC16F877A)
59
PUERTO A RA4/T0CKI Curso básico de microcontroladores (PIC16F877A)
60
PUERTO A Curso básico de microcontroladores (PIC16F877A)
61
Programar los pines RA0,RA1 y RA5 como entradas y
PUERTO A Ejemplo: Programar los pines RA0,RA1 y RA5 como entradas y RA2, RA3 y RA4 como salidas. Posteriormente sacar un 0x0C por el puerto. TRISA X X 1 1 1 0x23 7 6 5 4 3 2 1 TRISx – Entrada (Input) 0 – Salida (Output) Curso básico de microcontroladores (PIC16F877A)
62
PUERTO A bcf STATUS,RP0 ;Selecciona banco 0 movlw 0x0C
clrf PORTA ;Limpia los latches de salida del puerto A bsf STATUS,RP0 ;Selecciona banco 1 movlw 0x06 ;Configura todos los pines del puerto A movwf ADCON1 ;como E/S digitales, pag 128 pic movlw 0x23 ;Programa RA0, RA1 y RA5 como entradas movwf TRISA ;y RA2, RA3 y RA4 como salidas bcf STATUS,RP0 ;Selecciona banco 0 movlw 0x0C movwf PORTA ;Saca 0x0C por puerto A Curso básico de microcontroladores (PIC16F877A)
63
PUERTO A bcf STATUS,RP0 ;Pone en 0 el bit RP0 del registro STATUS
bsf STATUS,RP0 ;Pone en 1 el bit RP0 del registro STATUS clrf PORTA ;Limpia el registro PORTA (PORTA = 0x00) Curso básico de microcontroladores (PIC16F877A)
64
El puerto B consta de 8 líneas bidireccionales de E/S
(RB7 – RB0) cuya información se almacena en el registro PORTB que ocupa las direcciónes 06 del banco 0 y 106h del banco 2. El registro de configuración TRISB ocupa las direcciónes 86h y 186h de los bancos 1 y 3 respctivamente. El pin RB0/INT tiene dos funciones multiplexadas. Además de E/S actúa como entrada de interrupción externa. Todos los pines del puerto B pueden ser conectados a una resistencia interna Pull-Up de valor alto conectada a Vdd. Curso básico de microcontroladores (PIC16F877A)
65
PUERTO B Curso básico de microcontroladores (PIC16F877A)
66
PUERTO B Curso básico de microcontroladores (PIC16F877A)
67
PUERTO B Curso básico de microcontroladores (PIC16F877A)
68
PUERTO C Curso básico de microcontroladores (PIC16F877A)
69
PUERTO D Curso básico de microcontroladores (PIC16F877A)
70
PUERTO E Curso básico de microcontroladores (PIC16F877A)
71
Hacer un programa que programe todos los bits del puerto
PRÁCTICA # 2 Hacer un programa que programe todos los bits del puerto B como salidas y envíe el valor 0x55 para visualizar en los LED´s de la tarjeta de desarrollo. Curso básico de microcontroladores (PIC16F877A)
72
El microcontrolador PIC16F877A cuenta con un set de
SET DE INSTRUCCIONES El microcontrolador PIC16F877A cuenta con un set de 35 instrucciones con las siguientes características: - Las instrucciones son simples y rápidas. - Las instrucciones son ortogonales. (Cualquier instruc ción puede usar cualquier operando). - Todas las instrucciones tienen 14 bits y los datos 1 byte. Curso básico de microcontroladores (PIC16F877A)
73
El repertorio de instrucciones se clasifica en tres grupos
SET DE INSTRUCCIONES El repertorio de instrucciones se clasifica en tres grupos de acuerdo a su formato: Instrucciones orientadas al manejo de registros byte. Instrucciones orientadas al manejo de bits. Instrucciones que manejan un valor inmediato o literal. Curso básico de microcontroladores (PIC16F877A)
74
Instrucciones orientadas al manejo de registros byte.
SET DE INSTRUCCIONES Instrucciones orientadas al manejo de registros byte. f – Designador de registro.- especifica que registro será usado por la instrucción. Puede ser cualquier registro de la memoria de datos. d – Registro destino.- especifica en donde será colocado el resultado. si d = 0 Resultado W si d = 1 Resultado f Curso básico de microcontroladores (PIC16F877A)
75
SET DE INSTRUCCIONES Ejemplo: andwf PORTA,1 W 0F W 0F PORTA 3A PORTA
Curso básico de microcontroladores (PIC16F877A)
76
Instrucciones orientadas al manejo de bits.
SET DE INSTRUCCIONES Instrucciones orientadas al manejo de bits. f – Designador de registro.- Especifica el registro en el cual se localiza el bit. b – Número de bit.- Indica el bit que será afectado por la operación. b – Curso básico de microcontroladores (PIC16F877A)
77
SET DE INSTRUCCIONES Ejemplo: bsf PORTA,0 PORTA 00 PORTA 01
Curso básico de microcontroladores (PIC16F877A)
78
Instrucciones que manejan un valor inmediato o literal.
SET DE INSTRUCCIONES Instrucciones que manejan un valor inmediato o literal. k – Valor literal.- Representa un valor literal de 8 u 11 bits. k es de 11 bits solamente para las instrucciones CALL y GOTO y contiene la dirección dentro de un banco, de la localidad hacia donde habrá de cambiar el flujo del programa. Curso básico de microcontroladores (PIC16F877A) Curso básico de microcontroladores (PIC16F877A)
79
SET DE INSTRUCCIONES Curso básico de microcontroladores (PIC16F877A)
80
SET DE INSTRUCCIONES Ejemplos: iorlw 0x04 W 01 W 05
Curso básico de microcontroladores (PIC16F877A)
81
SET DE INSTRUCCIONES Instrucciones que manejan registros
ADDWF f,d Suma W y f ANDWF f,d AND W y f CLRF f Limpia f (pone todos los bita a cero) CLRW Borra W COMF f,d Complementa f (invierte ceros y nos) DECF f,d Decrementa f INCF f,d Incrementa f IORWF f,d OR W y f MOVF f,d Mueve f al destino indicado por d MOVWF f Mueve W a f NOP No operación RLF f,d Rota f a la izquierda a través del carry RRF f,d Rota f a la derecha a través del carry SUBWF f,d Resta W a f SWAPF f,d Intercambia nibbles XORWF f,d XOR W y f Curso básico de microcontroladores (PIC16F877A)
82
SET DE INSTRUCCIONES RLF C f RRF C f MSB LSB MSB LSB
Curso básico de microcontroladores (PIC16F877A)
83
SET DE INSTRUCCIONES Instrucciones que manejan bits
BCF f,b Borra el bit b del registro f BSF f,b Borra el bit b del registro f Instrucciones de salto condicional BTFSC f,b Se salta la siguiente instrucción si el bit b = 0. BTFSS f,b Se salta la siguiente instrucción si el bit b = 1. DECFSZ f,d Decrementa f y se salta la siguiente instrucción si f = 0 INCFSZ f,d Decrementa f y se salta la siguiente Curso básico de microcontroladores (PIC16F877A)
84
SET DE INSTRUCCIONES Instrucciones que manejan operandos literal
ADDLW k Suma valor imnediato k a W ANDLW k AND valor inmediato k con W IORLW k OR valor inmediato k con W MOVLW k Mueve valor inmediato k a W SUBLW k Resta W del valor inmediato k XORLW k XOR valor inmediato k con W Instrucciones de control y especiales CALL k Llama a subrutina CLRWDT Refresca Watch-dog GOTO k Salto incondicional RETFIE Retorno de interrupción RETLW k Retorno de subrutina con W = k RETURN Retorno de subrutina SLEEP Pasa al modo de reposo SLEEP Curso básico de microcontroladores (PIC16F877A)
85
de retardo para alcanzar a visualizar el cambio.
PRÁCTICA # 3 a) Hacer un programa que encienda y apague el LED conectado a la terminal RB2 usando una subrutina de retardo para alcanzar a visualizar el cambio. b) Modificar el programa para implementar un contador de 00h a 3Fh y desplegar el valor en los LED´s conectados al puerto B. Curso básico de microcontroladores (PIC16F877A)
86
SET DE INSTRUCCIONES DELAY movlw 0xFF movwf DELH DEL2 movlw 0xFF
movwf DELL DEL decfsz DELL,f goto DEL1 decfsz DELH,f goto DEL2 return Curso básico de microcontroladores (PIC16F877A)
87
SET DE INSTRUCCIONES btfsc PORTB,2 goto APAGA bsf PORTB,2
goto CONTINUA APAGA bcf PORTB,2 CONTINUA - Curso básico de microcontroladores (PIC16F877A)
88
Periféricos digitales de salida LED´s
MANEJO DE PERIFÉRICOS Periféricos digitales de salida LED´s El LED es uno de los dispositivos de salida más sencillos y económicos. Según el nivel lógico que se aplique a su cátodo o ánodo se enciende o apaga. Las líneas del PIC pueden suministrar suficiente corriente para encender un LED conectándolo a un pin de salida a través de una resistencia limitadora. Curso básico de microcontroladores (PIC16F877A)
89
MANEJO DE PERIFÉRICOS Curso básico de microcontroladores (PIC16F877A)
90
A veces es necesario manejar varios LED´s u otro tipo de
MANEJO DE PERIFÉRICOS A veces es necesario manejar varios LED´s u otro tipo de carga que requiere más corriente de la que puede entregar una línea del PIC. En este caso es necesario introducir un transistor que funciona como amplificador de corriente. Curso básico de microcontroladores (PIC16F877A)
91
El manejo de un relevador brinda la oportunidad de controlar
MANEJO DE PERIFÉRICOS RELEVADORES El manejo de un relevador brinda la oportunidad de controlar cargas que requieren mucha más corriente. Esta corriente puede ser manejada por los contctos. Curso básico de microcontroladores (PIC16F877A)
92
SALIDAS OPTOACOPLADAS
MANEJO DE PERIFÉRICOS SALIDAS OPTOACOPLADAS A veces hay que aislar eléctricamente la carga que se desea controlar, de la línea de salida. Para este fin la señal se aplica a través de un optoacoplador con salida de transistor, de manera que no hay ninguna relación eléctrica entre el perifé- rico y la línea de control. Curso básico de microcontroladores (PIC16F877A)
93
CONTROL DE CARGAS ALIMENTDAS CON C.A.
MANEJO DE PERIFÉRICOS CONTROL DE CARGAS ALIMENTDAS CON C.A. Los triacs son dispositivos eléctricos que dejan pasar una parte del semiciclo de C.A. que conduce cuando a su compuerta se aplica un pulso de disparo. De esta forma la potencia que entrega el triac depende del momento en el que se genera el pulso. Un triac puede ser controlado por medio de un opto-aco- plador con salida de triac. Curso básico de microcontroladores (PIC16F877A)
94
MANEJO DE PERIFÉRICOS Curso básico de microcontroladores (PIC16F877A)
95
Periféricos digitales de entrada
MANEJO DE PERIFÉRICOS Periféricos digitales de entrada Estos dispositivos permiten introducir un nivel lógico en el momento que se les acciona, pasando al nivel contrario cuando se deja de hacerlo. Curso básico de microcontroladores (PIC16F877A)
96
Todos los dispositivos electromecánicos originan un fenómeno
MANEJO DE PERIFÉRICOS Todos los dispositivos electromecánicos originan un fenómeno denominado “rebotes”. Los rebotes se producen en el instante que se abren o cierran las laminillas metálicas del interruptor. Hay un momento de inestabilidad en el que aunque solo se haya Accionado el dispositivo una sola vez, los contactos se abren y cierran múltiples veces en el momento de la transición. REBOTES Curso básico de microcontroladores (PIC16F877A)
97
de entrada. Posteriormente se realiza un retardo de tiempo
MANEJO DE PERIFÉRICOS Una solución para eliminar los rebotes es por medio del software, en donde se detecta el primer flanco del la señal de entrada. Posteriormente se realiza un retardo de tiempo suficiente para permitir que se estabilice la señal de entrada (15 – 20 ms.). Después de transcurrido el retardo se vuelve a leer el estado de la tecla. Si se mantiene el nivel lógico que genera la tecla presionada se valida el estado de tecla presio- nada Curso básico de microcontroladores (PIC16F877A)
98
Para el siguiente circuito de entrada hacer un programa que
MANEJO DE PERIFÉRICOS Ejemplo: Para el siguiente circuito de entrada hacer un programa que elimine el efecto de rebotes al presionar la tecla. Curso básico de microcontroladores (PIC16F877A)
99
MANEJO DE PERIFÉRICOS LEE BIT DE ENTRADA BIT = 0 ? DELAY BIT =0 ?
NO SI DELAY BIT =0 ? NO SI Curso básico de microcontroladores (PIC16F877A)
100
MANEJO DE PERIFÉRICOS TECLA btfsc PORTC,5 goto TECLA call DELAY
Curso básico de microcontroladores (PIC16F877A)
101
Entradas digitales optoacopladas
MANEJO DE PERIFÉRICOS Entradas digitales optoacopladas En algunas ocasiones también se requiere aislar eléctricamente el periférico de entrada de las líneas del microcontrolador. Para este fin la señal se aplica a través de un optoacoplador con salida a transistor usando el mismo procedimiento de aislamiento de las salidas. Curso básico de microcontroladores (PIC16F877A)
102
NOTA: Usar la rutina antirebotes TECLA.
MANEJO DE PERIFÉRICOS PRÁCTICA # 4 Modificar el programa del inciso b) para implementar un contador de 00h a 52h incrementando la cuenta manual-mente por medio de la tecla S2. NOTA: Usar la rutina antirebotes TECLA. Curso básico de microcontroladores (PIC16F877A)
103
Hacer un programa que controle la intensidad luminosa en
PRÁCTICA # 5 Hacer un programa que controle la intensidad luminosa en una lámpara incandescente alimentada con C.A. (Dimmer) Mediante el control del ángulo de disparo por medio del triac T1 de la tarjeta de desarrollo. Incrementar la luminosidad con la tecla S3 y decrementarla con la tecla S2. Curso básico de microcontroladores (PIC16F877A)
104
Las llamadas a subrutinas mediante la instrucción CALL son
INTERRUPCIONES Las llamadas a subrutinas mediante la instrucción CALL son desviaciones del flujo del programa originadas por dicha instrucción, por lo que se consideran síncronas. Las interrupciones son desviaciones del flujo del programa originadas asincrónicamente por eventos que no se hayan bajo supervisión de las instrucciones. Curso básico de microcontroladores (PIC16F877A)
105
Las interrupciones pueden ser:
Externas como la generación de un flanco o nivel activo en unpin del microcontrolador. Internas como el desbordamiento de un timer o el fin de escritura de la memoria EEPROM. Curso básico de microcontroladores (PIC16F877A)
106
Cuando ocurre una interrupción se detiene la ejecución del
INTERRUPCIONES Cuando ocurre una interrupción se detiene la ejecución del programa en curso . Se guarda la dirección actual del PC en el STACK y se carga el PC con la dirección del vector de interrupción (0004h). Generalmente se coloca en el vector de interrupción una instrucción de salto incondicional GOTO que traslada el flujo del programa a la rutina de servicio de interrupción. Curso básico de microcontroladores (PIC16F877A)
107
Al inicio de una rutina de interrupción es conveniente guardar
INTERRUPCIONES Al inicio de una rutina de interrupción es conveniente guardar en la memoria de datos aquellos registros que dentro de la rutina de servicio de interrupción se van a emplear y será alte- rado su contenido. Antes del retorno de la rutina de servicio se deben restaurar los valores en dichos registros para continuar la ejecución del programa. Curso básico de microcontroladores (PIC16F877A)
108
Causas de interrupción:
INTERRUPCIONES Causas de interrupción: El PIC16F877A cuenta con diversas fuentes de interrupción que provienen de los diferentes módulos, si embargo por ahora nos enfocaremos al estudio de las interrupciones que son controladas por el registro INTCON que son: Activación del pin RB0/INT. Desbordamiento del TMR0. Cambio de estado en uno de los pines RB7:RB4. Curso básico de microcontroladores (PIC16F877A)
109
INTERRUPCIONES Curso básico de microcontroladores (PIC16F877A)
110
INTERRUPCIONES Curso básico de microcontroladores (PIC16F877A)
111
El PIC16F877A puede ser interrumpido por diversas causas,
INTERRUPCIONES El PIC16F877A puede ser interrumpido por diversas causas, pero todas ellas desvían en flujo de control al vector de inte- rrupción en la localidad 0004h, por lo tanto, cuando se encuen- tran activadas dos o más interrupciones se debe averiguar cual de las posibles causas ha sido la responsable de la interrupción en curso, para ello se exploran las banderas de las interrupciones que se encuentran activas. Curso básico de microcontroladores (PIC16F877A)
112
Al inicio de la rutina de servicio de interrupción, GIE se pone
INTERRUPCIONES Al inicio de la rutina de servicio de interrupción, GIE se pone automáticamente en 0 al igual que la bandera de la interrup- ción se activa, con el objeto de no atender nuevas interrupciones hasta que se termine la rutina en curso. Al retorno de la interrupción GIE nuevamente se establece en 1 de manera automática para permitir nuevas interrupciones, sin embargo la bandera de la interrupción debe ser limpiada por software para permitir que ocurra nuevamente esa inte- rrupción. El retorno de una interrupción serealiza mediante la instrucción RETFIE. Curso básico de microcontroladores (PIC16F877A)
113
INTERRUPCIONES ;Rutina que determina la causa de la interrupción
INT btfss INTCON,INTF goto PUERTOB call SERV_INTEXT bcf INTCON,INTF goto FIN_INT PUERTOB btfss INTCON,RBIF goto SERV_TMR0 call SERV_INTRB bcf INTCON,RBIF SERV_TMR0 btfss INTCON,T0IF goto INT call SERV_TMR0 bcf INTCON,T0IF FIN_INT retfie Curso básico de microcontroladores (PIC16F877A)
114
Lógica de control que origina las interrupciones
Curso básico de microcontroladores (PIC16F877A)
115
Interrupción por desbordamiento del TMR0.
INTERRUPCIONES Interrupción por desbordamiento del TMR0. Cuando el TMR0 se desborda y pasa de FFh a 00h, la bandera T0IF se pone automáticamente en 1. Si además el bit de permiso de esta interrupción T0IE y el bit de permiso global GIE se en- cuentran en 1, se produce una interrupción. El registro TMR0 puede ser cargado con un valor, a partir del cual se iniciará la cuenta hacia FFh y al ocurrir el desbordamien- to de se genera la interrupción. De esta manera el tiempo para que ocurra la interrupción puede ser controlado. Curso básico de microcontroladores (PIC16F877A)
116
Si no se recarga el TMR0 después de su desbordamiento, sigue
INTERRUPCIONES Si no se recarga el TMR0 después de su desbordamiento, sigue contando a partir de 00h. El registro TMR0 puede ser leído y escrito en cualquier mo- mento, pero cada vez que se escribe se pierden 2 ciclos de reloj en la sincronización. Otro factor que determina el tiempo que tarda en ocurrir la interrupción, es el valor con el que se programa el divisor de frecuencia o también conocido como preescalador, que divide la frecuencia que incrementa el TMR0 entre un valor que se se puede programar en el registro OPTION con los bits PS2:PS0. Curso básico de microcontroladores (PIC16F877A)
117
Diagrama a bloques del TMR0/WDT
INTERRUPCIONES Diagrama a bloques del TMR0/WDT = 0 = 0 = 0 = 0 Curso básico de microcontroladores (PIC16F877A)
118
INTERRUPCIONES Curso básico de microcontroladores (PIC16F877A)
119
Para calcular el tiempo a controlar con el TMR0 se usan las
INTERRUPCIONES Para calcular el tiempo a controlar con el TMR0 se usan las siguientes fórmulas: Tiempo = 4*Tosc*(256 - Nd)*Rango del preescalador Nd = Tiempo 4*Tosc*Rango del preescalador NOTA: Nd representa el valor decimal que se deberá cargar en el registro TMR0 en su equivalente hexadecimal. Curso básico de microcontroladores (PIC16F877A)
120
Determinar el valor Nd que debe ser cargado en el registro TMR0
INTERRUPCIONES Ejemplo: Determinar el valor Nd que debe ser cargado en el registro TMR0 y el rango del preescalador que se debe seleccionar para generar una interrupción cada ms. Nd = x = 63h 4*50x10 *32 Nota: el valor del preescalador se debe seleccionar de manera que el resultado Nd sea un valor entre 0 y 255, preferentemente el menor posible para tener una mejor resolución. -3 -9 Curso básico de microcontroladores (PIC16F877A)
121
El TMR0 como contador de sucesos.
INTERRUPCIONES El TMR0 como contador de sucesos. Los sucesos están representados por los impulsos que se aplican al pin RA4/T0CKI, en lugar de los pulsos que provienen del oscilador interno (Fosc) del microcontrolador. Para que el TMR0 funcione como un contador de pulsos, hay que poner a 1 los bits T0CS y PSA en el registro OPTION. En este caso el registro TMR0 se incrementa con cada flanco activo aplicado al pin T0CKI. El tipo de flanco se elige programando el bit T0SE del registro OPTION. Si T0SE = 1 el flanco activo es descendente. Si T0SE = 0 el flanco activo es ascendente. Curso básico de microcontroladores (PIC16F877A)
122
Diagrama a bloques del TMR0/WDT
INTERRUPCIONES Diagrama a bloques del TMR0/WDT = 1 = 1 = 1 = 1 Curso básico de microcontroladores (PIC16F877A)
123
INTERRUPCIONES PRÁCTICA # 6
Hacer un programa que genere una señal audible de 1Khz. y la envíe al buzzer SP1 de la tarjeta de desarrollo. Con la tecla S3 debe activar el TMR0 para generar la señal audible y con S2 debe desactivar el TMR0 para detener la señal. Curso básico de microcontroladores (PIC16F877A)
124
Interrupción externa INT.
INTERRUPCIONES Interrupción externa INT. La interrupción externa permite atender acontecimientos exter- nos en tiempo real. Un acontecimiento externo generalmente está representado por un pulso o cambio de nivel en el pin RB0/INT. Cuando ocurre el cambio determinado en el pin RB0/INT, se generará una petición de interrupción, que será aceptada si el bit INTE en el registro INTCON se encuentra en 1, al igual que el bit GIE. Curso básico de microcontroladores (PIC16F877A)
125
Cuando se genera la interrupción, la bandera INTF cambia su
INTERRUPCIONES Cuando se genera la interrupción, la bandera INTF cambia su estado a 1 y el flujo del programa salta al vector de interrupción para que dicha interrupción sea atendida. Por medio del bit INTDEG del registro OPTION, se puede seleccionar el flanco activo en RB0/INT. Si INTDEG = 1 flanco activo ascendente. Si INTDEG = 0 flanco activo descendente. Curso básico de microcontroladores (PIC16F877A)
126
La petición de interrupción RB se genera cuando ocurre un
INTERRUPCIONES Interrupción RB. La petición de interrupción RB se genera cuando ocurre un cambio en alguno de los pines RB7, RB6, RB5 o RB4, inde- pendientemente de su estado anterior. Cuando ocurre un cambio en cualquiera de los pines RB7-RB4, se generará una petición de interrupción, que será aceptada si el bit RBIE en el registro INTCON se encuentra en 1, al igual que el bit GIE. Cuando se genera la interrupción, la bandera RBIF cambia su estado a 1 y el flujo del programa salta al vector de interrupción para que dicha interrupción sea atendida. Curso básico de microcontroladores (PIC16F877A)
127
Hacer un programa que implemente una alarma digital usando
PRÁCTICA # 7 Hacer un programa que implemente una alarma digital usando las interrupciones INT, RB y TMR0. Cuando la alarma esté activada pero no se encuentre disparada, debe encender y apagar el LED conectado a la terminal RB1cada 500 ms. El disparo de la alarma se hará por medio de teclas (externas a la tarjeta), que deberán conectarse a las terminales INT/RB0, RB4, RB5, RB6 y RB7, a través del conector J1. Cando se dispare la alarma se deberá generar una señal audible por medio del Buzzer, y el LED conectado a RB1 quedará encendido permanentemente en cuanto no se desactive la alarma y vuelva a las condiciones iniciales. La desactivación de la alarma deberá hacerse por medio de la tecla S2, y S3 deberá activar la alarma. Curso básico de microcontroladores (PIC16F877A)
128
EL WATCHDOG TIMER (WDT)
El Watchdog timer (perro guardián) es un circuito auxiliar interno del microcontrolador que supervisa el funcionamiento adecuado del microcontrolador. Si por alguna razón el programa se pierde, después de un lapso de tiempo el WDT produce un RESET al microcontrolador que lo hace regresar al programa. Curso básico de microcontroladores (PIC16F877A)
129
EL WATCHDOG TIMER (WDT)
El WDT es un contador interno de 8 bits que origina un reset cuando se desborda. Su control de tiempo es independiente del reloj interno del microcontrolador y está basado en un circuito RC. Su funcionamiento es opcional y puede ser habilitado progra- mando el bit WTE en la palabra de configuración. El tiempo nominal del WDT es de 18 ms. pero utilizando el divisor de frecuencia puede alcanzarse hasta 2.3 seg. Curso básico de microcontroladores (PIC16F877A)
130
EL WATCHDOG TIMER (WDT)
Diagrama a bloques del TMR0/WDT = 1 = 1 = 1 Curso básico de microcontroladores (PIC16F877A)
131
EL WATCHDOG TIMER (WDT)
Para evitar que el WDT se desborde y ocasione un RESET del microcontrolador cuando el programa está corriendo normal- mente, hay que limpiarlo (ponerlo a cero) mediante la instruc- ción CLRWDT, antes de que se produzca el desbordamiento y ocasione el RESET. El programador debe situar la instrucción CLRWDT en sitios estratégicos por los que pasa el flujo de control, antes de que se desborde el contador del WDT. Si el programa llegara a perderse, no se limpiará el WDT y se desbordará ocasionando el RESET que hará que el microcon- trolador regrese al inicio del programa. Curso básico de microcontroladores (PIC16F877A)
132
LA PALABRA DE CONFIGURACIÓN
Los bits de configuración seleccionan diferentes opciones de funcionamiento y protección del código del programa y datos. Medinte esta palabra se selecciona la función deseada con un 0 En el bit correspondiente o se deja deshabilitada con un 1. Esta palabra se encuentra mapeada en la localidad de memoria 2007h, que se encuentra más allá del espacio de memoria del programa y pertenece al espacio de memoria de prueba/confi- guración (2000h-3FFFh). Este espacio solamente puede ser accesado durnte el proceso de programación. Curso básico de microcontroladores (PIC16F877A)
133
LA PALABRA DE CONFIGURACIÓN
Curso básico de microcontroladores (PIC16F877A)
134
LA PALABRA DE CONFIGURACIÓN
Curso básico de microcontroladores (PIC16F877A)
135
LA PALABRA DE CONFIGURACIÓN
Curso básico de microcontroladores (PIC16F877A)
136
CONFIGURACIÓN DEL OSCILADOR
Los PIC16F87XA pueden operar en cuatro modos diferentes de oscilador. El usuario puede programar dos bits de confi- guración (FOSC1 y FOSC2), en la palabra de configuración. Estos modos son: LP Low Power Crystal XT Crystal/Resonator HS High Speed Crystal/Resonator RC Resistor/Capacitor En los modos XT, LP y HS, un cristal o resonador cerámico es conectado a los pines OSC1/CLKIN y OSC2/CLKOUT. Curso básico de microcontroladores (PIC16F877A)
137
CONFIGURACIÓN DEL OSCILADOR
Curso básico de microcontroladores (PIC16F877A)
138
CONFIGURACIÓN DEL OSCILADOR
Los capacitores C1 y C2 pueden ser seleccionados en base a la siguiente tabla: Curso básico de microcontroladores (PIC16F877A)
139
Un pulso de reset Power_On es generado en el chip cuando la
POWER-ON RESET Un pulso de reset Power_On es generado en el chip cuando la aplicación de voltaje en Vdd es detectada (en el rango de 1.2V – 1.7V). Para usar la característica POR se requiere conectar el pin MCLR a Vdd (+5V) a través de una resistencia de 10K. Cuando el microcontrolador inicia su operación normal (sale de la condición de RESET), debe asegurar una operación correcta. Si esas condiciones no se reunen, el dispositivo permanecerá en es- tado de RESET, hasta que se tengan las condiciones de operación. Si en la operación normal se preseta un RESET sin motivo aparente, es posible que alguna señal de ruido en la terminal MCLR esté presente. Esta situación puede ser corregida conec- Tando un capacitor entre Vss y dicha trerminal. Curso básico de microcontroladores (PIC16F877A)
140
POWER-ON RESET Curso básico de microcontroladores (PIC16F877A)
141
El PWRT provee un tiempo de retardo nominal de 72 ms. A
POWER-UP TIMER (PWRT) El PWRT provee un tiempo de retardo nominal de 72 ms. A partir del momento en el que se aplica la alimentación al Vdd. El PWRT opera con un oscilador RC interno. El microcontro- lador es mantenido en RESET durante el tiempo que el PWRT permanece activo. El retardo de tiempo del PWRT permite que el voltaje de ali- entación llegue a un nivel aceptable. El bit PWRTEN de la palabra de configuración ahbilita o des- habilita el PWRT. Curso básico de microcontroladores (PIC16F877A)
142
OSCILLATOR START-UP TIMER (OST)
El oscilador Start-Up timer provee un retardo de 1024 ciclos del oscilador después de que termina el retardo PWRT, (si este se encuentra habilitado). Esto ayuda a asegurar que el cristal oscilador o resonador se ha estabilizado. El OST es usado solo para los modos de oscilador XT, LP y HS. Curso básico de microcontroladores (PIC16F877A)
143
El bit de configuración BOREN puede habilitar o deshabilitar
BROWN-OUT RESET (BOR) El bit de configuración BOREN puede habilitar o deshabilitar el circuito Brown-Out Reset. Si el voltaje de alimentación Vdd cae por debajo del valor VBOR (aprox. 4V), por un tiempo ma- yor que TBOR (aprox. 100ms.) este circuito producirá un RESET al microcontrolador. Una vez que el Brown-Out ocurre, el dispositivo permanecerá en RESET por 72 ms. Después de que el voltaje en Vdd vuelva a un valor por encima del voltaje VBOR. Curso básico de microcontroladores (PIC16F877A)
144
La secuencia power-up es la sigiente:
TIME-OUT SEQUENCE La secuencia power-up es la sigiente: El retardo PWRT inicia (si se encuentra habilitado) cuando un POR ocurre. Entonces inicia el OST contando 1024 ciclos del oscilador. Cuando el OST termina, el dispositivo sale del RESET. Si el pin MCLR permanece en bajo un tiempo suficiente, los tiempos anteriores habrán expirado. Cuando cambie MCLR a alto, iniciará la ejecución inmeditamante. Lo anterior es util para propósitos de prueba o para sincronizar más de un microcontrolador, en paralelo. Curso básico de microcontroladores (PIC16F877A)
145
Un teclado consiste en un grupo de interruptores en un arreglo que
permita utilizar el menor número de pines del microcontrolador. Lo anterior se logra por medio de un arreglo matricial en filas y columnas, de manera que para un teclado de 16 teclas, solo se requieren 8 líneas del PIC, en lugar de las 16 que se necesitaría si se manejaran de manera individual. Curso básico de microcontroladores (PIC16F877A)
146
TARJETA DE DESARROLLO Curso básico de microcontroladores (PIC16F877A)
3 6 9 B 2 5 8 1 4 7 A Curso básico de microcontroladores (PIC16F877A)
147
Las cuatro líneas de menor peso del puerto D (RD0 – RD3) se
TECLADO Las cuatro líneas de menor peso del puerto D (RD0 – RD3) se configuran como salidas que aplican un patrón de estado lógicos a las cuatro columnas del teclado. Las cuatro líneas de mayor peso del puerto D (RD4 – RD7) están configuradas como entradas y reciben los niveles lógicos que contienen las filas del teclado. Curso básico de microcontroladores (PIC16F877A)
148
Por medio el programa se verifica el teclado, sacando de manera
secuencial un nivel bajo por una de las cuatro líneas RD0 – RD3, que manejan las columnas. En seguida lee el nivel lógico introducido por las filas en las líneas RD4 – RD7. Si ninguna de las teclas de la columna a la que en ese momento se aplica el nivel bajo está pulsada, se leerá un nivel alto en las cuatro filas, pasando a aplicar el nivel bajo a la siguiente columna. Curso básico de microcontroladores (PIC16F877A)
149
Si al aplicar a una de las columnas el nivel bajo y al leer, una de
TECLADO Si al aplicar a una de las columnas el nivel bajo y al leer, una de las filas se encuentra con un nivel bajo, se deduce que la tecla asociada a la fila y columna correspondientes se encuentra presionada. De esta manera cada una de las 16 teclas se reconoce cuando se presiona. Cada tecla tendrá asociado un código binario que corresponde a los 4 bits que se sacan a través de las líneas RD0 – RD3 y los 4 recibidos por RD4 – RD7. Curso básico de microcontroladores (PIC16F877A)
150
TECLADO TECLA 1 2 3 F 4 5 6 E 7 8 9 D A B C RD7 RD6 RD5 RD4 RD3 RD2 RD1 RD0 CÓDIGO 77 B7 D7 E7 7B BB DB EB 7D BD DD ED 7E BE DE EE Nota: Un pin que ha sido programado como salida si es leído, se obtendrá el valor que previamente ha sido sacado por el. Curso básico de microcontroladores (PIC16F877A)
151
Los códigos de exploración de las teclas varían según la colocación
TECLADO Los códigos de exploración de las teclas varían según la colocación de las mismas. El programa que maneja el teclado realiza la exploración cada cierto Tiempo que suele ser un valor aproximado de 20 ms. El software se debe de encargar de realizar el tratamiento adecuado cuando se pulsan varias teclas a la vez, eliminar los rebotes, etc. Curso básico de microcontroladores (PIC16F877A)
152
LIBRERÍA DE SUBRUTINAS PARA MANEJO DEL TECLADO
El teclado es un dispositivo periférico que puede ser usado en diferentes programas. Para su aplicación es conveniente la implementación de subrutinas que permitan realizar las sigientes funciones: Inicialización de puertos. Barrido. Validación de tecla presionada (incluyendo antirrebotes). Reconocimiento y conversión del código de la tecla a valor numérico. - Espera liberación de la tecla. Curso básico de microcontroladores (PIC16F877A)
153
Pensando en una aplicación más general, las subrutinas anteriores
TECLADO Pensando en una aplicación más general, las subrutinas anteriores se pueden manejar mediante una librería de subrutinas que deberá ser manejada como un archivo incluido declarado al principio del programa principal y cualquiera de estas subrutinas podrá ser llamada por su nombre desde este programa. Dentro de la librería de subrutinas se incluye la subrutina llamada KBD_TONO, que puede generar un tono auditivo diferente con ayuda del buzzer, al presionar una tecla. Curso básico de microcontroladores (PIC16F877A)
154
TECLADO ;KBD_CXX.ASM ;El conjunto de rutinas que se presentan a continuación permiten realizar ;las tareas básicas de control del teclado. En el programa principal se ;debe reservar memoria para el bloque de variables que utiliza el teclado ;BLOQUE DE VARIABLES CBLOCK KBD_VAR TECLA ;Código de tecla presionada BARRIDO ;Variable para barrido de teclado ENDC Curso básico de microcontroladores (PIC16F877A)
155
TECLADO ;********************************************************************** ;Tablas de datos KEY_TAB movf DATO,w addwf PCL,F retlw 0xBE ;Código tecla 0 retlw 0x77 ;Código tecla 1 retlw 0xB7 ;Código tecla 2 retlw 0xD7 ;Código tecla 3 retlw 0x7B ;Código tecla 4 retlw 0xBB ;Código tecla 5 retlw 0xDB ;Código tecla 6 retlw 0x7D ;Código tecla 7 retlw 0xBD ;Código tecla 8 retlw 0xDD ;Código tecla 9 retlw 0x7E ;Código tecla A retlw 0xDE ;Código tecla B retlw 0xEE ;Código tecla C retlw 0xED ;Código tecla D retlw 0xEB ;Código tecla E retlw 0xE7 ;Código tecla F Curso básico de microcontroladores (PIC16F877A)
156
TECLADO TONO movf DATO,w addwf PCL,F retlw 0x08 ; 0 retlw 0x18 ; 1
retlw 0xA8 ; A retlw 0xB8 ; B retlw 0xC8 ; C retlw 0xD8 ; D retlw 0xE8 ; E retlw 0xF8 ; F Curso básico de microcontroladores (PIC16F877A)
157
TECLADO ;********************************************************************** ; Rutina que inicializa puerto B para leer el teclado KBD_INI bsf STATUS,RP0 movlw 0x30 ; Inicializa puertos movwf TRISC movlw 0xF0 movwf TRISB bcf STATUS,RP0 return Curso básico de microcontroladores (PIC16F877A)
158
TECLADO ;********************************************************************** ;Subrutina que barre teclado para detectar tecla presionada. Si se presionó ;tecla el bit 4 de la variable BARRIDO será 1, de lo contrario será 0. KBD_BARRE movlw 0xFE movwf BARRIDO BARRE1 movwf PORTB movf PORTB,W movwf TECLA andlw 0xF0 sublw 0xF0 btfss STATUS,Z goto BARREFIN bsf STATUS,C ; Establece carry en 1 rlf BARRIDO,F ; rota un bit a la izquierda btfss BARRIDO,4 movf BARRIDO,W goto BARRE1 BARREFIN return Curso básico de microcontroladores (PIC16F877A)
159
TECLADO PRÁCTICA # 8 Hacer un programa que lea el teclado y cuando detecte una tecla presionada despliegue el valor binario correspondiente a la tecla en los LED’s RB0 a RB3 y genere un tono audible diferente para cada tecla. Curso básico de microcontroladores (PIC16F877A)
160
El display de cristal líquido (LCD) es un periférico visualizador
muy potente, siendo los microcontroladores los dispositivos más adecuados para su manejo y control. En realidad un módulo LCD tiene incrustado un microcontrolador de uso específico para su funcionamiento. Los módulos LCD más comunes presentan un número variable de caracteres formados por una matriz de 5X7 pixeles en una o varias líneas. El módulo LCD modelo de HITACHI tiene la capacidad de manejar 2 líneas de 16 caracteres y dispone de 14 terminales siendo compatibles con el la mayoría de los LCD comerciales. Curso básico de microcontroladores (PIC16F877A)
161
TARJETA DE DESARROLLO Curso básico de microcontroladores (PIC16F877A)
162
La función de las terminales del módulo LCD es la siguiente:
1.- Ocho terminales (D0 – D7) reciben los caracteres en código ASCII a exhibir, así como los códigos de los comandos de control que manejan los efectos de visualización. También a través de ellos el módulo LCD envía al microcontrolador sobre su estado interno. 2.- Las terminales Vcc y Vss reciben la alimentación de +5V y tierra respectivamente. 3.- La terminal Vee regula el contraste de la pantalla al aplicarle mediante un potenciómetro una tensión variable entre 0 y +5V. Curso básico de microcontroladores (PIC16F877A)
163
4.- Las tres terminales restantes controlan las funciones principales
LCD 4.- Las tres terminales restantes controlan las funciones principales del módulo: E (Enable).- Si E = 0 el módulo se encuentra desactivado y no Funcionan las otras señales. R/W (Read/Write).- Si R/W = 0 se efectúa una operación de Escritura y si R/W = 1 se realiza una operación de lectura. RS (Register Select).- Con RS = 0 se selecciona el registro de control y con RS = 1 selecciona el registro de datos. Por D0 – D7 se tranfiere la información de control-comandos o datos de caracteres a escribir. Curso básico de microcontroladores (PIC16F877A)
164
En la tarjeta de desarrollo las terminales RE0 – RE2 se encuentran
LCD En la tarjeta de desarrollo las terminales RE0 – RE2 se encuentran conectadas a las terminales de control del LCD RS, R/W y E, respectivamente, y las terminales RD0 – RD7 del microcontrolador a las terminales D0 – D7 del LCD también en forma respectiva. Dado lo anterior, las líneas del puerto E deberán ser programadas como salidas y las líneas del puerto D deberán configurarse como entradas o salidas según sea el sentido de la información. El módulo LCD responde a una serie de comandos con los que se pueden gobernar sus distintas opciones de trabajo. Estos comandos son enviados por el programa en el PIC a través de las líneas D0 – D7 cuando RS = 0 y R/W = 0, para trabajar en modo escritura. Curso básico de microcontroladores (PIC16F877A)
165
LCD COMANDO RS R/W E D7 D6 D5 D4 D3 D2 D1 D0 TIEMPO EJEC.
CLEAR DISPLAY 1.64 ms. HOME X 1.64 ms. ENTRY MODE SET I/D S 40 ms. DISPLAY ON/OFF D C B 40 ms. CURSOR DISPLAY SHIFT S/C R/L X X 40 ms. FUNCTION SET DL N F X X 40 ms. SET CGRAM ADDRESS DIRECCIÓN DE LA CGRAM 40 ms. SET DDRAM ADDRESS DIRECCIÓN DE LA DDRAM 40 ms. READ BUSY FLAG ADDRESS BF DIRECCIÓN CGRAM O DDRAM 40 ms. WRITE DATA TO CG O DD CÓDIGO ASCII PARA LA RAM 40 ms. READ DATA TO CG O DD CÓDIGO ALMACENADO EN RAM 40 ms. Curso básico de microcontroladores (PIC16F877A)
166
S : 1 – Desplaza visualización cada vez que escribe un dato.
LCD S : 1 – Desplaza visualización cada vez que escribe un dato. 0 – Funciona en modo normal. I/D : 1 – Se incrementa la dirección del cursor. 0 – Se decrementa la dircción del cursor. S/C: 1 – Desplaza la visualización. 0 – Desplaza el cursor. R/L : 1 – El desplazamiento es a la derecha. 0 – El desplazamiento es a la izquierda. BF : 1 – El módulo LCD está ocupado. 0 – El módulo LCD está disponible. Curso básico de microcontroladores (PIC16F877A)
167
DL : 1 – Se trabaja con un bus de datos de 8 bits.
LCD DL : 1 – Se trabaja con un bus de datos de 8 bits. 0 – Se trabaja con un bus de datos de 4 bits. N : 1 – La presentación se hace en dos líneas. 0 – La presentación se hace en una línea. F : 1 – El carácter es de 5 x 10 pixeles. 0 – El carácter es de 5 x 7 pixeles. B : 1 – Hay parpadeo en el cursor. 0 – No hay parpadeo en el cursor. C : El cursor está activo. Curso básico de microcontroladores (PIC16F877A)
168
D : 1 – La pantalla está activada. X : Indeterminado.
LCD D : 1 – La pantalla está activada. X : Indeterminado. Curso básico de microcontroladores (PIC16F877A)
169
CLEAR DISPLAY.- Borra la pantalla del módulo LCD y coloca
COMANDOS DEL LCD CLEAR DISPLAY.- Borra la pantalla del módulo LCD y coloca el cursor en la primera posición, que es la dirección 0. Por default pone el bit I/D = 1 para auto incremento de la posición del cursor. HOME.- Pone el cursor en la dirección 0. No varía el contenido de la memoria DDRAM que guarda los datos y queda direccionada desde la posición 0. ENTRY MODE SET.- Establece la dirección del movimiento del cursor (I/D). Si S = 1desplaza la visualización cada vez que se escribe un dato. Si S = 0 la presentación es normal. Curso básico de microcontroladores (PIC16F877A)
170
DISPLAY ON/OFF CONTROL.- Activa o desactiva el display
LCD DISPLAY ON/OFF CONTROL.- Activa o desactiva el display (D) Y al cursor (C) y determina si parpadea o no. CURSOR DISPLAY SHIFT.- Mueve el cursor y desplaza la visualización sin cambiar el contenido de la memoria DDRAM. FUNCTION SET.- Establece el número de líneas de interfase con el bus de datos. Toma por default 8 bits (DL = 1). Especifica el número de líneas, que para que sean 2 se debe poner N = 1 y el formato del carácter es de 5 x 7 pixeles si F = 0. Curso básico de microcontroladores (PIC16F877A)
171
SET CGRAM ADDRESS.- El módulo LCD tiene definidos los
caracteres ASCII, pero además permite que el usuario defina un Máximo de 9 caracteres nuevos. Estos se guardan en la memoria CGRAM de 64 bytes. Cada carácter está especificado con un número de bytes comprendido entre 6 y 16, según su complejidad. Dichos bytes se almacenan en posiciones sucesivas de la CGRAM. Con este comando se indica la dirección de la CGRAM a partir de La cual se irán almacenando los bytes que definen al nuevo Carácter. Tras ejecutar este comando, todos los datos que se lean o escriban, posterioremente lo hacen desde esta posición de la CGRAM. Curso básico de microcontroladores (PIC16F877A)
172
SET DDRAM ADDRESS.- Establece la dirección de la DDRAM
LCD SET DDRAM ADDRESS.- Establece la dirección de la DDRAM a partir de la cual todos los datos que se lean o escriban Posteriormente lo harán desde esa posición. Los 16 caracteres del primer renglón ocupan las direcciones 80h – 8Fh, y los del segundo desde la C0h – CFh. READ BUSY FLAG ADDRESS.- Es un comando para la lectura de la bandera “busy” que indica cuando se está ejecutando un comando previo en el módulo LCD. Además proporciona la dirección de la CGRAM o DDRAM que se haya utilizado la Última vez. Curso básico de microcontroladores (PIC16F877A)
173
WRITE DATA TO CGRAM o DDRAM.- Se escriben en la
LCD WRITE DATA TO CGRAM o DDRAM.- Se escriben en la DDRAM los datos (caracteres ASCII) que se quieren visualizar. También se escriben en la CGRAM los bytes de los nuevos caracteres creados por el usuario. Se usa una memoria u otra según haya sido la instrucción de direccionamiento previa, que hará que se refiera a la CGRAM o a la DDRAM. READ DATA TO CGRAM o DDRAM.- Es igual que el comando anterior, pero para una operación de lectura. Curso básico de microcontroladores (PIC16F877A)
174
Cuando se aplica adecuadamente la tención de alimentación al
LCD Cuando se aplica adecuadamente la tención de alimentación al módulo LCD, se ejecuta automáticamente la siguiente secuencia de inicialización: 1.- Se ejecuta el comando CLEAR DISPLAY borrando la pantalla. La bandera BUSY se mantiene activada por 15 ms. hasta que se completa dicha secuencia. 2.- Se ejecuta el comando FUNCTION SET, que establece la interfase con el bus de datos a 8 bits normalmente (DL = 1), y el número de líneas. Curso básico de microcontroladores (PIC16F877A)
175
3.- Se ejecuta el comando DISPLAY ON/OFF CONTROL, que
LCD 3.- Se ejecuta el comando DISPLAY ON/OFF CONTROL, que hace que el display quede en OFF (D = 0), también el cursor (C = 0) y sin parpadeo (B = 0.) 4.- Se ejecuta el comando ENTRYMODE SET, que establece la dirección de movimiento del cursor con autoincremento (I/D = 1) y el modo de visualización normal, sin desplazamiento (S = 0). Si al conexión de la alimentación no reúne todas las condiciones que exige el módulo LCD, habrá que realizar la secuencia de inicialización por software. En cualquier caso es importante enviar al LCD la primera instrucción de trabajo después de transcurrir 15 ms. para completar la secuencia de inicialización. Curso básico de microcontroladores (PIC16F877A)
176
PRÁCTICA # 9 Hacer un programa que lea el teclado y cuando detecte una tecla presionada despliegue el valor de la tecla en el correspondiente a la tecla en los LED’s RB0 a RB3 y genere un tono audible diferente para cada tecla. Curso básico de microcontroladores (PIC16F877A)
177
LECTURA Y ESCRITURA DE LAS MEMORIAS EEPROM Y FLASH
En el PIC16F877 es posible leer y escribir tanto la memoria de datos EEPROM como la memoria de código FLASH. Lo anterior significa que un programa dinámicamente puede generar información que se puede grabar en la memoria FLASH directamente, sin necesidad de grabador externo. En el PIC16F877 la memoria flash tiene un tamaño de 8K palabras de 14 bits cada una. Dado lo anterior, un solo registro no es suficiente para contener la dirección de la localidad en la que se almacenará el dato, dado que la dirección contiene 13 bits y lo mismo sucede con el dato que se va a guardar dado que este tiene una longitud de 14 bits. Curso básico de microcontroladores (PIC16F877A)
178
LECTURA Y ESCRITURA DE LAS MEMORIAS EEPROM Y FLASH
Debido a lo anterior, el registro EEADR se concatena con el EEADRH, que contendrá los 5 bits de más peso de la dirección. Por otra parte, el registro EEDATAH se concatena con el registro EEDATA y contiene los 6 bits de más peso de la palabra leída o a escribir en la FLASH. Los registros EEADRH y EEDATAH no se usan en las operaciones del lectura/escritura de la memoria EEPROM. Curso básico de microcontroladores (PIC16F877A)
179
LECTURA Y ESCRITURA DE LAS MEMORIAS EEPROM Y FLASH
EEADRH (10Fh) EEADR (10Dh) X X X X X X X X X X X X X DIRECCIÓN DE 13 BITS (8K) EEDATAH (10Eh) EEDATA (10Ch) X X X X X X X X X X X X X X DATO DE 14 BITS (FLASH) Curso básico de microcontroladores (PIC16F877A)
180
LECTURA Y ESCRITURA DE LAS MEMORIAS EEPROM Y FLASH
Para controlar las operaciones de lectura/escritura de las memorias EEPROM y FLASH hay dos registros denominados EECON1 y EECON2. EECON1 ocupa la dirección 18Ch y EECON2 no se encuentra implementado físicamente y solo se encuentra en la operación de escritura que tarda 2 ms. aproximadamente. EECON1 EEPGD - - - WRERR WREN WR RD 18Ch Curso básico de microcontroladores (PIC16F877A)
181
LECTURA Y ESCRITURA DE LAS MEMORIAS EEPROM Y FLASH
EEPGD – Bit de selección de memoria. 1 – Accesa memoria de programa (FLASH). 0 – Accesa memoria de datos EEPROM. WRERR – Bandera de error de la EEPROM. 1 – Una operación de escritura fue prematuramente terminada. 0 – Operación de escritura completada. WREN – Permiso de escritura en la EEPROM. 1 – Habilita escritura. 0 – Inhibe escritura. Curso básico de microcontroladores (PIC16F877A)
182
LECTURA Y ESCRITURA DE LAS MEMORIAS EEPROM Y FLASH
WR – Control de escritura. 1 – Inicia ciclo de escritura. El bit es limpiado una vez que el proceso de escritura es completado. Este bit solo puede ser puesto a 1 pero no limpiado. 0 – Se completó el ciclo de escritura. RD – Control de lectura. 1 – Inicia ciclo de lectura de la EEPROM. RD es limpiado por hardware y solo puede ser puesto a 1 por software. 0 – No inicia lectura de EEPROM. Curso básico de microcontroladores (PIC16F877A)
183
LECTURA Y ESCRITURA DE LAS MEMORIAS EEPROM Y FLASH
Antes de iniciar la escritura de una palabra se escribe en EECON2 primeramente el dato 55h y después AAh, lo cual es recomendado por el fabricante. A fin de evitar escrituras indeseadas en la EEPROM causadas por Transitorios en la inicialización del microcontrolador, se controla el bit WREN, prohibiendo cualquier operación de escritura mientras transcurren los 72 ms. que temporiza el timer del power-up. Curso básico de microcontroladores (PIC16F877A)
Presentaciones similares
© 2025 SlidePlayer.es Inc.
All rights reserved.