0% encontró este documento útil (0 votos)
137 vistas82 páginas

Guía de Microcontroladores PIC

Este documento introduce los conceptos de microcontroladores y microprocesadores. Explica que un microcontrolador es un circuito integrado programable que contiene todos los componentes de un computador en un solo chip, mientras que un microprocesador contiene solo la CPU. Luego, describe las características y aplicaciones del microcontrolador PIC16F870, incluida su arquitectura, memoria, osciladores y otros componentes.

Cargado por

Andrea LH
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
137 vistas82 páginas

Guía de Microcontroladores PIC

Este documento introduce los conceptos de microcontroladores y microprocesadores. Explica que un microcontrolador es un circuito integrado programable que contiene todos los componentes de un computador en un solo chip, mientras que un microprocesador contiene solo la CPU. Luego, describe las características y aplicaciones del microcontrolador PIC16F870, incluida su arquitectura, memoria, osciladores y otros componentes.

Cargado por

Andrea LH
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

CAPÍTULO 1

INTRODUCCIÓN A LOS
MICROCONTROLADORES

2019A
Ing. Fanny Flores, MSc.
Microprocesador y Microcontrolador
◼ Microcontrolador

◼ Es un circuito integrado programable que contiene todos los componentes de un


computador.
◼ Se emplea para controlar el funcionamiento de una tarea determinada y, debido a su
reducido tamaño, suele ir incorporado en el propio dispositivo al que gobierna.
◼ Una vez programado, el microcontrolador sirve solamente para gobernar la tarea asignada.
◼ Aplicaciones: TV, control remoto, microondas, Sistema de seguridad del vehículo,
climatizador, inyección de combustible, ratón de ordenador, teclado, fotocopiadora,
teléfono celular, teléfono inalámbrico, control de motores, termostato, lector de código de
barras, lector de tarjetas, etc.

2
Microprocesador y microcontrolador
◼ Microprocesador

◼ Es un circuito integrado que contiene la CPU (Central Processing Unit) o procesador de un


computador. La CPU está formada por la Unidad de Control, que interpreta las
instrucciones, y el Camino de Datos, que las ejecuta.
◼ Los pines de un microprocesador sacan al exterior las líneas de sus buses de direcciones,
datos y control para permitir conectarle con la Memoria y los Módulos de E/S y configurar
un computador implementado por varios circuitos integrados.

3
Microprocesador y microcontrolador
◼ Un 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.
◼ Un microcontrolador es un sistema cerrado que contiene un computador completo y de
prestaciones limitadas que no se pueden modificar.

4
Arquitectura Microcontroladores
◼ Un microcontrolador posee todos los componentes de un computador, pero
con características fijas inalterables.

◼ Procesador
◼ Memoria no volátil para contener el programa
◼ Memoria de lectura y escritura para guardar los datos
◼ Líneas de ES para los controladores periféricos
◼ Recursos auxiliares

5
Microcontroladores PIC
◼ Inicialmente: Programmable Interface Controller.
◼ Luego: Programmable Intelligent Computer.
◼ Fabricante: Microchip
◼ Versiones:
◼ C: Memoria de instrucciones es EEPROM
◼ F: Memoria de instrucciones es Flash
◼ CR: Memoria de instrucciones es ROM
◼ Familias:
◼ PIC 12, 16, 17, 18

6
Microcontroladores PIC
◼ PIC12CXXX
◼ PIC12FXXX
◼ PIC16CXXX
◼ PIC16C5X
◼ PIC16FXXX
◼ PIC17CXXX
◼ PIC18CXXX
◼ PIC18FXXX
7
PIC16F870

8
Características
◼ Microcontrolador Microchip gama media
◼ 8-bits
◼ CPU: RISC de alto rendimiento
◼ Juego Reducido de Instrucciones: 35
◼ Pines: 28 (Encapsulado plástico DIP)
◼ Memoria Flash (programa): 2Kx14 words
◼ Memoria de Datos RAM: 128 x 8 bytes
◼ Memoria de datos EEPROM: 64 x 8 bytes
9
Características
◼ Timers: 3 (TMRO, TMR1, TMR2)
◼ Watchdog: 1 (WDT)
◼ Interrupciones: 10
◼ Conversor A/D 10 bits (5 canales)
◼ Comunicación serial (USART)
◼ Módulo CPP (PWM)
◼ Pórticos de E/S: 3 (PORTA 6 líneas, PORTB 8 líneas, PORTC 8
líneas)

