Está en la página 1de 189

CURSO BSICO DE MICROCONTROLADORES (PIC16F877A)

Dr. Oscar Fernando Nez Olvera

SISTEMA BSICO DE CMPUTO


BUS DE DATOS BUS DE DIRECCIONES

CPU

MEMORIA

E/S

BUS DE CONTROL

2 Curso bsico de microcontroladores (PIC16F877A)

SISTEMA BSICO DE CMPUTO

CPU (Unidad de Control y Proceso).- Realiza las operaciones Aritmticas y lgicas que requiere la ejecucin del programa.

MEMORIA.- Dispositivos de almacenamiento temporal o permanente de datos e instrucciones del programa.


DISPOSITIVOS DE ENTRADA/SALIDA.- Permiten la comunicacin de datos con los perifricos del sistema.

3 Curso bsico de microcontroladores (PIC16F877A)

SISTEMA BSICO DE CMPUTO Bus de datos.- Conjunto de lneas que permiten el intercambio de datos entre el CPU y los mdulos de memoria y dispositivos E/S. Pueden ser de 8, 16 o 32 bits. Bus de direcciones.- Conjunto de lneas a travs de las cuales el CPU enva la direccin de la localidad o dispositivo de E/S que requiere accesar. Bus de control.- Conjunto de lneas a travs de las cuales el CPU coordina el intercambio de datos y direcciones con los mdulos de memoria y E/S, por medio de seales de lectura (RD), escritura (WR), seleccin (CS), etc.
4 Curso bsico de microcontroladores (PIC16F877A)

MICROPROCESADOR Y MICROCONTROLADOR Microprocesador.- Dispositivo que contiene la unidad de control y proceso de un sistema de cmputo y requiere la implementacin externa de los mdulos 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 mdulos de E/S.

5 Curso bsico de microcontroladores (PIC16F877A)

EL MICROCONTROLADOR PIC16F877A

6 Curso bsico de microcontroladores (PIC16F877A)

CARACTERSTICAS DEL MICROCONTROLADOR PIC16F877A

- Set de 35 instrucciones. - Todas las instrucciones se ejecutan en un ciclo de instruccin, excepto las de saltos que toman 2 ciclos. - Velocidad de operacin: DC-20Mhz. reloj de entrada. DC-200ns. ciclo de instruccin. - Memoria del programa: 8 K, flash (14 bits). 8192 locs. - Memoria de datos: 368 x 8 bits de memoria RAM. - Memoria de datos EEPROM: 256 x 8 bytes.

7 Curso bsico de microcontroladores (PIC16F877A)

DISPOSITIVOS DE E/S (PERIFRICOS)


- 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 mdulos de Captura, Comparacin y Modulacin de ancho de pulso (PWM). - Universal Synchronous Asinchronous Receiver Transmiter (USART/SCI).
8 Curso bsico de microcontroladores (PIC16F877A)

DISPOSITIVOS DE E/S (PERIFRICOS) - Puerto paralelo esclavo (PPS), con seales de control RD, WR, y CS. - Convertidor Analgico/Digital (A/D) de 10 bits y 8 canales de entrada. - 2 comparadores analgicos con voltaje de referencia (Vref) programable, con salidas externamente accesibles.

9 Curso bsico de microcontroladores (PIC16F877A)

CARACTERSTICAS ESPECIALES - 100,000 ciclos borrado/escritura para la memoria flash. - 1,000,000 ciclos de borrado/escritura para la memoria de datos EEPROM. - Retencin de datos de la memoria EEPROM > 40 aos. - 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. - Proteccin de cdigo programable. - Modo de bajo consumo de energa SLEEP. - Opciones del tipo de oscilador a seleccionar. - In-circuit debug (ICD) mediante dos pines.
10 Curso bsico de microcontroladores (PIC16F877A)

ARQUITECTURA DE LA FAMILIA PIC16FXX.

Arquitectura RISC (Reduced Instruction Set Computer): Repertorio de instrucciones pequeo y simple que se ejecutan casi todas en un ciclo de instruccin. 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.

11 Curso bsico de microcontroladores (PIC16F877A)

ARQUITECTURAS DE COMPUTADORAS

ARQUITECTURA VON NEWMAN


Utiliza el mismo dispositivo de almacenamiento tanto para las instrucciones como para los datos y los accesa a travs del mismo bus.
MEMORIA DE INSTRUCCIONES CPU 8 BUS DEL SISTEMA MEMORIA DE DATOS
12 Curso bsico de microcontroladores (PIC16F877A)

ARQUITECTURAS DE COMPUTADORAS

ARQUITECTURA HARVARD
Utiliza dispositivos de almacenamiento fsicamente 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

8 BUS DE DATOS

CPU

8 BUS DE DIRECCIONES

MEMORIA DE INSTRUCCIONES

13 Curso bsico de microcontroladores (PIC16F877A)

ARQUITECTURA DE LA FAMILIA PIC16FXX.

MEMORIA DE DATOS

8 BUS DE DATOS

CPU

14 BUS DEL PROGRAMA

MEMORIA DE INSTRUCCIONES

14 Curso bsico de microcontroladores (PIC16F877A)

ARQUITECTURA DE LA FAMILIA PIC16FXX.


BUS DE DATOS REGISTRO DE INSTRUCCIONES MEMORIA RAM (REGISTROS)

MPX W

ALU

15 Curso bsico de microcontroladores (PIC16F877A)

ARQUITECTURA DEL PIC16F877A

