micro control adores el pic16f877a el tutorial 100

30
INTRODUCCIÓN. El siguiente trabajo va dedicado a todos aquellos que se inician en el mundo de los microcontroladores así como aquellos que les gustaría dar un repaso a lo aprendido. Cuando empecé con esto de los pics me dedique a recopilar información de la red y de algunos libros en el trayecto conocí a colegas en foros de electrónica y la escuela que tenían la misma inquietud por eso y otras cosas mas la razón de plasmar tales conocimientos aquí, bueno esto es la primera parte del tutorial notaran que le he dado el enfoque hacia un PIC en especial el 16F877 ya que es uno de los que esta en boga y además esta tomando aceptación entre las escuelas, y pienso que el 16F84 ya esta muy conocido pero no deja de ser poderoso, Pero recuerden las bases son las mismas. Para comentarios, correcciones o dudas pueden contactarme por e-mail espero les agrade y sea motivo de mejoras. Empezare por El diagrama de un sistema microcontrolado que sería algo así: Los dispositivos de entrada pueden ser un teclado, un interruptor, un sensor, etc. Los dispositivos de salida pueden ser LED's, pequeños parlantes, zumbadores, interruptores de potencia (tiristores, optoacopladores), u otros dispositivos como relés, luces, un secador de pelo, en fin... lo que se desee. Aquí tienes una representación en bloques del microcontrolador, se puede ver que lo adaptamos tal y cual es un ordenador, con su fuente de alimentación, un circuito de reloj y el chip

Upload: shinseiky

Post on 13-Jun-2015

2.088 views

Category:

Documents


4 download

TRANSCRIPT

Page 1: Micro Control Adores El Pic16f877a El Tutorial 100

INTRODUCCIÓN.

El siguiente trabajo va dedicado a todos aquellos que se inician en el mundo de los microcontroladores así como aquellos que les gustaría dar un repaso a lo aprendido. Cuando empecé con esto de los pics me dedique a recopilar información de la red y de algunos libros en el trayecto conocí a colegas en foros de electrónica y la escuela que tenían la misma inquietud por eso y otras cosas mas la razón de plasmar tales conocimientos aquí, bueno esto es la primera parte del tutorial notaran que le he dado el enfoque hacia un PIC en especial el 16F877 ya que es uno de los que esta en boga y además esta tomando aceptación entre las escuelas, y pienso que el 16F84 ya esta muy conocido pero no deja de ser poderoso, Pero recuerden las bases son las mismas. Para comentarios, correcciones o dudas pueden contactarme por e-mail espero les agrade y sea motivo de mejoras.Empezare por El diagrama de un sistema microcontrolado que sería algo así:

Los dispositivos de entrada pueden ser un teclado, un interruptor, un sensor, etc. Los dispositivos de salida pueden ser LED's, pequeños parlantes, zumbadores, interruptores de potencia (tiristores, optoacopladores), u otros dispositivos como relés, luces, un secador de pelo, en fin... lo que se desee. Aquí tienes una representación en bloques del microcontrolador, se puede ver que lo adaptamos tal y cual es un ordenador, con su fuente de alimentación, un circuito de reloj y el chipMicrocontrolador, el cual dispone de su CPU, sus memorias, y por supuesto, sus puertos de comunicación listos para conectarse al mundo exterior

Page 2: Micro Control Adores El Pic16f877a El Tutorial 100

Enseguida describire algunos aspectos básicos que tienen que ver con todos lo microcontroladores PIC de Microchip para su utilización, Primero veamos que es un Microcontrolador: Digamos que es una especie de ordenador en miniatura que podemos programar, algunos autores denominan al microcontrolador como un dispositivo programable capaz de realizar diferentes actividades que requieran del procesamiento de datos digitales y del control y comunicación digital de diferentes dispositivos.En su interior posee un microprocesador, una memoria RAM (volátil) donde guardaremos las variables, una memoria EEPROM (no volátil) donde guardaremos nuestro Programa, un Timer o contador que nos facilitará algunas tareas, y algunas otras cosas más que irán variando dependiendo de que PIC utilicemos.

