Está en la página 1de 38

Sistemas Embebidos

Microcontroladores PIC

Jos Oliden Martnez


Caractersticas ms representativas de
los microcontroladores PIC.
Arquitectura del procesador sigue el modelo Harvard
Bus de datos Bus de Instrucciones

MEMORIA DE DATOS MEMORIA DE

8
CPU 14
PROGRAMA

Tcnica de segmentacin (pipe-line) en la ejecucin de las


instrucciones.
1 CICLO 1 CICLO 1 CICLO 1 CICLO 2 CICLOS

BSQUEDA 1ra EJECUCIN 1ra

BSQUEDA 2da EJECUCIN 2da

BSQUEDA 3ra EJECUCIN 3ra

1ra INS. MOVLW F5h BSQUEDA 4ta (VACIO NOP)


2da INS. MOVWF PORTA
3ra INS. CALL SAL
BSQUEDA SAL EJECUCIN SAL
4ra INS. MOVLW F6h (NOP Forzado)
5ra INS. Instr. @Direccionada de SAL
BSQUEDA SAL+1
Jos Oliden Martnez
Caractersticas ms representativas de
los microcontroladores PIC.
Formato de las instrucciones con la misma longitud
Todas las instrucciones de los microcontroladores de la gama baja tienen una longitud de 12 bits. Las
de la gama media tienen 14 bits.

Procesador RISC (Procesador con conjunto reducido de instrucciones)

Arquitectura basada en un banco de registros


Todos los objetos del sistema (puertos de E/S, temporizadores, posiciones de memoria, etc.) estn
implementados fsicamente como registros

Diversidad de modelos de microcontroladores


Herramientas de soporte
Ensamblador MPASM.
Simulador software MPSlM.
Compilador de lenguaje C, MP-C.
Programador universal PICSTART PLUS
Emulador universal PIC MASTER.
Herramienta de desarrollo para Lgica difusa FUZZY TECH-MP.
Entorno de programacin integrado MPLAB
Jos Oliden Martnez
Las tres gamas de Microcontroladores
PIC

PIC17CXX
OTP/
Con las tres gamas de PIC se EPROM
dispone de gran diversidad de Gama Alta
modelos y encapsulados, pudiendo
seleccionar el que mejor se acople
a las necesidades de acuerdo con PIC16CXXX
el tipo y capacidad de las OTP/EPRO M
memorias, el nmero de lneas de Gama Media
E/S y las funciones auxiliares
precisas.
PIC16C5 X
OTP/EPRO M/EEPROM
PIC12CXX
OTP
Gama Baja

OTP: One Time Programmable Jos Oliden Martnez


Principales caractersticas de la familia
16F87X

Tiene memorias EEPROM, FLASH internas.


Watchdog.
Operan hasta con 20 MHz de clock o 5MIPS.
33 lneas de I/O con 25 mA en sumidero y 20mA en fuente.
Modo SLEEP.
Proteccin de cdigo.
ADC de 10 bits.
Set de 35 instrucciones.
8K x 14bits de memoria FLASH de programa.
Soporta hasta 14 fuentes de interrupcin
Comunicacin serial.
Pila de 8 niveles

Jos Oliden Martnez


Tabla con las principales caractersticas
de la familia 16F87X
Lneas de entrada y salida para los
controladores de perifricos

Jos Oliden Martnez


Recursos Auxiliares

Circuito de reloj, encargado de generar los impulsos que


sincronizan el funcionamiento de todo el sistema.
Temporizadores, orientados a controlar tiempos.
Perro Guardin (watchdog), destinado a provocar una
reinicializacin cuando el programa queda bloqueado o
colgado.
Conversores AD y DA, para poder recibir y enviar seales
analgicas.
Comparadores analgicos, para verificar los valores de
seales analgicas.
Sistema de proteccin ante fallos de alimentacin.
Estado de reposo SLEEP, en el que el sistema queda
congelado y el consumo de energa se reduce al mnimo.
Jos Oliden Martnez
El CPU

