Anda di halaman 1dari 23

OBLIGATORIO DE ARQUITECTURA DE COMPUTADORES I

MICROCONTROLADOR PIC
16F628

PROFESORES:

 ING. TEC. PABLO RATTIN


 ING. TEC. CAMILO MONETTA

Diego Dos Santos


Ariel Godoy

Fecha de entrega: 4/11/2010


INDICE
INTRODUCCION ........................................................................... 3
PRESENTACIÓN GENERAL ............................................................ 4
CARACTERÍSTICAS DEL MICROCONTROLADOR ............................ 4
DIAGRAMA DE PINES ................................................................... 5
DESCRIPCIÓN DE PINES ................................................................ 5
ARQUITECTURA INTERNA ............................................................ 7
ORGANIZACIÓN DE LA MEMORIA ................................................ 8
PILA .............................................................................................. 8
PLANO DE MEMORIA ................................................................... 9
STATUS (REGISTROS DE ESTADO DEL PROCESADOR) ................. 10
REGISTROS DE PROPOSITOS ESPECIALES (SFRS) ........................ 10
OPTION (REGISTRO DE CONFIGURACIONES) ............................. 11
INTCON (AUTORIZACIÓN DE INTERRUPCIONES) ........................ 12
PIE1 (AUTORIZACIÓN DE INTERRUPCIONES) .............................. 13
PIR1 (REGISTRO DE INDICADORES DE INTERRUPCIONES) .......... 14
PROGRAM COUNTER ................................................................. 15
PCON (REGISTRO DE CONFIGURACIÓN)..................................... 15
EEADR ........................................................................................ 16
INDF Y FSR (DIRECCIONAMIENTO INDIRECTO)........................... 16
MEMORIA EEPROM ................................................................... 16
EEDATA: ..................................................................................... 16
EECON1...................................................................................... 17
INTERRUPCIONES....................................................................... 17
ESCRITURA DE PROGRAMAS ...................................................... 21
SET DE INSTRUCCIONES EN ASM ............................................... 22
CONCLUSIÓN ............................................................................. 23
INTRODUCCION
Una de las principales ventajas que poseen los microcontroladores en general es su memoria
interna de programa asi como también el set de periféricos integrados que poseen en
contrapartida de un diseño utilizando un microprocesador clásico al cual se le debe agregar
memorias y periféricos externos incrementando el tamaño, complejidad y costo del proyecto.

Para diseñar un sistema micro controlado debemos tener presentes los alcances del proyecto
para asi determinar la cantidad de memoria y periféricos de entrada/salida necesarios, para
estos dispositivos el diseño del hardware es muy sencillo bastando con un par de componentes
adicionales. La complejidad se centra en la programación y el conocimiento interno del micro.

Es importante conocer los registros que manejan los diferentes dispositivos y su configuración,
esto es cierto tanto para la programación utilizando lenguaje ASM como para lenguajes de alto
nivel como Basic o C; sin embargo estos últimos nos proveen de un set de librerías que
simplifican la programación a costa de un mayor espacio de memoria.
Presentación general
Características del microcontrolador

-Presenta arquitectura RISC


Las características esenciales de una arquitectura RISC pueden resumirse como sigue:
Las instrucciones, aunque con otras características, siguen divididas en tres grupos:

a) Transferencia.
b) Operaciones.
c) Control de flujo.
Reducción del conjunto de instrucciones a instrucciones básicas simples, con la que pueden
implantarse todas las operaciones complejas.
Arquitectura del tipo load-store (carga y almacena). Las únicas instrucciones que tienen acceso
a la memoria son 'load' y 'store'; registro a registro, con un menor número de acceso a
memoria.
Casi todas las instrucciones pueden ejecutarse dentro de un ciclo de reloj. Con un control
implantado por hardware (con un diseño del tipo load-store), casi todas las instrucciones se
pueden ejecutar cada ciclo de reloj, base importante para la reorganización de la ejecución de
instrucciones por medio de un compilador.
Pipeline (ejecución simultánea de varias instrucciones). Posibilidad de reducir el número de
ciclos de máquina necesarios para la ejecución de la instrucción, ya que esta técnica permite
que una instrucción puede empezar a ejecutarse antes de que haya terminado la anterior.
El hecho de que la estructura simple de un procesador RISC conduzca a una notable reducción
de la superficie del circuito integrado, se aprovecha con frecuencia para ubicar en el mismo,
funciones adicionales:
Unidad para el procesamiento aritmético de punto flotante.
Unidad de administración de memoria.
Funciones de control de memoria cache.
Implantación de un conjunto de registros múltiples.