Eso no es todo, algunos traen funciones especiales, ya hablaremos de ellas.Microcontroladores PIC16CXX/FXX de Microchip Estos micros pertenecen a la gama media y disponen de un set de 35 instrucciones, por eso lo llaman de tipo RISC (Reduced Instruction Set Computer) en español sería "Computador con Set de Instrucciones Reducido" pocas instrucciones pero muy poderosas, otras son de tipo CISC (Complex Instruction Set Computer - Computador con Set de Instrucciones Complejo), demasiadas instrucciones, y lo peor, difíciles de recordar.Esta familia de microcontroladores se divide en tres rangos según la capacidad de los microcontroladores. El más bajo lo compone la familia 16C5X. El rango medio lo componen las familias 16C6X/ 7X/ 8X, algunos con conversores A/D, comparadores, interrupciones, etc. La familia de rango superior lo componen los 17CXX.

Estas son las funciones especiales de las cuales disponen algunos micros...

Conversores análogo a digital (A/D) en caso de que se requiera medir señales analógicas, por ejemplo temperatura, voltaje, luminosidad, etc.

Page 3: Micro Control Adores El Pic16f877a El Tutorial 100

Temporizadores programables (Timer's) Si se requiere medir períodos de tiempo entre eventos, generar temporizaciones o salidas con frecuencia específica, etc.

Interfaz serial RS-232. Cuando se necesita establecer comunicación con otro microcontrolador o con un computador.

Memoria EEPROM Para desarrollar una aplicación donde los datos no se alteren a pesar de quitar la alimentación, que es un tipo de memoria ROM que se puede programar o borrar eléctricamente sin necesidad de circuitos especiales.

salidas PWM (modulación por ancho de pulso) Para quienes requieren el control de motores DC o cargas resistivas, existen microcontroladores que pueden ofrecer varias de ellas.

Técnica llamada de "Interrupciones", (ésta me gustó) Cuando una señal externa activa una línea de interrupción, el microcontrolador deja de lado la tarea que está ejecutando, atiende dicha interrupción, y luego continúa con lo que estaba haciendo.

Los microcontroladores se programan en Lenguaje Enzamblador y cada microcontrolador varía su conjunto de instrucciones de acuerdo a su fabricante y modelo. De acuerdo al número de instrucciones que el microcontrolador maneja se le denomina de arquitectura RISC (reducido) o CISC (complejo).

EL Pic16F877 pertenece a la gama media de Microcontroladores donde encontraremos modelos desde 18 hasta 68 Pines su repertorio de instrucciones es de 35, de 14 bits cada una (Todas las instrucciones son de un solo ciclo con excepción de las ramificaciones del programa que son de dos ciclos). Disponen de interrupciones y una pila de 8 niveles que permite el anidamiento de subrutinas. Se le puede encontrar en un tipo de encapsulado de 40 pines (ò patas) PDIP el cual es el mas utilizado para su utilización didáctica en proyectos escolares.Cuenta con una arquitectura Harvard en la que son independientes la memoria de instrucciones y la memoria de datos y cada una dispone de su propio sistema de buses para el acceso.

Posee Rango amplio de tensiones de funcionamiento:

Comercial: 2.0 a 5.5 volts Industrial: 2.0 a 5.5 volts

Consumo muy bajo:

< 2 mA típico a 5 volt, 4MHz. 15 µA típico a 2 volt, 32KHz. >0.5 µA típico de corriente en reposo a 2 volts.

Características que lo hacen destacarse por su popularidad en el mundo de la electrónica:

Page 4: Micro Control Adores El Pic16f877a El Tutorial 100

Soporta modo de comunicación serial, posee dos pines para ello. Amplia memoria para datos y programa. Memoria reprogramable: La memoria en este PIC es la que se

denomina FLASH de 8K; este tipo de memoria se puede borrar electrónicamente (esto corresponde a la “F” en el modelo).

Set de instrucciones reducido (tipo RISC), pero con las instrucciones necesarias para facilitar su manejo.

En su arquitectura además incorporan: 3 temporizadores 4 puertos I/O. Comunicación serie y paralela: USART, PSP. Bus 12C Modulo Convertidor analógico a digital A/D. Modulo Comparador con un voltaje de referencia.

Sus características más importantes son:

CARACTERÍSTICAS 16F877A

Frecuencia máxima DX-20MHz

Memoria de programa flash palabra de 14 bits

8KB

Posiciones RAM de datos 368

Posiciones EEPROM de datos 256

Puertos E/S A,B,C,D,E

Número de pines 40

Interrupciones 15

Timers 3

Módulos CCP 2

Page 5: Micro Control Adores El Pic16f877a El Tutorial 100

Comunicaciones Serie MSSP, USART

Comunicaciones paralelo PSP

Modulo Analógico a Digital de 10 bit 8 canales de entrada

Juego de instrucciones 35 Instrucciones

Longitud de la instrucción 14 bits

Arquitectura Harvard

CPU Risc

Módulos Comparador/comparador/Pwm 2

Page 6: Micro Control Adores El Pic16f877a El Tutorial 100

EL ENCAPSULADO.

Page 7: Micro Control Adores El Pic16f877a El Tutorial 100

DIAGRAMA DE BLOQUES DE SU ARQUITECTURA INTERNA.

Page 8: Micro Control Adores El Pic16f877a El Tutorial 100

Aquí muestro una tabla en la cual describo cada Pin o patilla del Microcontrolador.

Page 9: Micro Control Adores El Pic16f877a El Tutorial 100

NOMBRE DEL PIN

PIN

TIPOTIPO DEBUFFE

R

DESCRIPCIÓN

OSC1/CLKIN 13 I ST/MOS Entrada del oscilador de cristal / Entrada de señal de reloj externa

OSC2/CLKOUT 14 O - Salida del oscilador de cristal

MCLR/Vpp/THV 1 I/P ST Entrada del Master clear (Reset) o entrada de voltaje de programación o modo de control high voltaje test

RA0/AN0RA1/AN1RA2/AN2/ Vref-

RA3/AN3/Vref+

RA4/T0CKI

RA5/SS/AN4

234

5

6

7

I/OI/OI/O

I/O

I/O

I/O

TTLTTLTTL

TTL

ST

TTL

PORTA es un puerto I/O bidireccional RAO: puede ser salida analógica 0 RA1: puede ser salida analógica 1 RA2: puede ser salida analógica 2 o referencia negativa de voltaje RA3: puede ser salida analógica 3 o referencia positiva de voltaje RA4: puede ser entrada de reloj el timer0. RA5: puede ser salida analógica 4 o el esclavo seleccionado por el puerto serial síncrono.

RBO/INT

RB1RB2RB3/PGM

RB4RB5RB6/PGCRB7/PGD

33

343536

37383940

I/O

I/OI/OI/O

I/OI/OI/OI/O

TTL/ST

TTLTTLTTL

TTLTTL

TTL/STTTL/ST

PORTB es un puerto I/O bidireccional. Puede ser programado todo como entradas RB0 pude ser pin de interrupción externo.

RB3: puede ser la entada de programación de bajo voltajePin de interrupciónPin de interrupciónPin de interrupción. Reloj de programación serial

RCO/T1OSO/T1CKIRC1/T1OS1/

15

16

I/O

I/O

ST

ST

PORTC es un puerto I/O bidireccionalRCO puede ser la salida del oscilador timer1 o la entrada de

Page 10: Micro Control Adores El Pic16f877a El Tutorial 100

CCP2

RC2/CCP1

RC3/SCK/SCL

RC4/SD1/SDA

RC5/SD0RC6/Tx/CK

RC7/RX/DT

17

18

23

2425

26

I/O

I/O

I/O

I/OI/O

I/O

ST

ST

ST

STST

ST

reloj del timer1RC1 puede ser la entrada del oscilador timer1 o salida PMW 2RC2 puede ser una entrada de captura y comparación o salida PWN

RC3 puede ser la entrada o salida serial de reloj síncrono para modos SPI e I2CRC4 puede ser la entrada de datos SPI y modo I2CRC5 puede ser la salida de datos SPIRC6 puede ser el transmisor asíncrono USART o el reloj síncrono.RC7 puede ser el receptor asíncrono USART o datos síncronos

RD0/PSP0RD1/PSP1RD2/PSP2RD3/PSP3RD4/PSP4RD5/PSP5RD6/PSP6RD7/PSP7

1920212227282930

I/OI/O I/O I/O I/O I/O I/O I/O

ST/TTLST/TTLST/TTLST/TTLST/TTLST/TTLST/TTLST/TTL

PORTD es un puerto bidireccional paralelo

REO/RD/AN5

RE1/WR/AN

RE2/CS/AN7

8

9

10

I/O

I/O

I/O

ST/TTL

ST/TTL

ST/TTL

PORTE es un puerto I/O bidireccionalREO: puede ser control de lectura para el puerto esclavo paralelo o entrada analógica 5RE1: puede ser escritura de control para el puerto paralelo esclavo o entrada analógica 6RE2: puede ser el selector de control para el puerto paralelo esclavo o la entrada analógica 7.

Page 11: Micro Control Adores El Pic16f877a El Tutorial 100

Vss 12.31

P - Referencia de tierra para los pines lógicos y de I/O

Vdd 11.32

P - Fuente positiva para los pines lógicos y de I/O

NC - - - No está conectado internamente

Descripción de los puertos:Puerto A: Puerto de e/s de 6 pines RA0 è RA0 y AN0 RA1 è RA1 y AN1 RA2 è RA2, AN2 y Vref- RA3 è RA3, AN3 y Vref+ RA4 è RA4 (Salida en colector abierto) y T0CKI(Entrada de reloj del

modulo Timer0) RA5 è RA5, AN4 y SS (Selección esclavo para el puerto serie síncrono)

Puerto B:

Puerto e/s 8 pines Resistencias pull-up programables RB0 è Interrupción externa RB4-7 èInterrupcion por cambio de flanco RB5-RB7 y RB3 è programacion y debugger in circuitPuerto C: Puerto e/s de 8 pines RC0 è RC0, T1OSO (Timer1 salida oscilador) y T1CKI (Entrada de reloj

del modulo Timer1). RC1-RC2 è PWM/COMP/CAPT RC1 è T1OSI (entrada osc timer1) RC3-4 è IIC RC3-5 è SPI RC6-7 è USARTPuerto D: Puerto e/s de 8 pines Bus de datos en PPS (Puerto paralelo esclavo) Puerto E: Puerto de e/s de 3 pines RE0 è RE0 y AN5 y Read de PPS RE1 è RE1 y AN6 y Write de PPS RE2 è RE2 y AN7 y CS de PPS

Dispositivos periféricos: Timer0: Temporizador-contador de 8 bits con preescaler de 8 bits Timer1: Temporizador-contador de 16 bits con preescaler que puede

incrementarse en modo sleep de forma externa por un cristal/clock. Timer2: Temporizador-contador de 8 bits con preescaler y

postescaler.

Page 12: Micro Control Adores El Pic16f877a El Tutorial 100

Dos módulos de Captura, Comparación, PWM (Modulación de Anchura de Impulsos).

Conversor A/D de 1 0 bits. Puerto Serie Síncrono Master (MSSP) con SPI e I2C (Master/Slave). USART/SCI (Universal Syncheronus Asynchronous Receiver

Transmitter) con 9 bit. Puerta Paralela Esclava (PSP) solo en encapsulados con 40 pines.

(MCLR / Vpp): Es una pata de múltiples aplicaciones, es la entrada de Reset (master clear) si está a nivel bajo y también es la habilitación de la tensión de programación cuando se está programando el dispositivo. Cuando su tensión es la de VDD el PIC funciona normalmente.

EL RESET: EL PIC16F877 posee internamente un circuito temporizador conectado al pin de reset que funciona cuando se da alimentación al micro, se puede entonces conectar el pin de MCLR a la fuente de alimentación. Esto hace que al encender el sistema el microcontrolador quede en estado de reset por un tiempo mientras se estabilizan todas las señales del circuito (lo cual es bastante bueno, por eso siempre la usaremos...), Además de que nos puede servir por si el micro en algún momento no nos responde nunca esta demás aquí muestro el conexionado del botón que hará dicha función.

(VSS y VDD): Son respectivamente las patas de masa y alimentación. La tensión de alimentación de un PIC está comprendida entre 2V y 6V aunque se recomienda no sobrepasar los 5.5V

(OSC1/CLKIN y OSC2/CLKOUT): Corresponden a los pines de la entrada externa de reloj y salida de oscilador a cristal respectivamente.

El oscilador externo: Es un circuito externo que le indica al micro la velocidad a la que debe trabajar. Este circuito, que se conoce como oscilador o reloj, es muy simple pero de vital importancia para el buen funcionamiento del sistema. El P1C16F877 puede utilizar cuatro tipos de reloj diferentes. Estos tipos son:

RC. Oscilador con resistencia y condensador.XT. Cristal.HS. Cristal de alta velocidad.LP. Cristal para baja frecuencia y bajo consumo de potencia.

Page 13: Micro Control Adores El Pic16f877a El Tutorial 100

En el momento de programar o "quemar" el microcontrolador se debeEspecificar que tipo de oscilador se usa. Esto se hace a través de unosFusibles llamados "fusibles de configuración" o fuses.

En el PIC16F877 se puede admitir un oscilador de cristal desde 4 a 20 MHz. Por el momento yo he utilizado UNO 4 MHz, porque garantiza mayor precisión y un buen arranque del microcontrolador. Internamente esta frecuencia es dividida por cuatro, lo que hace que la frecuencia efectiva de trabajo sea de 1 MHz, por lo que cada instrucción se ejecuta en un microsegundo. El cristal debe ir acompañado de dos condensadores y el modo de conexión es elSiguiente:

Si se requiere de mucha precisión en el oscilador, podemos utilizar unaResistencia y un condensador, como se muestra en la figura. Donde OSC2Queda libre entregando una señal cuya frecuencia es la del OSC/4.

Según las recomendaciones de Microchip (R) puede tomar valores entre 5k y 100k, y C superior a 20pf.

Organización de la memoria.

En primer lugar tenemos que distinguir claramente entre tres tipos deMemoria:

Una: la memoria EEPROM donde almacenaremos el programa que

Page 14: Micro Control Adores El Pic16f877a El Tutorial 100

Haremos, esta memoria solo podrá ser leída por el pic (el pic vaLeyendo las instrucciones del programa almacenado en esta memoriaY las va ejecutando). Al apagar el pic esta memoria no se borra.

Dos: la memoria RAM en cuyos registros se irán almacenando losValores de las variables que nosotros queramos y cuando nosotrosQueramos (por programa), al apagar el pic esta memoria se borra.

Tres: la memoria EEPROM para datos, es un espacio de memoriaEEPROM en la que se pueden guardar variables que queremosConservar aunque se apague el pic. No se tratará aquí por ser unaMemoria más difícil de emplear.

La memoria EEPROM ò memoria de Programa.

Page 15: Micro Control Adores El Pic16f877a El Tutorial 100

El espacio marcado como “User memory Space” es el espacio de memoria donde ira nuestro programa, desde 0000h hasta la 1FFFh.

"Reset Vector" es la primera dirección a la que se dirige el pic al encenderlo o alResetearlo.

"PC" y los "Stack Level" son empleado por el pic y nosotros no tenemos accesoa ellos.

LA MEMORIA RAM La memoria RAM no solo se usa para almacenar nuestras variables, también se almacenan una serie de registros que configuran y controlan el PIC. Podemos observar en la imagen que esta memoria esta dividida en 4 Bancos (banco 0,1, 2, 3). Antes de acceder a un registro de esta memoria tenemos que preguntarnos en que banco estamos, generalmente se trabaja en el banco 0 cada banco contiene sus registros que sirven para la configuración y control de la memoria RAM. Estos registros se usan para controlar los pines del PIC, consultar los resultados de las operaciones de la ALU (unidad aritmética lógica), cambiar del banco de memoria entre otras cosas.La selección del banco de memoria se hace por medio de los bits RP1 y RP0 del registro STATUS (6,5).

Tabla de selección de bancos.

Page 16: Micro Control Adores El Pic16f877a El Tutorial 100

CONFIGURACIÓN DE LOS PUERTOS DEL PIC

Llegó el momento de ver como configurar los puertos del PIC. Para poderHacerlo es necesario conocer la tabla de registros de la memoria de datos, la cual como dijimos, está dividida en el BANCO 0, BANCO 1, BANCO 2, BANCO 3.

Los registros importantes en la configuración de los puertos son: STATUS dirección 03hPORTA dirección 05hPORTB dirección 06hPORTC dirección 07hPORTD dirección 08hPORTE dirección 09hTRISA dirección 85hTRISB dirección 86hTRISC dirección 87hTRISD dirección 88hTRISE dirección 89hNOTA: Como verán solo incluyo los registros de los bancos 0 y 1 ya que para los dos restantes es similar su configuración y así no me tardo en explicarlos. Por defecto el PIC tendrá todos los I/O Port's (es decir los puertos RA, RB, RC, RD, RE), colocados como entrada de datos, y si queremos cambiarlos habrá que configurarlos.

Al configurar los puertos deberás tener en cuenta que:Si asignas un CERO (0) a un pin, éste quedará como salida y...Si le asignas un UNO (1), quedará como entrada.

Esta asignación se hace en:TRISA para los pines del PUERTO A.TRISB para los pines del PUERTO B.TRISC para los pines del PUERTO C.TRISD para los pines del PUERTO D.TRISE para los pines del PUERTO E.

Por ejemplo si TRISE es igual a 110 todos sus pines serán entradas salvo RE0 que esta como salida.

SI TRISB es igual a 00000001 todos sus pines serán salidas salvo RB0 que esta como entrada.

Page 17: Micro Control Adores El Pic16f877a El Tutorial 100

Cuando el PIC arranca se encuentra en el BANCO 0, como TRISA y TRISBEstán en el BANCO 1 no queda otra, deberemos cambiar de banco. Esto se logra a través del Registro STATUS.STATUS es un Registro de 8 bits u 8 casillas, en el cual la Nº 5 (RP0) y la Nº 6 (RP1) definen la posición del banco en donde nos encontramos.Como lo muestro con la figura que se vio en la sección de la LA MEMORIA RAM (Tabla de selección de bancos).

DESCRIPCION DE ALGUNOS DE LOS REGISTROS INTERNOS DEL BANCO 0.

INDF (direccionamiento indirecto): Dirección 00h, sirve para ver el dato de la dirección a la que apunta el registro FSR (dir. 04h).

TMR0 (Timer/contador): Dirección 01h, Aquí se puede ver el valor enTiempo real del Timer/contador. También se puede introducir un valory alterar así el conteo. Este conteo puede ser interno (cuenta ciclos deReloj) o externo (cuenta impulsos introducidos por RA4).

PCL (Parte baja del contador de programa): Dirección 02h, Modificando este registro se modifica el contador de programa, este contador de programa es el que señala al pic en que dirección (de EEPROM) tiene que leer la siguiente instrucción. Esto se utiliza mucho para consultar tablas.

STATUS: Dirección 03h, este es uno de los registros mas importantesY el que más vas a utilizar. Hay que analizar el funcionamiento deEste registro bit a bit:

CARRY, Dirección STATUS, 0 (bit 0): bit de desbordamiento. Este bit se pone a "1" cuando la operación anterior ha rebasado la capacidad de un byte. Por ejemplo, si sumo dos números y el resultado no cabe en 8 bit el CARRY se pone a "1", Pasa lo mismo cuando resto dos números y el resultado es un número

Negativo. Se puede usar para saber si un número es mayor que otro (restándolos, si hay acarreo es que el segundo era mayor que el primero). Una vez que este bit se pone a "1" no se baja

Solo (a"0"), hay que hacerlo por programa si queremos volverlo

Page 18: Micro Control Adores El Pic16f877a El Tutorial 100

a utilizar.

DC (digit carry), Dirección STATUS,1 (bit 1): lo mismo que el anterior pero esta vez nos avisa si el número no cabe en cuatro bits.

Z (zero), Dirección STATUS,2 (bit 2): Se pone a "1" si la operación anterior ha sido cero. Y pasa a "0" si la operación anterior no ha sido cero. Se usa para comprobar la igualdad entre dos números (restándolos, si el resultado es cero ambos números son iguales)

PD (Power - Down bit), Dirección STATUS,3 (bit3): se pone a "0" después de ejecutar la instrucción SLEEP*, se pone a "1" después de ejecutar la instrucción CLRWDT* o después de un power-up*.

TO (Timer Up), Dirección STATUS,4 (bit4): se pone a "0" cuando se acaba el tiempo del WATCHDOG*, Se pone a "1" después de ejecutar las instrucciones, CLRWDT* o SLEEP* o después de un power-up*.

RP0 y RP1 (selección de banco), Dirección STATUS,5 y STATUS,6: Como el PIC16F84 solo tiene dos bancos de memoria el RP1 no se usa para nada, la selección del banco se hace mediante RP0 (STATUS,5), si está a "0" nos encontramos en el banco 0, y si está a "1" nos encontramos en el banco 1.

IRP, Dirección STATUS,7, En este PIC no se usa para nada.

FSR (Puntero), Dirección 04h, se usa para direccionamiento indirecto en combinación con el registro INDF (dir. 00h): se carga la dirección del registro que queremos leer indirectamente en FSR y se lee el contenido de dicho registro en INDF.

PORTA (Puerto A), Dirección 05h: Con este registro se puede ver o modificar el estado de los pines del puerto A (RA0 – RA7). Si un bit de este registro está a "1" también lo estará el pin correspondiente a ese bit. El que un pin esté a "1" quiere decir que su tensión es de 5V, si está a "0" su tensión es 0V.

Así sucede también para PORTB, C, D y E.

PCLATH, Dirección 0Ah: Modifica la parte alta del contador de programa (PC), el contador de programa se compone de 13 bits, los 8 bits de menor peso se pueden modificar con PCL (dir. 02h) y los 5 bits de mayor peso se pueden modificar con PCLATH.

Page 19: Micro Control Adores El Pic16f877a El Tutorial 100

INTCON (controla las interrupciones), Dirección 0Bh: Se estudia bit abit:

RBIF (Flag de interrupción por cambio de PORTB) Dirección INTCON,0 (bit0): se pone a "1" cuando alguno de los pines RB4, RB5, RB6, o RB7 cambia su estado. Una vez que está a "1" no pasa a "0" por si mismo: hay que ponerlo a cero por programa.

INTF (Flag de interrupción de RB0) Dirección INTCON,1: Si está a "1" es que ha ocurrido una interrupción por RB0, si está a "0" es que dicha interrupción no ha ocurrido. Este bit es una copia de RB0.

TMROIF (Flag de interrupción por desbordamiento de TMR0) Dirección INTCON,2: Cuando TMR0 se desborda este Flag avisa poniendose a "1". Poner a "0" por programa.

RBIE (Habilita la interrupción por cambio de PORTB) Dirección INTCON,3: Si está a "1" las interrupciones por cambio de PORTB son posibles.

INTE (Habilita la interrupción por RB0) Dirección INTCON,4: Si lo ponemos a "1" la interrupción por RB0 es posible.

TMROIE (Habilita la interrupción por desbordamiento de TMR0) Dirección INTCON,5: Si este bit esta a "1" la interrupción por desbordamiento de TMR0 es posible.

PEIE (Habilita la interrupción de periféricos Dirección INTCON,6: Cuando este bit está a "1" habilita todas las interrupciones de periférico enmascarables.

GIE (Habilita las interrupciones globalmente) Dirección INTCON,7: Este bit permite que cualquier interrupción de las anteriores sea posible. Para usar alguna de las interrupciones anteriores hay que habilitarlas globalmente e individualmente.

MAPA DE MEMORIA RAM Y REGISTROS.

Page 20: Micro Control Adores El Pic16f877a El Tutorial 100

SET DE INSTRUCCIONES PARA PIC16F87X:

Page 21: Micro Control Adores El Pic16f877a El Tutorial 100

Para entender mejor cada instrucción se explica a continuación elsignificado de algunos parámetros:

Page 22: Micro Control Adores El Pic16f877a El Tutorial 100

f: Registro al que afecta la instrucción W: Acumulador (Working register) b: Número de bit (hay instrucciones que afectan a un solo bit) k: constante (un número) d: selección de destino del resultado de la instrucción, puede ser "0"

o "1", si es "0" el resultado se guarda en el acumulador (W) y si es "1" se guarda en el registro f al que afecta la instrucción.

Instrucciones orientadas a registros:

ADDWF f,d Suma W y el registro f, el resultado lo guarda según d (si d=0 se guarda en W y si d=1 se guarda en f).

ANDWF f,d Realiza la operación AND lógica entre W y f, el Resultado lo guarda según d.

CLRF f Borra el registro f (pone todos sus bits a cero).

CLRW - Borra el acumulador.

COMF f,d Calcula el complementario del registro f (los bits que estan a "0" los pone a "1" y viceversa. Resultado según d.

DECF f,d Decrementa f en uno (le resta uno). Resultado según d.

DECFSZ f,d Decrementa f y se salta la siguiente instrucción si el resultado es cero. Resultado según d.

INCF f,d Incrementa f en uno (le suma uno). Resultado según d.

INCFSZ f,d Incrementa f y se salta la siguiente instrucción si el resultado es cero (cuando se desborda un registro vuelve al valor 00h). Resultado según d.

IORWF f,d Realiza la operación lógica OR entre W y f. Resultado según d.

MOVF f,d Mueve el contenido del registro f a W si d=0 (si d=1 lo vuelve a poner en el mismo registro).

MOVWF f mueve el valor de W a f. Por ejemplo, si queremoscopiar el valor del registro "REG1" al registro "REG2" (ya veremos como ponerles nombres a los registros) escribiremos:

MOVF REG1,0 ; mueve el valor de REG1 a WMOVWF REG2 ; mueve el valor de W a REG2

Page 23: Micro Control Adores El Pic16f877a El Tutorial 100

Lo que va después del; son comentarios

NOP - No hace nada, solo pierde el tiempo durante un ciclo.

RLF f,d Rota el registro f hacia la izquierda a través del bit CARRY (todos los bits se mueven un lugar hacia la izquierda, el bit 7 de f pasa al CARRY y el bit CARRY pasa al bit 0 de f). Resultado según d.

RRF f,d Lo mismo que RLF pero hacia la derecha.

SUBWF f,d Resta f y W (f - W). Resultado según d.

SWAPF f,d intercambia los 4 primeros bit de f por los otros cuatro. Resultado según d.

XORWF f,d Realiza la operación lógica XOR (OR exclusiva) entre W y f. Resultado según d.

Instrucciones orientadas a bits:

BCF f,b Pone a "0" el bit b del registro f

BSF f,b Pone a "1" el bit b del registro f

BTFSC f,b Se salta la siguiente instrucción si el bit b del registro f es "0"

BTFSS f,b Se salta la siguiente instrucción si el bit b del registro f es "1"

Instrucciones orientadas a constantes y de control:

ADDLW k Le suma el valor k al acumulador (W).

ANDLW k Operación lógica AND entre W y el valor k (resultado en W).

CALL k Llamada a subrutina cuyo inicio esta en la dirección k

CLRWDT - Borra el registro Watchdog

GOTO k Salta a la dirección k de programa.

IORLW k Operación lógica OR entre W y el valor k (resultado en W)

MOVLW k carga el acumulador con el valor k. Por ejemplo, si queremos cargar el valor 2Ah en el registro "REG1" escribiremos:

Page 24: Micro Control Adores El Pic16f877a El Tutorial 100

MOVLW 2AH; carga el acumulador con el valor 2AhMOVWF REG1; mueve el valor de W a "REG1"

RETFIE - Instrucción para volver de la interrupción

RETLW k carga el valor k en W y vuelve de la interrupción

RETURN - vuelve de una subrutina.

SLEEP - El pic pasa a modo de Standby.

BIBLIOGRAFIA:1. Hoja de datos del PIC16F87xA de Microchip.2. Programación del PIC16F84. por Carlos Díaz www.electron.es.vg3. Club Saber electrónica “curso de pics para estudiantes y aficionados” N0 20. 4. Ed Quark Ing. Horacio D. Vallejo5. Club Saber electrónica “microcontroladores PIC Programación y desarrollo”

N0 24. Ed Quark Ing. Horacio D. Vallejo6. EL PIC16F877 por Marco Antonio Márquez Suárez

Además agradezco la información prestada de los colegas: Luis Rueda de San Salvador de Jujuy República Argentina.

Br. Aníbal Hernández y Br. Danny Herrera de REPUBLICA BOLIVARIANA DE VENEZUELA de la UNIVERSIDAD NACIONAL EXPERIMENTAL DE LA FUERZA ARMADA DEPARTAMENTO DE ELECTRONICA.

Snakewather, Dolphin, Picpower y unevox, miembros de la CUM México, miembros www.forosdeelectronica.com

Dedicado: a mis padres y mi hermano que siempre están conmigo (gracias por todo su apoyo).