You are on page 1of 85

Curso de Microcontroladores

PIC 16F877

Carlos Romero D.
Ingeniero en Electrónica
Principales Características

Los Microcontroladores poseen


características que los hacen únicos,
ya que integran una arquitectura y
funcionamiento que los hace
superiores a los microprocesadores
tradicionales
¿Que es un microcontrolador?

Es un computador completo, aunque


de limitadas prestaciones, que esta
contenido en el chip de un circuito
integrado y se destina a gobernar una
sola tarea
Diferencias entre un
microprocesador y un
microcontrolador

Se dice que un microprocesador es un


sistema abierto porque su configuración
es
variable de acuerdo con la aplicación que
se destina

Un microcontrolador por el hecho de que


los
componentes internos son fijos, se puede
decir, de que se trata de un sistema
cerrado
Esquema de un sistema
basado en un microprocesador
tradicional
La disponibilidad de los buses en el exterior
permite
que se configure a la medida de la aplicación

Esquema de un sistema abierto


basado
en un microprocesador tradicional
Microcontrolador
El microcontrolador es un sistema cerrado.
Todas
sus partes están contenidas en su interior y
solo
salen al exterior las líneas que gobiernan los
periféricos
Componentes básicos de
un microcontrolador
 Procesador o CPU

 Memoria RAM para contener los datos

 Memoria para el programa tipo ROM /


PROM / EPROM / EEPROM

 Líneas de E/S para comunicarse con el


exterior

 Recursos auxiliares
Módulos especializados de los
microcontroladores en tareas
de:
 Temporizadores

 Puertas en serie y paralelo

 Convertidores A/D y D/A

 Generador de impulsos de reloj que


sincronizan el funcionamiento de todo
el sistema
Características relevantes de los
PIC

 Arquitectura
interna
 Arquitectura RISC,

juego reducido de
Arquitectura de Harvard, la memoria de
instrucciones datos e instrucciones son independientes
 Ciclo de reloj,

cada instrucción del PIC


tarda en ejecutarse cuatro periodos de reloj

Todas las instrucciones del PIC se realizan en un


ciclo de
instrucción menos las de salto que se tardan el
Características relevantes de
los PIC
Los impulsos de la señal de reloj se dividen en 4
internamente dando lugar a las señales Q1, Q2,Q3
Q4.

Ciclo de instrucción formado por 4 señales


(Q1-Q4 asociadas al reloj externo OSC1)
Características relevantes de
los PIC
Se realizan las siguientes operaciones:

 Q1: Se incrementa el contador de


programa

 Q4: Se busca el código de la instrucción


en la memoria del programa y se carga
en el registro de instrucciones

 Q2 – Q3: Se produce la descodificación y


la ejecución de la instrucción.
Características relevantes de
los PIC
Para conseguir que cada instrucción se ejecute
en un
ciclo de instrucción se aplica la técnica de la
segmentación.

La segmentación permite ejecutar en el mismo ciclo la instrucción


y la búsqueda excepto en las instrucciones de salto
Osciladores
La variedad de trabajo del PIC depende del oscilado
a
emplear, pueden ser del tipo RC, LP, XT y HS.
 Oscilador tipo RC: Formado por una

resistencia y un condensador. El rango del


oscilación depende del valor de R y C
 Oscilador tipo LP: Formado por un cristal de

cuarzo y 2 condensadores. Opera entre 35 a


200 KHZ. Bajo consumo
 Oscilador tipo XT: Formado por un cristal de

cuarzo y 2 condensadores. Opera entre 100 KHZ


y 4 MHZ.
 Oscilador tipo HS: Formado por un cristal de

cuarzo y 2 condensadores. Opera entre 4 y 10


El procesador
Es el corazón del sistema y por la concepción de
su arquitectura lo hace más rápido en la
ejecución de cada instrucción.

En la arquitectura de Harvard la memoria de instrucción y de


los datos son independientes, lo que permite optimizar sus
características y propiciar el paralelismo
PIC 16F877
A continuación se
presenta la
arquitectura tipo
Harvard
simplificada
para los PIC
16F87x

