Está en la página 1de 78

Microcontroladores PIC

● Procesador RISC.
● Arquitectura Harvard
● Pipeline
● Formato de instrucciones ortogonal
● Arquitectura basada en banco de registros
● Distintos periféricos: temporizadores, puertos paralelo/serie,
interrupciones, I2C, USB, A/D, etc.
● Capacidades variables de memoria/datos.
● Programación “en el sistema”
● Modo de bajo consumo.
● Pines de alta corriente.
● Encapsulados desde 8 pines.
Procesadores CISC/RISC
● CISC (Complex Instruction Set Computer)
– Muchas instrucciones (hasta 80)
– Instrucciones complejas y potentes
– Cada instrucción necesita muchos ciclos de reloj para ejecutarse.
● RISC(Reduced Instruction Set Computer)
– Pocas instrucciones (en los PIC 35)
– Instrucciones sencillas
– Se ejecutan en un sólo ciclo de reloj
– Favorecen el pipeline
Arquitectura Harvard

Arquitectura Von-Neumann

Arquitectura Harvard
Pipeline
Instrucciones ortogonales
Arquitectura basada en banco de registros
Uso típico de los microcontroladores
● Instrumentos portátiles
– Polímetro, medidor ultrasónico de distancias, balanza electrónica.
● Dispositivos periféricos
– Pantallas táctiles, teclado, ratón, display LCD, On Screen
Display(OSD).
– Impresoras, modems, plotters, scanners.
● Dispositivos autónomos
– Fotocopiadoras, teléfonos móviles, cámaras digitales.
● Aplicaciones en automoción
– Inyección electrónica, frenos ABS, tarificación de Taxis, cuadro de
instrumentos, GPS.
PIC16F84
● 35 instrucciones. Códigos de instrucción de 14 bits. Todas las
instrucciones ocupan una palabra
● Todas las instrucciones duran un ciclo excepto las de salto que duran dos.
● Velocidad de funcionamiento 20MHz máximo (instr. 200 ns).
Típicamente a 4MHz (instr. 1us).
● 1024 palabras (14 bits) de memoria de programa FLASH.
● 68 bytes de RAM de datos.
● 64 bytes de EEPROM de datos.
● 15 registros de función específica.
● Pila hardware de 8 niveles.
● Modos de direccionamiento directo, indirecto y relativo.
● Cuatro fuentes de interrupción.
● 13 pines de E/S con control individual de sentido.
Encapsulado
Arquitectura
Memoria de programa
El contador de programa y PCLATH

En uso directo de PC (páginas 256 bytes)

En instrucciones call y goto (páginas 2K)


Memoria de datos
● Toda la memoria RAM se usa como registros
– Registros de propósito general
– Registros especiales (SFR)
● Configuración del microcontrolador
● Acceso a los periféricos (puertos, temporizadores, etc.)
● Memoria “mapeada” en bancos
– No todos los registros son accesibles a la vez.
– Hasta 4 bancos (2 para PIC16F84)
– Se cambia de banco con los bits RP0 y RP1 del registro de
STATUS.
● Acceso indirecto mediante un registro especial
– Registro FSR = registro “puntero” físico
– Registro INDF = registro que indica indirección
Acceso directo e indirecto

Instrucciones con INDF


como operando usan FSR
como puntero a los datos
SFR
Registro STATUS
Registro OPTION
Registro de configuración (en flash)

Ejemplo de programación de la configuración


Puertos de E/S
● Puerto A
– 5 pines
– Entrada y salida TTL
– Registro TRISA -> configuración
● Bit a 1 => pin como entrada
● Bit a 0 => pin como salida
– Registro PORTA -> interfaz de lectura /
escritura con el puerto.
– Corrientes máximas
● IOL = 25mA (máximo total 80mA)
● IOH = 25 mA (máximo total 50 mA)

Pines 0..3
● PIN 4
– Salida TTL colector abierto
– Entrada trigger-schmidt
– Compartido con entrada de
reloj para TMR0
● Puerto B
– 8 pines (TTL)
– Pull-up débil (configurable por
software) cuando se configuran
como entrada
– Pines 4..7 llevan asociada una
interrupción en cambio de nivel
– Registro TRISB ->
configuración
– Registro PORTB -> interfaz de
lectura / escritura con el puerto.
– Corrientes máximas
● IOL = 25mA (máximo total
150mA)
● IOH = 25 mA (máximo total 100
mA)

