Curso Basico Microcontroladores
Curso Basico Microcontroladores
Curso Basico Microcontroladores
(PIC16F877A)
1
SISTEMA BÁSICO DE CÓMPUTO
BUS DE DATOS
BUS DE DIRECCIONES
CPU
MEMORIA E/S
BUS DE CONTROL
2
Curso básico de microcontroladores (PIC16F877A)
SISTEMA BÁSICO DE CÓMPUTO
3
Curso básico de microcontroladores (PIC16F877A)
SISTEMA BÁSICO DE CÓMPUTO
5
Curso básico de microcontroladores (PIC16F877A)
EL MICROCONTROLADOR PIC16F877A
6
Curso básico de microcontroladores (PIC16F877A)
CARACTERÍSTICAS DEL
MICROCONTROLADOR PIC16F877A
- Set de 35 instrucciones.
- Todas las instrucciones se ejecutan en un ciclo de instrucción,
excepto las de saltos que toman 2 ciclos.
- Velocidad de operación: DC-20Mhz. reloj de entrada.
DC-200ns. ciclo de instrucción.
- Memoria del programa: 8 K, flash (14 bits). 8192 locs.
- Memoria de datos: 368 x 8 bits de memoria RAM.
- Memoria de datos EEPROM: 256 x 8 bytes.
7
Curso básico de microcontroladores (PIC16F877A)
DISPOSITIVOS DE E/S (PERIFÉRICOS)
9
Curso básico de microcontroladores (PIC16F877A)
CARACTERÍSTICAS ESPECIALES
10
Curso básico de microcontroladores (PIC16F877A)
ARQUITECTURA DE LA FAMILIA
PIC16FXX.
11
Curso básico de microcontroladores (PIC16F877A)
ARQUITECTURAS DE COMPUTADORAS
ARQUITECTURA VON NEWMAN
MEMORIA
DE
INSTRUCCIONES
8
CPU
BUS DEL MEMORIA
SISTEMA DE
DATOS
12
Curso básico de microcontroladores (PIC16F877A)
ARQUITECTURAS DE COMPUTADORAS
ARQUITECTURA HARVARD
MEMORIA MEMORIA
8 8
DE CPU DE
DATOS INSTRUCCIONES
BUS DE BUS DE
DATOS DIREC-
CIONES
13
Curso básico de microcontroladores (PIC16F877A)
ARQUITECTURA DE LA FAMILIA
PIC16FXX.
MEMORIA MEMORIA
8 14
DE CPU DE
DATOS INSTRUCCIONES
BUS DE BUS DEL
DATOS PROGRAMA
14
Curso básico de microcontroladores (PIC16F877A)
ARQUITECTURA DE LA FAMILIA
PIC16FXX.
BUS DE DATOS
MEMORIA
REGISTRO 8 RAM
DE (REGISTROS)
INSTRUCCIONES
MPX
W
ALU
15
Curso básico de microcontroladores (PIC16F877A)
ARQUITECTURA DEL PIC16F877A
16
Curso básico de microcontroladores (PIC16F877A)
ARQUITECTURA DEL PIC16F877A
19
Curso básico de microcontroladores (PIC16F877A)
MEMORIA DEL PROGRAMA
20
Curso básico de microcontroladores (PIC16F877A)
MEMORIA DEL PROGRAMA
21
Curso básico de microcontroladores (PIC16F877A)
MEMORIA DEL PROGRAMA
22
Curso básico de microcontroladores (PIC16F877A)
MEMORIA DEL PROGRAMA
23
Curso básico de microcontroladores (PIC16F877A)
MEMORIA DEL PROGRAMA
MAIN -
-
-
-
-
PC=01FFh - 01FFh
PC=0200h CALL SUB1 0200h PC=PC+1 STACK PC=SUB1
- 0201h STACK(1)=0201h PC=0150h
-
- STACK 0201
-
-
24
Curso básico de microcontroladores (PIC16F877A)
MEMORIA DEL PROGRAMA
SUB1 - 0150h
-
PC=0152H -
PC=0153H CALL SUB2 0153h PC=PC+1 STACK PC=SUB2
- 0154h STACK(2)=0154h PC=0125h
-
- STACK 0201h
RETURN 0157h 0154h
25
Curso básico de microcontroladores (PIC16F877A)
VECTORES RESET E INTERRUPTION
26
Curso básico de microcontroladores (PIC16F877A)
VECTORES RESET E INTERRUPTION
27
Curso básico de microcontroladores (PIC16F877A)
VECTORES RESET E INTERRUPTION
28
Curso básico de microcontroladores (PIC16F877A)
VECTORES RESET E INTERRUPTION
29
Curso básico de microcontroladores (PIC16F877A)
VECTORES RESET E INTERRUPTION
RESET 0000h
GOTO MAIN STACK 0061h
- 0001h
- 0002h
- 0003h
INT GOTO SERV_INT 0004h
- 0005h
2°
- 0006h
- 0007h
1°
- 0008h
SERV_INT - 0009h
- 000Ah PC=PC+1 STACK PC=INT
- 000Bh STACK(1)=0061h PC=0004h
- .
- .
- . PC=SERV_INT PC=0009h
RETFIE .
-
-
.
MAIN - 0050h STACK PC PC=0061h
- 3°
-
-
Interrupción - 0060h
- 0061h
30
Curso básico de microcontroladores (PIC16F877A)
ESTRUCTURA DE UN PROGRAMA
(Template.asm)
list p=16F877A ; Indica el modelo de PIC que se usa
; Es una directiva de ensamblador
#include <p16F877A.inc> ; definición de registros del microcontrolador
;**********************************************************************
ORG 0x00 ; vector de reset
goto MAIN ; salta al inicio del programa
ORG 0x05
31
Curso básico de microcontroladores (PIC16F877A)
DIRECTIVAS DE ENSAMBLADOR
32
Curso básico de microcontroladores (PIC16F877A)
PROGRAMA “ SUMA.ASM ”
;**********************************************************************
ORG 0x00 ; vector de reset
goto MAIN ; salta al inicio del programa
ORG 0x05
33
Curso básico de microcontroladores (PIC16F877A)
INSTRUCCIONES USADAS EN
“ SUMA.ASM ”
34
Curso básico de microcontroladores (PIC16F877A)
PRÁCTICA # 1
35
Curso básico de microcontroladores (PIC16F877A)
CONTENIDO DEL REPORTE
a) Nombre de la escuela
b) Número y nombre de la práctica
c) Integrantes del equipo
d) Fecha de entrega
- Introducción
- Objetivo de la práctica
- Material y equipo utilizado
- Diagrama esquemático del circuito
- Programa documentado (si incluye programa)
- Desarrollo de la práctica
- Conclusiones
36
Curso básico de microcontroladores (PIC16F877A)
MEMORIA DE DATOS RAM
37
Curso básico de microcontroladores (PIC16F877A)
MEMORIA DE DATOS RAM
38
Curso básico de microcontroladores (PIC16F877A)
MEMORIA DE DATOS RAM
39
Curso básico de microcontroladores (PIC16F877A)
MEMORIA DE DATOS RAM
40
Curso básico de microcontroladores (PIC16F877A)
MEMORIA DE DATOS RAM
41
Curso básico de microcontroladores (PIC16F877A)
MEMORIA DE DATOS RAM
42
Curso básico de microcontroladores (PIC16F877A)
MEMORIA DE DATOS RAM
- Direccionamiento directo.
- Direccionamiento indirecto.
43
Curso básico de microcontroladores (PIC16F877A)
MEMORIA DE DATOS RAM
44
Curso básico de microcontroladores (PIC16F877A)
MEMORIA DE DATOS RAM
45
Curso básico de microcontroladores (PIC16F877A)
MEMORIA DE DATOS RAM
46
Curso básico de microcontroladores (PIC16F877A)
MEMORIA DE DATOS RAM
STATUS 0
IRP
10h 05H
48
Curso básico de microcontroladores (PIC16F877A)
REGISTRO STATUS
49
Curso básico de microcontroladores (PIC16F877A)
PUERTOS DIGITALES (E/S)
50
Curso básico de microcontroladores (PIC16F877A)
PUERTOS DIGITALES (E/S)
51
Curso básico de microcontroladores (PIC16F877A)
PUERTOS DIGITALES (E/S)
52
Curso básico de microcontroladores (PIC16F877A)
PUERTOS DIGITALES (E/S)
53
Curso básico de microcontroladores (PIC16F877A)
PUERTO A
RA0-RA3
54
Curso básico de microcontroladores (PIC16F877A)
PUERTO A
1 1
0
0
1 RA0-RA3
0
0
55
Curso básico de microcontroladores (PIC16F877A)
PUERTO A
0 0
1
1
0 RA0-RA3
1
0
56
Curso básico de microcontroladores (PIC16F877A)
PUERTO A
X
1
X RA0-RA3
0
1
0
0
X X
57
Curso básico de microcontroladores (PIC16F877A)
PUERTO A
58
Curso básico de microcontroladores (PIC16F877A)
PUERTO A
RA4/T0CKI
59
Curso básico de microcontroladores (PIC16F877A)
PUERTO A
60
Curso básico de microcontroladores (PIC16F877A)
PUERTO A
Ejemplo:
TRISA X X 1 0 0 0 1 1 0x23
7 6 5 4 3 2 1 0
bcf STATUS,RP0
bcf STATUS,RP1 ;Selecciona banco 0
movlw 0x0C
movwf PORTA ;Saca 0x0C por puerto A
62
Curso básico de microcontroladores (PIC16F877A)
PUERTO A
63
Curso básico de microcontroladores (PIC16F877A)
PUERTO B
64
Curso básico de microcontroladores (PIC16F877A)
PUERTO B
65
Curso básico de microcontroladores (PIC16F877A)
PUERTO B
66
Curso básico de microcontroladores (PIC16F877A)
PUERTO B
67
Curso básico de microcontroladores (PIC16F877A)
PUERTO C
68
Curso básico de microcontroladores (PIC16F877A)
PUERTO D
69
Curso básico de microcontroladores (PIC16F877A)
PUERTO E
70
Curso básico de microcontroladores (PIC16F877A)
PRÁCTICA # 2
71
Curso básico de microcontroladores (PIC16F877A)
SET DE INSTRUCCIONES
72
Curso básico de microcontroladores (PIC16F877A)
SET DE INSTRUCCIONES
73
Curso básico de microcontroladores (PIC16F877A)
SET DE INSTRUCCIONES
si d = 0 Resultado W
si d = 1 Resultado f
74
Curso básico de microcontroladores (PIC16F877A)
SET DE INSTRUCCIONES
Ejemplo:
W 0F W 0F
andwf PORTA,1
PORTA 3A PORTA 0A
75
Curso básico de microcontroladores (PIC16F877A)
SET DE INSTRUCCIONES
b–0 7
76
Curso básico de microcontroladores (PIC16F877A)
SET DE INSTRUCCIONES
Ejemplo:
77
Curso básico de microcontroladores (PIC16F877A)
SET DE INSTRUCCIONES
78
Curso básico de microcontroladores (PIC16F877A)
SET DE INSTRUCCIONES
79
Curso básico de microcontroladores (PIC16F877A)
SET DE INSTRUCCIONES
Ejemplos:
W 01 iorlw 0x04 W 05
80
Curso básico de microcontroladores (PIC16F877A)
SET DE INSTRUCCIONES
Instrucciones que manejan registros
C f
MSB LSB
RRF
C f
MSB LSB
82
Curso básico de microcontroladores (PIC16F877A)
SET DE INSTRUCCIONES
85
Curso básico de microcontroladores (PIC16F877A)
SET DE INSTRUCCIONES
86
Curso básico de microcontroladores (PIC16F877A)
SET DE INSTRUCCIONES
btfsc PORTB,2
goto APAGA
bsf PORTB,2
goto CONTINUA
APAGA bcf PORTB,2
CONTINUA -
87
Curso básico de microcontroladores (PIC16F877A)
MANEJO DE PERIFÉRICOS
LED´s
88
Curso básico de microcontroladores (PIC16F877A)
MANEJO DE PERIFÉRICOS
89
Curso básico de microcontroladores (PIC16F877A)
MANEJO DE PERIFÉRICOS
90
Curso básico de microcontroladores (PIC16F877A)
MANEJO DE PERIFÉRICOS
RELEVADORES
91
Curso básico de microcontroladores (PIC16F877A)
MANEJO DE PERIFÉRICOS
SALIDAS OPTOACOPLADAS
92
Curso básico de microcontroladores (PIC16F877A)
MANEJO DE PERIFÉRICOS
93
Curso básico de microcontroladores (PIC16F877A)
MANEJO DE PERIFÉRICOS
94
Curso básico de microcontroladores (PIC16F877A)
MANEJO DE PERIFÉRICOS
95
Curso básico de microcontroladores (PIC16F877A)
MANEJO DE PERIFÉRICOS
REBOTES
96
Curso básico de microcontroladores (PIC16F877A)
MANEJO DE PERIFÉRICOS
97
Curso básico de microcontroladores (PIC16F877A)
MANEJO DE PERIFÉRICOS
Ejemplo:
98
Curso básico de microcontroladores (PIC16F877A)
MANEJO DE PERIFÉRICOS
LEE BIT DE
ENTRADA
NO BIT = 0
?
SI
DELAY
NO BIT =0
?
SI
99
Curso básico de microcontroladores (PIC16F877A)
MANEJO DE PERIFÉRICOS
100
Curso básico de microcontroladores (PIC16F877A)
MANEJO DE PERIFÉRICOS
Entradas digitales optoacopladas
101
Curso básico de microcontroladores (PIC16F877A)
MANEJO DE PERIFÉRICOS
PRÁCTICA # 4
102
Curso básico de microcontroladores (PIC16F877A)
PRÁCTICA # 5
103
Curso básico de microcontroladores (PIC16F877A)
INTERRUPCIONES
104
Curso básico de microcontroladores (PIC16F877A)
INTERRUPCIONES
105
Curso básico de microcontroladores (PIC16F877A)
INTERRUPCIONES
106
Curso básico de microcontroladores (PIC16F877A)
INTERRUPCIONES
107
Curso básico de microcontroladores (PIC16F877A)
INTERRUPCIONES
Causas de interrupción:
108
Curso básico de microcontroladores (PIC16F877A)
INTERRUPCIONES
109
Curso básico de microcontroladores (PIC16F877A)
INTERRUPCIONES
110
Curso básico de microcontroladores (PIC16F877A)
INTERRUPCIONES
111
Curso básico de microcontroladores (PIC16F877A)
INTERRUPCIONES
112
Curso básico de microcontroladores (PIC16F877A)
INTERRUPCIONES
;Rutina que determina la causa de la interrupción
114
Curso básico de microcontroladores (PIC16F877A)
INTERRUPCIONES
115
Curso básico de microcontroladores (PIC16F877A)
INTERRUPCIONES
=0 =0
=0
=0
117
Curso básico de microcontroladores (PIC16F877A)
INTERRUPCIONES
118
Curso básico de microcontroladores (PIC16F877A)
INTERRUPCIONES
Nd = 256 - Tiempo
4*Tosc*Rango del preescalador
119
Curso básico de microcontroladores (PIC16F877A)
INTERRUPCIONES
Ejemplo:
=1 =1
=1
=1
122
Curso básico de microcontroladores (PIC16F877A)
INTERRUPCIONES
PRÁCTICA # 6
123
Curso básico de microcontroladores (PIC16F877A)
INTERRUPCIONES
124
Curso básico de microcontroladores (PIC16F877A)
INTERRUPCIONES
125
Curso básico de microcontroladores (PIC16F877A)
INTERRUPCIONES
Interrupción RB.
128
Curso básico de microcontroladores (PIC16F877A)
EL WATCHDOG TIMER (WDT)
129
Curso básico de microcontroladores (PIC16F877A)
EL WATCHDOG TIMER (WDT)
Diagrama a bloques del TMR0/WDT
=1
=1
=1
130
Curso básico de microcontroladores (PIC16F877A)
EL WATCHDOG TIMER (WDT)
132
Curso básico de microcontroladores (PIC16F877A)
LA PALABRA DE CONFIGURACIÓN
133
Curso básico de microcontroladores (PIC16F877A)
LA PALABRA DE CONFIGURACIÓN
134
Curso básico de microcontroladores (PIC16F877A)
LA PALABRA DE CONFIGURACIÓN
135
Curso básico de microcontroladores (PIC16F877A)
CONFIGURACIÓN DEL OSCILADOR
137
Curso básico de microcontroladores (PIC16F877A)
CONFIGURACIÓN DEL OSCILADOR
Los capacitores C1 y C2 pueden ser seleccionados en base a
la siguiente tabla:
138
Curso básico de microcontroladores (PIC16F877A)
POWER-ON RESET
Un pulso de reset Power_On es generado en el chip cuando la
aplicación de voltaje en Vdd es detectada (en el rango de 1.2V –
1.7V). Para usar la característica POR se requiere conectar el pin
MCLR a Vdd (+5V) a través de una resistencia de 10K.
140
Curso básico de microcontroladores (PIC16F877A)
POWER-UP TIMER (PWRT)
142
Curso básico de microcontroladores (PIC16F877A)
BROWN-OUT RESET (BOR)
143
Curso básico de microcontroladores (PIC16F877A)
TIME-OUT SEQUENCE
145
Curso básico de microcontroladores (PIC16F877A)
TARJETA DE DESARROLLO
F E D C
6 9 B
3
2 5 8 0
1 4 7 A
146
Curso básico de microcontroladores (PIC16F877A)
TECLADO
Las cuatro líneas de mayor peso del puerto D (RD4 – RD7) están
configuradas como entradas y reciben los niveles lógicos que
contienen las filas del teclado.
147
Curso básico de microcontroladores (PIC16F877A)
TECLADO
148
Curso básico de microcontroladores (PIC16F877A)
TECLADO
149
Curso básico de microcontroladores (PIC16F877A)
TECLADO
TECLA RD7 RD6 RD5 RD4 RD3 RD2 RD1 RD0 CÓDIGO
1 0 1 1 1 0 1 1 1 77
2 1 0 1 1 0 1 1 1 B7
3 1 1 0 1 0 1 1 1 D7
F 1 1 1 0 0 1 1 1 E7
4 0 1 1 1 1 0 1 1 7B
5 1 0 1 1 1 0 1 1 BB
6 1 1 0 1 1 0 1 1 DB
E 1 1 1 0 1 0 1 1 EB
7 0 1 1 1 1 1 0 1 7D
8 1 0 1 1 1 1 0 1 BD
9 1 1 0 1 1 1 0 1 DD
D 1 1 1 0 1 1 0 1 ED
A 0 1 1 1 1 1 1 0 7E
0 1 0 1 1 1 1 1 0 BE
B 1 1 0 1 1 1 1 0 DE
C 1 1 1 0 1 1 1 0 EE
Nota: Un pin que ha sido programado como salida si es leído, se obtendrá el valor
que previamente ha sido sacado por el.
150
Curso básico de microcontroladores (PIC16F877A)
TECLADO
151
Curso básico de microcontroladores (PIC16F877A)
TECLADO
- Inicialización de puertos.
- Barrido.
- Validación de tecla presionada (incluyendo antirrebotes).
- Reconocimiento y conversión del código de la tecla a valor
numérico.
- Espera liberación de la tecla. 152
Curso básico de microcontroladores (PIC16F877A)
TECLADO
153
Curso básico de microcontroladores (PIC16F877A)
TECLADO
;KBD_CXX.ASM
;BLOQUE DE VARIABLES
CBLOCK KBD_VAR
TECLA ;Código de tecla presionada
BARRIDO ;Variable para barrido de teclado
ENDC
154
Curso básico de microcontroladores (PIC16F877A)
TECLADO
;**********************************************************************
;Tablas de datos
156
Curso básico de microcontroladores (PIC16F877A)
TECLADO
;**********************************************************************
; Rutina que inicializa puerto B para leer el teclado
157
Curso básico de microcontroladores (PIC16F877A)
TECLADO
;**********************************************************************
;Subrutina que barre teclado para detectar tecla presionada. Si se presionó
;tecla el bit 4 de la variable BARRIDO será 1, de lo contrario será 0.
PRÁCTICA # 8
159
Curso básico de microcontroladores (PIC16F877A)
LCD
161
Curso básico de microcontroladores (PIC16F877A)
LCD
F : 1 – El carácter es de 5 x 10 pixeles.
0 – El carácter es de 5 x 7 pixeles.
X : Indeterminado.
168
Curso básico de microcontroladores (PIC16F877A)
LCD
170
Curso básico de microcontroladores (PIC16F877A)
LCD
171
Curso básico de microcontroladores (PIC16F877A)
LCD
172
Curso básico de microcontroladores (PIC16F877A)
LCD
173
Curso básico de microcontroladores (PIC16F877A)
LCD
174
Curso básico de microcontroladores (PIC16F877A)
LCD
176
Curso básico de microcontroladores (PIC16F877A)
LECTURA Y ESCRITURA DE LAS
MEMORIAS EEPROM Y FLASH
En el PIC16F877 es posible leer y escribir tanto la memoria de
datos EEPROM como la memoria de código FLASH.
178
Curso básico de microcontroladores (PIC16F877A)
LECTURA Y ESCRITURA DE LAS
MEMORIAS EEPROM Y FLASH
0 0 0 X X X X X X X X X X X X X
0 0 X X X X X X X X X X X X X X
180
Curso básico de microcontroladores (PIC16F877A)
LECTURA Y ESCRITURA DE LAS
MEMORIAS EEPROM Y FLASH
WR – Control de escritura.
RD – Control de lectura.
182
Curso básico de microcontroladores (PIC16F877A)
LECTURA Y ESCRITURA DE LAS
MEMORIAS EEPROM Y FLASH
Antes de iniciar la escritura de una palabra se escribe en EECON2
primeramente el dato 55h y después AAh, lo cual es recomendado
por el fabricante.
183
Curso básico de microcontroladores (PIC16F877A)