Arquitectura tipo Harvard simplificada para los


microcontroladores PIC 16F87x
PIC 16F877
PIC 16F877

En el siguiente
esquema
se presenta con más
detalle la arquitectura
correspondientes a los
modelos PIC 16F87x

Diagrama de bloques que poseen los


PICS 16F874 / 77 internamente
Principales Características

 Set reducido de 35 instrucciones


 14 fuentes de interrupciones disponibles
 Protección para código de programa
 Frecuencia de operación hasta 20 Mhz.
 Memoria FLASH de programa 8k (con
palabras de 14 bit)
 Memoria de datos 368 bytes. Memoria de
datos EEPROM 256 bytes
Principales Características
 Puertos de Entrada/Salida:
Puerto A : 6 bit Puerto B : 8 bit
Puerto C : 8 bit Puerto D : 8 bit
Puerto E : 3 bit
 3 Timers
 2 Módulos de captura/Comparación/PWM
 Comunicación Serial
 Comunicación Paralelo
 Conversor Análogo Digital de 10 bit, 8 canales
Definiciones

Registros: Posiciones de memoria que poseen


8 bits
de datos. El contenido de un registro se puede
expresar en formato decimal (d’128’), formato
Hexadecimal (0x80) o en binario
(b’10000000’).

W: Registro especial llamado Acumulador y se


utiliza
en la mayoría de las operaciones
Organización de la memoria de
programa

La memoria FLASH de
8K x 14bit esta
direccionada
con el PC (de 13bit)
la pila es de tipo LIFO.
Con la instrucción CALL
e interrupciones el
valor del PC se salva
en el nivel superior Organización de la memoria de tipo
FLASH en los PIC 16F87x
Organización de la memoria de
datos

La memoria de datos tiene


posiciones implementadas
en RAM y otros en EEPROM.

La RAM estática consta de


4 bancos con 128bytes
cada uno.

Mapa de registros PICS 16F876 / 877


Tablas

Posición de memoria y los bits asociados al nombre del registro


Tablas

Posición de memoria y los bits asociados al nombre del registro


Tablas

Posición de memoria y los bits asociados al nombre del registro


Tablas

Posición de memoria y los bits asociados al nombre del registro


Instrucciones
Instrucciones que manejan bits dentro de un
registro cualquiera
1.- Instrucción BCF bcf f,b
Coloca un 0 en una posición específica de un
registro f definida por b

bcf REGISTRO,3

Resultado
Instrucciones
2.- Instrucción BSF bsf f,b
Coloca un 1 en una posición específica de un
registro f definida por b

bsf REGISTRO,5

Resultado
Ejemplo

Ejemplo :
Transformar
el contenido de
REGISTRO (0xF8) en
0x91
bcf REGISTRO,6
bcf REGISTRO,5
bcf REGISTRO,3
bsf REGISTRO,0
Instrucciones de salto
3.- Instrucción BTFSC btfsc f,b
Explora el bit cuya posición esta definida
por b, dentro del registro f y se salta la
siguiente instrucción si y solo si el valor de
dicho bit es cero.

Btfsc REGISTRO,3

bsf REGISTRO,0

bcf REGISTRO,5
Instrucciones de salto
4.- Instrucción BTFSS btfss f,b
Explora el bit cuya posición esta definida
por b,
dentro del registro f y se salta la
siguiente
instrucción si y solo si el valor de dicho
bit es
Btfss REGISTRO,3
uno.

bsf REGISTRO,0

bcf REGISTRO,5
Instrucciones de GOTO

5.- Instrucción GOTO goto l


Salta automaticamente al lugar que se le
indica en l (Etiqueta de salto).

bcf REGISTRO,3
bsf REGISTRO,2
goto SALTAR
bsf REGISTRO,0
bcf REGISTRO,1
bcf REGISTRO,4
SALTAR bsf REGISTRO,8
bsf REGISTRO,7
Ejemplo
btfss REGISTRO,0
goto SALIR
Ejemplo : Verificar
btfss REGISTRO,1
que el primer nible del goto SALIR
REGISTRO es igual a btfsc REGISTRO,2
goto SALIR
1011, de lo contrario
btfss REGISTRO,3
borrarlo goto SALIR
goto OK
SALIR bcf REGISTRO,0
bcf REGISTRO,1
bcf REGISTRO,2
bcf REGISTRO,3
OK RETURN
Instrucción DECFSZ