La Unidad Central de Proceso es la encargada de leer la


memoria de Programa (instrucciones de control del dispositivo).

Varias de estas instrucciones operan con la memoria de datos.

La unidad aritmtica (ALU) se encarga de hacer todas las


operaciones.

Los resultados se guardan en el registro W, o en la RAM


(direccin indicada).

Las caractersticas de los resultados de las operaciones se


encuentran en el registro STATUS.
Jos Oliden Martnez
ArquitecturaInterna :Procesador (ALU)

Los microcontroladores
PIC tienen un ALU y un
registro de trabajo (W) de
8 bits. El ALU realiza
operaciones aritmticas y
lgicas entre el dato en el
registro de trabajo y
cualquier otro registro. En
las operaciones que
realiza el ALU con dos
operandos, siempre se
tiene a W (registro de
trabajo) como uno de
ellos. En las operaciones
de un solo operando se
tiene al W o a cualquier
otro registro.

Jos Oliden Martnez


AQUI

ArquitecturaInterna :
Memoria de Programa (Instrucciones)
Aqu se almacenan todas las instrucciones del
programa de control.
La memoria de programa siempre est direccionada
desde el Contador de Programa (PC).

La memoria de programa (o de instrucciones) tiene


una capacidad de 8k x 14 bits. Durante la fase de
bsqueda, la direccin de la instruccin la
proporciona el PC, el cual normalmente se
autoincrementa en la mayora de las instrucciones,
excepto en las de salto. Con las instrucciones de
salto se carga la Pila con el valor inicial del PC
incrementado una unidad. Posteriormente, las
instrucciones de retorno, situadas al final de las
rutinas, devuelven el valor almacenado en la Pila al
PC.

Jos Oliden Martnez


Instruccin & Clock

Q1 Se identifica la instruccin
Q2 Lectura de dato
Q3 Procesa el dato (OPERA)
Q4 Guarda o Escribe el resultado
Jos Oliden Martnez
Instrucciones
Las instrucciones se clasifican en:
orientadas a registros (18).
orientadas al bit (4).
operaciones de literales y control (13).

Cada instruccin es una palabra de 14 bits,


dividida en cdigo de operacin, el cual
especifica la orden a ejecutar y uno o ms
operandos sobre los que acta.

Todas las instrucciones se demoran en


ejecutar un ciclo de mquina con la
excepcin de las instrucciones de salto que
toman dos ciclos.

Jos Oliden Martnez


El PC. Direccionamiento del Programa
El byte de MOVWF PCL
menos peso del
PC se
corresponde con
el contenido del
registro PCL
ubicado en la
posicin 02h del
banco 0. Los 5
bits de mas peso
del PC se
corresponden
con los 5 bits de
menos peso del
registro PCLATH GOTO SALTO
(Program
Counter Latch
High) en la
posicin 0Ah del
banco 0. Los bits
de mas peso del
PC solos se
pueden escribir
a travs del
registro
PCLATH.

Jos Oliden Martnez


El PC. Direccionamiento del Programa
En las instrucciones de CALL RUTINA
salto relativo, el
resultado de la misma
afecta solo a los 8 bits
de menos peso del PC.
Los 5 bits de mas peso
se suministran desde
PCLATH<4:0>.
En las instrucciones
GOTO y CALL los 11
bits de menos peso del
PC se suministran desde
el cdigo OP. Los dos
bits de mas peso del PC
se cargan con los bits
<4:3> del registro
PCLATH. Como la
memoria de programa se
organiza en pginas de
2k, la posicin la
seleccionan los 11 bits
de menos peso,
mientras que con los 2
bits de mas peso del PC
se elige la pgina

Jos Oliden Martnez


Instrucciones Programacin I
Sintaxis Descripcin Microchip Operacin equivalente

