Professional Documents
Culture Documents
TMR0
de
bits
con
divisor
y alta
velocidad
CMOS
El PIC16F84A
5.3
Descripcin de patillas
Nombre
Tip
o
OSC1/CLKIN
16 I
Descripcin
Entrada del oscilador a cristal/Entrada de la
fuente de reloj externa
OSC2/CLKOU
T
15 O
MCLR
RA0
17 I/O
RA1
18 I/O
RA2
I/O
RA3
I/O
RA4/T0CKI
I/O
RB0/INT
I/O
RB1
I/O
RB2
I/O
RB3
I/O
RB4
10 I/O
RB5
11 I/O
RB6
12 I/O
RB7
13 I/O
Vss
Tierra de referencia
Vdd
14 P
I/P
Alimentacin
Arquitectura interna
El PIC16F84A
5.4
El PIC16F84A
5.5
Memoria de programa
La memoria de programa est organizada con palabras de 14
bits con un total de 1 K, del tipo Flash, que durante el
funcionamiento es de solo lectura. Slo se ejecutar el cdigo
contenido en esta memoria, pudiendo almacenar en ella una
cantidad limitada de datos como parte de la instruccin RETLW.
En una sola palabra se agrupa el cdigo de la instruccin y el
operando o su direccin.
El tipo de memoria utilizada en este microcontrolador, podr
ser grabada o borrada elctricamente a nuestro antojo desde el
programador. La memoria tipo Flash tiene la caracterstica de
poderse borrar en bloques completos y no podrn borrarse
posiciones concretas o especficas. Este tipo de memoria no es
voltil, es decir, no pierde los datos si se interrumpe la energa.
El PIC16F84A
5.6
El PIC16F84A
5.7
Memoria de datos
Est organizada en dos pginas o bancos de registro, banco 0
y banco 1. Para cambiar de pgina se utiliza un bit del registro
STATUS (RP0).
Cada banco se divide a su vez en dos reas:
RFS (Registros de Funciones Especiales)
El PIC16F84A
5.8
El direccionamiento
Para el PIC solamente existen 4 modos de direccionamiento,
entre los cuales, tres de ellos ya fueron vistos de manera
intuitiva cuando vimos las instrucciones. Los modos de
direccionamiento tratan sobre la forma de mover los datos de
unas posiciones de memoria a otras.
Direccionamiento Inmediato
Direccionamiento Directo
Direccionamiento bit a bit
Direccionamiento Indirecto
Direccionamiento Inmediato
El dato manipulado por la instruccin se codifica con la propia
instruccin. En este caso, el dato en cuestin se denomina
literal.
MOVLW k ; Coloca el literal k, que es un valor cualquiera
codificado con 8 bits, en el registro de trabajo w
Direccionamiento Directo
La memoria interna se direcciona de forma directa por medio
de los 8 bits "f" contenidos en las instrucciones que operan
sobre registros. De esta manera se puede direccionar cualquier
posicin desde la 00 a la FF.
En los microcontroladores que tengan ms de un banco,
antes de acceder a alguna variable que se encuentre en la zona
Direccionamiento Indirecto
Es el modo ms potente y utiliza los registros INDF y FSR.
En el registro FSR se introduce la direccin del registro que se
quiere leer cuando se acceda a INDF.
FSR acta como puntero, es decir, el valor que guardemos en
este registro ser la direccin de una posicin de memoria. Si
aumentamos o disminuimos con cualquier operacin el
contenido de FSR nos moveremos entre las posiciones de
memoria.
El PIC16F84A
5.9
El registro 05 contiene el
valor 10 h.
El registro 06 contiene el
valor 0A h.
Cargamos el valor 05 en el
registro FSR.
Ahora est
registro 05.
apuntado
el
INDF
10 h
INDF
0A h
001
001
002
002
003
003
FSR
05 h
FSR
06 h
005
10 h
005
10 h
006
0A h
006
0A h
007
007
008
008
009
009
00A
00A
00B
00B
Si
leemos
del
registro INDF de
manera
indirecta
(con FSR apuntndolo), el valor ledo ser 00. Si escribimos en
este registro de manera indirecta, obtendremos una nooperacin, aunque el registro estado se ver afectado.
Ejemplo 2:
Limpiar la memoria RAM desde la posicin 10 h a la 20 h.
NEXT
CONTINUAR
MOVLW
MOVWF
CLRF
INCF
BTFSS
GOTO
0X10
FSR
INDF
FSR
FSR,5
NEXT
; Inicializamos puntero
;
;
;
;
;
Registro
de
Datos,
El PIC16F84A
5.10
Uso de la EEPROM
A continuacin veremos a fondo cuales son los procesos ms
usuales de escritura y de lectura en la EEPROM.
Lectura de la memoria EEPROM
Para leer de la memoria EEPROM han de seguirse los
siguientes pasos:
Escritura de la
registro EEADR.
direccin
que
hay
que
leer
en
el
BCF
MOVLW
MOVWF
BSF
BSF
BCF
MOVF
STATUS,RP0
MEM1
EEADR
STATUS,RP0
EECON1,RD
STATUS,RP0
EEDATA,W
;
;
;
;
;
;
;
;
Selecciona banco 0
Direccin a leer de
la EEPROM
Selecciona banco 1
Activar lectura
Selecciona banco 0
W se carga con el valor
ledo en eeprom
LECTURA2
BCF
MOVLW
MOVWF
BSF
BSF
BTFSC
GOTO
STATUS,RP0
MEM1
EEADR
STATUS,RP0
EECON1,RD
EECON1,RD
ESPERA
;
;
;
;
;
;
;
Selecciona banco 0
Direccin a leer de
la EEPROM
Selecciona banco 1
Activar lectura
Espera final de lectura
a que baje la bandera
ESPERA
BCF
MOVF
STATUS,RP0
EEDATA,W
; Selecciona banco 0
; W se carga con el valor
; ledo en eeprom
MOVLW
MOVWF
MOVWF
MOVWF
BSF
55H
EECON2
AAH
EECON2
EECON1,WR
El PIC16F84A
5.11
ESPERA
ejemplo
de
escritura
tpico
que
utiliza
BCF
STATUS,RP0
; Selecciona el banco 0
; Establecer EEADR y EEDATA
MOVLW
MEN1
MOVWF
EEADR
; Escribe la direccin en EEADR
MOVLW
DATO1
MOVWF
EEDATA
; Se escribe el dato en EEDATA
BSF
STATUS,RP0
; Selecciona el banco 1
BSF
EECON1,WREN
; Permiso de escritura activado
BCF
INTCON, GIE
; Desabilita interrupciones.
;Comienzo de la secuencia de escritura
MOVLW
0x55
MOVWF
EECON2
; Se escribe el dato 55 h en EECON2
MOVLW
0xAA
MOVWF
EECON2
; Se escribe AA h en EECON2
BSF
EECON1,WR
; Comienza la escritura
BSF INTCON,GIE
; Habilita las interrupciones.
BCF
EECON1,WREN
; Permiso de escritura desactivado
BCF
STATUS,R0
; Selecciona el banco 0
Verificacin de la escritura
Dependiendo de la aplicacin, la experiencia en programacin
dice que los datos escritos en la EEPROM deben ser verificados
comparndolos con el dato que se acaba de escribir. Esto debe
usarse en aplicaciones en las que un bit de la EEPROM sufre
ciclos de lectura/escritura hasta rozar el lmite de las
especificaciones. Generalmente el fallo de escritura en un bit de
la EEPROM ser un bit que se escribe como un 0 lgico pero
devuelve un 1 debido a la prdida de ese bit. La siguiente
porcin de cdigo es un ejemplo de verificacin del dato escrito:
BCF
STATUS,RP0
; Nos situamos en el banco 0
MOVF
EEDATA,W
; Debemos estar en el banco 0
BSF
STATUS,RP0
; Cambiamos al banco 1
BSF
EECON1,RD
; Leemos el dato que se guarda en
BCF
STATUS,RP0
; EEDATA, y cambiamos a banco 0
; A continuacin se comprueba que los datos en W en EEDATA
SUBWF
BTFSS
iguales
EEDATA,W
STATUS,Z
GOTO
ERR_ESCRIT
ERR_ESCRIT
.....
programa
Rutinas EEPROM
A continuacin se presentan dos rutinas para escribir y leer
en la EEPROM:
;**************************************************************
; EEPROM_W:
; Graba un byte en la EEPROM de datos. La direccin ser la contenida
; en EEADR y el dato se le supone previamente introducido en EEDATA
;
EEPROM_W
bsf
STATUS,RP0
;Selecciona banco 1
bsf
EECON1,WREN
;Permiso de escritura
movlw
b'01010101'
;Secuencia de escritura
movwf
EECON2
movlw
b'10101010'
movwf
EECON2
bsf
EECON1,WR
;Orden de escritura
bcf
EECON1,WREN
;Desconecta permiso de escritura
ESPERA
btfss
EECON1,EEIF
;Comprobar bandera de fin de escritura
goto
ESPERA
bcf
EECON1,EEIF
;Reponer flag de fin de escritura
bcf
STATUS,RP0
;Seleccin banco 0
return
;
;**************************************************************
; EEPROM_R:
; Lee un byte de la EEPROM. Se supone al registro EEADR cargado
; con la direccin a leer. En EEDATA aparecer el dato ledo.
;
EEPROM_R
bsf
STATUS,RP0
;Seleccin de banco 1
bsf
EECON1,RD
;Orden de lectura
bcf
STATUS,RP0
;Seleccin de banco 0
return
;**************************************************************
Puertos de E/S
El PIC16F84 dispone de dos puertos digitales de E/S paralelos
de uso general denominados Puerto A y Puerto B.
Puerto A
Puerto B
El puerto B dispone de 8 lneas de E/S que van desde la RB0
a la RB7 (la lnea RB0 o INT es compartida con la entrada de
interrupcin externa). Adems, las lneas RB4 a RB7 puede
programarse una interrupcin por cambio de estado de
cualquiera de estas lneas.
El PIC16F84A
5.12
El PIC16F84A
5.13
El PIC16F84A
5.14
Temporizador/Contador TMR0
El temporizador/contador TMR0 es un registro de 8 bits, es
decir, un particular tipo de registro cuyo contenido es
incrementado con una cadencia regular y programable
directamente por el hardware del PIC. Como es de 8 bits, el
mximo de la cuenta est en 255.
El PIC16F84A
5.15
El PIC16F84A
5.16
El Prescaler
El PRESCALER consiste en un divisor programable de 8 bits a
utilizar en el caso de que la frecuencia de conteo enviada al
contador TMR0 sea demasiado elevada para nuestros
propsitos. Se configura a travs de los bits PS0, PS1 y PS2 del
registro OPTION.
La frecuencia Fosc/4 es una cuarta parte de la frecuencia de
reloj. Utilizando un cristal de 4Mhz tendremos una Fosc/4 igual a
1 MHz, con lo que la cadencia de conteo que se obtiene provoca
en TMR0 1 milln de incrementos por segundo (1/1.000.000
seg. =1MHz), que para muchas aplicaciones podra resultar
demasiado elevada.
Con el uso del PRESCALER podemos dividir la frecuencia
Fosc/4 configurando oportunamente los bits PS0, PS1 y PS2 del
registro OPTION segn la siguiente tabla:
PS
2
PS
1
PS
0
DIVISO
R
500.000
250.000
125.000
16
62.500
32
31.250
64
15.625
128
7.812,5
256
3.906,25
El PIC16F84A
5.17