16 Curso bsico de microcontroladores (PIC16F877A)

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 cdigo de la instruccin (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. 17
Curso bsico de microcontroladores (PIC16F877A)

MEMORIA DEL PROGRAMA

Es la memoria en donde se almacena el programa que ser ejecutado por el microcontrolador. Esta memoria generalmente es del tipo flash o EEPROM, ya que se requiere que el programa permanezca almacenado an despus de retirar la alimentacin del dispositivo. Tiene una capacidad de 8K palabras de 14 bits y est dividida en 4 pginas de 2K palabras. Es direccionada por el Contador del Programa (PC) que Tiene un tamao de 13 bits que puede direccionar desde la localidad 0000h a la 1FFFh.
18 Curso bsico de microcontroladores (PIC16F877A)

MEMORIA DEL PROGRAMA

19 Curso bsico de microcontroladores (PIC16F877A)

MEMORIA DEL PROGRAMA

Fsicamente el apuntador del programa se encuentra implementado 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.

20 Curso bsico de microcontroladores (PIC16F877A)

MEMORIA DEL PROGRAMA

21 Curso bsico de microcontroladores (PIC16F877A)

MEMORIA DEL PROGRAMA

En las instrucciones GOTO y CALL los 11 bits de menor peso del PC provienen del cdigo de la instruccin y los dos bits restantes de los bits PCLATH<4:3>.

22 Curso bsico de microcontroladores (PIC16F877A)

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 guardado ser el primero en salir. Tiene 8 niveles de profundidad y cada uno con 13 bits.

La funcin del stack es almacenar la direccin de retorno al momento de saltar hacia una subrutina, de manera que despus de ejecutar una subrutina pueda continuar la ejecucin del programa.

23 Curso bsico de microcontroladores (PIC16F877A)

MEMORIA DEL PROGRAMA


SUB1 RETURN
MAIN 0150h PC=0150h

0157h

STACK

PC

PC=0201h

PC=01FFh PC=0200h

CALL SUB1

01FFh 0200h 0201h

PC=PC+1 STACK STACK(1)=0201h STACK

PC=SUB1 PC=0150h 0201

24 Curso bsico de microcontroladores (PIC16F877A)

MEMORIA DEL PROGRAMA


SUB2 RETURN
0125h PC=0125h

012Ch

STACK

PC

PC=0154h

SUB1
PC=0152H PC=0153H

CALL SUB2

0150h
0153h 0154h 0157h PC=PC+1 STACK STACK(2)=0154h STACK PC=SUB2 PC=0125h 0201h 0154h

RETURN

25 Curso bsico de microcontroladores (PIC16F877A)

VECTORES RESET E INTERRUPTION

Un vector es una localidad de la memoria del programa cuya direccin es cargada en el PC cuando ocurre un determinado evento. En un vector generalmente se almacena una instruccin GOTO que enva el programa a ejecutar una rutina de servicio o a una localidad de memoria determinada.

26 Curso bsico de microcontroladores (PIC16F877A)

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 energa al microcontrolador o despus de que ocurre un cambio de 1 a 0 en el pin MCLR/Vpp. Generalmente se guarda en el vector de RESET una instruccin de salto incondicional GOTO que manda el programa hacia la primera instruccin del programa principal.

27 Curso bsico de microcontroladores (PIC16F877A)

VECTORES RESET E INTERRUPTION

RESET

0000h 0001h 0002h 0003h INT GOTO SERV_INT 0004h MAIN 0005h 0006h 0007h 0008h 0009h 000Ah 000Bh GOTO MAIN

28 Curso bsico de microcontroladores (PIC16F877A)

VECTORES RESET E INTERRUPTION

Vector de INTERRUPCIN.- En el PIC16F877A el vector de INTERRUPCIN se encuentra en la localidad 0004h, que es direccionada por el PC cuando ocurre un evento que provoca una interrupcin. Generalmente se guarda en el vector de INTERRUPCIN una instruccin de salto incondicional GOTO que manda el programa hacia la primera instruccin de la rutina de servicio de interrupcin.

29 Curso bsico de microcontroladores (PIC16F877A)

VECTORES RESET E INTERRUPTION


0000h 0001h 0002h 0003h INT GOTO SERV_INT 0004h 0005h 0006h 0007h 0008h SERV_INT 0009h 000Ah 000Bh GOTO MAIN RESET STACK 0061h

1 PC=PC+1 STACK STACK(1)=0061h PC=INT PC=0004h

RETFIE
MAIN

Interrupcin

. . . . .

PC=SERV_INT

PC=0009h

0050h

STACK

PC

PC=0061h

0060h 0061h 30

Curso bsico de microcontroladores (PIC16F877A)

ESTRUCTURA DE UN PROGRAMA (Template.asm)


list p=16F877A #include <p16F877A.inc> ;***** DEFINICIN DE VARIABLES VAR1 VAR2 EQU EQU . . EQU 0x20 0x21 ; Indica el modelo de PIC que se usa ; Es una directiva de ensamblador ; definicin de registros del microcontrolador

VARn

0x7F

;********************************************************************** ORG 0x00 ; vector de reset goto MAIN ; salta al inicio del programa ; ; ORG goto ORG SUB1 0x04 INT 0x05 ; vector de interrupcin ; salta a la rutina de servicio

;CDIGO DE SUBRUTINA1 return

SUB2

;CDIGO DE SUBRUTINA2 return

MAIN

;CDIGO DEL PROGRAMA PRINCIPAL END ; directiva 'fin del programa'

31 Curso bsico de microcontroladores (PIC16F877A)

DIRECTIVAS DE ENSAMBLADOR

list

p=16F877A

; Indica el modelo de PIC que se usa

#include <p16F877A.inc> ; Definicin de registros del microcontrolador VAR1 ORG EQU 0x00 0x20 ; Declara VAR1 en direccin 0x20 ; Asigna direccin inicial para el cdigo ; que se lista a continuacin ; Indica que no hay ms cdigo vlido a ; continuacin

END

32 Curso bsico de microcontroladores (PIC16F877A)

PROGRAMA SUMA.ASM

list

p=16F877A

#include <p16F877A.inc> ;***** DEFINICIN DE VARIABLES OPERANDO1 EQU OPERANDO2 EQU RESULTADO EQU 0x20 0x21 0x22

; Indica el modelo de PIC que se usa ; Es una directiva de ensamblador ; definicin de registros del microcontrolador

;********************************************************************** ORG 0x00 ; vector de reset goto MAIN ; salta al inicio del programa ORG MAIN movlw movwf movlw movwf movf addwf movwf END 0x05 0x06 OPERANDO1 0x02 OPERANDO2 OPERANDO1,W OPERANDO2,W RESULTADO ; directiva 'fin del programa'

33 Curso bsico de microcontroladores (PIC16F877A)

INSTRUCCIONES USADAS EN SUMA.ASM

goto

MAIN

;Salto incondicional a etiqueta MAIN ;Mueve valor inmediato 0x06 a W ;Mueve W a OPERANDO1

movlw 0x06 movwf OPERANDO1 movf

OPERANDO1,W ;Mueve OPERANDO1 a W

addwf OPERANDO2,W ;Suma W y OPERANDO2

34 Curso bsico de microcontroladores (PIC16F877A)

PRCTICA # 1

Usando el simulador del MPLAB editar el programa SUMA.ASM y ejecutarlo usando las herramientas de visualizacin de variables y registros.

35 Curso bsico de microcontroladores (PIC16F877A)

CONTENIDO DEL REPORTE

Portada con la siguiente informacin: a) Nombre de la escuela b) Universidad Autnoma de San Lus Potos c) Nmero y nombre de la prctica d) Integrantes del equipo e) Fecha de entrega

Introduccin Objetivo de la prctica Material y equipo utilizado Diagrama esquemtico del circuito Programa documentado (si incluye programa) Desarrollo de la prctica Conclusiones

36 Curso bsico de microcontroladores (PIC16F877A) M.C. Oscar F. Nez Olvera

MEMORIA DE DATOS RAM

Es la memoria en donde se almacenan los datos que son procesados por el programa.

La memoria esttica RAM (SRAM) se divide en dos partes de acuerdo a su funcin: registros de funcin especfica (SFR) y registros de propsito general (GPR).

37 Curso bsico de microcontroladores (PIC16F877A)

MEMORIA DE DATOS RAM

Registros de funcin especfica (SFR).- Son localidades de memoria reservadas para los registros que son los encargados del procesador y sus recursos. La funcin de cada registro ya se encuentra definida. Registros de propsito general (GPR).- Son localidades de memoria en donde se almacenan de manera temporal los datos del programa. Estos datos se manejan y reconocen como variables dentro del programa y son declaradas por el programador.

38 Curso bsico de microcontroladores (PIC16F877A)

MEMORIA DE DATOS RAM

La memoria RAM esttica tambin se encuentra dividida en 4 bancos con 128 bytes cada uno. En las posiciones iniciales de cada banco se ubican los registros de funcin especfica (SFR) y algunos bancos se encuentran repetidos para simplificar su acceso.

39 Curso bsico de microcontroladores (PIC16F877A)

MEMORIA DE DATOS RAM

40 Curso bsico de microcontroladores (PIC16F877A)

MEMORIA DE DATOS RAM

41 Curso bsico de microcontroladores (PIC16F877A)

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

RP1

RP0

0
1

0
0

0
1

2
3

1
1

0
1

42 Curso bsico de microcontroladores (PIC16F877A)

MEMORIA DE DATOS RAM

Para direccionar la memoria de datos RAM estructurada en 4 bancos de 128 bytes, existen dos modos diferentes:
- Direccionamiento directo. - Direccionamiento indirecto.

43 Curso bsico de microcontroladores (PIC16F877A)

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 direccin dentro del banco la determinan 7 bits procedentes del cdigo de operacin de la instruccin. Direccionamiento indirecto.- Se usa el registro FSR, en el que sus 7 bits de menor peso sealan la direccin 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>.

44 Curso bsico de microcontroladores (PIC16F877A)

MEMORIA DE DATOS RAM

45 Curso bsico de microcontroladores (PIC16F877A)