10
Características
◼ Corriente máxima absorbida por línea: 25 mA.
◼ Corriente máxima suministrada por línea: 25mA.

◼ Voltaje de alimentación (VDD) entre 2 y 5.5 V

◼ Frecuencia de Trabajo: Hasta 20 MHz

◼ Bajo Consumo

< 1.6 mA @ 5V, 4 MHz


< 1 μA standby

11
Características

12
Banco de
Registros BIU

PC
IR

Arquitectura del ID
Microcontrolador

ALU
UCT

13
Descripción de Pines

14
Descripción de Pines

15
Descripción de Pines

16
Descripción de Pines

17
Osciladores
◼ Los microcontroladores requieren de un circuito de reloj que le indique la velocidad de
trabajo, es el llamado oscilador o reloj. Este genera una onda cuadrada de alta
frecuencia que se utiliza como señal para sincronizar todas las operaciones del sistema.

◼ Este circuito es muy simple pero de vital importancia para el buen funcionamiento del
sistema.

◼ Generalmente casi todos los componentes del reloj se encuentran integrados en el


propio microcontrolador y tan solo se requieren unos pocos componentes externos,
como un cristal de cuarzo o una red RC, para definir la frecuencia de trabajo.

18
Conexión de Osciladores
◼ En el PIC 16F870 los pines OSC1/CLKIN y OSC2/CLKOUT son las líneas utilizadas
para este fin. Permite 5 tipos de osciladores para definir la frecuencia de
funcionamiento:

◼ LP: Cristal para baja frecuencia y bajo consumo de potencia. (<1MHz)


◼ XT: Cristal de cuarzo. (4MHz)
◼ HS: Cristal de alta velocidad. (20MHz)
◼ RC: Oscilador con resistencia y condensador.
◼ EXTERNA: Cuando se aplica una señal de reloj externa.

19
Conexión de Osciladores
◼ Oscilador Modo LP, XT, HS

En este tipo de osciladores un cristal u oscilador cerámico es conectado a los pines


OSC1/CLKI y OSC2/CLKO.

Los capacitores más grandes incrementan la estabilización del oscilador pero aumentan
su tiempo de arranque. (4MHz / 22pF) 20
Conexión de Osciladores
◼ Oscilador Tipo RC
Para aplicaciones que no son sensibles al tiempo. Los osciladores RC ofrecen un ahorro de
costos adicionales.
La frecuencia del oscilador va a estar en función del voltaje de alimentación, Resistencia
externa y Capacitor externo

Valores Recomendados: 3KΩ < Rext < 100 K Ω


Cext > 20 pF
21
Conexión de Osciladores
◼ Oscilador Externo

22
Circuito de Reset (MCLR)
◼ La entrada MCLR permite reiniciar el estado del micro,
llevándose a cabo dos acciones importantes:

◼ Se carga un 0 en el Contador de Programa (PC), de


forma que después de un Reset siempre se ejecuta la
instrucción que está en la posición 0 de la memoria de
programa.
◼ Los registros de estado y control toman un estado
conocido y determinado.

23
Circuito de Reset (MCLR)
Dos circuitos muy usados para RESET

En este circuito se debe


conectar un pulsador
normalmente abierto en paralelo
con C
24
Memoria del PIC16F870

◼ Distribución de la memoria
◼ Dispone de 3 partes de memoria:
◼ Memoria programa (Flash): 2Kx14 palabras (en cada una de las 4 páginas) (aprox.)
◼ Memoria de Datos (RAM): 128 x 8 bytes (en cada uno de los 4 bancos)
◼ Memoria de Datos (EEPROM): 64 x 8 bytes
◼ La memoria de programa y la memoria de datos tienen buses
independientes.
◼ La memoria de datos RAM tiene una estructura basada en 4 bancos de 128
bytes cada uno, seleccionables con los bits RP1 (STATUS<6>) y RP0
(STATUS<5>) del Registro STATUS.
25
Memoria de Programa (Flash)
El PIC 16F8xx tiene un contador de programa (PC) de 13 bits capaz de direccionar un
espacio de memoria de programa de 8Kx14 palabras.

El espacio de la memoria de programa se divide en 4 páginas de 2K palabras (aprox.)