-35 Instrucciones (tiempo de ejecución 200ns)


-Velocidad de operación 20Mhz
-224 octetos de RAM
-128 octetos de EEPROM
-16 pins I/O con control de dirección
-Modulo comparador analógico
-3 timers (dos de 8 bits y uno de 16 bits)
Diagrama de pines

Descripción de pines
PORTA: RA0-RA7:

Los pines RA0-RA4 y RA6–RA7 son bidireccionales y manejan señales TTL


El pin RA5 es una entrada Schmitt Trigger que sirve también para entrar en el modo de
programación cuando se aplica una tensión igual a Vpp (13,4V mínimo)
El terminal RA4 puede configurarse como reloj de entrada para el contador TMR0
Los pines RA0-RA3 sirven de entrada para el comparador analógico
PORTB: RB0-RB7:

Los pines RB0-RB7 son bidireccionales y manejan señales TTL


Por software se pueden activar las resistencias de pull-up internas, que evitan el uso de
resistencias externas en caso de que los terminales se utilicen como entrada (permite, en
algunos casos, reducir el número de componentes externos)
El pin RB0 se puede utilizar como entrada de pulsos para provocar una interrupción externa
Los pines RB4-RB7 están diseñados para detectar una interrupción por cambio de estado. Esta
interrupción puede utilizarse para controlar un teclado matricial, por poner un ejemplo
Otros pines

VDD: Pin de alimentación positiva. De 2 a 5,5 Vcc


VSS: Pin de alimentación negativa. Se conecta a tierra o a 0 Vcc
MCLR: Master Clear (Reset). Si el nivel lógico de este terminal es bajo (0 Vcc), el
microcontrolador permanece inactivo. Este Reset se controla mediante la palabra de
configuración del PIC
OSC1/CLKIN: Entrada de oscilador externo
OSC2/CLKOUT: Salida del oscilador. El PIC 16F628 dependiendo de cómo se configure puede
proporcionar una salida de reloj por medio de este pin
ARQUITECTURA INTERNA
El pic 16F628 presenta arquitectura de Harvard con memoria de datos de 8 bits y memoria de
programas de 14 bits. Los registros de funciones especiales (SFR) incluido el program counter
(PC) están en la memoria de datos. La ALU es de 8 bits y contiene un registro de trabajo (W) de
8 bits

Flags de registro relacionados a la ALU:


C (Carry)
DC (Digit Carry)
Z (zero)

La Pila contiene 8 niveles.


