Sie sind auf Seite 1von 25

Microcontroladores y Microprogramación – Clases Prácticas y de Laboratorio Prof. Wildor Ferrel S.

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.

 Sirve para controlar una tarea determinada.


 Por su tamaño reducido suele ir incorporado en el dispositivo al que gobierna
(controlador embebido)

Función Principal del MC


1 40

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

Señal Medida Elemento de


Medición

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

Arquitectura del microcontrolador


Atributos del sistema visibles al programador en lenguaje ensamblador:
 Registros de Trabajo
 Modos de direccionamiento
 Conjunto de Instrucciones
 Sistema de Interrupciones

Organización del microcontrolador


Unidades funcionales e interconexiones que materializan una Arquitectura
(Hardware)

2
Microcontroladores y Microprogramación – Clases Prácticas y de Laboratorio Prof. Wildor Ferrel S.

Principales características del Microcontrolador PIC 16F877A


 CPU RISC. Tiene 35 instrucciones.
 Cada instrucción es de una sola palabra de 14 bits.
 Máxima frecuencia de reloj 20 MHz.
 Todas las instrucciones a excepción de las de salto se ejecutan en un ciclo de
instrucción.
 Memoria de programa Flash de 8Kx14 words
 Memoria de datos RAM de 368 bytes
 Memoria de datos EEPROM de 256 Bytes
 5 puertos de entrada/salida: A, B, C, D, E con 6, 8, 8, 8, 3 líneas respectivamente
 3 timers: 2 de 8 bits y 1 de 16 bits
 2 módulos de captura-comparación-PWM
 ADC de 10 bits de 8 canales
 Puerto paralelo esclavo
 Comunicación serial USART, SPI/I2C

Diagrama de Bloques

Memoria
de Memoria de Timer 2
Memoria
Programa Datos
EEPROM Timer 1
(Flash) (SRAM)
256x8 CCP1 CCP2
8Kx14 368x8 Timer 0

CPU Buses Internos

Puertos de MSSP
ADC USART
Entrada/Salida SPI/I2C

2. La CPU – El Procesador Central


Circuito digital que ejecuta programas almacenados en la memoria de programa.

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.

Diagrama de bloques de la CPU

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.

Esquema Simplificado de Memoria de Programa

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

Memoria de Programa Memoria de Datos


Dirección Contenido Dirección Contenido
0000 H 000 H
0001 H 001 H
0002 H 002 H
0003 H 003 H

... ... ... ...

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

Lectura de Memoria de Programa

CPU Memoria de Programa


IR Dirección Contenido
1377 1377 0000 H
0001 H
0002 H 1377
0003 H
PC 0004 H
0002 H 0002 ... ...
H 1FFE H
1FFF H

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

Función del Contador de Programa


Direccionar la instrucción a realizar. (PC) - Contenido del registro PC
Ejemplo (PC) =100A;

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.

Registros de Funciones Especiales


Configuran y permiten el acceso a los recursos del microcontrolador

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

STATUS - Registro de Estado

IRP: Selecciona el banco en direccionamiento indirecto


RP1 RP0: Bits de selección de banco en direccionamiento directo
/TO: Bit time-out. Se activa cuando se desborda el perro guardian.
/PD: Bit power-down. Se activa cuando el procesador entra en modo reposo
(instrucción sleep)
Z : Bit cero
DC : Bit de acarreo/préstamo de dígito
C : Bit de acarreo/préstamo

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

CPU Memoria de Datos


CLRF INDF
Dirección Contenido
IR 000 H EA
0180 001 H 96
...

00 020 H 12
021 H 36
...

FSR 20 1FE H 00
0020 1FF H 00

CPU Memoria de Datos


CLRF INDF
Dirección Contenido
IR 000 H EA
0180 001 H 96
...

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)

Uso de la directiva EQU


#include <p16f877.inc> #include <p16f877.inc>
MOVF 0x20,W NA_L EQU 0X20
ADDWF 0x22,F NA_H EQU 0X21
BTFSC STATUS,C NB_L EQU 0X22
INCF 0x23,F NB_H EQU 0X23
MOVF 0x21,W MOVLW 0X64
ADDWF 0x23,F MOVWF NA_L
End MOVLW 0X00
MOVWF NA_H
Introducción de datos: MOVLW 0X64
#include <p16f877.inc> MOVWF NB_L
MOVLW 0X64 MOVLW 0X00
MOVWF 0X20 MOVWF NB_H
MOVLW 0X00 MOVF NA_L,W
MOVWF 0X21 ADDWF NB_L,F
MOVLW 0X64 BTFSC STATUS,C
MOVWF 0X20 INCF NB_H,F
MOVLW 0X00 MOVF NA_H,W
MOVWF 0X21 ADDWF NB_H,F
MOVF 0x20,W BUCLE
ADDWF 0x22,F GOTO BUCLE
BTFSC STATUS,C End
INCF 0x23,F
MOVF 0x21,W
ADDWF 0x23,F
End

22
Microcontroladores y Microprogramación – Clases Prácticas y de Laboratorio Prof. Wildor Ferrel S.

5.Procedimientos
La pila

Llamado y Retorno de un Procedimiento


Programa Principal Procedimiento
Dirección del
1200 1280
Procedimiento
1201 1281
1202 1282
1203 CALL 1283
Dirección
1204 1284
de Retorno
1205 1285
1206 1286
1207 1287
1288
1289 RETURN

23
Microcontroladores y Microprogramación – Clases Prácticas y de Laboratorio Prof. Wildor Ferrel S.

Multiplicación de números de 8 bits sin signo


CT MD_H MD
MR C

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
...

0010 ADDWF PCL,F


0011 RETLW b'00111111' 0
0012 RETLW b'00000110' 1
0013 RETLW b'01011011' 2
0014 RETLW b'01001111' 3
0015 RETLW b'01100110' 4
0016 RETLW b'01101101' 5
0017 RETLW b'01111101' 6
0018 RETLW b'00000111' 7
0019 RETLW b'01111111' 8
001A RETLW b'01101111' 9

25

Das könnte Ihnen auch gefallen