Вы находитесь на странице: 1из 38

Sistemas Embebidos

 Microcontroladores PIC

José Oliden Martínez


Características más 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

• Técnica de segmentación (“pipe-line”) en la ejecución de las


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

BÚSQUEDA 1ra EJECUCIÓN 1ra

BÚSQUEDA 2da EJECUCIÓN 2da

BÚSQUEDA 3ra EJECUCIÓN 3ra

1ra INS. MOVLW F5h BÚSQUEDA 4ta (VACIO NOP)


2da INS. MOVWF PORTA
3ra INS. CALL SAL
BÚSQUEDA SAL EJECUCIÓN SAL
4ra INS. MOVLW F6h (NOP Forzado)
5ra INS. Instr. @Direccionada de SAL
BÚSQUEDA SAL+1
José Oliden Martínez
Características más 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.) están
implementados físicamente 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 Lógica difusa FUZZY TECH-MP.
• Entorno de programación integrado MPLAB
José Oliden Martínez
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/EPROM
memorias, el número de líneas de Gama Media
E/S y las funciones auxiliares
precisas.
PIC16C5X
OTP/EPROM/EEPROM
PIC12CXX
OTP
Gama Baja

OTP: One Time Programmable José Oliden Martínez


Principales características de la familia
16F87X

• Tiene memorias EEPROM, FLASH internas.


• Watchdog.
• Operan hasta con 20 MHz de clock o 5MIPS.
• 33 líneas de I/O con 25 mA en “sumidero” y 20mA en “fuente”.
• Modo SLEEP.
• Protección de código.
• ADC de 10 bits.
• Set de 35 instrucciones.
• 8K x 14bits de memoria FLASH de programa.
• Soporta hasta 14 fuentes de interrupción
• Comunicación serial.
• Pila de 8 niveles

José Oliden Martínez


Tabla con las principales características
de la familia 16F87X
Líneas de entrada y salida para los
controladores de periféricos

José Oliden Martínez


Recursos Auxiliares

 Circuito de reloj, encargado de generar los impulsos que


sincronizan el funcionamiento de todo el sistema.
 Temporizadores, orientados a controlar tiempos.
 Perro Guardián (“watchdog”), destinado a provocar una
reinicialización cuando el programa queda bloqueado o
“colgado”.
 Conversores AD y DA, para poder recibir y enviar señales
analógicas.
 Comparadores analógicos, para verificar los valores de
señales analógicas.
 Sistema de protección ante fallos de alimentación.
 Estado de reposo “SLEEP”, en el que el sistema queda
“congelado” y el consumo de energía se reduce al mínimo.
José Oliden Martínez
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 aritmética (ALU) se encarga de hacer todas las


operaciones.

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


(dirección indicada).

• Las características de los resultados de las operaciones se


encuentran en el registro STATUS.
José Oliden Martínez
ArquitecturaInterna :Procesador (ALU)

Los microcontroladores
PIC tienen un ALU y un
registro de trabajo (W) de
8 bits. El ALU realiza
operaciones aritméticas y
lógicas 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 Martínez


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
búsqueda, la dirección de la instrucción la
proporciona el PC, el cual normalmente se
autoincrementa en la mayoría 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 Martínez


Instrucción & Clock

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

Cada instrucción es una palabra de 14 bits,


dividida en código de operación, el cual
especifica la orden a ejecutar y uno o más
operandos sobre los que actúa.

Todas las instrucciones se demoran en


ejecutar un ciclo de máquina con la
excepción de las instrucciones de salto que
toman dos ciclos.

José Oliden Martínez


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
posición 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
posición 0Ah del
banco 0. Los bits
de mas peso del
PC solos se
pueden escribir
a través del
registro
PCLATH.

José Oliden Martínez


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 código 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 páginas de
2k, la posición la
seleccionan los 11 bits
de menos peso,
mientras que con los 2
bits de mas peso del PC
se elige la página

José Oliden Martínez


Instrucciones Programación I
Sintaxis Descripción Microchip Operación 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 instrucción
BTFSS f,b Bit Test f, skip if Set f(b) = 1 ? Si, salta la siguiente instrucción
CALL k Subroutine Call Llama a la subrutina en la dirección 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 dirección 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
AQUI

Instrucciones Programación 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 operación
OPTION Load Option Register OPTION = W
RETFIE Return from Interrupt Retorna de una subrutina de interrupción
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 Función
Especial FSR

Registros de Propósito
General GPR

José Oliden Martínez


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
movwf FSR ;a la memoria RAM 20H 13H
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 código
OP de la instrucción
para apuntar
cualquiera de las 128
posiciones del banco
0. Si el dato no está en
el banco 0, se usa un
sistema de paginación
para seleccionar el
banco empleando los
bits RP1 y RP0 del
Registro de estado
<6:5>.

José Oliden Martínez


Modos de direccionamiento
2o. Direccionamiento Indirecto
El operando de la
instrucción se refiere al
registro INDF, (posición 0
del área de datos). Se
accede a la posición
apuntada por FSR, (posición
04h del banco 0). Los 7 bits
LSB de FSR seleccionan la
posición 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 físicamente.
Cada vez que se le
referencia, se utiliza el
contenido del registro FSR
para direccionar al
operando.
Cualquier instrucción
usando el registro INDF
hace referencia al registro
apuntado por FSR. José Oliden Martínez
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
20H 13H
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
Programación I Instrucciones orientadas a los bytes
Banderas
Mnemónico Parámetros Descripción 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 Operación 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
Programación I Instrucciones orientadas a los bits

Banderas
Mnemónico Parámetros Descripción 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 instrucción


BTFSC f,b 1(2) None

Si el bit “b” de f es uno salta una instrucción


BTFSS f,b 1(2) None

José Oliden Martínez


Programación I Operaciones literales y de control

Banderas
Mnemónico Parámetros Descripción 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 dirección “k” 2

IORLW k OR literal con W 1 Z


MOVLW k Mover literal a W 1

RETFIE - Retornar de la interrupción 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 Martínez


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 misión principal de
este registro es controlar
el TMR0 (temporizador) y
el divisor de frecuencia.
Además configura la
interrupción externa INT
y las resistencias pull-up
del puerto B.
INTCON (0Bh)
La mayor parte de los
señalizadores y bits de
permiso de las fuentes
de interrupción en los
PIC16X8XX están
implementados sobre
los bits de este registro
que ocupa la dirección
0Bh del banco 0 y se
encuentra duplicado
en los demás bancos.
PIE1 (8Ch)
Contiene
los bits para
activar las
interrupcion
es de los
periféricos
PIR1 (0Ch)
Contiene las
banderas
que indican
la activación
de alguna
interrupción
periférica
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 Martínez


Programación I Editor

.ASM .INC

Compilador Asembler

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

Programador
PIC

16F877

José Oliden Martínez


Programación I

Ejemplo:
Leer un bit del puerto B (RB0) y según su valor hacer:
RB0=“0” mostrar por el puerto D “10101010”
RB0=“1” mostrar por el puerto D “01010101”
Solución Inicio

Configuración
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 según 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.
Solución 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 visualización.


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

interruptores (DIP) un 0
Vcc1 330
1 5
número 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
número 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 Martínez

Вам также может понравиться