El ancho del bus del programa de memoria es 14 bits. Por lo tanto, todas las
instrucciones son una sola palabra, así un dispositivo con una memoria de programa 8K
x 14 dispone de espacio para 8K instrucciones. Por lo que es mas fácil para determinar
si un dispositivo tiene suficiente memoria de programa para una aplicación deseada.

26
Memoria de Programa (Flash)

Mapa de
Memoria de
Programa

27 27
Memoria de Programa
Contador de Programa (PC)
◼ Registro de 13 bits.
◼ Actúa como puntero de la siguiente instrucción a ser ejecutada
◼ La memoria de programa se divide en páginas de 2K palabras (aprox.).
◼ Cuando las Instrucciones son secuenciales, el PC pasa de una página a otra sin necesidad
de realizar la instrucción de salto.
◼ Las instrucciones de salto y llamado a Subprogramas permiten cargar solo 11 bits en el PC
( 211 =2K aprox.).
◼ Para Saltos y Llamadas entre páginas los 2 bits más altos del PC deben llenarse. Esto se
realiza escribiendo en el registro PCLATH (registro de memoria de datos).

28
Memoria de Programa
PC y PCLATH

◼ El PC se divide en dos registros: PCH (parte alta) no


accesible pero indirectamente se puede escribir a
través del registro PCLATH y PCL (parte baja) y es
un registro de la memoria de Datos.
◼ El PCLATH es un registro que complementa al PCL y
puede aportar 5 o 2 bits al mismo para que opere.
◼ Saltos o llamados a Subprogramas cargan en el PC
11 bits y PCLATH aportará con los bits que le falten
para llegar a los 13 bits.
29
Memoria de Programa
VECTOR DE RESET
◼ El vector de RESET está siempre en la posición 0000h de la memoria de programa.

◼ Cualquier reset (interno o externo) provocará que el PC pase a tener el valor 0000h y
que por tanto el microcontrolador pase a ejecutar la instrucción situada en dicha
posición.

◼ El RESET también limpia el contenido del registro PCLATH.

30
Memoria de Programa
VECTOR DE INTERRUPCION
◼ El vector INTERRUPCION está siempre en la posición 0004h de la memoria de
programa.

◼ Cualquier interrupción en un microcontrolador hará que su PC pase a tener el valor


0004h y que por tanto el microcontrolador pase a ejecutar la instrucción situada en
dicha posición.

◼ El salto a la rutina de interrupción no modifica el contenido del PCLATH, por lo que


cualquier modificación que se realice del PC en la rutina de interrupción debe
realizarse con cuidado de lo que se tiene cargado en el PCLATH

31
Memoria de Programa
STACK (PILA DEL PC )
◼ Almacena las direcciones del PC a donde debe retornar el
programa cuando se finaliza una llamada a una subrutina o
cuando se finaliza la ejecución de una rutina de interrupción.
◼ El PIC16F870 tiene una pila de 8 niveles x 13 bits, por tanto,
permite almacenar como máximo 8 saltos a subrutinas (CALLs)
o ejecuciones de rutinas de interrupción.
◼ La memoria para la pila (stack) no forma parte de la memoria
de programa ni de la memoria de datos que tiene el
microcontrolador.
◼ La pila (stack) es gestionada por el hardware.

32
Memoria de Datos
◼ Esta memoria almacena los datos que se manejan en un programa. Estos datos
varían continuamente, por lo que esta memoria debe ser de lectura y escritura.
◼ Se utiliza memoria denominada RAM que es de tipo volátil, con lo cual los datos se
borran en caso de que desaparezca la alimentación, aunque algunos micros llevan
memoria EEPROM para evitar la pérdida de los datos en caso de corte en el
suministro de corriente.
◼ Los tamaños son mucho más reducidos que la memoria de programa; por ejemplo
el PIC16F870 dispone de 128 bytes de datos SRAM y 64 bytes de EEPROM.

33
Memoria de Datos
◼ La memoria de datos está distribuida en 4 posibles bancos de 128 bytes cada uno.
Por tanto, la máxima cantidad de memoria disponible en los PIC16XXXX es de 512
bytes. Sin embargo, no están disponibles todas las posiciones de memoria en todos
los bancos. Por ejemplo, un PIC16F870 solo tiene disponibles 128 posiciones de
memoria de datos.

