Академический Документы
Профессиональный Документы
Культура Документы
Introduccin
Antes de ver qu es un microcontrolador y de analizar sus puntos
fuertes y sus defectos, ser til hacer un repaso relativo a la estructura de
cualquier sistema programable, que pueda hacer uso de un
microcontrolador.
Unidad
Central
Memoria
ROM
Memoria
RAM
Circuitos
de interfaz
Exterior
Figura 1.
La figura 1 presenta el esquema tipo de cualquier sistema
programable. Veamos que elementos son indispensables para su
funcionamiento:
La unidad central
La memoria ROM
La memoria RAM
Los circuitos de interfaz
Un bus de interconexin
s suelen incluir
entrada/salida.
numerosas
manipulaciones
de
la
informacin
de
Estructura de un microcontrolador.
De lo visto anteriormente, un microcontrolador debe contener
todos los elementos de la figura 1 en un nico encapsulado. El esquema
bsico de un microcontrolador sera
Controlador de
interrupciones
ROM
UVPROM
OTPROM
Temporizador 1
RAM
EEPROM
Temporizador 0
Interfaz
especfica
CPU
Osc.
Controlador
de bus
Puertos de
entrada/salida
Puerto
serie
.....
Figura 2
PIC 16F84.
Microcontrolador
diseado
por
la
empresa
Microchip
(http://www.microchip.com), que se fabrica en varias versiones de las
cuales las ms simples, pero interesantes, son la 16C84 y la 16F84. Son
idnticas en cuanto a su arquitectura interna a excepcin de la memoria
ROM y la memoria RAM. En el primer caso contiene una memoria EEPROM
de 1Kbytes de 14 bits cada una, en el segundo diseo la memoria tiene la
misma capacidad pero es de tipo Flash.
La memoria EEPROM y la Flash son elctricamente grabables y
borrables, lo que permite escribir y borrar el programa bajo prueba
manteniendo el microcontrolador en el mismo zcalo y usando el mismo
dispositivo para grabar y borrar. Esta caracterstica supone una gran
ventaja frente a la mayora de los microcontroladores, que tienen como
memoria de programa reescribible una tipo EPROM. Se graba
elctricamente, pero para borrarlas hay que someterlas durante cierto
tiempo a rayos ultravioleta, lo que implica sacar del zcalo el circuito
integrado y colocarlo en un borrador de EPROM.
Otra ventaja del PIC16F84 en cuanto a simplificar el proceso de
escritura, borrado y reescritura de programas, tan necesario en la fase de
diseo, es su sistema de grabacin de datos, que se realiza en serie. Para
escribir un programa en la memoria se manda la informacin en serie
usando slo dos pins, una para la seal de reloj y otra para los datos
serie. A continuacin exponemos las caractersticas ms significativas:
MEMORIA DE PROGRAMA: 1 K x 14
MEMORIA DE DATOS: 68 bytes
MEMORIA DE DATOS EEPROM: 64 bytes
PILA (Stack): De 8 niveles
INTERRUPCIONES: 4 tipos diferentes
JUEGO DE INSTRUCCIONES: 35
18
RA1
RA3
17
RA0
RA4/TOCKI
16
OSC1/CLKIN
MCLR#
15
OSC2/CLKOUT
Vss
14
Vdd
RB0/INT
PIC16X8X
RA2
13
RB7
RB1
12
RB6
RB2
11
RB5
RB3
10
RB4
Figura 3
El reloj.
La frecuencia de trabajo del microcontrolador es un parmetro
fundamental a la hora de establecer la velocidad de ejecucin de
instrucciones y el consumo de energa.
Cuando un PIC16F84 funciona a 10 MHz, que es su mxima
frecuencia, le corresponde un ciclo de instruccin de 400 ns, puesto que
cada instruccin tarda en ejecutarse 4 perodos de reloj, o sea, 4 x 100 ns
= 400 ns. Todas las instrucciones del PIC se realizan en un ciclo de
instruccin, menos las de salto que tardan el doble.
Los impulsos de reloj entrar por la pin OSC1/CLKIN y se dividen por
4 internamente, dando lugar a las seales Q1, Q2, Q3 y Q4. Durante un
ciclo de instruccin, que comprende las cuatro seales mencionadas, se
desarrollan las siguientes operaciones:
Q1: Durante este impulso se incrementa el Contador de Programa.
Q4: Durante este impulso se busca el cdigo de la instruccin en la
memoria del programa y se carga en el Registro de Instrucciones.
Q2-Q3: Durante la activacin de estas dos seales se produce la
decodificacin y la ejecucin de la instruccin.
Para conseguir ejecutar cada instruccin en un ciclo de instruccin
(excepto las de salto), se aplica la tcnica de segmentacin o pipe-line,
que consiste en realizar en paralelo las dos fases que comprende cada
instruccin.
Figura 4.
La estructura segmentada del procesador permite realizar al mismo
tiempo la fase de ejecucin de una instruccin y la de bsqueda de la
siguiente. Cuando la instruccin ejecutada corresponde a un salto no se
conoce cul ser la siguiente hasta que se realice, por eso en esta
situacin se sustituye la fase de bsqueda por un ciclo vacio, oroginando
que las instrucciones de salto tarde en realizarse dos ciclos de instruccin.
Osciladores
Los PIC admiten
aplicarles la frecuencia de
y OSC2. El tipo empleado
Configuracin, como se
pueden emplear son:
RESET.
Cuando se aplica un nivel lgico bajo a la pin MCLR# el
microcontrolador reinicializa su estado. Dos acciones importantes se
producen en la reinicializacin o RESET:
1. El Contador de Programa se carga con la direccin 0, apuntando a
la primera direccin de la memoria de programa en donde deber
estar situada la primera instruccin del programa de aplicacin.
2. la mayora de los registros de estado y control del procesador
toman un estado conocido y determinado.
Se puede provocar el RESET de varias maneras, pero si se desea
realizar manualmente, habr que colocar, conectado al pin MCLR#, que al
ser apretado genere un nivel lgico bajo.
Arquitectura
Para lograr una compactacin de cdigo ptima y una velocidad
superior a la de sus competidores, los microcontroladores PIC incorporan
en su procesador tres de las caractersticas ms avanzadas en los grandes
computadores:
Figura 5.
Memoria de Programa.
La arquitectura de los PIC de la gama media admite un mapa de
memoria de programa capaz de contener 8192 instrucciones de 14 bits
cada una. Este mapa se divide en pginas de 2048 posiciones. para
direccionar 8 K posiciones se necesitan 13 bits, que es la longitud que
tiene el Contador de Programa. Sin embargo el PIC16F84 solo tiene
implementadas 1 K posiciones, por lo que se ignoran los tres bits de ms
peso del PC.
El Contador de Programa est implementado sobre un par de
posiciones de la memoria RAM. Cuando se escribe el Contador de
Programa como resultado de una operacin de la ALU, los 8 bits de menos
peso del PC residen en el registro PCL, que ocupa, repetido, la posicin 2
de los dos bancos de la memoria de datos. Los bits de ms peso, PC
<12:8>, residen en los 5 bits de menos peso del registro PCLATH, que
ocupa la posicin 0A H de los dos bancos de la memoria RAM. En las
instrucciones de salto, los 11 bits de menos peso del PC provienen del
cdigo de instruccin y los otros dos de los bits de PCLATH <4:3>, tal y
como se muestra en la figura 6.
La Pila es una zona aislada de las memorias de instrucciones y
datos. Tiene una estructura LIFO, en la que el ltimo valor guardado es el
primero que sale. Tiene 8 niveles de profundidad cada uno con 13 bits.
Funciona como un buffer circular, de manera que el valor que se obtiene al
realizar el noveno POP es igual al que se obtuvo en el primero.
Figura 6.
Memoria de Datos(RAM).
00
01
MEMORIA DE DATOS
INDF
INDF
TMR0
OPTION
80
81
02
03
04
05
06
07
08
09
0A
0B
0C
PCL
ESTADO
FSR
PUERTA
A
SFR
PUERTA B
PCL
ESTADO
FSR
TRIS A
TRIS B
EEDATA
EEADR
PCLATH
INTCON
EECON1
EECON2
PCLATH
INTCON
36
REGISTROS
DE GPR
PROPSITO
GENERAL
MAPEADOS
EN EL
BANCO 0
2F
30
82
83
84
85
86
87
88
89
8A
8B
8C
AF
B0
7F
FF
BANCO 0
BANCO 1
Figura 7
Para seleccionar el banco a acceder hay que manipular el bit 5
(RP0) del registro ESTADO. Si RP0=1 se accede ala banco 1 y si RP0=0 se
accede al banco 0. Tras un Reset se accede automticamente al banco 0.
Para seleccionar un registro de propsito general no hay que tener en
cuenta el estado del bit RP0, porque al estar mapeado el banco 1 sobre el
banco 0, cualquier direccionamiento de un registro del banco 1
corresponde a su homlogo del banco 0. En el direccionamiento directo a
los registro GPR se ignora el bit de ms peso, que identifica el banco y sus
direcciones estn comprendidas entre el valor 0x0C y 0x4F en
hexadecimal.
Figura 8
para elegir una de las 128 posiciones del banco seleccionado, tal y
como muestra la figura 8.
Figura 9
Cuando se lee una lnea de la Puerta A se recoge el nivel lgico que
tiene en ese momento. Las lneas cuando actan como salidas estn
conectadas a unos biestable, lo que significa que sus pins sacan el nivel
lgico que se haya cargado por ltima vez en el registro PUERTAA. La
escritura de una puerta, tal y como se ve en la figura 9, implica que
primero se deposita el nivel lgico en la lnea correspondiente del bus
interno de datos y se activa la seal WRITE, lo que origina el
almacenamiento de dicho nivel en el biestable. En esta situacin, el
biestable de configuracin (TRIS) debera tener valor 0 para que actuase
como salida. Con estos valores la puerta OR tendra un 0 a su salida y la
AND tambin. Estos valores producen la conduccin de los transistores
MOS, en funcin del valor escrito, dando como salida final V DD o VSS (1 0
respectivamente).
Si una lnea acta como entrada, el nivel lgico depositado en ella
desde el exterior pasa a la lnea correspondiente del bus interno de datos
cuando se activa la seal READ y se hace conductor el dispositivo
triestado que les une. Al programarse como entrada, los dos transistores
MOS de salida quedan bloqueados y la lnea de alta impedancia. Tngase
en cuenta que cuando se lee una lnea de entrada se obtiene el estado
Puerto B.
Consta de 8 lneas bidireccionales de E/S, RB7-RB0, cuya
informacin se almacena en el registro PUERTAB, que ocupa la direccin 6
del banco 0. El registro de configuracin TRISB ocupa la misma direccin
pero del banco 1. La lnea RB0/INT tiene dos funciones multiplexadas;
adems de pin de E/S acta como la pin para la peticin de una
interrupcin externa, cuando se autoriza esta funcin mediante la
adecuada programacin del registro INTCON.
Las cuatro lneas de ms peso, RB7-RB4, pueden programarse para
soportar una misin especial. Cuando las 4 lneas actan como entradas
se las puede programar para generar una interrupcin si alguna de ellas
cambia su estado lgico. Esta posibilidad es muy prctica en el control de
teclados. En la figura 10 se muestra el esquema de conexionado entre las
pins RB7-RB4 y las lneas correspondientes del bus interno.
Figura 10
El estado de las pins RB7-RB4 en modo de entrada se compara con el
valor antiguo que tenan y que se haba almacenado en un biestable
durante la ltima lectura de la Puerta B. El cambio de estado en alguna de
esas lneas origina una interrupcin y la activacin del sealizador RBIF.
La lnea RB6 tambin se utiliza para la grabacin serie de la memoria de
programas y sirve para soportar la seal de reloj. La lnea RB7 constituye
la entrada de los datos en serie.
El Registro de Estado.
Hasta ahora ESTADO es el registro ms usado y llega el momento de
describirlo en su totalidad. Ocupa la direccin 3 tanto del banco 0 como
del 1 de la memoria de datos RAM. Sus bits tienen tres misiones distintas:
I. Se encargan de avisar de la incidencias del resultado de la ALU
(C, DC y Z).
II. Indican el estado de Reset (TO# y PD#).
III. Seleccionan el banco a acceder en la memoria de datos (IRP,
RP0 y RP1).
En la figura 11 se muestra el diagrama de distribucin de los bits del
registro ESTADO, su misin es la siguiente:
C: Acarreo en el bit de ms peso
1: Acarreo en el bit de ms peso.
0: No acarreo en el bit de ms peso.
DC: Acarreo en el 4 bit
1: Acarreo en el 4 bit.
0: No acarreo en el 4 bit.
Z: Cero
1: El resultado de una instruccin lgico-aritmtica ha sido cero.
0: El resultado de una instruccin lgico-aritmtica no ha sido cero.
PD#: Power Down
1: Se pone a este valor despus de la conexin a la alimentacin o
al ejecutar clrwdt.
0: Se pone a este valor al ejecutar sleep.
TO#: Time Out
1: Se pone a este valor despus de la conexin a la alimentacin o
al ejecutar clrwdt y sleep.
RP1
RP0
TO#
PD#
Figura 11
DC
EL CONTADOR DE PROGRAMA
Este registro, normalmente denominado PC (PCL), es totalmente
equivalente al de todos los PIC y contiene la direccin de la prxima
instruccin a ejecutar. Se incrementa automticamente al ejecutar cada
instruccin, de manera que la secuencia natural de ejecucin del
programa es lineal, una instruccin despus de la otra. Algunas
instrucciones que llamaremos de control, cambian el contenido del PC
alterando la secuencia lineal de ejecucin. Dentro de estas instrucciones
se encuentran el GOTO y el CALL que permiten cargar en forma directa un
valor constante en el PC haciendo que el programa salte a cualquier
posicin de la memoria. Otras instrucciones de control son los saltos
condicionales, que producen un incremento adicional del PC si se cumple
una condicin especifica, haciendo que el programa saltee, sin ejecutar, la
instruccin siguiente.
Al resetearse el PIC, todos los bits del PC toman valor 1, de manera
que la direccin de arranque del programa es siempre la ultima posicin
de memoria de programa. En esta posicin se deber poner una
instruccin de salto al punto donde verdaderamente se inicia el programa.
A diferencia de la mayora de los microprocesadores
convencionales, el PC es tambin accesible al programador como registro
de memoria interna de datos, en la posicin de 02. Es decir que cualquier
instruccin comn que opere sobre registros puede ser utilizada para
alterar el PC y desviar la ejecucin del programa. El uso indiscriminado de
este tipo de instrucciones complica el programa y puede ser muy
peligroso, ya que puede producir comportamientos difciles de predecir.
Sin embargo, algunas de esta instrucciones utilizadas con cierto mtodo,
pueden ser muy tiles para implementar poderosas estructuras de control
tales como el goto computado. Como el PIC opera con datos de 8 bits, y la
memoria de datos es tambin de 8 bits, estas instrucciones solo pueden
leer o modificar los bits 0 a 7 del PC.
Subrutinas
La mayora de los microcontroladores incluyen en su repertorio de
instrucciones algunas que permiten saltar a una rutina y, cuando se
complementa su ejecucin, retornar al programa principal.
Consulta a tablas.
En muchas ocasiones es necesario para un programador efectuar
una coincidencia entre alguna cantidad de valores conocidos y un nmero
desconocido que se tiene como ndice, por ejemplo, basados en el
contenido de una posicin de memoria RAM (ndice) se puede obtener de
una serie consecutiva de datos almacenados en memoria de programa (a
estos datos "conocidos" almacenados se le denomina tabla), el dato
desplazado n posiciones adelante del comienzo de esta tabla, este nmero
n corresponde al contenido de la posicin de memoria RAM ndice.
Programa ejemplo:
offset equ 0Ch ;posicin de memoria RAM
w
equ 0
;destino W
f
equ 1
;destino F
................
................
................
movf
offset,w ;tomamos a W el nmero n utilizado como ndice
call
tabla
;posicin en donde se encuentra la serie de datos
;en este sitio luego del retorno de la subrutina se tiene en W el dato
ledo de la tabla
................
................
................
tabla
addwf PCL,f ;se suma al PC el contenido de W obteniendo como resultado un salto
indexado
retlw
W=30h
retlw
W=31h
retlw
W=32h
retlw
W=33h
retlw
W=34h
retlw
W=35h
.
.
.
30h
31h
32h
33h
34h
35h
retardo
retardo
movlw
movwf
r1
decfsz
goto
0Ah
mem1
mem1,1
r1
;carga 10 en el acumulador
;guarda el valor del w en mem1
;decrementa mem1
;se ejecuta esta instruccin si el decremento
;no es cero
return
Cuando ejecuta la instruccin Call esta lleva en ejecutarse 2 ciclos.
Cuando esta dentro de la rutina retardo se encuentra con la instruccin
movlw 0Ah que consume 1 ciclo, luego ejecuta la instruccin movwf
mem1 que consume 1 ciclo.
Luego se ejecuta la parte principal de la rutina de demora, las
instrucciones decfsz mem1,1 y la instruccin goto r1 se ejcutan 9
veces, ya que mienstras esta decrementado y no llega a cero no se saltea
la instruccin goto, por lo tanto mienstras no de cero el decremento la
instruccin decfsz consume 1 ciclo y la instruccin goto 2, por lo tanto,
retardo
03h
mem2
0Ah
mem1
mem1,1
r1
mem2,1
r2
;{1}
;{2}
;{3} carga 10 en el acumulador
;{4} guarda el valor del w en mem1
;{5} decrementa mem1
;{6} se ejecuta esta instr. si el decremento <>0
;{7}
;{8}
;{9}
{8}
Total
2 ciclo
34 ciclos
Esta secuencia de {34} ciclos se ejecutan en su totalidad 2 veces. Luego la tercera vez
esta secuencia resulta en:
{3}
1 ciclo
{4}
1 ciclo
{5}{6}
29 ciclos
luego se ejecuta decfsz mem2
{7}
2 ciclos
como el decremento es 0 consume
Total 33 ciclos
2 ciclos
Luego se ejecuta la instruccin Return que tarda 2 ciclos.
El total de ciclos consumidos en esta rutina
2 + 1 + 1 + { 34*2 + 33 } + 2 = 2 + 1 +2 + {101} + 2 = 107 ciclos
El tiempo que se tarda en ejecutar esta secuencia es 107*1e-6= 107 u seg.
El mximo tiempo que se tarda, se cargan mem1 y mem2 con 0FFh.
La primera secuencia tarda
{3}
{4}
{5}{6}
{7}
{8}
Total
1 ciclo
1 ciclo
764 ciclos
1 ciclo
2 ciclo
769 ciclos
{3}
{4}
{5}{6}
{7}
Total
1
1
764
2
768
ciclo
ciclo
ciclos
ciclos
ciclos
movlw .3
movwf mem3
movlw .3
movwf mem2
movlw .10
movwf mem1
decfsz mem1,1
goto r1
decfsz mem2,1
goto r2
decfsz mem3,1
goto r3
return
r3
r2
r1
;{1}
;{2}
;{3}
;{4}
;{5}
;{6}
;{7}
;{8}
;{9}
;{10}
;{11}
;{12}
;{13}
1 ciclo
1 ciclo
29 ciclos
1 ciclo
2 ciclos
{5}
{6}
{A}
{9}
1 ciclo
1 ciclo
29 ciclos
2 ciclos
33 ciclos
34 ciclos
Este bucle se ejecuta 2 veces, es decir (k2-1) y cuando la funcin de
decrementar resulta cero se tarda 33 ciclos. La expresin que rige el
segundo bucle,
[(1+1+A+1+2)*(k2-1)]+[1+1+A+2]= [(5+A)*(k2-1]+[4+A]=
[(5+29)*(2)]+[4+29]=[34*2]+[33]=[68]+[33]=101 ciclos
Para indicar la expresin del bucle doble lo haremos como
B=[(5+A)*(k2-1)]+[4+A]
1
1
ciclo
ciclo
{3}
{4}
1
1
ciclo
ciclo
{B}
{11}
{12}
101 ciclos
1 ciclo
2 ciclos
106 ciclos
{B}
{11}
101 ciclos
2
ciclos
105 ciclos
2 ciclos
retardo
movlw .3
movwf mem3
{rutina triple}
return
;{1}
;{2}
;{3}{12}
;{13}
1
1
317
2
ciclo
ciclo
ciclos
ciclos
ciclos
Por lo tanto se tarda en ejecutar esta rutina como 323 ciclos.
Para determinar una rutina generaliza es
A=[3*(k1-1)+2]
B=[(5+A)*(k2-1)]+[4+A]
C=[(5+B)*(k3-1)]+[4+B]
D = 2 + 1 +1 +C + 2
Para el mximo de los valores cargados en k1, k2 y k3 para 255.
A=[3*(255-1)+2]=764 ciclos
B=[(5+764)*(255-1)]+[4+764] = [195326]+[768] = 196064 ciclos
C=[(5+196094)*(255-1)]+[4+196094] = 50005244 ciclos
D = 2 + 1 + 1 + 50005244 + 2 = 50005250 ciclos
Para un oscilador de 4 MHz, el tiempo de ciclo de instruccin es t=1e-6 seg.
D= 50.005250 segundos
Programacin.
Programa fuente.
El programa fuente esta compuesto por una sucesin de lneas de
programa. Cada lnea de programa esta compuesta por 4 campos
separados por uno o ms espacios o tabulaciones. Estos campos son:
[Etiqueta]
Comando
[Operando(s)]
;Comentario]
Crear un proyecto.
Software ensamblador.
El software ensamblador que presenta Microchi provienen dos
presentaciones, una, para entorno DOS llamado MPASM.EXE y la otra,
para entorno Windows llamado MPASMWIN.EXE. Las dos presentaciones
soportan a TODOS los microcontroladores de la familia PIC de Microchip.
El conjunto de instrucciones de los microcontroladores PIC es en esencia
la base del lenguaje ensamblador soportado por este software.
EQU
;ejemplo:
tatus equ
03
Cont
F
0x20
1
equ
equ
org 0
movlw 0f
movwf Cont
Inicio
s1
s2
Lista de pasos:
1. Haga doble click en el cono correspondiente a MPLAB.
2. Crear el archivo fuente correspondiente (men File...New Source).
3. Salve el archivo (con extensin .ASM) una vez terminada su edicin
(men FILE...Save).
4. Debe a continuacin crearse un nuevo proyecto (men Project...New
Project).
5. Cuando aparezca la ventana de New Project editar las cajas de texto:
Project path and Name y Development Mode, hacer click en <OK>.
6. En la siguiente ventana Edit Project, hacer click en la seccin Nonproject files sobre el nombre del archivo fuente realizado en los pasos 2 y
3.
7. Haga click en el botn <=add y luego de que ste aparezca en la
seccin
Project
Files
haga
click
sobre
el
botn
<OK>.
8. Salvar el proyecto (en el men Project...Save project).
Temporizador/Contador TMR0.
Una de las labores ms habituales en los programas de control de
dispositivos suele ser determinar intervalos concretos de tiempo, y recibe
le nombre de temporizador (timer) el elemento encargado de realizar
esta funcin. Tambin suele ser frecuente contar los impulsos que se
producen en el exterior del sistema, y el elemento destinado a este fin se
denomina contador. Si las labores del temporizador o contador las
asignamos al programa principal robaran mucho tiempo al procesador en
detrimento de actividades ms importantes. Por este motivo se disean
recursos especficamente orientados a estas misiones.
Los PIC16F84 poseen un temporizador/contador de 8 bits, llamado
TMR0, que acta de dos maneras diferentes:
Figura 10
El Divisor de frecuencias puede usarse con el TMR0 o con el WDT. Con el
TMR0 acta como Pre-divisor, es decir, los impulsos pasan primero por el
Divisor y luego se aplican al TMR0, una vez aumentada su duracin. Con
el WDT acta despus, realizando la funcin de Post-divisor. Los impulsos,
que divide por un rango el Divisor de frecuencia, pueden provenir de la
seal de reloj interna (Fosc/4) o de los que se aplican a la pin T0CKI. El
TMR0 se comporta como un registro de propsito especfico (SFR) ubicado
en la direccin 1 del banco 0 de la memoria de datos. EN igual direccin,
pero en el banco 1, se halla el registro OPTION.
TMR0 puede ser ledo y escrito en cualquier momento al estar conectado
al bus de datos. Funciona como un contador ascendente de 8 bits. Cuando
funciona como temporizador conviene cargarle con el valor de los
impulsos que se quiere temporizar, pero expresados en complemento a 2.
De esta manera, al llegar al nmero de impulsos deseados se desborda y
al pasar por 00 H se activa el sealizador TOIF y/o se produce una
interrupcin.
Para calcular los tiempos a controlar con TMR0 se utilizan las siguientes
frmulas prcticas.
Temporizacin = 4 Tosc (Valor cargado en TMR0) (Rango
del Divisor)
Valor a cargar en TMR= = Temporizacin/4 Tosc Rango del
Divisor
En cualquier momento se puede leer el valor que contiene TMR0, sin
detener su cuenta. En la figura 11 se ofrece el esquema de
funcionamiento de TMR0. Obsrvese que hay un bloque que retrasa 2
ciclos la cuenta para sincronizar el momento del incremento producido por
la seal aplicada a T0CKI con el que se producen los impulsos internos de
reloj. Cuando se escribe TMR0 se retrasan 2 ciclos su reincremento y se
pone a 0 el Divisor de frecuencia.
Figura 11
El registro OPTION.
La misin principal de este registro es controlar TMR0 y el Divisor de
frecuencia. Ocupa la posicin 81 H de la memoria de datos, que equivale a
la direccin 1 del banco 1. EL bit T0CS (Timer 0 Clock edge Select)
selecciona en el multiplexor MPX1 la procedencia de los impulsos de reloj,
que pueden ser del oscilador interno (Fosc/4) o los que se aplican desde el
exterior por la pin T0CKI. El bit T0SE (Timer 0 clock Source sElect) elige el
tipo de flanco activo en los impulsos externos. El bit PSA del registro
OPTION asigna el Divisor de frecuencia al TMR0 (PSA= 0) o al WDT (PSA
= 1).
Los 3 bits de menos peso de OPTION seleccionan el rango por el que
divide el Divisor de frecuencia los impulsos que se le aplican en su
entrada. El bit 6 INTEDG (INTerrupt EDGe) sirve para determinar el flanco
Figura 12
La memoria EEPROM de Datos.
------
------
EEIF
WRERR
WREN
WR
RD
Interrupciones.
Las llamadas a las subrutinas mediante instrucciones del tipo CALL son
desviaciones del flujo de control del programa originadas por
instrucciones, por lo que se consideran sncronas. Se producen cada vez
que se ejecuta dicha instruccin. La interrupciones son desviaciones del
flujo de control del programa originadas asncronamente por diversos
sucesos que no se hallan bajo la supervisin de las instrucciones. Dichos
sucesos pueden ser externos al sistema, como la generacin de un flanco
o nivel activo en una pin del microcontrolador, o bien, internos, como el
desbordamiento de un contador.
El comportamiento del microcontrolador ante la interrupcin es similar al
de la instruccin tipo CALL de llamada a subrutina. En ambos casos se
detiene la ejecucin del programa en curso, se salva la direccin actual del
PC en la Pila y se carga el PC con una direccin, que en el caso de CALL
viene acompaando a la misma instruccin, y en el caso de una
interrupcin es una direccin reservada de la memoria de cdigo,
llamada Vector de Interrupcin que da paso a un trozo de cdigo
denominado Rutina de Servicio de la Interrupcin (RSI).
La RSI suele comenzar guardando en la memoria de datos algunos
registros especficos del procesador. Concretamente aquellos que la RSI va
a emplear y va a alterar su contenido. Antes del retorno al programa
principal se recuperan los valores guardados y se restaura completamente
el estado del procesador. Algunos procesadores salvan estos registros en
la Pila, pero los PIC no disponen de instrucciones para meter (push) y
sacar (pop) informacin de la Pila, utilizando para este fin registros de
propsito general de la memoria de datos.
Los PIC16F84 pueden ser interrumpidos por 4 causas diferentes, pero
todas ellas desvan el flujo de control a la direccin 0004 H, por lo que
otra de las operaciones iniciales de la RSI es averiguar cul de las posibles
causas ha sido la responsable de la interrupcin en curso, para ello se
exploran los sealizadores de las fuentes de interrupcin. Otro detalle
importante en la RSI de los PIC16F84 es que estos microcontroladores
poseen un bit GIE (Global Interrupt Enable) que cuando vale 0 prohibe
todas las interrupciones. Pues bien, al comenzar la RSI dicho bit GIE se
pone automticamente a 0, con objeto de no atender nuevas
interrupciones hasta que se termine la que ha comenzado. En el retorno
final de la interrupcin, GIE pasa a valer automticamente 1 para volver a
tener en cuenta las interrupciones.
Causas de Interrupcin.
Los PIC16F84 tienen 4 causas o fuentes posibles de interrupcin:
I. Activacin de la pin RB0/INT
II. Desbordamiento del temporizador TMR0
III. Cambio de estado en una de las 4 pins de ms peso (RB7-RB4)
de la Puerta B
IV. Finalizacin de la escritura en la EEPROM de datos
Cuando ocurre cualquiera de los 4 sucesos indicados se origina una
peticin de interrupcin, que si se acepta y se atiende comienza
depositando el valor del PC actual en la Pila, poniendo el bit GIE = 0 y
cargando en el PC el valor 0004 H, que es el Vector de Interrupcin donde
se desva el flujo de control. Cada fuente de interrupcin dispone de un
sealizador o flag, que es un bit que se pone automticamente a 1
cuando se produce. Adems cada fuente de interrupcin tiene otro bit de
permiso, que segn su valor permite o prohibe la realizacin de dicha
interrupcin.
GIE
Figura 17
EEIE
T0IE
INTE
RBIE
T0IF
INTF
RBIF