6.- Instrucción DECFSZ decfsz f,d


Decrementa el registro f y se salta la
siguiente instrucción cuando el registro
adquiere el valor cero. Si d=0,el resultado
se almacena en W, si d=1 se almacena en
f.
REGISTRO contiene el valor 0x05

VOLVER decfsz REGISTRO,d ; Puede ser f o w


goto VOLVER
bcf REGISTRO,2
……….
Instrucción DECFSZ
6.- Instrucción DECFSZ decfsz f,d
Decrementa el registro f y se salta la
siguiente instrucción cuando el registro
adquiere el valor cero. Si d=0,el resultado
se almacena en W, si d=1 se almacena en
f.
REGISTRO contiene el valor 0x05

VOLVER decfsz REGISTRO,d ; Puede ser f o w


goto VOLVER
bcf REGISTRO,2
……….
Instrucción INCFSZ

7.- Instrucción INCFSZ incfsz f,d


Incrementa el registro f y se salta la
siguiente instrucción cuando el registro
adquiere el valor cero. Si d=0,el resultado
se almacena en W, si d=1 se almacena en
f.
REGISTRO contiene el valor 0xFE

VOLVER incfsz REGISTRO,d ; Puede ser f o w


goto VOLVER
bcf REGISTRO,2
……….
Instrucciones para manejo de
literales
8.- Instrucción MOVLW movlw l
Mueve un número cualquiera (entre 0 y
255) al acumulador

movlw 0x30

Resultado : en W se
almacena el número 30 en
notación hexadecimal
Instrucciones para manejo de
literales

9.- Instrucción ADDLW addlw l


Suma un numero cualquiera con el
contenido del acumulador (W)
Flags afectados: C, CD, Z del registro
STATUS
movlw d’23’

addlw d’10’

Resultado : en W se almacena el resultado


final de la operación : 33
Instrucciones para manejo de
literales

10.- Instrucción SUBLW sublw l


Al literal le resta el contenido del acumulador
(w)

movlw d’15’

sublw d’20’

Resultado : en W se almacena el resultado


final de la operación : 5
Instrucciones para manejo de
literales

11.- Instrucción ANDLW andlw


l
Realiza la operación lógica AND entre
el acumulador y un número cualquiera

movlw
b’10101010’
andlw
b’01010101’
Resultado : en W se almacena el
resultado final de la operación : 0
Instrucciones para manejo de
literales
12.- Instrucción IORLW iorlw l
Realiza la operación lógica OR entre el
acumulador y un número cualquiera.
Flags afectados: z

movlw b’10101010’

iorlw b’01010101’

Resultado : en W se almacena el
resultado final de la operación : 0xFF
Instrucciones para manejo de
literales
13.- Instrucción XORLW xorlw l
Realiza la operación lógica OR exclusiva
entre el acumulador y un número
cualquiera
movlw b’10101111’

xorlw b’10101111’

Resultado : en W se almacena el
resultado final de la operación : 0x00
Ejemplo
Ejemplo : Si el valor de W es igual a 0XAA,
entonces
borrar W, de lo contrario mantener el
valor
xorlw 0xAA
btfss STATUS,Z
goto SALIR
movlw 0X00

SALIR return
Instrucciones para manejo de
registros
14.- Instrucción MOVWF movwf f
Mueve el contenido del acumulador a un
registro cualquiera

movlw 0x55

movwf CUENTA

Resultado : en CUENTA se almacena el


número 55 en
notación hexadecimal
Instrucciones para manejo de
registros
15.- Instrucción MOVF movf f,d
Mueve un registro cualquiera y lo coloca en el
acumulador o en si mismo. Flags afectados Z
movlw 0xFF

movwf CUENTA

bcf CUENTA,0

movf CUENTA,W

Resultado : en W se almacena el número 0xFE