La memoria de datos se organiza en bancos


de 128 bytes, sólo se pueden incluir 7 bits
en la codificación. 𝟐𝟕 =128 bytes y cuenta
con 2 bits de Direccionamiento

◼ A cada dirección de memoria se le denomina Registro

34
Memoria de Datos
◼ Se distinguen dos tipos de registro:
➢ Registros de funciones especiales SFR. Son los primeros registros (posiciones más bajas
de cada banco). Cada uno de ellos cumple un propósito especial en el control del PIC.
➢ Registros de propósito general GPR. Se pueden usar para guardar datos temporales y
bloques de operaciones. El PIC16F870 dispone de 128 GPR.

◼ Cuenta con cuatro bancos de memoria: Bancos 0, 1, 2 y 3.


➢ Los SFR aparecen de la dirección 00h a 1Fh del Banco 0, de 80h a 9Fh del Banco 1, de
100h a 10Fh en el Banco 2 y de 180h a 18Fh del Banco 3.
➢ Algunos de los registros se encuentran replicados en dos o más bancos, lo que permite
tener mayor accesibilidad a los registros más utilizados y así reducir código de programa.
➢ Los GPR ocupan 128 posiciones de memoria. A los cuales se puede acceder, mediante un
direccionamiento Directo o Indirecto. 35
Memoria de Datos
➢ Algunas posiciones de los Bancos 1 a 3 se mapean sobre el Banco 0 y 1, es decir
cuando se apunta a uno de los registros generales mapeados de los bancos 1 a 3 se
accede al mismo del banco 0 o 1 correspondiente .
➢ Existen zonas de memoria no empleadas que devuelven ‘0’ en caso de lectura

36
SFR

Mapa de
Memoria de
Datos

GPR

37
Direccionamiento de la Memoria de
Datos
◼ Existen 2 modos de direccionamiento para acceder a cualquiera de las posiciones de la
memoria de datos:
*Direccionamiento directo * Direccionamiento indirecto

Direccionamiento
se necesitan 9 bits

Dir. Directo: 7 bits de


la instrucción y los
otros 2 del Registro Dir. Indirecto: 8 bits del
Status (RP1 y RP0) Registro FSR y el otro bit es del
Registro Status (IRP) 38
Direccionamiento de la Memoria de
Datos
◼ Direccionamiento directo: La posición de memoria con la que se trabaja viene definida en
el código de la instrucción del programa y por los Register Pointer RP1 y RP0.

◼ Direccionamiento indirecto: La posición de memoria con la que se trabaja viene definida


por el contenido del File Select Register FSR y por el Indirect Register Pointer IRP.

◼ El FSR (Posición 04h, 84h, 104h ó 184h) actúa como puntero de la posición de memoria
con la que se pretende operar.

39
Direccionamiento Directo
➢ Se Lee el Registro contenido en el código
de la instrucción.
➢ Para la selección del banco activo se usan
los bits RP1 (Bit 6 de Registro Status) y
RP0 (Bit 5 de Registro Status)

40
Registros SFR
◼ Los Registros de Funciones Especiales (SFR) son registros usados por el microcontrolador
y los periféricos para controlar el funcionamiento deseado del dispositivo.

◼ Los Registros de Funciones Especiales se clasifican en dos grupos


▪ Orientadas al Núcleo o CPU
▪ Orientadas a los Periféricos

◼ A continuación se detalla la Lista de SFR que posee el microcontrolador PIC16F870

41
42
43
44
Registro: STATUS

◼ El registro Status es el más usado de la memoria de Datos.


◼ Ocupa la dirección 03H en los bancos de la memoria de datos RAM.
BANCO 0 (03H: 000000011)
BANCO 1 (83H: 010000011)
BANCO 2 (103H: 100000011)
BANCO 3 (183H: 110000011)
◼ Sus bits tienen tres funciones distintas:
▪ Avisar el estado de la ALU (C, DC, Z)
▪ Indicar el estado de reset (TO, PD)
▪ Seleccionar el banco de memoria
45
Registro: STATUS

STATUS

◼ C: Acarreo. Se pone en 1 si hay carry en el octavo bit


