Documentos de Académico
Documentos de Profesional
Documentos de Cultura
1. Introducción
Competencias Específicas
Conocer, comprender y aplicar el microcontrolador PIC 16F877A.
Utilizar los recursos del microcontrolador a través de la programación.
En las clases prácticas: simular en MPLABX y Proteus sistemas basados en el
microcontrolador 16F877A e implementar físicamente algunos sistemas basados en
microcontrolador.
Microcontrolador
Circuito integrado programable que contiene los elementos básicos de un
computador.
2 39
3 38
4 37
5 36
6 35
7 34
8 33
9 32
10 31
11 30
12 29
13 28
14 27
15 26
1
16 25
17 24
Microcontroladores y Microprogramación – Clases Prácticas y de Laboratorio Prof. Wildor Ferrel S.
El MC en un Sistema de Control
Señal de
Señal de Mando
Referencia Variable
Controlada
Actuadores Planta
Programación del MC
Escribir el programa en lenguaje ensamblador o en lenguaje C.
Depurar el programa
Obtener el programa en lenguaje máquina
Grabar el programa en el microcontrolador
2
Microcontroladores y Microprogramación – Clases Prácticas y de Laboratorio Prof. Wildor Ferrel S.
Diagrama de Bloques
Memoria
de Memoria de Timer 2
Memoria
Programa Datos
EEPROM Timer 1
(Flash) (SRAM)
256x8 CCP1 CCP2
8Kx14 368x8 Timer 0
Puertos de MSSP
ADC USART
Entrada/Salida SPI/I2C
Microprocesador
Circuito integrado que contiene una unidad central de procesamiento CPU
3
Microcontroladores y Microprogramación – Clases Prácticas y de Laboratorio Prof. Wildor Ferrel S.
Memoria de Programa
Circuito digital que almacena Instrucciones.
4
Microcontroladores y Microprogramación – Clases Prácticas y de Laboratorio Prof. Wildor Ferrel S.
Memoria de Datos
Circuito digital que almacena los Datos.
Contenido
13 0
Arreglo
Celdas de 14 bits,
lineal Posiciones
de
celdas ...
Dirección
Combinación binaria que Identifica a una posición de memoria
1FFE H 1FE H
1FFF H 1FF H
Dato
Combinación binaria a ser procesada
Instrucción
Combinación binaria que para el Procesador Central es una orden a ser ejecutada
5
Microcontroladores y Microprogramación – Clases Prácticas y de Laboratorio Prof. Wildor Ferrel S.
Formato de Instrucción
13 0
Un Word de 14 bits
Programa
Secuencia de Instrucciones
Dirección Contenido
0000 H Instrucción 1
0001 H Instrucción 2
0002 H Instrucción 3
0003 H Instrucción 4
0004 H Instrucción 5
0005 H Instrucción 6
... ...
1FFE H
1FFF H
6
Microcontroladores y Microprogramación – Clases Prácticas y de Laboratorio Prof. Wildor Ferrel S.
Memoria de Programa
PC
Dirección Contenido
100A
... ...
1007 H 3CA9
1008 H 0077
1009 H 24B2
100A H 09C1
100B H 180D
100C H 1160
... ...
Función de la CPU
10001100100111
01110001010100
00011101010100
11101010100011
01010100000111
11101000100011
00001101010011
7
Microcontroladores y Microprogramación – Clases Prácticas y de Laboratorio Prof. Wildor Ferrel S.
Diagrama de Flujo
INICIO
0000 → (PC)
Carga de la
instrucción FETCH
(PC) + 1 → (PC)
Ejecución
Ejecución
3. La Memoria del MC
Tipos de Memoria
8Kx14 de memoria FLASH de programa
368 bytes de memoria SRAM (RAM estática) de datos
256 bytes de EEPROM (RAM no volátil), también para datos
Memoria FLASH
Almacena programas. Es direccionada por el contador de programa PC
8
Microcontroladores y Microprogramación – Clases Prácticas y de Laboratorio Prof. Wildor Ferrel S.
Memoria SRAM
Almacena datos.
Contiene registros SFR y registros GPR
9
Microcontroladores y Microprogramación – Clases Prácticas y de Laboratorio Prof. Wildor Ferrel S.
10
Microcontroladores y Microprogramación – Clases Prácticas y de Laboratorio Prof. Wildor Ferrel S.
Memoria EEPROM
El acceso se realiza a través de los registros SFR:
10D EEADR 00
10F EEADRH
10C EEDATA 256 bytes
10E EEDATH
18C EECON1
18D EECON2
FF
11
Microcontroladores y Microprogramación – Clases Prácticas y de Laboratorio Prof. Wildor Ferrel S.
4.Modos de Direccionamiento
Un modo de direccionamiento es la forma en que la CPU ubica un operando de una
instrucción.
Modo de direccionamiento inherente
Modo de direccionamiento literal
Modo de direccionamiento directo
Modo de direccionamiento indirecto
Direccionamiento Inherente
No necesita ningún operando. Ejemplo: SLEEP
Direccionamiento Literal
Sea la instrucción ANDLW 0x0F
(W) AND k → (W)
Formato
13 12 11 10 9 8 7 6 5 4 3 2 1 0
1 1 1 0 0 1 k k k k k k k k
(W) AND 0Fh → (W)
1 1 1 0 0 1 0 0 0 0 1 1 1 1
Antes
CPU
IR
390Fh ANDLW 0x0F
W 0110 1100b
Después
CPU
IR
390Fh ANDLW 0x0F
W 0000 1100b
12
Microcontroladores y Microprogramación – Clases Prácticas y de Laboratorio Prof. Wildor Ferrel S.
Direccionamiento Directo
Sea la instrucción MOVWF 0x20
(W) → (f)
Formato
13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 0 0 0 0 0 1 f f f f f f f
(W) → (0x20)
0 0 0 0 0 0 1 0 1 0 0 0 0 0
Antes
CPU
Memoria de Datos
IR
MOVWF 0x20 Dirección Contenido
00A0 00 H
01 H
20
... ...
1F H
20 H 5D
... ...
W 03 03
FE H
FF H
Después
CPU
Memoria de Datos
IR
MOVWF 0x20 Dirección Contenido
00A0 00 H
01 H
20
... ...
1F H
20 H 03
... ...
W 03 03
FE H
FF H
13
Microcontroladores y Microprogramación – Clases Prácticas y de Laboratorio Prof. Wildor Ferrel S.
Direccionamiento Indirecto
FSR (Registro de selección de File) actúa como puntero.
Toda instrucción que usa el registro INDF realmente accede al registro direccionado
por el registro FSR.
Sea la instrucción CLRF INDF
00h → (f)
Formato
13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 0 0 0 0 1 1 f f f f f f f
00h → (FSR)
0 0 0 0 0 1 1 0 0 0 0 0 0 0
00 020 H 12
021 H 36
...
FSR 20 1FE H 00
0020 1FF H 00
00 020 H 00
021 H 36
...
FSR 20 1FE H 00
0020 1FF H 00
14
Microcontroladores y Microprogramación – Clases Prácticas y de Laboratorio Prof. Wildor Ferrel S.
4.Conjunto de Instrucciones
Nomenclatura
Campo Descripción Campo Descripción
Bit selector de destino: d = 0: El resultado
f Dirección de registro (de 00h a 7Fh) d se almacena en W. d = 1: El resultado se
almacena en el registro f. Por defecto d=1.
W Registro de trabajo (acumulador) PC Contador de programa.
b Dirección de bit dentro de un registro de 8 bits TO Bit de tiempo expirado.
k Campo de literal, dato constante o etiqueta PD Bit de baja potencia.
No importa “0” o “1”. El ensamblador
x generará el código con x=0. Es recomendable
esta forma de uso por compatibilidad.
(*) La tabla de instrucciones y la descripción de las instrucciones han sido tomadas de la hoja de datos del PIC16F877
publicada por MICROCHIP
15
Microcontroladores y Microprogramación – Clases Prácticas y de Laboratorio Prof. Wildor Ferrel S.
16
Microcontroladores y Microprogramación – Clases Prácticas y de Laboratorio Prof. Wildor Ferrel S.
17
Microcontroladores y Microprogramación – Clases Prácticas y de Laboratorio Prof. Wildor Ferrel S.
18
Microcontroladores y Microprogramación – Clases Prácticas y de Laboratorio Prof. Wildor Ferrel S.
19
Microcontroladores y Microprogramación – Clases Prácticas y de Laboratorio Prof. Wildor Ferrel S.
20
Microcontroladores y Microprogramación – Clases Prácticas y de Laboratorio Prof. Wildor Ferrel S.
21
Microcontroladores y Microprogramación – Clases Prácticas y de Laboratorio Prof. Wildor Ferrel S.
Ejemplo 1
Escribir un programa en lenguaje ensamblador que sume números de 16 bits según el
esquema:
(21)(20)+
(23)(22)
-----------
(23)(22)
(21) (20) +
(23) (22)
(23) (22)
22
Microcontroladores y Microprogramación – Clases Prácticas y de Laboratorio Prof. Wildor Ferrel S.
5.Procedimientos
La pila
23
Microcontroladores y Microprogramación – Clases Prácticas y de Laboratorio Prof. Wildor Ferrel S.
PR_H PR_L
Borrar el registro del resultado
Completar el byte alto del multiplicando con cero
Poner valor 8 en el contador
Repeat
Desplazar el multiplicador a través del acarreo
Si el acarreo es 1, sumar el multiplicando al resultado
Desplazar el multiplicando a la izquierda
Decrementar el contador
Until el contador se haga cero
Ejemplo 2
Escribir un programa de multiplicación de números de 8 bits
#include <p16f877.inc> ;-------------------
;(26)-Multiplicando ; (MD_H) (MD)
;(28)-Multiplicador ; (PR_H)(PR_L) +
;(25)(24)-Resultado ;----------------
;(29)-Contador ; (PR_H)(PR_L)
MD EQU 0X26 ;-------------------
MR EQU 0X28 SUMA16:
MD_H EQU 0X27 MOVF MD,W
PR_H EQU 0X25 ADDWF PR_L,F
PR_L EQU 0X24 BTFSC STATUS,C
CNT EQU 0X29 INCF PR_H,F
MOVLW 0X8D MOVF MD_H,W
MOVWF MD ADDWF PR_H,F
MOVLW 0XB5 RETURN
MOVWF MR ;-------------------
MOVLW 0X00 ; (MD_H)(MD)
MOVWF PR_H ; <---------
MOVWF PR_L ;-------------------
MOVWF MD_H DESPLAZA16:
MOVLW 0X08 BCF STATUS,C
MOVWF CNT RLF MD,F
OTRO_BIT: RLF MD_H,F
RRF MR,F RETURN
BTFSC STATUS,C END
CALL SUMA16
CALL DESPLAZA16
DECFSZ CNT,F
GOTO OTRO_BIT
BUCLE:
GOTO BUCLE
24
Microcontroladores y Microprogramación – Clases Prácticas y de Laboratorio Prof. Wildor Ferrel S.
6. Manejo de tablas
Ejemplo 3
Escribir el programa que convierte una cifra BCD en código 7 segmentos
#include <p16f877.inc>
MOVLW 6
CALL BCD_A_7SEG a
BUCLE:GOTO BUCLE
;-----------------------------------
; Entrada: (W)- Es la cifra BCD f b
; Salida: (W)- Código 7 segmentos g
; de la cifra BCD
;----------------------------------- e c
ORG 0X10
BCD_A_7SEG:
ADDWF PCL,F
d
; -gfedcba
RETLW b'00111111' ; Codigo 7 seg para la cifra 0
RETLW b'00000110' ; Codigo 7 seg para la cifra 1
RETLW b'01011011' ; Codigo 7 seg para la cifra 2
RETLW b'01001111' ; Codigo 7 seg para la cifra 3
RETLW b'01100110' ; Codigo 7 seg para la cifra 4
RETLW b'01101101' ; Codigo 7 seg para la cifra 5
RETLW b'01111101' ; Codigo 7 seg para la cifra 6
RETLW b'00000111' ; Codigo 7 seg para la cifra 7
RETLW b'01111111' ; Codigo 7 seg para la cifra 8
RETLW b'01101111' ; Codigo 7 seg para la cifra 9
END
Dirección Instrucción
...
25