en notación hexadecimal
Instrucciones para manejo de
registros
16.- Instrucción RLF rlf f,d
Rota hacia la izquierda el contenido de un registro,
dejando el resultado en el mismo registro o en W
(d=0)
Flags afectados: C
movlw 0xFF
movwf VALOR
bcf STATUS,C
rlf VALOR,1

Resultado : en VALOR se almacena el


número 0xFE en notación
Instrucciones para manejo de
registros
17.- Instrucción RRF rrf f,d
Rota hacia la derecha el contenido de un registro,
dejando
el resultado en el mismo registro o en W (d=0)
Flags afectados: C
movlw 0xFF
movwf VALOR
bcf STATUS,C
rrf VALOR,1
Resultado : en VALOR se almacena el
número 0x7F en notación
hexadecimal
Instrucciones para manejo de
registros
18.- Instrucción CLRF clrf f
Borra el contenido de un registro
cualquiera.
Flags afectados: Z
movlw 0x4A

movwf CONTADOR

clrf CONTADOR

Resultado : 0X00 en CONTADOR


Instrucciones para manejo de
registros
19.- Instrucción CLRW clrw
Borra el contenido del acumulador
(W)
Flags afectados: Z
clrw

Resultado : 0X00 en W
Instrucciones para manejo de
registros
20.- Instrucción NOP nop
No ejecuta ninguna operación

nop

Resultado : No afecta en nada, solo demora


Instrucciones para manejo de
registros
21.- Instrucción COMF compf f,d
Complementa el valor de un registro
cualquiera Flags afectados: Z

movlw b’00011000’

movwf ADC

compf ADC,1
Resultado : en ADC se almacena el valor
inicial negado.
Instrucciones para manejo de
registros
22.- Instrucción SWAPF swapf f,d
Intercambia el nible superior con el nible
inferior

movlw 0X0F

movwf ADC

swapf ADC,1

Resultado : en ADC se almacena el valor


0XF0.
Instrucciones para manejo de
registros
23.- Instrucción INCF incf f,d
Incrementa el valor de un registro
cualquiera.
Flags afectados: Z
movlw 0X0F

movwf PORTB

incf PORTB,1

Resultado : en PORTB se almacena el valor


0X10.
Instrucciones para manejo de
registros
24.- Instrucción DECF decf f,d
Decrementa el valor de un registro
cualquiera.
Flags afectados: Z
movlw 0X0F

movwf PORTB

decf PORTB,1

Resultado : en PORTB se almacena el valor


0X0E.
Instrucciones para manejo de
registros
25.- Instrucción ADDWF addwf f,d
Suma el valor de un registro cualquiera con
el acumulador (W) y el resultado lo deja en
W, o en el mismo registro.
Flags afectados: C, CD, Z
movlw 0X03

addwf PORTB,F1

Resultado : en PORTB se almacena el la suma


entre 0X03 y el valor de PORTB.
Instrucciones para manejo de
registros
26.- Instrucción SUBWF subwf f,d
Resta a un registro cualquiera el valor del
acumulador.
Flags afectados: C, CD, Z
movlw 0X20

subwf RESTA,1

Resultado : en RESTA se almacena la resta


entre RESTA y el valor de W.
Instrucciones para manejo de
registros
27.- Instrucción ANDWF andwf
f,d
Operación lógica AND entre el acumulador
y un registro cualquiera.
Flags afectados: Z
movlw 0X50

andwf VALOR,1

Resultado : en VALOR se almacena la


operación lógica entre
Instrucciones para manejo de
registros
28.- Instrucción IORWF iorwf f,d
Operación lógica OR entre el acumulador y
un registro cualquiera.
Flags afectados: Z

movlw 0XDE

iorwf VALOR,1

Resultado : en VALOR se almacena la


operación lógica entre
VALOR y W.
Instrucciones para manejo de
registros
29.- Instrucción XORWF xorwf
f,d
Operación lógica OR exclusiva entre el
acumulador y un registro cualquiera.
Flags afectados: Z
movlw 0XDE

xorwf VALOR,1

Resultado : en VALOR se almacena la