de una operación realizada en la ALU
◼ DC: Acarreo. Se pone en 1 si hay carry en el cuarto bit
de una operación realizada en la ALU
◼ Z: Cero. Se pone en 1 si el resultado de una operación
anterior es cero
◼ PD: (Power down). Se pone automáticamente en 1L al
conectar el PIC a la alimentación, se pone en 0L al usar
instrucción SLEEP
46
Registro: STATUS

STATUS

◼ TO: (Time out). Está en 1L al conectar el PIC a la


alimentación, y se pone en 0L cuando el Watchdog se
desborda.
◼ RP1 y RP0: Se usan para seleccionar el banco de memoria
de datos.
◼ IRP: Selecciona el banco de direccionamiento indirecto.

47
Programación de PICs
◼ Herramientas para programar un PIC

◼ Un PIC puede soportar aproximadamente 1 millón de


programaciones 48
Proceso para programar PIC
Programa en C (.C) Programa en Objeto: Lenguaje Lenguaje que
MikroC Assembler de Máquina Entiende el
Programa en Basic (.BAS) (.ASM) (.OBJ) µC (.HEX)
PBASIC MPLAB

Programa Programa Lenguaje de Programa


Lenguaje Compilador Lenguaje Ensamblador Máquina Enlazador Lenguaje de Cargador
Alto Nivel Ensamblador Objeto Máquina

Convierte el Convierte el Añade Librerías


Lenguaje Alto Nivel Lenguaje de
a Lenguaje Assembler a Rutinas
Ensamblador Objeto Lenguaje de
Máquina

49
Lenguajes de Programación

◼ Código de Máquina
◼ Lenguaje de Bajo Nivel (Assembler o
ensamblador)
◼ Lenguaje de Alto Nivel

50
Lenguajes de programación
Código Máquina
◼ Posee el código de ejecución
directamente,
◼ Contiene unos o ceros,
◼ Contiene palabras de tamaño
de 12, 14, 16 bits
◼ Cada instrucción reconocida
por el microcontrolador son
llamadas en conjunto como set
de instrucciones.
Lenguajes de programación
Lenguaje Assembler o
Ensamblador
◼ Considerado el primer lenguaje de
programación.
◼ Consiste en mnemónicos
◼ Facilita la programación en
comparación al lenguaje de
máquina
◼ Es necesario que el programador
conozca el set de instrucciones.
Lenguajes de programación
Alto Nivel
◼ Fácil de entender y escribir.
◼ No es necesario que el programador
esté al tanto del set de instrucciones
del microcontrolador
◼ La implementación es muy rápida
pero no se tiene completo control de
lo que pasa con el microcontrolador
◼ No optimiza memoria
Lenguajes de programación

Lenguaje de
Alto Nivel

Lenguaje
Assembler
equivalencia
Ejemplo en C
◼ Realizar un retardo ó delay de 500 msegundos en MikroC con un PIC
16F870 a una frecuencia de 4 MHz y visualizarlo en un led parpadeante

void main() {
TRISB=0XFE; //Defino el pin RB0 como salida, el resto como entradas
PORTB=0X00; //Escribo 00000000 en pórtico B
while(1){ //Lazo
PORTB.F0=0; //Envió 0L al bit 0 pórtico B
delay_ms(500); // retardo 500ms
RB0_bit=1; //Envió 1L al bit 0 pórtico B
delay_ms(500); // retardo 500ms
}
}

55
Lenguaje Assembler
GENERALIDADES
◼ Lenguaje de programación de bajo nivel
◼ Representación más directa a código de máquina
◼ Correspondencia uno a uno con código de máquina
◼ Lenguaje legible para el programador
◼ Recibe la denominación de código fuente y posee
una extensión *.ASM
◼ Específico para una arquitectura de computadora en
particular
Lenguaje Assembler
Por qué Lenguaje Assembler?
◼ Ejecución rápida de los programas por la
correspondencia uno a uno.
◼ Tamaño del programa pequeño
◼ Optimización de memoria
◼ Acceso directo al hardware
◼ Comprensión de cómo la máquina funciona
◼ Mediante programa ensamblador puede ser
convertido directamente a código de máquina
Set de Instrucciones
El set de instrucciones de un microcontrolador es el conjunto de entradas
binarias que producen acciones definidas durante un ciclo de instrucción (ó 2).
Un set de instrucciones es para el microcontrolador lo mismo que una tabla de
verdad es para una compuerta lógica, etc.
◼ Bit
◼ Unidad básica de información.
◼ El valor de un bit puede ser 0 y 1.
◼ Byte
◼ Un byte consiste de 8 bits colocados uno junto a otro
◼ El bit del extremo derecho de un byte tiene la menor ponderación (LSB)
◼ Máximo 256 posibles combinaciones
58
Set de instrucciones