MEMORIA DE DATOS RAM

El direccionamiento indirecto se usa cuando en una instruccin se utiliza como operando el registro INDF que ocupa la primera localidad en todos los bancos. El registro INDF no es un registro fsico. Al direccionar INDF en realidad se direcciona la localidad cuya direccin est contenida en el registro FSR (FSR es un apuntador).

46 Curso bsico de microcontroladores (PIC16F877A)

MEMORIA DE DATOS RAM

Ejemplo de direccionamiento indirecto:


STATUS 0 IRP PORTA PORTB 10h 0Ah 05H 06H FSR 05h 04H

INDF

10h

00H

10h 0Ah

05H 06H FSR 06h 04H

INDF

0Ah

00H 47

Curso bsico de microcontroladores (PIC16F877A)

REGISTRO STATUS

48 Curso bsico de microcontroladores (PIC16F877A)

REGISTRO STATUS

49 Curso bsico de microcontroladores (PIC16F877A)

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 nmero 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)
50 Curso bsico de microcontroladores (PIC16F877A)

PUERTOS DIGITALES (E/S)

Cada lnea puede configurarse independientemente como entrada o como salida, segn el estado del bit asociado del registro de configuracin de cada puerto (TRISA, TRISB, TRISC, TRISD y TRISE).
Se llaman PORTA, PORTB, PORTC, PORTD y PORTE, los registros que guardan la informacin que entra o sale por los puertos y ocupan las direcciones 05h, 06h, 07h, 08h y 09h respectivamente en el banco 0 de la memoria de datos.

51 Curso bsico de microcontroladores (PIC16F877A)

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 1 Entrada (Input) 0 Salida (Output)
52 Curso bsico de microcontroladores (PIC16F877A)

PUERTOS DIGITALES (E/S)

Todas las lneas de los puertos digitales admiten niveles de entrada TTL y de salida CMOS. Cada pin de salida puede suministrar una corriente mxima de 20 mA. y progarmado como entrada puede absorber hasta 25 mA. sin embargo, por limitaciones en la disipacin mxima del chip se recomienda no exceder la corriente mxima de absorcin de 90 mA. y la de suministro de 60 mA. en el puerto A.
53 Curso bsico de microcontroladores (PIC16F877A)

PUERTO A

RA0-RA3

54 Curso bsico de microcontroladores (PIC16F877A)

PUERTO A
1

1
0 0 0 0 1 1 RA0-RA3

55 Curso bsico de microcontroladores (PIC16F877A)

PUERTO A
0

0
1 1 1 0 1 0 RA0-RA3

56 Curso bsico de microcontroladores (PIC16F877A)

PUERTO A

1 0 X RA0-RA3

1 0 0

57 Curso bsico de microcontroladores (PIC16F877A)

PUERTO A

La lnea 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.

58 Curso bsico de microcontroladores (PIC16F877A)

PUERTO A

RA4/T0CKI

59 Curso bsico de microcontroladores (PIC16F877A)

PUERTO A

60 Curso bsico de microcontroladores (PIC16F877A)

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.
0 0 X 6 1 5 0 4 0 3 0 2 1 1 1 0 0x23

TRISA

X 7

TRISx

1 Entrada (Input) 0 Salida (Output)


61

Curso bsico de microcontroladores (PIC16F877A)

PUERTO A

bcf bcf clrf bsf movlw movwf movlw movwf

STATUS,RP0 STATUS,RP1 PORTA STATUS,RP0 0x06 ADCON1 0x23 TRISA

;Selecciona banco 0 ;Limpia los latches de salida del puerto A ;Selecciona banco 1 ;Configura todos los pines del puerto A

;como E/S digitales


;Programa RA0, RA1 y RA5 como entradas ;y RA2, RA3 y RA4 como salidas

bcf movlw movwf

STATUS,RP0 0x0C PORTA

;Selecciona banco 0

;Saca 0x0C por puerto A

62 Curso bsico de microcontroladores (PIC16F877A)

PUERTO A

bcf
bsf clrf

STATUS,RP0
STATUS,RP0 PORTA

;Pone en 0 el bit RP0 del registro STATUS


;Pone en 1 el bit RP0 del registro STATUS ;Limpia el registro PORTA (PORTA = 0x00)

63 Curso bsico de microcontroladores (PIC16F877A)

PUERTO B

El puerto B consta de 8 lneas bidireccionales de E/S (RB7 RB0) cuya informacin se almacena en el registro PORTB que ocupa las direccines 06 del banco 0 y 106h del banco 2. El registro de configuracin TRISB ocupa las direccines 86h y 186h de los bancos 1 y 3 respctivamente.
El pin RB0/INT tiene dos funciones multiplexadas. Adems de E/S acta como entrada de interrupcin externa. Todos los pines del puerto B pueden ser conectados a una resistencia interna Pull-Up de valor alto conectada a Vdd.
64 Curso bsico de microcontroladores (PIC16F877A)

PUERTO B

65 Curso bsico de microcontroladores (PIC16F877A)

PUERTO B

66 Curso bsico de microcontroladores (PIC16F877A)

PUERTO B

67 Curso bsico de microcontroladores (PIC16F877A)

PUERTO C

68 Curso bsico de microcontroladores (PIC16F877A)

PUERTO D

69 Curso bsico de microcontroladores (PIC16F877A)

PUERTO E

70 Curso bsico de microcontroladores (PIC16F877A)

PRCTICA # 2

Hacer un programa que programe todos los bits del puerto B como salidas y enve el valor 0x55 para visualizar en los LEDs de la tarjeta de desarrollo.

71 Curso bsico de microcontroladores (PIC16F877A)

TARJETA DE DESARROLLO

72 Curso bsico de microcontroladores (PIC16F877A)

TARJETA DE DESARROLLO

73 Curso bsico de microcontroladores (PIC16F877A)

SET DE INSTRUCCIONES

El microcontrolador PIC16F877A cuenta con un set de 35 instrucciones con las siguientes caractersticas: - Las instrucciones son simples y rpidas. - Las instrucciones son ortogonales. (Cualquier instruc cin puede usar cualquier operando). - Todas las instrucciones tienen 14 bits y los datos 1 byte.

74 Curso bsico de microcontroladores (PIC16F877A)

SET DE INSTRUCCIONES

El repertorio de instrcciones 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.

75 Curso bsico de microcontroladores (PIC16F877A)

SET DE INSTRUCCIONES
Instrucciones orientadas al manejo de registros byte. f Designador de registro.- especifica que registro ser usado por la instruccin. Puede ser cualquier registro de la memoria de datos. d Registro destino.- especifica en donde ser colocado el resultado. si si d = 0 Resultado d = 1 Resultado W f
76 Curso bsico de microcontroladores (PIC16F877A)

SET DE INSTRUCCIONES

Ejemplo: W 0F W 0F

andwf PORTA,1
PORTA 3A PORTA 0A
77 Curso bsico de microcontroladores (PIC16F877A)

SET DE INSTRUCCIONES
Instrucciones orientadas al manejo de bits. f Designador de registro.- Especifica el registro en el cual se localiza el bit. b Nmero de bit.- Indica el bit que ser afectado por la operacin. b0 7

78 Curso bsico de microcontroladores (PIC16F877A)

SET DE INSTRUCCIONES

Ejemplo:

PORTA 00

bsf PORTA,0

PORTA 01

79 Curso bsico de microcontroladores (PIC16F877A)

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 direccin dentro de un banco, de la localidad hacia donde habr de cambiar el flujo del programa.

80 Curso bsico de microcontroladores (PIC16F877A)

SET DE INSTRUCCIONES

81 Curso bsico de microcontroladores (PIC16F877A)

SET DE INSTRUCCIONES
Ejemplos:

W 01

iorlw 0x04

W 05