ADDLW k Add Literal and W W=W+k


ADDWF f,d Add W and f d = W + f (donde d puede ser W f)
ANDLW k AND Literal with W W = W AND k
ANDWF f,d AND W with f d = W AND f (donde d puede ser W f)
BCF f,b Bit Clear f f(b) = 0
BSF f,b Bit Set f f(b) = 1
BTFSC f,b Bit Test f, Skip if Clear f(b) = 0 ? Si, salta la siguiente instruccin
BTFSS f,b Bit Test f, skip if Set f(b) = 1 ? Si, salta la siguiente instruccin
CALL k Subroutine Call Llama a la subrutina en la direccin k
CLRF f Clear f f=0
CLRW Clear W Register W=0
CLRWDT Clear Watchdog Timer Watchdog timer = 0
COMF f,d Complement f d = not f (donde d puede ser W f)
DECF f,d Decrement f d = f -1 (donde d puede ser W f)
DECFSZ f,d Decrement f, Skip if 0 d = f -1 (donde d puede ser W f) si d = 0 salta
GOTO k Go to address Salto incondicional a la direccin k
INCF f,d Increment f d = f +1 (donde d puede ser W f)
INCFSZ f,d Increment f, Skip if 0 d = f +1 (donde d puede ser W f) si d = 0 salta
Instrucciones Programacin I
IORLW k Inclusive OR Literal with W W = W OR k
IORWF f,d Inclusive OR W with f d = f OR W (donde d puede ser W f)
MOVLW k Move literal to W W=k
MOVF f,d Move f d = f (donde d puede ser W f)
MOVWF f Move W to f f=W
NOP No Operation No operacin
OPTION Load Option Register OPTION = W
RETFIE Return from Interrupt Retorna de una subrutina de interrupcin
RETLW k Return Literal to W Retorna de una subrutina con W = k
RETURN Return from Subroutine Retorna de una subrutina
RLF f,d Rotale Left f through Carry d = f << 1 (donde d puede ser W f)
RRF f,d Rotale Right f through Carry d = f >> 1 (donde d puede ser W f)
SLEEP Go into Standby Mode Pone el PIC en standby
SUBLW k Subtract W from Literal W=k-W
SUBWF f,d Subtract W from f d = f - W (donde d puede ser W f)
SWAPF f Swap f f = Swap Intercambia los bit 0123 con 4567 de f
TRIS f Load TRIS Register TRIS de f = W
XORLW k Exclusive OR Literal with W W = W XOR k
XORWF f,d Exclusive OR W with f d = f XOR W (donde d puede ser W f)
00 01 10 11

Memoria de Datos

Tienen 8 bits de longitud.


Organizada en "bancos" (4) de 128
bytes cada uno.
Registros de Funcin
Especial FSR

Registros de Propsito
General GPR

Jos Oliden Martnez


Modos de direccionamiento

1o. Direccionamiento directo


W
movlw 0x20 ;mover 0x20
PORTA 20
movwf PORTA ;a la memoria RAM

2o. Direccionamiento Indirecto INDF

movlw 0x20 ;inicializar puntero


FSR 13H
movwf FSR ;a la memoria RAM 20H
clrf INDF ;limpiar registro INDF 21H
incf FSR,F ;incrementar puntero
1FH
clrf INDF ;limpiar registro INDF
RAM
Modos de direccionamiento
1o. Direccionamiento directo

Se utilizan los 7 bits de


menos peso del cdigo
OP de la instruccin
para apuntar
cualquiera de las 128
posiciones del banco
0. Si el dato no est en
el banco 0, se usa un
sistema de paginacin
para seleccionar el
banco empleando los
bits RP1 y RP0 del
Registro de estado
<6:5>.

Jos Oliden Martnez