◼ Todas las instrucciones se ejecutan en un ciclo de


instrucción, a menos que un condicional específico se
ejecute.
◼ Un ciclo de instrucción consiste de 4 periodos de
oscilación. Así por ejemplo, para una frecuencia de
oscilación de 4 MHz, el tiempo normal por instrucción
es de 1 µs.
◼ El registro de trabajo W (Work) es el registro
principal y participa en la mayoría de las
instrucciones. Se localiza dentro de la CPU
59
Set de instrucciones
◼ El set de instrucciones está agrupado en tres categorías
básicas:
◼ Operaciones orientadas a byte

◼ f: especifica el registro de la memoria de datos (file register) que es usado para la


instrucción.
◼ d: especifica el destino del resultado de la operación. Si d =0, el resultado se
coloca en el registro de trabajo W. Si d =1 (por defecto), el resultado se coloca en
el registro de datos especificado en la instrucción f.

◼ Operaciones orientadas a bit


◼ b: especifica el número del bit afectado por la operación (del 0 al 7) .
◼ f: representa la dirección del registro de datos en la que el bit es colocado.
◼ Operaciones literales y de control
◼ k: Representa una constante o valor literal (8 u 11 bits) 60
Set de instrucciones
Formato de Instrucción

Cada instrucción es una


palabra de 14 bits, dividida en
OPCODE (código de
operación: especifica el tipo
de instrucción), y uno o más
operandos

61
Set de instrucciones
◼ Orientadas al byte
Mnemónico/Operandos Descripción Ciclos
ADDWF f, d Add W and f 1
ANDWF f, d AND W with f 1
CLRF f Clear f 1
CLRW _ Clear W 1
COMF f, d Complement f 1
DECF f, d Decrement f 1
DECFSZ f, d Decrement f, Skip if 0 1
INCF f, d Increment f 1
INCFSZ f, d Increment f, Skip if 0 1
IORWF f, d Inclusive OR W with f 1
MOVF f, d Move f 1
MOVWF f Move W to f 1
NOP _ No Operation 1
RLF f, d Rotate Left f through Carry 1
RRF f, d Rotate Right f through Carry 1
SUBWF f, d Substract W from f 1
SWAPF f, d Swap nibbles in f 1
XORWF f, d Exclusive OR W with f 1

62
Set de instrucciones
◼ Orientadas al bit

Mnemónico/Operandos Descripción Ciclos

BCF f, b Bit Clear f 1


BSF f, b Bit Set f 1
BTFSC f, b Bit Test f, Skip if Clear 1
BTFSS f, b Bit test f, Skip if Set 1

63
Set de instrucciones
◼ Orientados a operaciones literales y de control
Mnemónico/Operandos Descripción Ciclos
ADDLW k Add literal and W 1
ANDLW k AND literal with W 1
CALL k Call subroutine 2
CLRWDT _ Clear Watchdog Timer 1
GOTO k Go to address 2
IORLW k Inclusive OR literal with W 1
MOVLW k Move literal to W 1
RETFIE _ Return from interrupt 2
RETLW k Return with Literal in W 2
RETURN _ Return from Subroutine 2
SLEEP _ Go into Standby mode 1
SUBLW k Subtract W from literal 1
XORLW k Exclusive OR literal with W 1

64
Formato de Instrucción de Programa
◼ El código fuente está compuesto por una sucesión de instrucciones de
programa.
◼ Cada línea de programa suele estar compuesta por 4 campos o columnas
separados por uno o más espacios o tabulaciones.
◼ Estos campos son:

Etiqueta Código de Operando Comentario


Operación
o Mnemónico
Lectura movf portA,0 ;mueve cont de portA a W
movwf reg1 ; escribe en reg1 el
contenido de W
addwf 0x25,1 ; Suma el registro W y el
registro 25h
65
Formato de Instrucción de Programa
◼ El campo del comentario ó de etiquetas es opcional. El programador
asignará una etiqueta a una línea de instrucción ó agregará un
comentario según su conveniencia.
Delimitadores:
◼ Los campos van separados sólo con espacios y/o tabulaciones. Nunca
agregar otros caracteres.
◼ No utilice espacios extra, particularmente después de comas que
separan operandos. Ej. movlw 0x25,0.
◼ No use caracteres delimitadores (espacios y tabulaciones) en
nombres ó etiquetas.