call DELAY

82 Curso bsico de microcontroladores (PIC16F877A)

SET DE INSTRUCCIONES
Instrucciones que manejan registros

ADDWF f,d ANDWF f,d CLRF f CLRW COMF f,d DECF f,d INCF f,d IORWF f,d MOVF f,d MOVWF f NOP RLF f,d RRF f,d SUBWF f,d SWAPF f,d XORWF f,d

Suma W y f AND W y f Limpia f (pone todos los bita a cero) Borra W Complementa f (invierte ceros y nos) Decrementa f Incrementa f OR W y f Mueve f al destino indicado por d Mueve W a f No operacin Rota f a la izquierda a travs del carry Rota f a la derecha a travs del carry Resta W a f Intercambia nibbles XOR W y f
83

Curso bsico de microcontroladores (PIC16F877A)

SET DE INSTRUCCIONES
RLF C
MSB

f
LSB

RRF C
MSB

f
LSB

84 Curso bsico de microcontroladores (PIC16F877A)

SET DE INSTRUCCIONES

Instrucciones que manejan bits BCF BSF f,b f,b Borra el bit b del registro f Pone a 1 el bit b del registro f

Instrucciones de salto condicional BTFSC f,b BTFSS f,b Se salta la siguiente instruccin si el bit b = 0. Se salta la siguiente instruccin si el bit b = 1. Decrementa f y se salta la siguiente instruccin si f = 0 Decrementa f y se salta la siguiente instruccin si f = 0
85 Curso bsico de microcontroladores (PIC16F877A)

DECFSZ f,d INCFSZ f,d

SET DE INSTRUCCIONES

APAGA CONTINUA

btfsc goto bsf goto bcf -

PORTB,2 APAGA PORTB,2 CONTINUA PORTB,2

86 Curso bsico de microcontroladores (PIC16F877A)

SET DE INSTRUCCIONES

DELAY movlw movwf DEL2 movlw movwf DEL1 decfsz goto decfsz goto return

0xFF DELH 0xFF DELL DELL,f DEL1 DELH,f DEL2

87 Curso bsico de microcontroladores (PIC16F877A)

SET DE INSTRUCCIONES
Instrucciones que manejan operandos literal

ADDLW k ANDLW k IORLW k MOVLW k SUBLW k XORLW k

Suma valor imnediato k a W AND valor inmediato k con W OR valor inmediato k con W Mueve valor inmediato k a W Resta W del valor inmediato k XOR valor inmediato k con W

Instrucciones de control y especiales CALL k CLRWDT GOTO k RETFIE RETLW k RETURN SLEEP
Curso bsico de microcontroladores (PIC16F877A)

Llama a subrutina Refresca Watch-dog Salto incondicional Retorno de interrupcin Retorno de subrutina con W = k Retorno de subrutina Pasa al modo de reposo SLEEP
88

PRCTICA # 3
a) Hacer un programa que encienda y apague el LED conectado a la terminal RB2 usando la subrutina DELAY para alcanzar a visualizar el cambio. b) Modificar el programa para implementar un contador de 00h a 3Fh y desplegar el valor en los LEDs conectados al puerto B.

89 Curso bsico de microcontroladores (PIC16F877A)

MANEJO DE PERIFRICOS
Perifricos digitales de salida LEDs El LED es uno de los dispositivos de salida ms sencillos y econmicos. Segn el nivel lgico que se aplique a su ctodo o nodo se enciende o apaga. Las lneas del PIC pueden suministrar suficiente corriente para encender un LED conectndolo a un pin de salida a travs de una resistencia limitadora.
90 Curso bsico de microcontroladores (PIC16F877A)

MANEJO DE PERIFRICOS

91 Curso bsico de microcontroladores (PIC16F877A)

MANEJO DE PERIFRICOS
A veces es necesario manejar varios LEDs u otro tipo de carga que requiere ms corriente de la que puede entregar una lnea del PIC. En este caso es necesario introducir un transistor que funciona como amplificador de corriente.

92 Curso bsico de microcontroladores (PIC16F877A)

MANEJO DE PERIFRICOS
RELEVADORES

El manejo de un relevador brinda la oportunidad de controlar cargas que requieren mucha ms corriente. Esta corriente puede ser manejada por los contctos.

93 Curso bsico de microcontroladores (PIC16F877A)

MANEJO DE PERIFRICOS
SALIDAS OPTOACOPLADAS A veces hay que aislar elctricamente la carga que se desea controlar, de la lnea de salida. Para este fin la seal se aplica a travs de un optoacoplador con salida de transistor, de manera que no hay ninguna relacin elctrica entre el perifrico y la lnea de control.

94 Curso bsico de microcontroladores (PIC16F877A)

MANEJO DE PERIFRICOS
CONTROL DE CARGAS ALIMENTDAS CON C.A. Los triacs son dispositivos elctricos 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-acoplador con salida de triac.

95 Curso bsico de microcontroladores (PIC16F877A)

MANEJO DE PERIFRICOS

96 Curso bsico de microcontroladores (PIC16F877A)

MANEJO DE PERIFRICOS
Perifricos digitales de entrada Estos dispositivos permiten introducir un nivel lgico en el momento que se les acciona, pasando al nivel contrario cuando se deja de hacerlo.

97 Curso bsico de microcontroladores (PIC16F877A)

MANEJO DE PERIFRICOS
Todos los dispositivos electromecnicos originan un fenmeno denominado rebotes. Los rebotes se producen en el instante que se abren o cierran las laminillas metlicas 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 mltiples veces en el momento de la transicin.
REBOTES

98 Curso bsico de microcontroladores (PIC16F877A)

MANEJO DE PERIFRICOS

Una solucin para eliminar los rebotes es por medio del software, en donde se detecta el primer flanco del la seal de entrada. Posteriormente se realiza un retardo de tiempo suficiente para permitir que se estabilice la seal de entrada (15 20 ms.). Despus de transcurrido el retardo se vuelve a leer el estado de la tecla. Si se mantiene el nivel lgico que genera la tecla presionada se valida el estado de tecla presionada

99 Curso bsico de microcontroladores (PIC16F877A)

MANEJO DE PERIFRICOS
Ejemplo:

Para el siguiente circuito de entrada hacer un programa que elimine el efecto de rebotes al presionar la tecla.

100 Curso bsico de microcontroladores (PIC16F877A)

MANEJO DE PERIFRICOS

LEE BIT DE ENTRADA

NO

BIT = 0 ?
SI

DELAY

NO

BIT =0 ?
SI

101 Curso bsico de microcontroladores (PIC16F877A)

MANEJO DE PERIFRICOS

TECLA btfsc goto call btfsc goto

PORTA,5 TECLA DELAY PORTA,5 TECLA

102 Curso bsico de microcontroladores (PIC16F877A)

MANEJO DE PERIFRICOS Entradas digitales optoacopladas


En algunas ocasiones tambin se requiere aislar elctricamente el perifrico de entrada de las lneas del microcontrolador. Para este fin la seal se aplica a travs de un optoacoplador con salida a transistor usando el mismo procedimiento de aislamiento de las salidas.

103 Curso bsico de microcontroladores (PIC16F877A)

TARJETA DE DESARROLLO

104 Curso bsico de microcontroladores (PIC16F877A)

MANEJO DE PERIFRICOS PRCTICA # 4

Modificar el programa del inciso b) para implementar un contador de 00h a 52h incrementando la cuenta manualmente por medio de la tecla S2. NOTA: Usar la rutina antirebotes TECLA.

105 Curso bsico de microcontroladores (PIC16F877A)

PRCTICA # 5
Hacer un programa que controle la intensidad luminosa en una lmpara 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.

106 Curso bsico de microcontroladores (PIC16F877A)

INTERRUPCIONES