Modos de direccionamiento
2o. Direccionamiento Indirecto
El operando de la
instruccin se refiere al
registro INDF, (posicin 0
del rea de datos). Se
accede a la posicin
apuntada por FSR, (posicin
04h del banco 0). Los 7 bits
LSB de FSR seleccionan la
posicin y su bit de MSB
junto con el bit IRP del
Registro de estado <7>,
seleccionan el banco. El
registro INDF no se halla
implementado fsicamente.
Cada vez que se le
referencia, se utiliza el
contenido del registro FSR
para direccionar al
operando.
Cualquier instruccin
usando el registro INDF
hace referencia al registro
apuntado por FSR. Jos Oliden Martnez
2o. Direccionamiento Indirecto. Ejm:

Un ejemplo de direccionamiento indirecto en el cual limpiamos las direcciones


20h a la 2Fh de la RAM es el siguiente:
INDF
bcf STATUS,IRP ;Seleccionar Banco 0/1
movlw 0x20 ;inicializar puntero
movwf FSR ;a la memoria RAM FSR 13H
20H
NEXT:
clrf INDF ;limpiar registro INDF
incf FSR,F ;incrementar puntero
btfss FSR,4 ;bit 4 del FSR=1?
2FH 1FH
goto NEXT ;no, limpiar siguiente
CONTINUAR:
;si continuar programa...

RAM
Programacin I Instrucciones orientadas a los bytes
Banderas
Mnemnico Parmetros Descripcin Ciclos
afectadas
ADDWF f,d Suma W y f 1 C,DC,Z
ANDWF f,d AND W con f 1 Z
CLRF f clear f 1 Z
CLRW f,d clear W 1 Z
COMF f,d Complementa f 1 Z
DECF f,d Decrementa (en 1) f 1 Z
DECFSZ f,d Decrementa (en 1) f, Salta 1(2) None
INCF f,d Incrementa (en 1) f 1 Z
INCFSZ f,d Incrementa (en 1) f , Salta 1(2) None
IORWF f,d OR W con F 1 Z
MOVF f,d Mover f 1 Z
MOVWF f Mover W a f 1 None
NOP No Operacin 1 None
RLF f,d Rotar a la derecha >1 1 C
RRF f,d Rotar a la izquierda >1 1 C
SUBWF f,d Sustrae W de f 1 C,DC,Z
SWAPF f,d Intercambia MSB con LSB 1 None
XORWF f,d XOR W con f 1 Z
Programacin I Instrucciones orientadas a los bits

Banderas
Mnemnico Parmetros Descripcin Ciclos
afectadas

BCF f,b Pone a cero el bit b de f 1 None

BSF f,b Pone a uno el bit b de f 1 None

Si el bit b de f es cero salta una instruccin


BTFSC f,b 1(2) None

Si el bit b de f es uno salta una instruccin


BTFSS f,b 1(2) None

Jos Oliden Martnez


Programacin I Operaciones literales y de control

Banderas
Mnemnico Parmetros Descripcin Ciclos
afectadas

ADDLW k Sumar W y k (literal) 1 C,DC,Z

ANDLW k AND W con k 1 Z

CALL k Subrutina 2
CLRWDT - clear WDT 1 TO,PD

GOTO k Goto a la direccin k 2

IORLW k OR literal con W 1 Z

MOVLW k Mover literal a W 1

RETFIE - Retornar de la interrupcin 2

RETLW k Retornar con el literal en W 2

RETURN - Retornar de la subrutina 2

SLEEP - Pone al microcontrolador en Stanby 1 TO,PD

SUBLW k Sustrae W del literal k 1 C,DC,Z


XORLW k XOR literal k con W 1 Z

Jos Oliden Martnez


Registros Especiales