operación lógica entre
VALOR y W.
Instrucciones especiales
30.- Instrucción CALL call l
Llama a una subrutina

31.- Instrucción RETURN return


Retorna desde una subrutina

32- Instrucción clrwdt


Borra el contador del Perro Guardián
Instrucciones especiales
33.- Instrucción RETFIE retfie
Retorna del llamado de interrupción

34.- Instrucción SLEEP sleep


Coloca en reposo el microcontrolador

35.- Instrucción RETLW retlw


Retorna de una subrutina
volviendo con un literal en el
acumulador
Ejemplo
Ejemplo : Cargar el numero 3 en el
registro VALOR y multiplicarlo por
4
movlw d’3’
movwf VALOR
bcf STATUS,C
rlf VALOR,F
rlf VALOR,F
goto SALIR
Principales Registros de
control
Registro de status

C : Bit señalizador para el acarreo o Curry.


1= operación aritmética suma sobrepasa el bit más
significativo.
0= operación aritmética suma no sobrepasa el bit más
significativo.
En la resta es lo contrario
DC : Funciona igual que el anterior (señalizador C)
pero con el 4º bit.
Z : bit de 0.
Registro de status
PD# : Se pone a 0 con la
instrucción SLEEP, pasa a 1
con la instrucción CLRWDT o
tras la conexión de
alimentación.

TO# : Se pone a 0 con el


rebalse del WDT, pasa a 1
con la instrucción CLRWDT y
SLEEF o tras la conexión de
alimentación.

RP1, RP0 : Se utilizan para


Registro TRIS

Registro utilizado para configurar los


puertos de entrada/salida a nivel de bit,
en el caso de PIC16F877, se tiene
TRISA, TRISB, TRISC, TRISD y TRISE.

1 : Entrada Digital
0 : Salida Digital
Ejemplo

Configurar los
puertos de E/S
del uC para
trabajar con el
circuito de la
figura.
Solución

bsf STATUS,RP0 ; Banco 1


clrf TRISB ; Puerto B Salida
bsf TRISE,2 ; Bit 2 puerto E,
entrada
movlw 0xFF ; Mover 0XFF al W
movwf TRISD ; Puerto D
entrada
bcf TRISD,0 ; Bit 0 puerto D, salida
bcf STATUS,RP0 ; Banco 0
Ejercicios prácticos
1.- Mover un literal directamente al puerto B.

2.- Encender un led conectando al puerto RB0, en


función del estado de un switch conectado a
RB7.

3.- Copiar el puerto C al puerto B

4.- Encender todos los leds del puerto B y cambiar


su estado cuando se presione el pulsador.

5.- Incrementar el contenido del puerto B cada vez


TIMER TMR0 y registros
asociados
TIMER TMR0
El TMR0 tiene dos funciones principales
1.- Contador de eventos
2.- Temporizador

Registros asociados
1.- OPTION_REG (Configuración)
2.- TMR0 (Valor del contador), registro 8
bits.
3.- INTCON (Banderas)
Registro OPTION_REG
Es el encargado de configurar el timer 0 y el
watchdog.

Bit 7: bit de resistencia pull-up PDRTB. 1=desactivadas 0= activadas


Bit 6: 1=flanco ascendente en pin RBO/INT
0=flanco descendente en pin RBO/INT
Bit 5: bit selector de tipo de reloj para el TMRO
1=pulsos introducidos a través de TOCK1 (contador)
0=pilsos de reloj interno. Fosc/4 (temporizador)
Bit 4: 1=incremento de transición de alto a bajo pin TOCK1
0=incremento de transición de bajo a alto pin TOCK1
Bit 3: selector de preescaler. 1= preescaler asignado al WDT.
0= preescaler asignado al timer 0
Bits 2-0: bits de selección del divisor de frecuancia
Registro OPTION_REG
Es el encargado de configurar el timer 0 y el
watchdog.
Registro TMR0 y Registro
INTCON
Registro TMR0
Registro de 8 bit el que contiene el valor
actual del
Contador/Temporizador
Registro INTCON
Encargado principalmente de controlar las
interrupciones, pero además, muestra distintos
tipos de banderas.
Registro INTCON
BIT 7, GIE : Bit de activación global de
interrupciones
1= concedido el permiso de interrupciones
0= no está activado para interrupciones