Las llamadas a subrutinas mediante la instruccin CALL son desviaciones del flujo del programa originadas por dicha instruccin, por lo que se consideran sncronas. Las interrupciones son desviaciones del flujo del programa originadas asincrnicamente por eventos que no se hayan bajo supervisin de las instrucciones.

107 Curso bsico de microcontroladores (PIC16F877A)

INTERRUPCIONES

Las interrupciones pueden ser: Externas como la generacin 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.

108 Curso bsico de microcontroladores (PIC16F877A)

INTERRUPCIONES

Cuando ocurre una interrupcin se detiene la ejecucin del programa en curso . Se guarda la direccin actual del PC en el STACK y se carga el PC con la direccin del vector de interrupcin (0004h). Generalmente se coloca en el vector de interrupcin una instruccin de salto incondicional GOTO que traslada el flujo del programa a la rutina de servicio de interrupcin.

109 Curso bsico de microcontroladores (PIC16F877A)

INTERRUPCIONES

Al inicio de una rutina de interrupcin es conveniente guardar en la memoria de datos aquellos registros que dentro de la rutina de servicio de interrupcin se van a emplear y ser alterado su contenido. Antes del retorno de la rutina de servicio se deben restaurar los valores en dichos registros para continuar la ejecucin del programa.

110 Curso bsico de microcontroladores (PIC16F877A)

INTERRUPCIONES
Causas de interrupcin: El PIC16F877A cuenta con diversas fuentes de interrupcin que provienen de los diferentes mdulos, si embargo por ahora nos enfocaremos al estudio de las interrupciones que son controladas por el registro INTCON que son: - Activacin del pin RB0/INT. - Desbordamiento del TMR0. - Cambio de estado en uno de los pines RB7:RB4.

111 Curso bsico de microcontroladores (PIC16F877A)

INTERRUPCIONES

112 Curso bsico de microcontroladores (PIC16F877A)

INTERRUPCIONES

113 Curso bsico de microcontroladores (PIC16F877A)

INTERRUPCIONES

El PIC16F877A puede ser interrumpido por diversas causas, pero todas ellas desvan en flujo de control al vector de interrupcin en la localidad 0004h, por lo tanto, cuando se encuentran activadas dos o ms interrupciones se debe averiguar cual de las posibles causas ha sido la responsable de la interrupcin en curso, para ello se exploran las banderas de las interrupciones que se encuentran activas.

114 Curso bsico de microcontroladores (PIC16F877A)

INTERRUPCIONES
Al inicio de la rutina de servicio de interrupcin, GIE se pone automticamente en 0 al igual que la bandera de la interrupcin se activa, con el objeto de no atender nuevas interrupciones hasta que se termine la rutina en curso. Al retorno de la interrupcin GIE nuevamente se establece en 1 de manera automtica para permitir nuevas interrupciones, sin embargo la bandera de la interrupcin debe ser limpiada por software para permitir que ocurra nuevamente esa interrupcin. El retorno de una interrupcin serealiza mediante la instruccin RETFIE.
115 Curso bsico de microcontroladores (PIC16F877A)

INTERRUPCIONES
;Rutina que determina la causa de la interrupcin INT btfss goto call bcf goto btfss goto call bcf goto INTCON,INTF PUERTOB SERV_INTEXT INTCON,INTF FIN_INT INTCON,RBIF SERV_TMR0 SERV_INTRB INTCON,RBIF FIN_INT

PUERTOB

SERV_TMR0

FIN_INT
Curso bsico de microcontroladores (PIC16F877A)

btfss goto call bcf retfie

INTCON,T0IF INT SERV_TMR0 INTCON,T0IF


116

INTERRUPCIONES
Lgica de control que origina las interrupciones

117 Curso bsico de microcontroladores (PIC16F877A)

INTERRUPCIONES
Interrupcin por desbordamiento del TMR0. Cuando el TMR0 se desborda y pasa de FFh a 00h, la bandera T0IF se pone automticamente en 1. Si adems el bit de permiso de esta interrupcin T0IE y el bit de permiso global GIE se encuentran en 1, se produce una interrupcin. El registro TMR0 puede ser cargado con un valor, a partir del cual se iniciar la cuenta hacia FFh y al ocurrir el desbordamiento de se genera la interrupcin. De esta manera el tiempo para que ocurra la interrupcin puede ser controlado.
118 Curso bsico de microcontroladores (PIC16F877A)

INTERRUPCIONES
Si no se recarga el TMR0 despus de su desbordamiento, sigue contando a partir de 00h. El registro TMR0 puede ser ledo y escrito en cualquier momento, pero cada vez que se escribe se pierden 2 ciclos de reloj en la sincronizacin. Otro factor que determina el tiempo que tarda en ocurrir la interrupcin, es el valor con el que se programa el divisor de frecuencia o tambin 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.
119 Curso bsico de microcontroladores (PIC16F877A)

INTERRUPCIONES Diagrama a bloques del TMR0/WDT

=0

=0

=0

=0

120 Curso bsico de microcontroladores (PIC16F877A)

INTERRUPCIONES

121 Curso bsico de microcontroladores (PIC16F877A)

INTERRUPCIONES
Para calcular el tiempo a controlar con el TMR0 se usan las siguientes frmulas:

Tiempo = 4*Tosc*(256 - Nd)*Rango del preescalador

Nd = 256 -

Tiempo 4*Tosc*Rango del preescalador

NOTA: Nd representa el valor decimal que se deber cargar en el registro TMR0 en su equivalente hexadecimal.
122 Curso bsico de microcontroladores (PIC16F877A)

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 interrupcin cada ms. Nd = 256 1x10 = 63h -9 4*50x10 *32
-3

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 resolucin.
123 Curso bsico de microcontroladores (PIC16F877A)

INTERRUPCIONES
El TMR0 como contador de sucesos. Los sucesos estn 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 bsico de microcontroladores (PIC16F877A)

124

INTERRUPCIONES Diagrama a bloques del TMR0/WDT

=1

=1

=1

=1

125 Curso bsico de microcontroladores (PIC16F877A)

INTERRUPCIONES PRCTICA # 6

Hacer un programa que genere una seal audible de 1Khz. y la enve al buzzer SP1 de la tarjeta de desarrollo. Con la tecla S3 debe activar el TMR0 para generar la seal audible y con S2 debe desactivar el TMR0 para detener la seal.

126 Curso bsico de microcontroladores (PIC16F877A)

INTERRUPCIONES
Interrupcin externa INT. La interrupcin externa permite atender acontecimientos externos 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 peticin de interrupcin, que ser aceptada si el bit INTE en el registro INTCON se encuentra en 1, al igual que el bit GIE.
127 Curso bsico de microcontroladores (PIC16F877A)

INTERRUPCIONES

Cuando se genera la interrupcin, la bandera INTF cambia su estado a 1 y el flujo del programa salta al vector de interrupcin para que dicha interrupcin 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.

128 Curso bsico de microcontroladores (PIC16F877A)

INTERRUPCIONES
Interrupcin RB. La peticin de interrupcin RB se genera cuando ocurre un cambio en alguno de los pines RB7, RB6, RB5 o RB4, independientemente de su estado anterior. Cuando ocurre un cambio en cualquiera de los pines RB7-RB4, se generar una peticin de interrupcin, 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 interrupcin, la bandera RBIF cambia su estado a 1 y el flujo del programa salta al vector de interrupcin para que dicha interrupcin sea atendida. 129
Curso bsico de microcontroladores (PIC16F877A)

PRCTICA # 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 debern conectarse a las terminales INT/RB0, RB4, RB5, RB6 y RB7, a travs del conector J1. Cando se dispare la alarma se deber generar una seal 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 desactivacin de la alarma deber hacerse por medio de la tecla S2, y S3 deber activar la alarma. 130
Curso bsico de microcontroladores (PIC16F877A)