66
Formato de Instrucción de Programa
Etiquetas
◼ La etiqueta se ubica en la primera columna en una línea en Lenguaje
Assembler (campo opcional).
◼ Las etiquetas son expresiones escogidas por el usuario, para
identificar a una determinada instrucción del programa
◼ Las etiquetas son asignadas con la dirección de memoria
correspondiente a dicha instrucción.
◼ Las etiquetas pueden volver a usarse en otro lugar pero como
operando de una instrucción.
◼ Se usan frecuentemente en las instrucciones de salto.

67
Formato de Instrucción de Programa
◼ No pueden usarse como nombres de etiquetas las palabras ya
reservadas por Assembler (ORG, EQU) ó nombres de instrucciones
(movf, incf, nop). Por ej.:

Leer movf portA,0


:
:
goto Leer

68
Formato de Instrucción de Programa
Códigos de Operación (Mnemónicos)
◼ La segunda columna en una línea de lenguaje Assembler suele ser el
campo del código de operación (mnemónicos), que son grupos de
caracteres que simbolizan la tarea a realizar por el microcontrolador.
◼ Los mnemónicos se corresponden con las iniciales del nombre de la
instrucción en inglés, de forma que “recuerdan” la operación que
realiza la instrucción, lo que facilita su operación.
◼ La tarea principal del Ensamblador es la traducción de los códigos de
operación (mnemónicos) en sus equivalentes binarios.

69
Formato de Instrucción de Programa
Directivas
◼ Algunas instrucciones del Lenguaje Assembler no se traducen
directamente a instrucciones del lenguaje máquina. Éstas
instrucciones se denominan directivas.
◼ Las directivas se utilizan como comandos escritos en el código fuente
para realizar un control directo y/ó ahorrar tiempo a la hora de
ensamblar.
◼ Para usar estas directivas ó pseudo-operandos, el programador las
debe colocar en el campo de código de operaciones, y si lo requiere
la directiva, una dirección ó dato en el campo de dirección.

70
Formato de Instrucción de Programa
◼ Las directivas de uso frecuente son instrucciones para el
compilador.
END
◼ Es la única directiva obligatoria. Indica al ensamblador dónde
finaliza el proceso del programa. Debe colocarse en la última línea
del programa.
LIST
◼ Indica el tipo de microcontrolador utilizado.
LIST P=16F870

71
Formato de Instrucción de Programa
INCLUDE
◼ Incluye en el programa un fichero (archivo con código fuente) donde se definen las
etiquetas con las que se nombra a los diferentes registros y sus bits.
#INCLUDE <[Link]> o #INCLUDE “[Link]”
EQU
◼ Define una constante de ensamble con su dirección de memoria
<etiqueta> EQU <expresión>
◼ El valor <expresión> es asignado a <etiqueta>. Estas directivas se suelen colocar al
principio del programa y habitualmente se usan para definir constantes y direcciones
de memoria.
VARIABLE1 EQU 0x20
72
Formato de Instrucción de Programa
ORG
◼ Las instrucciones del código fuente que siguen a esta directiva inician a partir de la
posición indicada por <expresión>.
[<etiqueta>] ORG <expresión>
ORG 0x00
◼ Usualmente se la utiliza para: reset, programa de servicio de interrupción. Por ej.:
Reset ORG 0x00
GOTO Inicio
ORG 0x04 ;vector de interrupción
GOTO interrupción
ORG 0x05
Inicio movf portA,0 ;aquí comienza el programa (lee portA) 73
Formato de Instrucción de Programa
Operandos y Direcciones
◼ Los ensambladores permiten elegir con libertad el tipo de elemento a
colocar en el campo de operando o dirección (registro involucrado).
Formato de Número

◼ Decimal ◼ Binario
D’120’ B’01001110’
.120 b’01001110’
◼ Hexadecimal ◼ ASCII
H’78’ A’hola 123’
0x78 ‘hola 123’

74
Ejercicios
◼ Escribir un programa que copie el contenido del registro 0x20 a 0x30
Inicio