STATUS (03h)
Los bits de este
registro tienen tres
misiones distintas:
1. Se encargan de
avisar las
incidencias del
resultado de la
ALU (C, DC y Z)
2. Indican el
estado de Reset
(TO# y PD#)
3. Seleccionan el
banco a acceder
en la memoria de
datos (IRP, RP0 y
RP1)
OPTION_REG (81h)
La misin principal de
este registro es controlar
el TMR0 (temporizador) y
el divisor de frecuencia.
Adems configura la
interrupcin externa INT
y las resistencias pull-up
del puerto B.
INTCON (0Bh)
La mayor parte de los
sealizadores y bits de
permiso de las fuentes
de interrupcin en los
PIC16X8XX estn
implementados sobre
los bits de este registro
que ocupa la direccin
0Bh del banco 0 y se
encuentra duplicado
en los dems bancos.
PIE1 (8Ch)
Contiene
los bits para
activar las
interrupcion
es de los
perifricos
PIR1 (0Ch)
Contiene las
banderas
que indican
la activacin
de alguna
interrupcin
perifrica
Registros Especiales

PORTA
Algunos de los puertos de E/S son multiplexados para algunas otras funciones.
Los registros de los puertos en el banco 1 (TRIS) son para configurar los
puertos.

Jos Oliden Martnez


Programacin I Editor

.ASM .INC

Compilador Asembler

Flujo de operaciones al
.COD .LST .ERR .HEX
programar un
microcontrolador PIC

Programador
PIC

16F877

Jos Oliden Martnez


Programacin I

Ejemplo:
Leer un bit del puerto B (RB0) y segn su valor hacer:
RB0=0 mostrar por el puerto D 10101010
RB0=1 mostrar por el puerto D 01010101
Solucin Inicio

Configuracin
de puertos
RB0 : entrada
PORTD: salida

SI NO
RB0=0?

PORTD= 10101010 PORTD= 01010101


Tarea

Leer dos bits del puerto B (RB0 y RB1) y segn su


valor hacer:
RB1 RB0 Puerto D
0 0 10101010
0 1 01010101
1 0 11110000
1 1 00001111
Tarea

Hacer un programa que mueva los datos de las direcciones 20H, 21H,
22H, 23H a las direcciones: 120H, 121H, 122H, 123H de manera
indirecta.
Solucin list p=16F877 ;Indica el modelo de PIC

__CONFIG _CP_OFF & _WDT_OFF & _BODEN_ON & _PWRTE_ON & _XT_OSC & _WRT_ENABLE_ON & _LVP_OFF

;Zona de include macros


include <p16F877.inc>

; Vector Reset
org 0x00
goto 0x05
org 0x05 ;
bcf STATUS, RP0
bcf STATUS, RP1 ; Banco 0

INICIO:
bcf STATUS,IRP ; Seleccionar Banco 0/1
movlw 0x20 ; inicializar puntero
movwf FSR ; a la memoria RAM
NEXT:
bcf STATUS,IRP ; Banco 0/1 para direccionamiento indirecto
movfw INDF ; limpiar registro INDF
bsf STATUS,IRP ; Banco 2/3 para direccionamiento indirecto
movwf INDF ; Almacenar W donde apunta INDF
incf FSR,F ; incrementar puntero
btfss FSR,2 ; bit 2 del FSR=1?
goto NEXT ; no, trasladar siguiente

CONTINUAR:
movlw 0x01
movwf 0x20

goto INICIO ; regresar a INICIO

END ; Directiva de fin de programa


EXPERIENCIA 1

Entrada y Salida, manejo de registros y visualizacin.


Vcc
Vcc
Ingresar por medio de 10K 10K 10K

interruptores (DIP) un 0
Vcc1 330
1 5
nmero por los bits LSB Interruptor 1
a1 b1

LED 1
del puerto A y mostrar el 2 6
330

complemento del Interruptor 2


a2
MODULO b2

LED 2
330
nmero ingresado por 3
a3 PIC b3
7

Interruptor 3
los bits MSB del puerto 4 8
330 LED 3
a4 b4
B Interruptor 4 GND
LED 4
0

Entrada Salida
(PA0-PA3) (PB4-PB7)

Jos Oliden Martnez

También podría gustarte