Organización de la memoria
Las direcciones de memoria son 2k de 14 bits (0000h-07FFh) cíclicas, es decir 0800h=0000h
El program counter es de 13 bits
El vector de RESET está en 0000h y el de interrupción en 0004h
La memoria de datos esta particionada en 4 bancos, que contienen los Registros de Propósito
General (GPRs) y los Registros de Funciones Especiales ((SFRs). Los SFRs se localizan en las
primeras 32 posiciones de cada banco. Existen GPRs implementados como RAM estática en
cada banco.

PILA
La pila contiene 8 niveles, y se accede a ellos mediante las llamadas CALL (que funciona como
PUSH) y RETURN, RETFIEY RETLW (que funcionan como POP)
PLANO DE MEMORIA
REGISTROS DE PROPOSITOS
ESPECIALES (SFRs)
STATUS (registros de estado del procesador)
OPTION (registro de configuraciones)
INTCON (autorización de interrupciones)
PIE1 (autorización de interrupciones)
PIR1 (registro de indicadores de interrupciones)
PCON (registro de configuración)

PROGRAM COUNTER
INDF y FSR (direccionamiento indirecto)

Memoria EEPROM
-Los datos se pueden guardar ya que la memoria es no volátil
- la lectura y escritura no son instantáneas.

EEDATA:
Contiene los datos de lectura y escritura

EEADR:
Indica las direcciones de memoria de los datos
EECON1:
Indica el tipo de operación a realizar

INTERRUPCIONES
Una interrupción es un evento que hace que el microcontrolador deje de ejecutar la tarea que
está realizando para atender dicho acontecimiento y luego regrese y continue la tarea que
estaba realizando antes de que se presentara la interrupción. El pic 16F628 (y el 16F628A)
tiene 10 fuentes de interrupción, si las interrupciones están habilitadas cada vez que una de
estos acontecimientos se presente el pic dejará de ejecutar el programa para ir a atender la
interrupción y al termino de la misma continuará ejecutando el programa donde lo había
dejado. Las fuentes de interrupción son:

Interrupción externa RBO/INT cambio en el puerto B (RB7:RB4)


TMRO overflow Comparador
TMR1 overflow USART TX o RX
TMR2 match CCP
INTERRUPCIÓN DEL EEPROM
Aunque el pic cuenta con 10 fuentes distintas de interrupción solamentetiene un vector de
interrupción por lo que si se habilitan varias interrupciones al momento de presentarse
cualquiera de ellas el programa saltara a la misma rutina de interrupcion y es responsabilidad
del programador crear una rutina que identifique la fuente de la interrupcion.

Los registros asociados con las interrupciones son el registro de control de interrupcion
INTCON, el registro habilitacion de interrupciones de perifericos PIE1 y el registro de
interrupciones de perifericos PIR1. En el registro INTCON se encuentra el bit de habilitacion
global de interrupciones GIE, el bit de habilitacion de interrupcion por perifericos PEIE y los bits
de habilitacion de algunas interrupciones como la interrupcion externa del pin RB0 (INTE), la
interrupcion por cambio de estado en los pines RB4 a RB7 (RBIE) y la interrupcion por
desborde del timer 0 (T0IE), asi como las banderas correspondientes a cada interrupcion (INTF,
RBIF y T0IF). En el registro PIE1 se encuentran los bits de habilitacion de las demas
interrupciones y en el registro PIR1 se encuentran las banderas asociadas con cada
interrupcion.

Para habilitar las interrupciones se deben seguir los siguientes pasos:

Habilitar el bit correspondiente a cada interrupcion.


Limpiar la bandera correspondiente a la interrupcion habilitada para evitar falsas
interrupciones.
En caso de ser necesario habilitar el bit PEIE del registro INTCON (necesario para todas las
interrupciones con excepcion de INTE y RBIE).
Habilitar el bit de habilitacion global de interrupciones GIE del registro INTCON.
En el codigo tambien es necesario indicar hacia que rutina debe saltar el programa al
presentarse la interrupción. Ya se dijo que el vector de interrupción está en la dirección 0×04
por lo que es necesario agregar las lineas org 0×04 y goto ISR al programa, donde ISR es la
rutina de servicio de interrupción y puede, desde luego, tener cualquier otro nombre.

La ventaja de utilizar interrupciones es que mientras se espera a que se presente el evento que
produce la interrupción el microcontrolador puede estar ejecutando cualquier otra tarea. De
ese modo el micro no esta ciclado en una sola tarea sino que puede seguir trabajando en otras
hasta que una interrupción haga que el programa salte y ejecute la tarea que se quiera y al
terminarla el programa continuara su ejecución en el punto en el que se encontraba en el
momento de presentarse la interrupciónFuentes de interrupción

El Timer 0 es un modulo temporizador/contador de 8 bits que cuenta con un preescalador


programable también de 8 bits. Puede funcionar como temporizador o como contador. En
modo temporizador el valor del registro TMR0 se incrementa con cada ciclo de instrucción (o
cada X ciclos dependiendo del preescalador). En modo contador el valor del registro TMR0 se
incrementa en cada flanco (ascendente o descendente) del pin RA4/T0CKI. En ambos casos al
desbordarse (pasar de 0xFF a 0×0) el registro TMR0 la bandera de interrupción del timer 0 (bit
T0IF del registro INTCON) se pone a 1.
El modo temporizador se selecciona poniendo a cero el bit T0CS del registro OPTION. Poniendo
a uno ese bit el modulo trabaja en modo
contador, en este modo de operación además se debe seleccionar si el incremento se
producirá en cada filo ascendente o descendente, al poner a cero el bit T0SE del registro
OPTION se selecciona el filo ascendente.
El preescalador es compartido por el Timer 0 y por el Watchdog. Se asigna a un módulo o a
otro mediante el bit PSA del registro OPTION. Poniendo el bit a 1 el preescalador se asigna al
Watchdog y poniendolo a 0 el preescalador se asigna al Timer 0. El valor del preescalador se
selecciona con los bits PS2:PS0 de la siguiente manera:
PS2:P20 TMR0 WDT
000 1:2 1:1
001 1:4 1:2
010 1:8 1:4
011 1:16 1:8
100 1:32 1:16
101 1:64 1:32
110 1:128 1:64
111 1:256 1:128

En modo temporizador el Timer 0 incrementa su cuenta en cada ciclo de instrucción. Este


modo sirve para generar temporizaciones y bases de tiempo de la misma forma que los
retardos por software, sin embargo las temporizaciones con el Timer 0 pueden ser más exactas
y además se cuenta con la ventaja de que el módulo puede trabajar mediante interrupciones
así que el programa puede ejecutar otras instrucciones mientras se realiza la temporización.

El Timer 1 es un módulo temporizador/contador de 16 bits, que consiste en dos registros de 8


bits (TMR1H y TMR1L) que son de lectura y escritura. Este módulo incrementa su cuenta desde
0×000 hasta 0xFFFF y al desbordarse vuelve a 0×0000. Al presentarse el desborde la bandera
de interrupción TMR1IF se pone a 1 y, si está habilitada, la interrupción se presenta.

Este módulo al igual que el Timer 0 puede funcionar en modo temporizador y en modo
contador. En modo temporizador el par de registros TMR1 se incrementa en cada ciclo de
instrucción, este modo se selecciona poniendo a 0 el bit TMR1CS del registro T1CON. En modo
contador el par de registros TMR1 se incrementa en cada flanco ascendente de una señal de
reloj externa, este modo se selecciona poniendo a 1 el bit TMR1CS del registro T1CON.

El preescalador del Timer 1 tiene un valor máximo de 8 y se selecciona con los bits
T1CKPS1:T1CKPS0 de la siguiente manera:

00 = 1:1
01 = 1:2
10 = 1:4
11 = 1:8
A diferencia del Timer 0, el Timer 1 tiene la posibilidad de activar o detener la cuenta mediante
el bit TMR1ON del registro T1CON.
La configuración del Timer 1 se realiza mediante las líneas “movlw b’01100000'” y “movwf
T1CON“. Mediante estas lineas se configura el timer en modo temporizador (TMR1CS = 0) y se
selecciona el preescalador máximo (T1CKPS1:T1CKPS0 = 11). Una vez configurado el timer 1 se
limpia el puerto B y la bandera TMR1IF del registro PIR1. Posteriormente se realiza la precarga
cargando un 0xE7 al registro TMR1H y un 0×96 al registro TMR1L. Nótese que antes de realizar
la carga se detuvo el timer poniendo a 0 el bit TMR1ON, esto se hace para evitar errores al
momento de cargar el valor a los registros TMR1, después de realizar la carga se enciende el
timer poniendo a 1 el bit TMR1ON y en ese momento la temporización comienza.

Para saber si la temporización terminó se está revisando continuamente la bandera TMR1IF.


Mientras esta sea 0 la temporización aún no habrá terminado, cuando la bandera es 1
entonces la temporización finalizó, entonces se borra la bandera TMR1IF, se complementa el
puerto B y se vuelve a realizar la precarga. De este modo el programa está complementado el
puerto B cada 50mS.

El Timer 2 es un temporizador de 8 bits que tiene la particularidad de tener un preescalador y


un post-escalador. Además este módulo cuenta con un registro de periodo PR2 que marca el
valor máximo que puede alcanzar la cuenta del registro TMR2. A diferencia de los otros
temporizadores, el temporizador Timer 2 no incrementa su cuenta hasta llegar a 0xFF y
después al desborde sino que incrementa su cuenta desde 0×00 con cada ciclo de instrucción
hasta que el valor del registro TMR2 coincide con el del registro PR2 y después, en el siguiente
ciclo reinicia la cuenta desde 0×00.

Este módulo cuenta con un preescalador y un post-escalador. El preescalador tiene la misma


función que en los otros dos timers y sirve
como divisor de frecuencia antes de cada incremento. El post-escalador funciona como un
divisor de frecuencia después de cada coincidencia
entre los registros TMR2 y PR2. Si el post-escalador es 1:1 la bandera de interrupción TMR2IF
se habilitará en cada coincidencia entre TMR2 y PR2, en cambio si por ejemplo el post-
escalador es 1:16, la interrupción se presentará cada 16 coincidencias.

Este temporizador, al igual que el Timer 1, puede habilitarse y deshabilitarse mediante el bit
TMR2ON.

El preescalador se selecciona con los bits T2CKPS1:T2CKPS0 y el post-escalador con los bits
T0UTPS3:TOUTPS0 de la siguiente manera:
Preescalador Post-escalador
00 = 1:1 0000 = 1:1
01 = 1:4 0001 = 1:2
1x = 1:16 0010 = 1:3
.
.
.
1111 = 1:16
ESCRITURA DE PROGRAMAS

Instrucciones de octetos
‘f’: registro de 0 a 7Fh
‘d’: destino
Si d=0 el resultado se almacena en W
Si d=1 el resultado se almacena en f
Esta predefinido que d=1
SET DE INSTRUCCIONES EN ASM
CONCLUSIÓN
El pic 16f628 es un microcontrolador de gama baja que permite realizar desarrollos tendientes
a solucionar problemas de baja complejidad. Puede encontrarse en aplicaciones tales como:
alarmas, aparatos electrodomésticos, colectores de datos (data loggers), etc.

Para desarrollar se pueden utilizar diversas herramientas como simuladores y compiladores,


Microchip la empresa que comercializa los pic provee gratuitamente el ide MPLAB que posee
además de un compilador MPASM un simulador integrado que nos permite hacer el debug de
nuestra aplicación antes de bajarla al microcontrolador.

Para realizar el “quemado” o programación es necesario un hardware especial que se conecta


al pc mediante un puerto usb, serie, o paralelo y permite grabar la memoria interna del
microcontrolador.

El microcontrolador pic16F628 posee una memoria de programa del tipo FLASH EPROM con
una capacidad de 2K, también posee una memoria EEPROM de 128 bytes capaz de almacenar
datos permanentemente (por ejemplo numero de serie del producto, parámetros de
aplicación, etc).

La memoria RAM es de 224 bytes, cuadruplicando casi la de su predecesor el pic 16F84, y


duplicándolo en memoria de programas y EEPROM.

Posee una UART que permite la comunicación serie RS-232, 16 pines de entrada/salida
configurables divididos en dos puertos (PORTA y PORTB). Una capacidad interesante en este
micro es la inclusión de comparadores analógicos .

También posee una entrada de interrupción y capacidades de PWM.

Sus principales limitaciones son la falta de conversor A/D interno y la poca cantidad de pines
I/O.

Anda mungkin juga menyukai