INTERRUPCIONES PRCTICA # 8
Hacer un programa que implemente un contador de tiempo que inicie en 63h y se decremente cada segundo hasta llegar a cero. Cuando esto suceda se detendr la cuenta y debe generar una seal audible con el buzzer para indicar que el tiempo ha terminado. Desplegar la cuenta hexadecimal en los leds de la tarjeta. Con la tecla S3 debe iniciarse la cuenta de tiempo desde 63h nuevamente y con S2 debe detener el conteo hasta que se vuelva a presionar sta misma tecla para continuar la cuenta regresiva.
Curso bsico de microcontroladores (PIC16F877A)

131

EL WATCHDOG TIMER (WDT)

El Watchdog timer (perro guardin) es un circuito auxiliar interno del microcontrolador que supervisa el funcionamiento adecuado del microcontrolador. Si por alguna razn el programa se pierde, despus de un lapso de tiempo el WDT produce un RESET al microcontrolador que lo hace regresar al programa.

132 Curso bsico de microcontroladores (PIC16F877A)

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 programando el bit WTE en la palabra de configuracin.

El tiempo nominal del WDT es de 18 ms. pero utilizando el divisor de frecuencia puede alcanzarse hasta 2.3 seg.
133 Curso bsico de microcontroladores (PIC16F877A)

EL WATCHDOG TIMER (WDT) Diagrama a bloques del TMR0/WDT

=1

=1

=1

134 Curso bsico de microcontroladores (PIC16F877A)

EL WATCHDOG TIMER (WDT)


Para evitar que el WDT se desborde y ocasione un RESET del microcontrolador cuando el programa est corriendo normalmente, hay que limpiarlo (ponerlo a cero) mediante la instruccin CLRWDT, antes de que se produzca el desbordamiento y ocasione el RESET.

El programador debe situar la instruccin CLRWDT en sitios estratgicos 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 microcontrolador regrese al inicio del programa.
135 Curso bsico de microcontroladores (PIC16F877A)

LA PALABRA DE CONFIGURACIN Los bits de configuracin seleccionan diferentes opciones de funcionamiento y proteccin del cdigo del programa y datos. Medinte esta palabra se selecciona la funcin 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 ms all del espacio de memoria del programa y pertenece al espacio de memoria de prueba/configuracin (2000h-3FFFh). Este espacio solamente puede ser accesado durnte el proceso de programacin.
136 Curso bsico de microcontroladores (PIC16F877A)

LA PALABRA DE CONFIGURACIN

137 Curso bsico de microcontroladores (PIC16F877A)

LA PALABRA DE CONFIGURACIN

138 Curso bsico de microcontroladores (PIC16F877A)

LA PALABRA DE CONFIGURACIN

139 Curso bsico de microcontroladores (PIC16F877A)

CONFIGURACIN DEL OSCILADOR Los PIC16F87XA pueden operar en cuatro modos diferentes de oscilador. El usuario puede programar dos bits de configuracin (FOSC1 y FOSC2), en la palabra de configuracin. Estos modos son: - LP - XT - HS - RC Low Power Crystal Crystal/Resonator High Speed Crystal/Resonator Resistor/Capacitor

En los modos XT, LP y HS, un cristal o resonador cermico es conectado a los pines OSC1/CLKIN y OSC2/CLKOUT.
140 Curso bsico de microcontroladores (PIC16F877A)

CONFIGURACIN DEL OSCILADOR

141 Curso bsico de microcontroladores (PIC16F877A)

CONFIGURACIN DEL OSCILADOR Los capacitores C1 y C2 pueden ser seleccionados en base a la siguiente tabla:

142 Curso bsico de microcontroladores (PIC16F877A)

POWER-ON RESET Un pulso de reset Power_On es generado en el chip cuando la aplicacin de voltaje en Vdd es detectada (en el rango de 1.2V 1.7V). Para usar la caracterstica POR se requiere conectar el pin MCLR a Vdd (+5V) a travs de una resistencia de 10K.

Cuando el microcontrolador inicia su operacin normal (sale de la condicin de RESET), debe asegurar una operacin correcta. Si esas condiciones no se reunen, el dispositivo permanecer en estado de RESET, hasta que se tengan las condiciones de operacin.
Si en la operacin normal se preseta un RESET sin motivo aparente, es posible que alguna seal de ruido en la terminal MCLR est presente. Esta situacin puede ser corregida conecTando un capacitor entre Vss y dicha trerminal. 143
Curso bsico de microcontroladores (PIC16F877A)

POWER-ON RESET

144 Curso bsico de microcontroladores (PIC16F877A)

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 alimentacin al Vdd. El PWRT opera con un oscilador RC interno. El microcontrolador es mantenido en RESET durante el tiempo que el PWRT permanece activo. El retardo de tiempo del PWRT permite que el voltaje de alientacin llegue a un nivel aceptable. El bit PWRTEN de la palabra de configuracin ahbilita o deshabilita el PWRT.
145 Curso bsico de microcontroladores (PIC16F877A)

OSCILLATOR START-UP TIMER (OST)

El oscilador Start-Up timer provee un retardo de 1024 ciclos del oscilador despus 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.

146 Curso bsico de microcontroladores (PIC16F877A)

BROWN-OUT RESET (BOR)

El bit de configuracin BOREN puede habilitar o deshabilitar el circuito Brown-Out Reset. Si el voltaje de alimentacin Vdd cae por debajo del valor VBOR (aprox. 4V), por un tiempo mayor 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. Despus de que el voltaje en Vdd vuelva a un valor por encima del voltaje VBOR.

147 Curso bsico de microcontroladores (PIC16F877A)

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 habrn expirado. Cuando cambie MCLR a alto, iniciar la ejecucin inmeditamante. Lo anterior es util para propsitos de prueba o para sincronizar ms de un microcontrolador, en paralelo.
148 Curso bsico de microcontroladores (PIC16F877A)

TECLADO

Un teclado consiste en un grupo de interruptores en un arreglo que permita utilizar el menor nmero 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 lneas del PIC, en lugar de las 16 que se necesitara si se manejaran de manera individual.

149 Curso bsico de microcontroladores (PIC16F877A)

TARJETA DE DESARROLLO

3 2

150 Curso bsico de microcontroladores (PIC16F877A)

TECLADO Las cuatro lneas de menor peso del puerto D (RD0 RD3) se configuran como salidas que aplican un patrn de estado lgicos a las cuatro columnas del teclado. Las cuatro lneas de mayor peso del puerto D (RD4 RD7) estn configuradas como entradas y reciben los niveles lgicos que contienen las filas del teclado.

151 Curso bsico de microcontroladores (PIC16F877A)

TECLADO

Por medio el programa se verifica el teclado, sacando de manera secuencial un nivel bajo por una de las cuatro lneas RD0 RD3, que manejan las columnas. En seguida lee el nivel lgico introducido por las filas en las lneas 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.

152 Curso bsico de microcontroladores (PIC16F877A)

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 cdigo binario que corresponde a los 4 bits que se sacan a travs de las lneas RD0 RD3 y los 4 recibidos por RD4 RD7.
153 Curso bsico de microcontroladores (PIC16F877A)

TECLADO

TECLA 1 2 3 F 4 5 6 E 7 8 9 D A 0 B C

RD7 RD6 RD5 RD4 RD3 RD2 RD1 RD0 CDIGO 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 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 ledo, se obtendr el valor que previamente ha sido sacado por el.
154 Curso bsico de microcontroladores (PIC16F877A)

TECLADO

Los cdigos de exploracin de las teclas varan segn la colocacin de las mismas. El programa que maneja el teclado realiza la exploracin 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.

155 Curso bsico de microcontroladores (PIC16F877A)

TECLADO

LIBRERA DE SUBRUTINAS PARA MANEJO DEL TECLADO