BIT 6, PEIE: Bit de activación de periféricos


1= concedido el permiso de interrupción
0= interrupción desactivada.

BIT 5, T0IE: Bit de activación del TMRO


1= concedido el permiso de interrupción
Registro INTCON
BIT 4, INTE: Bit de activación interna
1= concedido el permiso de interrupción
0= interrupción desactivada.

BIT 3, RBIE: Bit de activación del PB


1= concedido el permiso de interrupción
0= interrupción desactivada.

BIT 2, T0IF: flag de desborde de TMRO


1= el TMRO ha sobrepasado su cuenta. Se borra por
sofware.
0=no ha sobrepasado su cuenta.
Registro INTCON
BIT 1, INTF : bit indicador de interrupción externa
1= interrupción activa. Se borra por software.
0= no hay petición de interrupción

BIT 0, RBIF : Bit indicador de interrupcion de PB


1= cuando cambia de estado cualquier pin de PB
(RB7:RB0)
0= ninguna entrada ha cambiado de estado
Calculo de la temporizacion:

Temporización = (valor timer 0) X (valor pre-escaler)


x4
fosc
TIMER TMR1 y registros
asociados
TIMER TMR1
Es un controlador/temporizador de 16 bits
Interrupción opcional por desbordamiento
de
FFFFh a ooooh
Registros asociados
1.- T1CON (configuración)
2.- PIR 1 (banderas)
3.- PIE 1 (interrupciones)
4.- TMR 1 H (carga byte mas significativo de
TMR1)
Registro T1CON
Es el encargado de configurar
TMR1

bit 5 y 4: TICK PS1 – TICK SO: bit de selección del preescaler

bit 3: T1 OSEN, bit de control de habilitación del oscilador de TM


R1
1= oscilador habilitado 0= oscilador no habilitado

bit 2: T1SYNC, bit de sincronismo con clock externos


Registro T1CON
TICK PS 1 TICK PSO VALOR DEL PREESCALER
0 0 1:1
0 1 1:2
1 0 1:4
1 1 1:8

bit 1: TMR1CS, bit de selección del clock


1= cloc externo (contador) 0= clock interno
(temporizador)

Bit 0: TMR1ON, bit de habilitación de TMR1


1= TMR1 habilitado 0= TMR1 no habilitado
Registros

REGISTRO PIR 1

Bit 0: TMR1IF, bit de desbordamiento de TMR1


1= TMR1 se ha desbordado 0= TMR1 no se ha
desbordado
Registros

REGISTRO PIE 1

Bit 0: TMR1IE, habilita interrupción del desbordamiento del


TMR1
1= habilita 0= no habilita
TIMER TMR2 y registros
asociados
TIMER TMR2
Es un temporizador de 8 bits
Dispone de un registro de periodo de 8 bits (PR2)
Posee preescaler y postescaler de frecuencia
programable
Registros asociados
1.- T2CON (configuración)
2.- PIR 1 (banderas)
3.- PIE 1 (interrupciones)
4.- TMR 2 (registro del modulo del TIMER
TMR2)
Registro T2CON

TOUTPS TOUTPS TOUTPS TOUTPS POST-


T2SKPS T2SCKPS0 PREDIVISO 3 2 1 0 DIVISOR
1 R
0 0 1:1 0 0 0 0 1:1
0 1 1:4 0 0 0 1 1:2
1 X 1:16
0 0 1 0 1:3

…. …. …. ….. ….

1 1 1 1 1:16

Bit 2: el bit TMRON permite o prohíbe (0) el


funcionamiento del TMR2
REGISTROS
REGISTRO PIR 1
BIT 1: TMR2IF, bit señalizador de interrupción
cuando TMR2 coincide con PR2
1= TMR2 coincide con PR2
0= TMR2 no coincide con PR2

REGISTRO PIE 1
BIT 1: TMR2IE, habilita interrupción si TMR2
coincide con PR2
1= habilita
0= deshabilita

You might also like