1. Sesión 3
Introducción a la programación
de Microcontroladores
M.C. Marco A. Ramírez Barrientos
1
2. Contenido
• Introducción a los sistemas digitales.
• Introducción a LabView.
• Introducción a la programación de
Microcontroladores PIC.
• Controladores Lógicos Programables, PLCs.
16, 23, 30 nov. y 7 dic. de 2011
2
3. OBJETIVO GENERAL
Conocer los conceptos fundamentales para la
programación de microcontroladores, mediante
lenguajes de programación ensamblador y C.
4. BIBLIOGRAFIA BÁSICA
1. Microcontrolador PIC16F84; Enrique Palacios, 2006;
Alfaomega marcombo; 2ª. edición; 623 páginas.
2. Microcontroladores PIC. Diseño práctico de
aplicaciones, Angulo Usategui, José María y Angulo
Martínez, Ignacio, McGraw-Hill.
3. Advanced PIC Microcontroller Projects in C, Dogan
Ibrahim, 2008, Ed. Elsevier.
5. INTRODUCCION AL
MICROCONTROLADOR
• Un poco de historia
Inicialmente cuando no existían los
microprocesadores, se requería para el
diseño de circuitos electrónicos muchos
componentes y cálculos matemáticos. Un
circuito lógico básico requería de una gran
cantidad de elementos electrónicos
basados en transistores, resistencias, etc,
5
6. INTRODUCCION AL
MICROCONTROLADOR
Un poco de historia
En el año 1971 apareció el primer
microprocesador el cual originó un cambio
decisivo en las técnicas de diseño de la
mayoría de los equipos.
Entre los microprocesadores mas conocidos
tenemos el popular Z-80 y el 8085.
6
7. INTRODUCCION AL
MICROCONTROLADOR
• Un poco de historia
Los diseñadores de equipos electrónicos
ahora tenían equipos que podían realizar
mayor cantidad de tareas en menos tiempo y
su tamaño se redujo considerablemente.
sin embargo, después de cierto tiempo
aparece una nueva tecnología llamada
microcontrolador que simplifica aun mas el
diseño electrónico. 7
8. DIFERENCIA ENTRE MICROCONTROLADOR
Y MICROPOCESADOR
• Microprocesador
Es un sistema abierto con el que puede
construirse un computador con las
características que se desee, acoplándole
los módulos necesarios.
La Unidad Central de Proceso (UCP),
interpreta las instrucciones y el cambio de
datos que las ejecuta.
8
10. DIFERENCIA ENTRE MICROCONTROLADOR Y
MICROPOCESADOR
• Microcontrolador
Es un sistema cerrado que contiene un
computador completo.
Todas las partes del computador están
contenidas en su interior y solo salen al
exterior las líneas que gobiernan los
periféricos.
10
11. DIFERENCIA ENTRE MICROCONTROLADOR Y
MICROPOCESADOR
Cada fabricante de microcontroladores oferta un
elevado número de modelos diferentes, desde los
más sencillos hasta los más sofisticados.
11
12. ARQUITECTURA INTERNA
Un microcontrolador posee todos los
componentes de un computador, pero con unas
características fijas que no pueden alterarse:
– Procesador
– Memoria de programa (No volátil)
– Memoria datos (lectura y escritura)
– Líneas E/S para los controladores de
periféricos
– Recursos auxiliares
12
13. ARQUITECTURA INTERNA
1. Procesador o CPU.
2. Memoria no volátil para contener el programa.
3. Memoria de lectura y escritura para guardar los datos.
4. Líneas de E/S para los controladores de periféricos.
5. Recursos auxiliares (Módulos para el control de 13
periféricos)
14. PROCESADOR O CPU
Es el elemento más importante del
microcontrolador y determina sus principales
características, tanto a nivel de hardware
como de software
Existen dos arquitecturas, se diferencian en la
forma de conexión de la memoria al procesador
y en los buses que cada una necesita:
– Arquitectura Von Neumann
– Arquitectura Harvard
14
16. ARQUITECTURA VON NEUMANN
Existe una sola memoria, donde coexisten las
instrucciones de programa y los datos,
accedidos con un bus de dirección, uno de
datos y uno de control.
16
17. ARQUITECTURA VON NEUMANN
Limitación:
Longitud de las instrucciones por el bus de
datos (varios accesos a memoria para
instrucciones complejas).
Velocidad de operación (bus único para datos e
instrucciones) e impide superponer ambos
tiempos de acceso.
17
19. ARQUITECTURA HARVARD
– Memoria de datos separada de la memoria
de instrucciones
– Palabra de datos
– Palabra de instrucción
– Conjunto reducido de instrucciones (RISC)
– Ejecución de instrucciones en un ciclo de
instrucción.
– Paralelismo implícito, segmentación del
procesador (pipe-line)
19
20. • El alto rendimiento que poseen los
microcontroladores se debe a tres técnicas:
– Arquitectura Harvard
– Arquitectura RISC
– Segmentación
20
21. TIPOS DE MEMORIAS
Esta diseñado para que en su memoria de programa
se almacenen todas las instrucciones del programa
de control.
1. ROM con máscara
2. OTP (One Time Programmable)
3. EPROM
4. EEPROM
5. FLASH
21
22. MEMORIA DE PROGRAMA (ROM)
1. ROM con máscara
Se graba durante el proceso de fabricación
mediante el uso de “máscaras”
Se aconseja este tipo de memoria cuando
se precisan series muy grandes
22
23. MEMORIA DE PROGRAMA (ROM)
2 . OTP (One Time Programmable)
Sólo se puede grabar una vez por parte del
usuario.
Se aconseja este tipo de memoria para
prototipos finales.
23
24. MEMORIA DE PROGRAMA (ROM)
3. EPROM
En la superficie de la cápsula del
microcontrolador existe una ventana de
cristal por la que se puede someter al chip de
la memoria a rayos ultravioleta para producir
su borrado y emplearla nuevamente.
24
25. MEMORIA DE PROGRAMA (ROM)
4. EEPROM
La grabación es similar a las memorias OTP
y EPROM, pero el borrado es mucho más
sencillo al poderse efectuar de la misma
forma que el grabado, o sea, eléctricamente.
Garantizan 1.000.000 de ciclos de
escritura/borrado.
25
26. MEMORIA DE PROGRAMA (ROM)
5. FLASH
Se puede escribir y borrar en circuito al igual
que la EEPROM, pero suelen disponer de
mayor capacidad que estas últimas.
Pueden ser programadas con las mismas
tensiones de alimentación del
microcontrolador.
26
27. MEMORIA DE DATOS (RAM)
Es una memoria volátil y se destina a guardar
las variables y los datos (SRAM).
Los microcontroladores disponen de
capacidades de RAM comprendidas entre 20 y
512 bytes.
Existen microcontroladores que disponen de
memoria EEPROM para contener datos.
27
28. REGISTROS Y BITS
Un registro es una posición de memoria en la cual
se puede almacenar un dato. Es decir que la
memoria esta dividida en pequeñas partes llamadas
“Registros”.
El primer registro de una memoria corresponde a la
dirección 00H.
Hay un conjunto de registros que ya vienen
“Predefinidos” desde la fábrica.
Cada registro esta dividido en 8 partes, Bits. 28
29. LINEAS DE ENTRADA/SALIDA (PUERTOS)
Los microcontroladores cuentan con una serie
de pines destinados a entrada y salida de datos
o señales digitales. A estos pines se les
denomina “Puerto”.
Los puertos están controlados por los registros.
Entradas salidas de propósito general, trabajo
con dispositivos simples como relés, Leds, etc.
29
30. RECURSOS AUXILIARES
• Circuito de reloj.
• Temporizadores y contadores.
• Conversores AD y DA.
• Comparadores
• Modulador de ancho de pulsos (PWM)
• Puerto serie
• Otros puertos de comunicación (USB, CAN)
• Sistema de protección.
• Estado de reposo
30
31. LOS MICROCONTROLADORES PIC
Los 'PIC' son una familia de microcontroladores
tipo RISC (Reduced Instruction Set Computer)
fabricados por Microchip Technology Inc. y
derivados del PIC1650, originalmente
desarrollado por la división de microelectrónica
de General Instruments.
PIC “Peripheral Interface Controller”.
El PIC de 8 bits se desarrollo para el año 1975
31
32. LOS MICROCONTROLADORES PIC
Los microcontroladores PIC incorporan en
su procesador tres características:
Procesador tipo RISC
Procesador segmentado
Arquitectura HARVARD
Con estos recursos los PIC son capaces de
ejecutar en un ciclo de instrucción todas las
instrucciones, excepto las de salto que tardan
el doble.
32
33. LA FAMILIA DE LOS PIC
Se divide en cuatro gamas:
Gama enana, gama baja, gama media y gama
alta.
Sus diferencias radica en:
El numero de instrucciones y longitud
El número de puertos y funciones.
Lo cual se refleja en el encapsulado, la
complejidad interna y de programación, y en el
número de aplicaciones.
33
34. NOMENCLATURA DE LOS PIC’S
PIC nnLLLxxx
nn: Un número propio de la gama del PIC
LLL: Código de letras donde la primera
indica la tensión de alimentación y las
otras dos el tipo de memoria que utiliza
Xxx: Número que indica el modelo del PIC.
34
36. GAMA ENANA
PIC 12C(F)XXX, de 8 patas (pines)
Aunque solo tienen 8 pines, pueden
destinar hasta 6 como líneas de E/S para
los periféricos porque disponen de un
oscilador interno R-C.
36
38. GAMA BAJA O BASICA
• Mejores relaciones coste/prestaciones.
• Encapsulados con 18 y 28 pines
• Pueden alimentarse con una tensión 2.5V
• 33 instrucciones con formato de 12bits.
38
42. GAMA ALTA
• Alcanzan 58 instrucciones de 16 bits
• Sistema de gestión de interrupciones
vectorizadas
• Incluyen variados controladores de
periféricos, puertas de comunicación serie y
paralelo
• Arquitectura abierta.
42
43. EL PIC16X84
• Pertenece a la familia de la gama media
• Tiene solo 18 pines
• Posee una memoria de programa de 1K
palabras de 14bits cada una
• 64 bytes como memoria de datos
auxiliar y opcional
43
44. TARJETA DE PRESENTACION DE
PIC16X84
• Memoria de programa 1Kx14
• Memoria de datos RAM 36 byte-PIC16C84 y
de 68 byte-PIC16F84
• Memoria de datos 64bytes/EEPROM
• Pila de 8 niveles
• Interrupciones 4 tipos diferentes
• Juego de instrucciones 35
• Encapsulado Platico DIP de 18 pines
• Frecuencia de trabajo 10MHz Máxima
44
45. TARJETA DE PRESENTACION
DE PIC16X84
• Temporizadores : Solo uno TMR0
• Líneas E/S digitales : 13 Puerta A y Puerta B
• Voltaje de alimentación : VDD de 2 a 6VDC
• Corriente máxima absorbida : 80mA-Puerta A
y 150mA-Puerta B
• Corriente máxima suministrada : 50mA-
Puerta A y 100mA-Puerta B
45
47. FRECUENCIA DE
FUNCIONAMIENTO. EL RELOJ
Cuando un PIC16X8X funciona a 10MHz, le
corresponde un ciclo de instrucción de
400ns.
Ciclo de instrucción: 4x100ns=400ns
Todas las instrucciones del PIC se realizan
en un ciclo de instrucción menos las de salto.
Se aplica la técnica de segmentación o
Pipeline
47
48. TIPOS DE OSCILADORES
• OSCILADOR TIPO RC
Un oscilador formado por una resistencia
y un condensador
48
49. TIPOS DE OSCILADORES
• OSCILADOR TIPO HS
Un oscilador que alcanza una alta
velocidad entre 4 y 20MHz, basado en un
cristal de cuarzo o un resonador cerámico
49
50. TIPOS DE OSCILADORES
• OSCILADOR TIPO XT
Es un resonador de cristal o resonador para
frecuencias estándar, comprendida entre
100KHz y 4MHz.
50
51. TIPOS DE OSCILADORES
• OSCILADOR TIPO LP
Oscilador de bajo consumo con cristal o
resonador diseñado para trabajar en un
rango de frecuencias de 35 a 200KHz.
El cristal de cuarzo o el resonador
cerámico se coloca entre los pines OSC1
y OSC2
51
52. REINICIALIZACION O RESET
Con un nivel lógico bajo en MCLR# el
microcontrolador se reinicializa:
1. El contador de programa se carga con la
dirección 0.
2. La mayoría de los registros de estado y
control del procesador toman un estado
conocido y determinado.
52
54. EN EL INTERIOR DEL PROCESADOR
Los microcontroladores PIC incorporan tres
característica:
– Procesador tipo RISC
– Procesador segmentado
– Arquitectura Harvard
Una condición es la simetría y ortogonalidad en el
formato de las instrucciones (14bits)
El juego de instrucciones se reduce a 35 y con la
estructura segmentada se pueden realizar
simultáneamente las dos fases que compone cada
instrucción
54
55. EN EL INTERIOR DEL PROCESADOR
• El manejo intensivo del banco de
registros, los cuales participan de una
manera muy activa en la ejecución de
instrucciones.
• La ALU, efectúa sus operaciones lógico-
aritmética con dos operandos, uno es del
registro W(Work) y el otro que puede
provenir de cualquier registro o del propio
código de instrucción.
55
56. ARQUITECTURA INTERNA DEL
PIC16C84
Consta de siete bloques fundamentales:
• Memoria de programa EEPROM 1K x 14bits.
• Memoria de datos formada por dos áreas, una
RAM aloja 22 registros de (SFR), 36 registros
(GPR) y tipo EEPROM de 64 bytes.
• Camino de datos con la ALU de 8 bits y un
registro de trabajo W.
56
57. Assembly language programming
• In order to function properly, we must define several
microcontroller parameters such as: - type of
oscillator,
- whether watchdog timer is turned on, and
- whether internal reset circuit is enabled.
All this is defined by the following directive:
_CONFIG _CP_OFF&_WDT_OFF&PWRTE_ON&XT_OSC
57
59. Clock and Instruction Cycles
• Instruction Clock
– Clock from the oscillator enters a microcontroller via OSC1 pin where internal circuit of a
microcontroller divides the clock into four even clocks Q1, Q2, Q3, and Q4 which do not
overlap.
– These four clocks make up one instruction cycle (also called machine cycle) during which
one instruction is executed.
– Execution of instruction starts by calling an instruction that is next in string.
– Instruction is called from program memory on every Q1 and is written in instruction register
on Q4.
– Decoding and execution of instruction are done between the next Q1 and Q4 cycles. On the
following diagram we can see the relationship between instruction cycle and clock of the
oscillator (OSC1) as well as that of internal clocks Q1-Q4.
– Program counter (PC) holds information about the address of the next instruction.
60. PIC16F877A Features
High Performance RISC CPU:
• Only 35 single word instructions to learn
• All single cycle instructions except for program
branches, which are two-cycle
• Operating speed: DC - 20 MHz clock input DC -
200 ns instruction cycle
61. PIC16F877A Pin Layout
ADC inputs
PORTA PORTB
Counter
0
PORTE
external
input PORTD
PORT PORTC
C
PORT
D
62. PIC Memory
The PIC16F877A has an 8192 (8k) 14bit instruction
program memory
368 Bytes Registers as Data Memory :
Special Function Registers: used to control peripherals
and PIC behaviors
General Purpose Registers: used to a normal
temporary storage space (RAM)
256 Bytes of nonvolatile EEPROM
63. PIC Program Memory
The PIC16F877 8192 (8k) 14bit instructions
Takes a max of 8 addresses,
the ninth address will write
When the
over the first.
controller is
reset, program
execution starts
from here
If interrupted, program
execution continues
from here
65. Register Addressing Modes
Immediate Addressing:
Movlw H’0F’
Indirect Addressing:
Direct Addressing:
• Full7 bits register address is written the special function
Uses 8 bit of 14 bit instruction to identify a register file
register FSR 9th bit comes from RP0 and RP1 bits of
address 8th and
• INDF isregister. get the content of the address pointed by FSR
STATUS used to
• Exp : A sample program to clear RAM locations H’20’ –
i.e. Z equ D’2’ ; Z=2
H’2F: btfss STATUS, Z ; test if the 3rd bit of the
MOVLW 0x20 ;initialize pointer
STATUS registerRAM set
MOVWF FSR ;to is
NEXT CLRF INDF ;clear INDF register
66. PIC Family Control Registers
• Uses a series of “Special Function Registers”
for controlling peripherals and PIC behaviors.
STATUS Bank select bits, ALU bits (zero, borrow,
carry)
INTCON Interrupt control: interrupt enables, flags, etc.
OPTION_REG contains various control bits to
configure the TMR0 prescaler/WDT postscaler
,the External INT Interrupt, TMR0 and the weak
pull-ups on PORTB
69. PIC Peripherals
Each peripheral has a set of SFRs to control its operation.
Different PICs have different on-board peripherals
70. Peripheral Features
5 Digital I/O Ports
Three timer/counter modules
Timer0: 8-bit timer/counter with 8-bit pre-scaler
Timer1: 16-bit timer/counter with pre-scaler, can be incremented during SLEEP via
external crystal/clock
Timer2: 8-bit timer/counter with 8-bit period register, pre-scaler and post-scaler
A 10-bit ADC with 8 inputs
Two Capture, Compare, PWM modules
Capture is 16-bit, max. resolution is 12.5 ns
Compare is 16-bit, max. resolution is 200 ns
PWM max. resolution is 10-bit
Synchronous Serial Port (SSP) with SPI™ (Master mode) and I2C™ (Master/Slave)
Universal Synchronous Asynchronous Receiver Transmitter (USART/SCI) with 9-
bit address detection
Parallel Slave Port (PSP) 8-bits wide, with external RD, WR and CS controls
71. PIC Peripherals: Ports (Digital I/O)
Ports are basically digital I/O pins which exist in all PICs
The PIC16F877A have the following ports:
PORT A has 6 bit wide, Bidirectional
PORT B,C,D have 8 bit wide, Bidirectional
PORT E has 3 bit wide, Bidirectional
Ports have 2 control registers
TRISx sets whether each pin is an input (1) or output (0)
PORTx sets their output bit levels or contain their input bit levels
Pin functionality “overloaded” with other features
Most pins have 25mA source/sink thus it can drive LEDs directly
72. PIC Peripherals: Analogue
to Digital Converter
Only available in 14bit and 16bit cores
Fs (sample rate) < 54KHz
the result is a 10 bit digital number
Can generate an interrupt when ADC conversion is
done
73. PIC Peripherals: Analogue to
Digital Converter
The A/D module has four registers. These registers are:
A/D Result High Register (ADRESH)
A/D Result Low Register (ADRESL)
A/D Control Register0 (ADCON0)
A/D Control Register1 (ADCON1)
Multiplexed 8 channel inputs
Must wait Tacq to charge up sampling capacitor
Can take a reference voltage different from that of the
controller
74. PIC Peripherals: USART: UART
Serial Communications Peripheral:
Universal Synch./Asynch. Receiver/Transmitter
Interrupt on TX buffer empty and RX buffer full
Asynchronous communication: UART (RS-232C serial)
Can do 300bps - 115kbps
8 or 9 bits, parity, start and stop bits, etc.
Outputs 5V so you need a RS232 level converter (e.g.,
MAX232)
78. Las variables básicas en este compilador
específico son:
• bit
• char
• short
• int
• long
• float
• double 78
79. • Las variables bit permiten almacenar un valor lógico es decir
verdadero o falso, 0 ó 1.
• Las variables char se utilizan para almacenar caracteres
codificados con el código ASCII, son útiles para guardar letras
o textos.
• Una variable short almacena un número entero de 8 bits corto
puede valer de: -127 a 127.
• Las variables tipo int guardan números enteros de 16 bits,
está variable permite guardar números de: -32767 a 32767.
• La variable tipo long almacena números enteros largos de 32
bits, su rango puede ser de:
• -2147483647 a 2147483647.
• Las variables tipo float y double permiten guardar números 79
con punto decimal
81. • bit VARIABLE1_BIT; //Declaración de una variable tipo bit.
• char CARACTER; //Declaración de una variable tipo char.
• char CARACTER2='J'; //Declaración de una variable tipo char
inicializada con el
• //valor ASCII del carácter J.
• int ENTERO=1234; //Declaración de una variable tipo entera inicializada
con
• //el valor 1234.
• float DECIMAL=-12.45; //Declaración de una variable con punto decimal
• //inicializada con el valor -12,45.
• double DECIMAL2=56.68; //Declaración de una variable con punto
decimal
• //inicializada con el valor 56,68.
• long ENTERO2=-954261; //Demacración de una variable de tipo entero
largo
81
• //inicializada con el valor -954261.
82. • Los siguientes ejemplos muestras como declarar
variables sin signo:
• unsigned char CARACTER; //Declaración de una
variable tipo char sin signo.
• unsigned int ENTERO; //Declaración de una variable
tipo entera sin signo.
• unsigned long ENTERO2; //Demacración de una
variable de tipo entero largo sin signo.
82
83. void main() {
TRISA = 0x00; // set direction to be output
TRISB = 0x00; // set direction to be output
TRISC = 0x00; // set direction to be output
TRISD = 0x00; // set direction to be output
do {
PORTA = 0x00; // Turn OFF LEDs on PORTA
PORTB = 0x00; // Turn OFF LEDs on PORTB
PORTC = 0x00; // Turn OFF LEDs on PORTC
PORTD = 0x00; // Turn OFF LEDs on PORTD
Delay_ms(100); // 1 second delay
PORTA = 0xFF; // Turn ON LEDs on PORTA
PORTB = 0xFF; // Turn ON LEDs on PORTB
PORTC = 0xFF; // Turn ON LEDs on PORTC
PORTD = 0xFF; // Turn ON LEDs on PORTD
Delay_ms(100); // 1 second delay
} while(1); // Endless loop 83
}