El teclado es un dispositivo perifrico que puede ser usado en diferentes programas. Para su aplicacin es conveniente la implementacin de subrutinas que permitan realizar las sigientes funciones:

- Inicializacin de puertos. - Barrido. - Validacin de tecla presionada (incluyendo antirrebotes). - Reconocimiento y conversin del cdigo de la tecla a valor numrico. - Espera liberacin de la tecla.
Curso bsico de microcontroladores (PIC16F877A)

156

TECLADO Pensando en una aplicacin ms general, las subrutinas anteriores se pueden manejar mediante una librera 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 librera de subrutinas se incluye la subrutina llamada KBD_TONO, que puede generar un tono auditivo diferente con ayuda del buzzer, al presionar una tecla.

157 Curso bsico de microcontroladores (PIC16F877A)

TECLADO

;KBD_CXX.ASM ;El conjunto de rutinas que se presentan a continuacin permiten realizar ;las tareas bsicas 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 BARRIDO

;Cdigo de tecla presionada ;Variable para barrido de teclado

ENDC

158 Curso bsico de microcontroladores (PIC16F877A)

TECLADO
;********************************************************************** ;Tablas de datos KEY_TAB movf DATO,w addwf retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw

PCL,F 0xBE 0x77 0xB7 0xD7 0x7B 0xBB 0xDB 0x7D 0xBD 0xDD 0x7E 0xDE 0xEE 0xED 0xEB 0xE7

;Cdigo tecla 0 ;Cdigo tecla 1 ;Cdigo tecla 2 ;Cdigo tecla 3 ;Cdigo tecla 4 ;Cdigo tecla 5 ;Cdigo tecla 6 ;Cdigo tecla 7 ;Cdigo tecla 8 ;Cdigo tecla 9 ;Cdigo tecla A ;Cdigo tecla B ;Cdigo tecla C ;Cdigo tecla D ;Cdigo tecla E ;Cdigo tecla F 159

Curso bsico de microcontroladores (PIC16F877A)

TECLADO
TONO movf addwf retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw DATO,w PCL,F 0x08 0x18 0x28 0x38 0x48 0x58 0x68 0x78 0x88 0x98 0xA8 0xB8 0xC8 0xD8 0xE8 0xF8

;0 ;1 ;2 ;3 ;4 ;5 ;6 ;7 ;8 ;9 ;A ;B ;C ;D ;E ;F
160

Curso bsico de microcontroladores (PIC16F877A)

TECLADO

;********************************************************************** ; Rutina que inicializa puerto B para leer el teclado KBD_INI bsf movlw movwf movlw movwf bcf return STATUS,RP0 0x30 TRISC 0xF0 TRISB STATUS,RP0

; Inicializa puertos

161 Curso bsico de microcontroladores (PIC16F877A)

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 BARRE1 movlw movwf movwf movf movwf andlw sublw btfss goto bsf rlf btfss goto movf goto return 0xFE BARRIDO PORTB PORTB,W TECLA 0xF0 0xF0 STATUS,Z BARREFIN STATUS,C; Establece carry en 1 BARRIDO,F ; rota un bit a la izquierda BARRIDO,4 BARREFIN BARRIDO,W BARRE1
162

BARREFIN

Curso bsico de microcontroladores (PIC16F877A)

TECLADO

PRCTICA # 9

Hacer un programa que lea el teclado y cuando detecte una tecla presionada despliegue el valor binario correspondiente a la tecla en los LEDs RB0 a RB3 y genere un tono audible diferente para cada tecla.

163

Curso bsico de microcontroladores (PIC16F877A)

LCD El display de cristal lquido (LCD) es un perifrico visualizador muy potente, siendo los microcontroladores los dispositivos ms adecudos para su manejo y control. En realidad un mdulo LCD tiene incrustado un microcontrolador de uso especfico para su funcionamiento. Los mdulos LCD ms comunes presentan un nmero variable de caracteres formados por una matriz de 5X7 pixeles en una o varias lneas. El mdulo LCD modelo 44780 de HITACHI tiene la capacidad de manejar 2 lneas de 16 caracteres y dispone de 14 terminales siendo compatibles con el la mayora de los LCD comerciales.
164

Curso bsico de microcontroladores (PIC16F877A)

TARJETA DE DESARROLLO

165 Curso bsico de microcontroladores (PIC16F877A)

LCD La funcin de las terminales del mdulo LCD es la siguiente:

1.- Ocho terminales (D0 D7) reciben los caracteres en cdigo ASCII a exhibir, as como los cdigos de los comandos de control que manejan los efectos de visualizacin. Tambin a travs de ellos el mdulo LCD enva al microcontrolador sobre su estado interno.
2.- Las terminales Vcc y Vss reciben la alimentacin de +5V y tierra respectivamente. 3.- La terminal Vee regula el contraste de la pantalla al aplicarle mediante un potencimetro una tensin variable entre 0 y +5V.
166

Curso bsico de microcontroladores (PIC16F877A)

LCD 4.- Las tres terminales restantes controlan las funciones principales del mdulo: E (Enable).- Si E = 0 el mdulo se encuentra desactivado y no Funcionan las otras seales. R/W (Read/Write).- Si R/W = 0 se efecta una operacin de Escritura y si R/W = 1 se realiza una operacin 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 informacin de control-comandos o datos de caracteres a escribir.
167

Curso bsico de microcontroladores (PIC16F877A)

LCD

En la tarjeta de desarrollo las terminales RE0 RE2 se encuantran conectadas a las treminales de control del LCD RS, R/W y E, respectivamente, y las terminales RD0 RD7 del microcontrolador a las terminales D0 D7 del LCD trambin en forma respectiva.
Dado lo anterior, las lneas del puerto E debern ser programadas como salidas y las lneas del puerto D debern configurarse como entradas o salidas segn sea el sentido de la informacin. El mdulo 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 travs de las lneas D0 D7 cuando RS = 0 y R/W = 0, para trabajar en modo escritura.
168

Curso bsico de microcontroladores (PIC16F877A)

LCD
COMANDO CLEAR DISPLAY HOME ENTRY MODE SET DISPLAY ON/OFF

RS R/W
0 0 0 0 0 0 0 0

E
1 1 1 1

D7
0 0 0 0 0

D6
0 0 0 0 0

D5
0 0 0 0 0

D4
0 0 0 0 1

D3
0 0 0 1 S/C

D2
0 0 1 D R/L

D1
0 1 I/D C X

D0 TIEMPO EJEC.
1 X S B X 1.64 ms. 1.64 ms. 40 ms. 40 ms. 40 ms.

CURSOR DISPLAY 0 SHIFT

0 0

1 1

FUNCTION SET

DL

40 ms.
40 ms. 40 ms. 40 ms. 40 ms. 40 ms. 169

SET CGRAM 0 1 DIRECCIN DE LA CGRAM 0 0 1 ADDRESS SET DDRAM 1 DIRECCIN DE LA DDRAM 0 1 1 ADDRESS READ BUSY FLAG BF DIRECCIN CGRAM O DDRAM 0 0 1 ADDRESS WRITE DATA TO CDIGO ASCII PARA LA RAM 0 0 1 CG O DD READ DATA TO 0 0 1 CDIGO ALMACENADO EN RAM CG O DD Curso bsico de microcontroladores (PIC16F877A)

LCD S : 1 Desplaza visualizacin cada vez que escribe un dato. 0 Funciona en modo normal. 1 Se incrementa la direccin del cursor. 0 Se decrementa la dirccin del cursor. 1 Desplaza la visualizacin. 0 Desplaza el cursor.

I/D :

S/C:

R/L : 1 El desplazamiento es a la derecha. 0 El desplazamiento es a la izquierda.