M (0x20) W movf 0x20,0

movwf 0x30
W M(0x30)

código fuente
Fin

75
Ejercicios
◼ Escribir un programa que copie el contenido del registro 0x20 a 0x30

LIST P=16F870 ;Avisa al ensamblador que pic se


va a usar
#INCLUDE “[Link]”
ORG 0X00 ;Indica que desde aquí inicia
programa
BCF STATUS,RP1 ;Escribir 0 en bit RP1
BCF 0X03,RP0 ;Escribir 0 en bit RP0 Banco 0

MOVF 0X20,W ;Mover el contenido de ORIGEN


(0x20) al registro W
MOVWF 0X30 ;Mover el contenido del registro
W al registro DESTINO (0x30)
END

76
Ejercicios
◼ Escribir un programa que copie el contenido del registro 0x20 a 0x30

LIST P=16F870 ;Avisa al ensamblador que pic se


va a usar
#INCLUDE “[Link]” ; incluye librerias del PIC
ORIGEN EQU 0X20
DESTINO EQU 0X30
ORG 0X00
BCF STATUS,RP1 ;Escribir 0 en bit RP1
Banco 0
BCF 0X03,RP0 ;Escribir 0 en bit RP0
MOVF ORIGEN,W ;Mover el contenido de ORIGEN
(0x20) al registro W
MOVWF DESTINO ;Mover el contenido del registro
W al registro DESTINO (0x30)
END

77
Ejercicios
◼ Escribir un programa que copie el contenido del registro 0x20 a 0xA0
Inicio

M (0x20) W movf 0x20,0

movwf 0xA0
W M(0xA0)

código fuente
Fin

78
Ejercicios
◼ Escribir un programa que copie el contenido del registro 0x20 a 0xA0
LIST P=16F870 ;Avisa al ensamblador que pic se
va a usar
#INCLUDE “[Link]”
ORG 0X00 ;Indica que desde aquí inicia
programa
BCF STATUS,RP1 ;Escribir 0 en bit RP1
Banco 0
BCF 0X03,RP0 ;Escribir 0 en bit RP0
MOVF 0X20,W ;Mover el contenido de
0x20 al registro W
BCF STATUS,RP1 ;Escribir 0 en bit RP1
Banco 1
BSF STATUS,RP0 ;Escribir 1 en bit RP0
MOVWF 0XA0 ;Mover el contenido del registro
W al registro 0xA0
END
79
Ejercicios
◼ Sumar el contenido de 2 posiciones de memoria 0x2C + 0x2D y
poner el resultado en 0x2E
Inicio

M(0x2C) W movf 0x2C,0

W+M(0x2D) W addwf 0x2D,0

W M(0x2E) movwf 0x2E

Fin código fuente

PIC 80
Ejercicios
◼ Sumar el contenido de 2 posiciones de memoria 0x2C + 0x2D y
poner el resultado en 0x2E
LIST P=16F870 ;Avisa al ensamblador que pic se va a usar
#INCLUDE “[Link]” ; incluye librerías del PIC
ORG 0X00
BCF STATUS,RP1 ;Escribir 0 en bit RP1
BCF 0X03,RP0 ;Escribir 0 en bit RP0
MOVF 0X2C,W ;Lee el contenido de registro 0x2C y lo
escribe en registro W
ADDWF 0X2D,W Suma el contenido del registro 0x2D a W y
lo guarda en el registro W
MOVWF 0X2E ;Escribe en registro 0x2E el contenido de W
END

81
Ejercicios
◼ Sumar el contenido de 2 posiciones de memoria 0x2C + 0x2D y
poner el resultado en 0x2E
LIST P=16F870 ;Avisa al ensamblador que pic se va a usar
#INCLUDE “[Link]” ; incluye librerías del PIC
ORG 0X00
BCF STATUS,RP1 ;Escribir 0 en bit RP1
BCF 0X03,RP0 ;Escribir 0 en bit RP0
MOVF 0X2C,W ;Lee el contenido de registro 0x2C y lo
escribe en registro W
ADDWF 0X2D,f Suma el contenido del registro 0x2D a W y
lo guarda en el registro 0x2D
MOVF 0X2D,W ;Lee el contenido de registro 0x2D y lo
escribe en registro W
MOVWF 0X2E ;Escribe en registro 0x2E el contenido de W
END
82

También podría gustarte