Pines 4..7
Pines 0..3
Conexión de pulsadores y LED
Temporizador TMR0
● Contador / temporizador de 8 bits leible y escribible
● Reloj interno/externo. Incremento en flanco subida/bajada
● Prescaler de 8 bits asociado
● Interrupción en desbordamiento
Programación del TMR0
● Prescaler (OPTION_REG):
– PSA -> 1 WDT, 0 TMR0
– PS2..PS0 -> fija el escalado: 1 a 128 para WDT, 2 a 256 para TMR0
– T0CS -> 0 reloj interno (reloj instrucción), 1 externo (PA4)
● Escritura en registro TMR0 de la cuenta -> cuenta ascendente
● Desbordamiento
– activa T0IF (debe borrarse por software)
– Si está activado T0IE y GIE, se produce una interrupción
● El temporizador está apagado en modo SLEEP.
Configuración del oscilador
RESET
● Vector de RESET = posición 0
● Fuentes de RESET:
– RESET externo (MCLR)
● Pin para RESET. Activo a nivel bajo
● En funcionamiento noormal ejecuta un reset.
● En SLEEP despierta al microcontrolador.
– Power On Reset (POR)
● POR
– Pulso de RESET al detectar que sube la alimentación
– Permite conectar MCLR a Vdd
● Power-Up Timer (PWRT)
– Pulso extra de 72ms añadido a POR. (es un oscilador RC interno)
– Permite a Vdd llegar a un nivel aceptable
– Se activa con el bit PWRTE en la palabra de configuración
● Oscillator Start-Up Timer (OST)
– Pulso extra de reset de 1024 ciclos de reloj, después de PWRT
– Permite al oscilador estabilizarse bien.
– Solo en modos con cristal.
● Brown-Out Reset (BOR)
– Reset cuando se produce una caida de la alimentación
– Se activa con el bit BOR en la palabra de configuración.
● Perro guardián (WDT)
– Temporizador RC interno (periodo nominal 18ms)
– Se le puede asignar el prescaler.
– Funciona incluso en modo SLEEP.
– En desbordamiento
● Modo normal -> RESET
● Modo SLEEP -> despierta al micro.
– Se habilita con el bit WDTE del registro de configuración
– Se borra con la instrucción CLRWDT
POR “normal”
Retraso del POR con fuente lenta
Diagrama de bloques del RESET
Valores de los registros después de un RESET
Interrupciones
● Interrupciones no vectorizadas. Vector de interrupción = 04h
● Fuentes de interrupción
– Interrupción externa INT (RB0)
– Desbordamiento TMR0
– Cambio puerto B: pines B4..B7
– Escritura EEPROM
● INT y cambio PB despiertan al micro de SLEEP.
● Enmascarables de forma global (GIE) o individual (T0IE, ....)
A tener en cuenta
● Interrupción -> asíncrona
● Necesario salvar contexto -> todo lo que se modifica
● Al menos el acumulador y los flags (STATUS)

● “Llamada” a interrupción
– Se desactiva automáticamente GIE -> no hay interrupciones anidadas
– Al finalizar (RETFIE) se vuelve a activar sola
● Pila con sólo 8 niveles ¡¡cuidado con los desbordamientos!!
EEPROM
● 64 bytes de EEPROM (direcciones 0 a 3Fh)
● Accesible mediante los registros EECON1, EECON2, EEDATA, EEADR
Registro EECON1
● Lectura
– Dirección -> EEADR
– Activar bit RD en EECON1
– En el siguiente ciclo de reloj el dato aparece en EEDATA
● Escritura
– Dirección -> EEADR
– Dato -> EEDATA
– 55h -> EECON2
– AAh -> EECON2
– Activar bit WR de EECON1 (se desactiva sólo al terminar escritura
– Escritura muy lenta -> esperar flag EEIF de intcon
Instrucciones

● Q1. Subciclo de decodificación de instrucción


● Q2. Subciclo de lectura de datos
● Q3. Proceso
● Q4. Subciclo de escritura de datos
Sintaxis de las instrucciones
Instrucciones que manejan registros

Instrucciones que manejan bits


Instrucciones de salto

Instrucciones que manejan datos inmediatos

Instrucciones de control y especiales


Instrucciones de movimiento de datos
Instrucciones aritméticas
Instrucciones lógicas
Instrucciones de bit
Instrucciones de “brinco”
Instrucciones de control

También podría gustarte