BF : 1 El mdulo LCD est ocupado. 0 El mdulo LCD est disponible.
Curso bsico de microcontroladores (PIC16F877A)

170

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 presentacin se hace en dos lneas. 0 La presentacin se hace en una lnea. : 1 El carcter es de 5 x 10 pixeles. 0 El carcter es de 5 x 7 pixeles. : 1 Hay parpadeo en el cursor. 0 No hay parpadeo en el cursor. : El cursor est activo.
171

Curso bsico de microcontroladores (PIC16F877A)

LCD D X : 1 La pantalla est activada. : Indeterminado.

172

Curso bsico de microcontroladores (PIC16F877A)

LCD

COMANDOS DEL LCD


CLEAR DISPLAY.- Borra la pantalla del mdulo LCD y coloca el cursor en la primera posicin, que es la direccin 0. Por default pone el bit I/D = 1 para auto incremento de la posicin del cursor. HOME.- Pone el cursor en la direccin 0. No vara el contenido de la memoria DDRAM que guarda los datos y queda direccionada desde la posicin 0. ENTRY MODE SET.- Establece la direccin del movimiento del cursor (I/D). Si S = 1desplaza la visualizacin cada vez que se escribe un dato. Si S = 0 la presentacin es normal. 173
Curso bsico de microcontroladores (PIC16F877A)

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 visualizacin sin cambiar el contenido de la memoria DDRAM.
FUNCTION SET.- Establece el nmero de lneas de interfase con el bus de datos. Toma por default 8 bits (DL = 1). Especifica el nmero de lneas, que para que sean 2 se debe poner N = 1 y el formato del carcter es de 5 x 7 pixeles si F = 0.

174

Curso bsico de microcontroladores (PIC16F877A)

LCD SET CGRAM ADDRESS.- El mdulo LCD tiene definidos los caracteres ASCII, pero adems permite que el usuario defina un Mximo de 9 caracteres nuevos. Estos se guardan en la memoria CGRAM de 64 bytes. Cada carcter est especificado con un nmero de bytes comprendido entre 6 y 16, segn su complejidad. Dichos bytes se almacenan en posiciones sucesivas de la CGRAM. Con este comando se indica la direccin de la CGRAM a partir de La cual se irn almacenando los bytes que definen al nuevo Carcter. Tras ejecutar este comando, todos los datos que se lean o escriban, posterioremente lo hacen desde esta posicin de la CGRAM.

175

Curso bsico de microcontroladores (PIC16F877A)

LCD

SET DDRAM ADDRESS.- Establece la direccin de la DDRAM a partir de la cual todos los datos que se lean o escriban Posteriormente lo harn desde esa posicin. Los 16 caracteres del primer rengln 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 mdulo LCD. Adems proporciona la direccin de la CGRAM o DDRAM que se haya utilizado la ltima vez.

176

Curso bsico de microcontroladores (PIC16F877A)

LCD WRITE DATA TO CGRAM o DDRAM.- Se escriben en la DDRAM los datos (caracteres ASCII) que se quieren visualizar. Tambin se escriben en la CGRAM los bytes de los nuevos caracteres creados por el usuario. Se usa una memoria u otra segn haya sido la instruccin 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 operacin de lectura.

177

Curso bsico de microcontroladores (PIC16F877A)

LCD Cuando se aplica adecuadamente la tencin de alimentacin al mdulo LCD, se ejecuta automticamente la siguiente secuencia de inicializacin: 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 nmero de lneas.

178

Curso bsico de microcontroladores (PIC16F877A)

LCD 3.- Se ejecuta el comando DISPLAY ON/OFF CONTROL, que hace que el display quede en OFF (D = 0), tambin el cursor (C = 0) y sin parpadeo (B = 0.) 4.- Se ejecuta el comando ENTRYMODE SET, que establece la direccin de movimiento del cursor con autoincremento (I/D = 1) y el modo de visualizacin normal, sin desplazamiento (S = 0). Si al conexin de la alimentacin no rene todas las condiciones que exige el mdulo LCD, habr que realizar la secuencia de inicializacin por software. En cualquier caso es importante enviar al LCD la primera instruccin de trabajo despus de transcurrir 15 ms. para completar la secuencia de inicializacin.
179

Curso bsico de microcontroladores (PIC16F877A)

PRCTICA # 10

Hacer un programa que lea el teclado y cuando detecte una tecla presionada despliegue el valor de la tecla en el LCD correspondiente a su valor. En los LEDs RB0 a RB3 desplegar el valor binario y deber generar un tono audible diferente para cada tecla.

180

Curso bsico de microcontroladores (PIC16F877A)

PRCTICA # 11
Implementar una cerradura electrnica que dar acceso cuando se teclee una clave de 4 dgitos correctamente y encender el led conectado a la terminal RB0. Si se teclea de manera incorrecta no debe permitir el acceso y desplegar en el LCD el mensje CLAVE INCORRECTA. Dar otras dos oportunidades para teclear la contrasea correcta. Si despus de tres intentos no se llega a la clave correcta, deber sonar una alarma y desplegar el mensaje en el LCD ACCESO DENEGADO.
181

Curso bsico de microcontroladores (PIC16F877A)

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 cdigo FLASH.
Lo anterior significa que un programa dinmicamente puede generar informacin que se puede grabar en la memoria FLASH directamente, sin necesidad de grabador externo. En el PIC16F877 la memoria flash tiene un tamao de 8K palabras de 14 bits cada una. Dado lo anterior, un solo registro no es suficiente para contener la direccin de la localidad en la que se almacenar el dato, dado que la direccin contiene 13 bits y lo mismo sucede con el dato que se va a guardar dado que este tiene una longitud de 14 bits.
182

Curso bsico de microcontroladores (PIC16F877A)

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 ms peso de la direccin.
Por otra parte, el registro EEDATAH se concatena con el registro EEDATA y contiene los 6 bits de ms peso de la palabra leda o a escribir en la FLASH. Los registros EEADRH y EEDATAH no se usan en las operaciones del lectura/escritura de la memoria EEPROM.

183

Curso bsico de microcontroladores (PIC16F877A)

LECTURA Y ESCRITURA DE LAS MEMORIAS EEPROM Y FLASH


EEADRH (10Fh) EEADR (10Dh)

DIRECCIN DE 13 BITS (8K)

EEDATAH (10Eh)

EEDATA (10Ch)

DATO DE 14 BITS (FLASH)


184

Curso bsico de microcontroladores (PIC16F877A)

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 direccin 18Ch y EECON2 no se encuentra implementado fsicamente y solo se encuentra en la operacin de escritura que tarda 2 ms. aproximadamente.

EECON1 EEPGD

WRERR WREN WR

RD

18Ch

185

Curso bsico de microcontroladores (PIC16F877A)

LECTURA Y ESCRITURA DE LAS MEMORIAS EEPROM Y FLASH

EEPGD Bit de seleccin de memoria.


1 Accesa memoria de programa (FLASH). 0 Accesa memoria de datos EEPROM. WRERR Bandera de error de la EEPROM. 1 Una operacin de escritura fue prematuramente terminada. 0 Operacin de escritura completada. WREN Permiso de escritura en la EEPROM. 1 Habilita escritura. 0 Inhibe escritura.
186

Curso bsico de microcontroladores (PIC16F877A)

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.
187

Curso bsico de microcontroladores (PIC16F877A)

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 despus AAh, lo cual es recomendado por el fabricante. A fin de evitar escrituras indeseadas en la EEPROM causadas por Transitorios en la inicializacin del microcontrolador, se controla el bit WREN, prohibiendo cualquier operacin de escritura mientras trnscurren los 72 ms. que temporiza el timer del powerup.

188

Curso bsico de microcontroladores (PIC16F877A)

TARJETA DE DESARROLLO

189 Curso bsico de microcontroladores (PIC16F877A)