Sie sind auf Seite 1von 66

MICROCONTROLADORES

Unidad II.

PROGRAMACIÓN DEL
MICROCONTROLADOR EN LENGUAJE
ENSAMBLADOR.
ESTRUCTURA DE DATOS
BIT: Unidad mínima de
información
x

NIBBLE: Grupo de 4 bits x x x x

x x x x x x x x
BYTE: Grupo de 8 bits

BYTE ALTO BYTE BAJO


Word: Grupo de 2 BYTES

(Bit más significativo) MSB LSB (Bit menos significativo)


x x x x x x x x
7 0

Rango de los microcontroladores de 8 Bits

28 = 256 posibles valores para operaciones

Repaso…. 2
ALGUNOS TIPS PARA REPASAR Y RECORDAR

Suma Binaria Aritmética: (add)


0+0 =0 0+ 1+=1
1 +0 =1 1 + 1 = 0 y llevo acarreo (Carry) para
la siguiente cifra MSB
Suma Binaria Lógica: (ior)
0+0=0 0+1=1
1+0=1 1+1=1
Resta Binaria Aritmética: (sub)
0–0=0 1–0=1
1–1=0 0 – 1 = 10 y tomo prestado (Borrow) de
la cifra MSB inmediata
OR Exclusiva: (xor)
Bits iguales producen como resultado un cero (A = B = 0)
Bits diferentes producen como resultado un uno (A ≠ B = 1)

Repaso…. 3
SISTEMAS DE NUMERACIÓN
Decimal Hexadecimal Binario
(Formato 4 bits BCD)
0 0 0000
1 1 0001
2 2 0010
3 3 0011
4 4 0100
5 5 0101
6 6 0110
7 7 0111
8 8 1000
9 9 1001
10 A 1010
11 B 1011
12 C 1100
13 D 1101
14 E 1110
15 F 1111

Repaso…. 4
FORMATO DE SISTEMAS DE NUMERACIÓN
ADMITIDOS POR EL MICROCONTROLADOR
Tipo de Sistema Formato Sigla Significado
Registro. Puede ser
Decimal D’126’ cualquiera que el
f (File)
.126 programador desee dentro
del rango permitido.

Binario B’10011011’ k Constante. Valor fijo.


Registro de trabajo
w (work)
Hexadecimal H’AE’ principal.
AEH Destino del Registro.
0xAE Si d vale 1, el resultado
se guardará en el Registro
que el programador haya
d (destiny)
escogido.
Si d vale 0, el resultado
se guardará en el Registro
de trabajo principal "w"

Repaso…. 5
REGISTROS Y BANCOS

Repaso…. 6
MEMORIA RAM
DE REGISTROS

Repaso…. 7
2.1. PROGRAMACIÓN EN LENGUAJE ENSAMBLADOR.

El lenguaje ensamblador, o assembler (en inglés assembly


language y la abreviación asm), es un lenguaje de programación de
bajo nivel. Consiste en un conjunto de mnemónicos que
representan instrucciones básicas para las computadoras,
microprocesadores, microcontroladores y otros circuitos
integrados programables.

8
2.1.1. MODOS DE DIRECCIONAMIENTO.

Los modos de direccionamiento tratan sobre la forma de mover los datos de


unas posiciones de memoria a otras.

Existen cuatro modos de direccionamiento:


Inherente, Literal o inmediato, Directo e Indirecto.
a) Inherente

En el direccionamiento inherente la instrucción no tiene operando, o éste


viene especificado en el propio código de operación. Ejemplo:
◦ RESET (los operandos son todos los registros)
◦ NOP (No realiza operación, no hay operando)
b) Literal o Inmediato

El dato manipulado por la instrucción se codifica con la propia instrucción. En


este caso, el dato en cuestión se denomina literal. Ejemplo:
◦ GOTO 0x100 Salto incondicional a la dirección 100h
◦ MOVLW 0x23 Cargar en el Registro W el valor 23h

9
2.1.1. MODOS DE DIRECCIONAMIENTO.

c) Directo
La memoria interna se direcciona de forma directa por medio de los
8 bits "f" contenidos en las instrucciones que operan sobre los
registros. De esta manera se puede direccionar cualquier posición
desde la 00 a la FF.
En los microcontroladores que tengan más de un banco, antes de
acceder a alguna variable que se encuentre en la zona de los bancos
de registros, el programador deberá asegurarse de haber
programado los bits de selección de banco en el registro OPTION.
Este es el modo más utilizado, ya que, la memoria RAM está
dividida en registros específicos y en un conjunto de registros de
propósito general. Este modo consiste en codificar el nombre del
registro en cuestión directamente en la instrucción. Ejemplo:
Operando de tipo byte:
◦ MOVWF 0x0C Carga en el Registro 0Ch el valor de W

10
2.1.1. MODOS DE DIRECCIONAMIENTO.

Directo, bit a bit

Mediante este direccionamiento se manipula un bit individual en


cualquier registro. Este modo de direccionamiento no se utiliza nunca
solo, sino que siempre va emparejado con el modo de direccionamiento
directo. Ejemplo:
◦ BCF 0x0D,5 Pone a cero el bit número 5 del registro 0x0D
◦ BSF 0x0D,6 Pone a uno el bit número 6 del registro 0x0D

d) Indirecto
Utiliza al registro INDF (0x01) para indicar que se trata de un acceso
indirecto y al registro FSR (0x04) como apuntador.
Es el registro para direccionamiento indirecto de datos, a pesar de no
ser un registro disponible físicamente; utiliza el contenido del registro
FSR, para seleccionar indirectamente la memoria de datos o RAM. Si la
dirección a la que apunta el FSR se copia en INDF, una instrucción
aplicada a INDF, determinará lo que se debe hacer con el registro al que
apunta.

11
2.1.1. MODOS DE DIRECCIONAMIENTO.

Por ejemplo, si la localidad 0x0C tiene al número 0x03 y


la localidad 0x0D contiene al número 0x0A. Y además si
FSR contiene el número 0x0C. La instrucción movf
INDF, 0, pondrá 0x03 en W. Si se incrementa FSR y
se repite la instrucción, ahora pondrá 0x0A en W.

12
2.1.1. MODOS DE DIRECCIONAMIENTO.

ACCEDIENDO A LOS BANCOS DE REGISTROS

13
2.1.2. CONJUNTO DE INSTRUCCIONES.

El PIC16F84A posee 35 instrucciones, con instrucciones de 14 bits


de ancho. Estos 14 bits están divididos en Código de operación
(OpCode) los cuales especifican el tipo de instrucción y uno o mas
operandos los cuales especifican la operación de la instrucción.
Las instrucciones se dividen en: orientadas a byte, orientadas a
bit y operaciones de control y literal.
Todas las instrucciones ocupan una palabra y todas consumen un
ciclo, excepto las de salto o bifurcación que usan dos.
La velocidad máxima de funcionamiento 20MHz (200 ns x
instrucción). Típicamente a 4MHz (1us x instrucción), con 1024
palabras (14 bits) de memoria de programa FLASH.

14
2.1.2. CONJUNTO DE INSTRUCCIONES.

Para las instrucciones orientadas a byte:


‘f’ representa el registro fuente y ‘d’ representa el registro destino.
El registro fuente especifica donde se colocara el resultado de la
operación.
Si ‘d’ es cero, el resultado se colocará en el Registro W.
Si ‘d’ es uno, el resultado se colocará en el Registro especificado por
la instrucción.

15
2.1.2. CONJUNTO DE INSTRUCCIONES.

Para las instrucciones orientadas a bit:


‘b’ representa el bit fuente el cual selección el numero del bit
afectado por la operación. y ‘f’ representa la dirección el cual el bit
es localizado.

16
2.1.2. CONJUNTO DE INSTRUCCIONES.

Para las operaciones de control y literal:


‘k’ representa una constante de 8 u 11 bits o el valor literal.

17
2.1.2. CONJUNTO DE INSTRUCCIONES.

INSTRUCCIONES DE CARGA
Las instrucciones de trnasferencia de datos son típicas de todos los
procesadores y su misión es transferir el contenido de un registro
fuente (F) a un registro destino (d) o bien cargar el destino con una
constante. En los microcontroladores PIC todos los datos residen en
posiciones de la memoria de datos y en el registro de trabajo W.

clrw El contenido del registro W se borra y el flag Z se activa a


“1”.
◦ Ejemplo: clrw
Antes de la instrucción: W=? yZ=?
Después de la instrucción: W = 0x00 y Z = 1

18
2.1.2. CONJUNTO DE INSTRUCCIONES.

clrf f El contenido del registro “f” se borra y el flag Z se activa a


“1”.
◦ Ejemplo: clrf FlagReg
Antes de la instrucción: FlagReg = ? y Z = ?
Después de la instrucción: FlagReg = 0x00 y Z = 1

movlw k El registro W se carga con el valor de los 8 bits de la


constante “k”.

◦ Ejemplo: movlw 0x5A


Antes de la instrucción: W=?
Después de la instrucción: W = 0x5A

19
2.1.2. CONJUNTO DE INSTRUCCIONES.

movf f,d El contenido del registro “f” se carga en el registro


destino dependiendo del valor de ‘d’. Almacena el resultado en W si
‘d’=0 y en el registro ‘f’ si ‘d’=1.
◦ Ejemplo: movf PORTA,0
Antes de la instrucción: (PORTA) = 0x1A
Después de la instrucción: (PORTA) = 0x1A y W = 0x1A

y (W) = 0x4F
movwf f Carga el contenido del registro W al registro ‘f’.

◦ Ejemplo: movwf PORTB


Antes de la instrucción: (PORTB) = ? y (W) = 0x4F
Después de la instrucción: (PORTB) = 0x4F y (W) = 0x4F

20
2.1.2. CONJUNTO DE INSTRUCCIONES.

INSTRUCCIONES DE BIT
Estas instrucciones ponen a nivel lógico “0” o “1” un determinado bit
de un registro de la memoria de datos.
bcf f,b Pone a cero el bit ‘b’ del registro f
◦ Ejemplo: bcf FlagReg,7
Antes de la instrucción: (FlagReg) = b’1100 0111’
Después de la instrucción: (FlagReg) = b’0100 0111’

bsf f,b Pone a uno el bit ‘b’ del registro f


◦ Ejemplo: bcf FlagReg,7
Antes de la instrucción: (FlagReg) = b’0100 0111’
Después de la instrucción: (FlagReg) = b’1100 0111’

21
2.1.2. CONJUNTO DE INSTRUCCIONES.

INSTRUCCIÓN “GOTO K”
Es un salto incondicional que produce un salto a la dirección del
programa indicado por “k”. La constante literal “k” es la dirección de
destino del salto, es decir, la nueva dirección de memoria de
programa a partir de la cual comenzarán a leerse las instrucciones
después de ejecutar la instrucción goto.

◦ Ejemplo: goto Bucle


Antes de la instrucción: (PC) = ?
Después de la instrucción: (PC) = Dirección apuntada por la etiqueta Bucle

22
Diferencias y uso de “call” y “goto”
Ambas instrucciones rompen con la secuencia normal del programa, al
alterar el contenido del contador de programa (PC).
“goto” carga en el PC, la dirección de la nueva instrucción. “call” antes
de cargar el PC con la dirección de la instrucción a saltar, salva la
dirección de donde parte, guardándola en la cima de pila (stack), el valor
actual del PC. Luego de ejecutar la subrutina, se saca del stack la
dirección de donde partió.
Si no están en la subrutina llamada por “call”, las instrucciones “return”
o “retlw k”, se puede presentar un error de lógica en la ejecución del
programa, algo similar a no dejar migajas de pan para recordar el camino
de retorno.
Nota: Recuerde que los PIC’s poseen un valor limitado de pila (stack). En el PIC 16F84, este es de
8. Esto significa que en un programa no puede haber más de 8 subrutinas anidadas. (Subrutinas
dentro de subrutinas).

23
2.1.2.1. INSTRUCCIONES ARITMÉTICAS.

El PIC16F84A realiza las siguientes operaciones aritméticas de


suma, resta, incremento y decremento de un registro.
La suma se realiza en aritmética binaria pura sin signo y afecta las
banderas del STATUS:
El bit Z (Cero) se pone en “1” si el resultado de la operación es cero
y se pone Z en ”0” si el resultado tiene cualquier otro valor.
Si hay un acarreo del bit 7, el bit C (Carry) se activa a “1”, en caso
contrario resulta C=0.
Si hay un acarreo del bit 3 al 4, el bit DC (Digit Carry) se pone a “1”,
en caso contrario se pone a “0”.

24
2.1.2.1. INSTRUCCIONES ARITMÉTICAS.

Ejemplos:

163 1010 0011 A3


+ + +
79 0100 1111 4F C DC Z

209 1101 0001 D1


+ + +
56 0011 1000 38 C DC Z

25
2.1.2.1. INSTRUCCIONES ARITMÉTICAS.

El PIC16F84A posee dos instrucciones de suma:


addlw k Suma el contenido del registro W con la literal o
constante “k”. Almacena el resultado en W. Si se produce acarreo
el flag C se pone a “1”.
◦ Ejemplo: addlw 0x4F
Antes de la instrucción: W = 0xA3
Después de la instrucción: W = 0xF2 y C = 0

addwf f,d Suma el contenido del registro W al contenido del


registro “f”. Almacena el resultado en W si ‘d’=0 y el registro ‘f’ si
‘d’=1. Si se produce acarreo el flag C se pone a “1”.
◦ Ejemplo: addwf PORTA,0
Antes de la instrucción: W = 0x17 (PORTA = 0xC2)
Después de la instrucción: W = 0xD9, PORTA = 0xC2 y C = 0

26
2.1.2.1. INSTRUCCIONES ARITMÉTICAS.

El PIC16F84A dispone de dos instrucciones de resta:


sublw k Resta (en complemento a 2) el contenido de la
constante ‘k’ menos el contenido del registro W y almacena el
resultado en W.
◦ Ejemplo: sublw 0x03
Antes de la instrucción: W = 0x01
Después de la instrucción: W = 0x02, C = 1 y Z = 0.

subwf f,d Resta (en complemento a 2) el contenido del registro


‘f’ menos el contenido del registro W. Almacena el resultado en W
si ‘d’=0 y en el registro ‘f’ si ‘d’=1.
◦ Ejemplo: subwf Reg1,1
Antes de la instrucción: Reg1 = 0x02, W = 0x02
Después de la instrucción: Reg1 = 0x00, W = 0x02, C = 1 y Z = 1.

27
2.1.2.1. INSTRUCCIONES ARITMÉTICAS.

El PIC16F84A posee otras instrucciones aritméticas como


Incremento y Decremento:
decf f,d El contenido del registro ‘f’ se decrementa en una
unidad. Almacena el resultado en W si ‘d’=0 y en el registro ‘f’ si
‘d’=1.
◦ Ejemplo: decf Contador,1
Antes de la instrucción: Contador = 0x01
Después de la instrucción: Contador = 0x00 y Z = 1.

incf f,d El contenido del registro ‘f’ se incrementa en una


unidad. Almacena el resultado en W si ‘d’=0 y en el registro ‘f’ si
‘d’=1.
◦ Ejemplo: incf Contador,0
Antes de la instrucción: Contador = 0x01 W = 0x01
Después de la instrucción: Contador = 0x01, W = 0x02 y Z = 0.

28
2.1.2.2. INSTRUCCIONES LÓGICAS.

El PIC16F84A realiza las siguientes operaciones lógicas de AND,


OR, OR exclusiva, NOT (complemento), Rotación y el intercambio
de nibbles.

andlw k Efectúa la operación AND lógica entre el contenido del


registro W y la constante ‘k’. Almacena el resultado en W.
◦ Ejemplo: andlw b’0101 1111’
Antes de la instrucción: W = b’1010 0011’
Después de la instrucción: W = b’00000011’ y Z = 0.

andwf f,d Efectúa la operación AND lógica entre el contenido del


registro W y el contenido del registro ‘f’. Almacena el resultado
en W si ‘d’=0 y en el registro ‘f’ si ‘d’=1.
◦ Ejemplo: andwf FSR,1
Antes de la instrucción: W = b’0001 0111’, FSR = b’1100 0010’
Después de la instrucción: W = b’0001 0111’, FSR = b’0000 0010’
29
2.1.2.2. INSTRUCCIONES LÓGICAS.

comf f,d Realiza un complemento del contenido del registro ‘f’


bit a bit, invirtiendo su valor, es decir, cambia los uno por ceros y
viceversa. Almacena el resultado en W si ‘d’=0 y en el registro ‘f’
si ‘d’=1.
◦ Ejemplo: comf Reg1,1
Antes de la instrucción: Reg1 = b’0010 0011’
Después de la instrucción: Reg1 = b’1101 1100’ y Z = 0.

iorlw k Efectúa la operación OR lógica entre el contenido del


registro W y la constante ‘k’. Almacena el resultado en W.
◦ Ejemplo: iorlw b’0011 0101’
Antes de la instrucción: W = b’1001 1010’
Después de la instrucción: W = b’1011 1111’

30
2.1.2.2. INSTRUCCIONES LÓGICAS.

iorwf f,d Efectúa la operación OR lógica entre el contenido del


registro W y el contenido del registro ‘f’. Almacena el resultado
en W, si ‘d’=0 y en el registro ‘f’ si ‘d’=1.
◦ Ejemplo: iorwf Resultado,1
Antes de la instrucción: Resultado = b’0001 0011’, W = b’1001 0001’
Después de la instrucción: Resultado = b’1001 0011’, W = b’1001 0001’

rlf f,d Efectúa la rotación de un bit a la izquierda del registro ‘f’,


pasando por el bit de acarreo C. El desplazamiento es cerrado,
formando un anillo con el bit C (Carry) del registro de estado o
STATUS. Almacena el resultado en W si ‘d’=0 y en el registro ‘f’ si
‘d’=1. El contenido del Carry pasa a la posición del bit de menor
peso y el bit de mayor peso pasa al Carry.
◦ Ejemplo: rlf Reg1,0
Antes de la instrucción: (Reg1) = b’1110 0110’, C=0
Después de la instrucción: (Reg1) = b’1110 0110’, W = b’1100 1100’ y C=1

31
2.1.2.2. INSTRUCCIONES LÓGICAS.

rrf f,d Efectúa la rotación de un bit a la derecha del registro ‘f’,


pasando por el bit de acarreo C. El desplazamiento es cerrado,
formando un anillo con el bit C (Carry) del registro de estado o
STATUS. Almacena el resultado en W si ‘d’=0 y en el registro ‘f’ si
‘d’=1. El contenido del bit de menor peso pasa a la posición del
Carry y el bit del Carry pasa a la posición de mayor peso.
◦ Ejemplo: rrf Reg1,0
Antes de la instrucción: (Reg1) = b’1110 0110’, C=0
Después de la instrucción: (Reg1) = b’1110 0110’, W = b’0111 0011’ y C=0

32
2.1.2.2. INSTRUCCIONES LÓGICAS.

swapf f,d Los cuatro bits de más peso del registro ‘f’ se
intercambian con los 4 bits de menos peso del mismo registro ‘f’.
Almacena el resultado en W si ‘d’=0 y en el registro ‘f’ si ‘d’=1.
◦ Ejemplo: swapf Reg1,0
Antes de la instrucción: (Reg1) = 0xA5
Después de la instrucción: (Reg1) = 0xA5, W = 0x5A

xorlw k Efectúa la operación OR Exclusiva entre el contenido del


registro W y la constante ’k’ de 8 bits. Almacena el resultado en
W.
◦ Ejemplo: xorlw b’1010 1111’
Antes de la instrucción: W = b’1011 0101’
Después de la instrucción: W = b’0001 1010’

33
2.1.2.2. INSTRUCCIONES LÓGICAS.

xorwf f,d Efectúa la operación OR Exclusiva entre el contenido


del registro W y el contenido del registro ‘f’. Almacena el
resultado en W si ‘d’=0 y en el registro ‘f’ si ‘d’=1.

◦ Ejemplo: xorwf Reg,1


Antes de la instrucción: (Reg) = b’1010 1111’, W = b’1011 0101’
Después de la instrucción: (Reg) = b’0001 1010’, W = b’1011 0101’

34
2.1.2.3. INSTRUCCIONES DE CONTROL DE
PROGRAMA.

La ejecución de los programas no suele ser lineal ejecutándose una


lista de instrucciones una tras otra. En puntos determinados, esta
secuencia tiene que romperse por una toma de decisión.
Para ello existen los SALTOS CONDICIONALES, que son aquellas
que producen un salto en función de que se cumpla o no una
condición.
El repertorio de instrucciones del PIC 16F84A incluye cuatro
instrucciones de salto condicional clasificadas en dos grupos:
◦ 1. Aquellas que pueden producir el salto en función del estado de un
bit. Son btfsc y btfss.
◦ 2. Aquellas que pueden producir el salto en función del contenido de un
registro distinto de cero. Son decfsz y incfsz.

35
2.1.2.3. INSTRUCCIONES DE CONTROL DE
PROGRAMA.

SALTOS EN FUNCIÓN DE UN BIT


btfsc f,b Esta instrucción puede actuar de dos formas:
◦ 1. Si el bit número ‘b’ del registro ‘f’ es “1” la instrucción que sigue a
ésta se ejecuta normalmente.
◦ 2. Si el bit número ‘b’ del registro ‘f’ es “0” la instrucción que sigue a
ésta se ignora y se salta.

◦ Ejemplo: Aquí btfsc f,1 ; Si el bit 1 de f es “0” salta.


Falso goto ProcesoX ; Ha sido “1”
Verdad ProcesoY --- ; Ha sido “0”

36
2.1.2.3. INSTRUCCIONES DE CONTROL DE
PROGRAMA.

btfss f,b Esta instrucción actúa de forma contraria a la


instrucción anterior:
◦ 1. Si el bit número ‘b’ del registro ‘f’ es “0” la instrucción que sigue a
ésta se ejecuta normalmente.
◦ 2. Si el bit número ‘b’ del registro ‘f’ es “1” la instrucción que sigue a
ésta se ignora y se salta.

◦ Ejemplo: Aquí btfss f,4 ; Si el bit 4 de f es “1” salta.


Falso goto ProcesoX ; Ha sido “0”
Verdad ProcesoY --- ; Ha sido “1”

37
2.1.2.3. INSTRUCCIONES DE CONTROL DE
PROGRAMA.

SALTOS EN FUNCIÓN DE UN REGISTRO


Las instrucciones de salto condicional “decfsz” e “incfsz” pueden
producir el salto en función del contenido de un registro distinto
de cero y son casos especiales de las de incremento y decremento
de un registro, pero que alteran el flujo lineal del programa.
decfsz f,d Esta instrucción decrementa en una unidad el
contenido del registro ‘f’. Almacena el resultado en W si ‘d’ = 0 y
en el registro ‘f’ si ‘d’ = 1. Después de decrementar, pueden
ocurrir dos casos:
◦ 1. Si el resultado es distinto de cero la instrucción que sigue a ésta se
ejecuta normalmente.
◦ 2. Si el resultado es cero la instrucción que sigue a ésta se ignora y se
salta.
◦ Ejemplo: Aquí decfsz Contador,1
goto NoEsCero
EsCero ---
38
2.1.2.3. INSTRUCCIONES DE CONTROL DE
PROGRAMA.

incfsz f,d Esta instrucción incrementa en una unidad el contenido


del registro ‘f’. Almacena el resultado en W si ‘d’ = 0 y en el
registro ‘f’ si ‘d’ = 1. Después de incrementar, pueden ocurrir dos
casos:
◦ 1. Si el resultado es distinto de cero la instrucción que sigue a ésta se
ejecuta normalmente.
◦ 2. Si el resultado es cero la instrucción que sigue a ésta se ignora y se
salta.
◦ Ejemplo: Aquí incfsz Contador,1
goto ciclo
Continua ---

39
2.1.2.3. INSTRUCCIONES DE CONTROL DE
PROGRAMA.

COMPARACIÓN DE REGISTROS.
Para saber si un registro vale 0 hay que cargar el registro sobre
si mismo mediante la instrucción “movf”, con lo cual se logra
posicionar el flag Z sin variar su contenido.
Ejemplo: movf Registro, F
btfss STATUS,Z
goto NoEsCero
EsCero: ---
---
NoEsCero: ---

40
2.1.2.3. INSTRUCCIONES DE CONTROL DE
PROGRAMA.

COMPARAR IGUALDAD ENTRE DOS REGISTROS.


Para comprobar si el contenido de los registros Registro1
Registro2 son iguales el programa a realizar sera:
Ejemplo: movf Registro1, W
subwf Registro2,W
btfsc STATUS,Z
goto Iguales
NoIguales: ---
---
Iguales: ---

41
2.1.2.3. INSTRUCCIONES DE CONTROL DE
PROGRAMA.

COMPROBAR QUE UN REGISTRO ES MAYOR O MENOR QUE


OTRO.
En este caso hay que realizar la resta de ambos. Así siendo A y B
dos registros cualesquiera y haciendo la operación A-B se tienen
las siguientes posibilidades.

42
2.1.2.3. INSTRUCCIONES DE CONTROL DE
PROGRAMA.

COMPROBAR QUE UN REGISTRO ES MAYOR O MENOR QUE


OTRO.
Ejemplo: movf RegistroB, W
subwf RegistroA,W ;RegistroA - RegistroBW
btfss STATUS,C
goto Menor
MayorIgual: ---
---
Menor: ---

43
INSTRUCCIONES ORIENTADAS A REGISTROS
MNEMÓNICO DESCRIPCIÓN FLAGS AFECTADOS
addwf f,d (W)+(f) a (destino) C, DC, Z
andwf f,d (W) AND (f) a (destino) Z
clrf f 00 a (f) (borrar registro F) Z
clrw 00 a (W) (borrar W) Z
comf f,d Complemento de f [(f) a (destino)] Z
decf f,d (f)-1 a destino (decrementa f) Z
decfsz f,d (f)-1 a destino y si resultado es 0 salta (decrementa F, Ninguno
salta si zero)
incf f,d (f)+1 a destino (incrementa f) Z
incfsz f,d (f)+1 a destino y si resultado es 0 salta Ninguno
iorwf f,d (W) or (f) a destino Z
movf f,d mover f a destino Z
movwf f (W) a (f) mover W a destino F Ninguno
nop No operación Ninguno
rlf f,d Rota f a la izquierda a través del carry a destino C
rrf f,d Rota f a la derecha a través del carry a destino C
subwf f,d (f)–(W) a (destino) C,DC,Z
swapf f,d Intercambia los nibbles de f a destino Ninguno
xorwf f,d (W) XOR (f) a (destino) Z
44
INSTRUCCIONES ORIENTADAS A BIT
MNEMÓNICO DESCRIPCIÓN FLAGS AFECTADOS
bcf f,b Coloca a 0 el bit b del registro f Ninguno
bsf f,b Coloca a 1 el bit b del registro f Ninguno
btfsc f,b Salta si el bit b del reg. f es 0 Ninguno
btfss f,b Salta si el bit b del reg. f es 1 Ninguno
INSTRUCCIONES CON LITERALES Y DE CONTROL
addlw k (W)+ K a (W) C,DC,Z
andlw k (W) AND K a (W) Z
call k Llamada a subrutina Ninguno
clrwdt Limpia temporizador Watch Dog Z
goto k Go To dirección (ir a dirección) Ninguno
iorlw k (W) OR K a (W) Ninguno
movlw k K a (W) Ninguno
retfie Retorno de una interrupción Ninguno
retlw k Retorno con un literal en W Ninguno
return Retorno de una subrutina C,DC,Z
sleep Modo Stand by Z
sublw k K – (W) a W C, DC, Z
xorlw k (W) XOR K a (W) Z
45
2.2. AMBIENTE INTEGRADO DE DESARROLLO (IDE)
PARA MICROCONTROLADORES.

MPLAB-IDE es un programa software que se ejecuta sobre una PC para


desarrollar aplicaciones para microcontroladores de MICROCHIP.

• El MPLAB IDE constituye un entorno de desarrollo integrado distribuido


gratuitamente por Microchip desde su página web: www.microchip.com

46
2.2. AMBIENTE INTEGRADO DE DESARROLLO (IDE)
PARA MICROCONTROLADORES.

47
2.2.1. ENSAMBLADOR Y COMPILADOR.
El conjunto de instrucciones de los microcontroladores PIC es en esencia la base del
lenguaje ensamblador soportado por este software.
Directivas de uso frecuente:
Son instrucciones para el compilador.
#DEFINE
Ejemplo. #define <nombre> [<valor a remplazar>]
explicación: declara una cadena de texto como substituto de otra
END
Ejemplo. end
explicación: indica fin de programa
EQU
Ejemplo. status equ 05
explicación: define una constante de ensamble
INCLUDE
Ejemplo. include <PIC16F84.h>
explicación: incluye en el programa un archivo con código fuente
ORG
Ejemplo. org 0x100
explicación: ensambla a partir de la dirección especificada
48
2.2.2. SIMULADOR, DEBUGGER Y EMULADOR.

Simulación:
1. Reset del procesador (menú Debug...Run...Reset) ó con F6 ó con el ícono
correspondiente en la barra de herramientas.
2. Crear una nueva ventana donde se incluyan las variables que queremos
tener en cuenta (Window...New Watch Window)
3. Empezar a correr paso a paso el programa haciendo el seguimiento
detallado de todos y cada uno de los pasos (menú Debug...Run...Step) ó con
la tecla F7 ó con el ícono correspondiente en la barra de herramientas.
El proceso de simulación nos permite detectar y corregir problemas de
lógica, problemas de situaciones que no hayamos tenido en cuenta que son
errores que no pueden ser detectados en el momento del ensamble del
programa.

49
2.2.3. EQUIPOS PROGRAMADORES DE
MICROCONTROLADORES.

Un Programador es un dispositivo electrónico que configura circuitos


programables no volátiles tales como EPROM, EEPROM, Flash, FPGA y
MICROCONTROLADORES.
Para programar un dispositivo, este es insertado en un zócalo (comúnmente
ZIF) del programador, o se conecta su circuito impreso mediante un
adaptador. Los datos se transfieren de distinta forma según la interfaz, ya
sea serial (JTAG, SPI) o paralela. A su vez, el programador genera los voltajes
necesarios para la programación.
Los programadores suelen estar conectados a
una computadora que corre un software
de programación. El mismo configura la interfaz,
comienza la programación y transfiere los datos
(usualmente contenidos en un archivo Intel HEX o
SREC).

50
2.2.3. EQUIPOS PROGRAMADORES DE
MICROCONTROLADORES.

51
2.3. PROGRAMACIÓN DEL MICROCONTROLADOR EN
LENGUAJE ENSAMBLADOR.
DIRECTIVA EQU
La directiva EQU permite asignar a un registro o constante, un nombre
asociado que facilita su entendimiento.
Ejemplo:
DATOX EQU 20H

DATOY EQU 21H

STATUS EQU 03H

F EQU 01H

INCLUDE .INC
El uso del INCLUDE permite incluir en el proyecto, una plantilla
que ahorra el trabajo de declarar todos los registros de Funciones
Especiales (SFR) de la memoria RAM de registros.
Es importante destacar, que en esta plantilla, todos los registros
están declarados en mayúscula. Por lo que durante la elaboración de un
programa, se debe respetar este formato.
Ejemplo:
INCLUDE <P16F84.INC> ó INCLUDE P16F84.INC

52
2.3. PROGRAMACIÓN DEL MICROCONTROLADOR
EN LENGUAJE ENSAMBLADOR.
ESTRUCTURA DE UN PROGRAMA
En general un programa está
Encabezado estructurado en tres grandes partes:
a) Encabezado: Define el tipo de PIC
con que se está trabajando, Bloque de
Configuración, declaraciones de variables y
Declaración de constantes,
Registros,
b) Configuración de registros
Datos, especiales: Registro OPTION,
Constantes. INTCON, TMR0, puertos A y B,
org EECON, STATUS.

Cuerpo del b) Cuerpo del programa: Aquí están


contenidas todas las instrucciones
Programa
relacionadas a la ejecución de un
programa bajo un diseño individual,
end realizado por el programador.

53
2.3. PROGRAMACIÓN BÁSICA.
ESTRUCTURA DE UN PROGRAMA
1. En todo programa se debe incluir cual es el tipo de PIC que se empleará, incluir
librerías y configurarlo:
List P= 16F84A ; Tipo de PIC a utilizar
include <16F84A.inc> ; Librería asociada al PIC que se utilizará
_config_RC_OSC_&_WDT_OFF ; Se seleccionan los bits de configuración
2. Al escribir un programa se realizan y organizan las instrucciones en columnas:
1ra Columna: nombrar variables o colocar etiquetas.
2da Columna: aplicar la instrucción.
3ra Columna: contiene los datos necesarios para que pueda ejecutarse dicha
instrucción.
4ta Columna: contiene comentarios, no tomados en cuenta por el microcontrolador.
Ejemplo: Defina a la variable M en la posición de memoria expresada en 15H
1raC 2daC 3raC 4taC
M equ 15H ; Define a la variable M en la posición 15H
3. Se emplean signos para efectuar determinadas consideraciones, por ejemplo: (;) que
se emplea para colocar comentarios. El programa no toma en cuenta todo lo que está
en una línea luego de dicho símbolo.

54
2.3. PROGRAMACIÓN BÁSICA.

ESTRUCTURA DE UN PROGRAMA

4. Un programa siempre empieza con la instrucción “org” y termina


con “end”
5. Considere las siguientes recomendaciones:
Directivas, etiquetas, Variables y constantes en mayúsculas. Ejemplo:
EQU, DATOA, SUMA, CONTA, RP0, Z
Instrucciones en minúsculas. Ejemplo: movwf, addwf, goto, bcf, call,
decfsz, etc
Tabule muy bien su programa y mantenga el formato mostrado
anteriormente.
Coloque continuamente comentarios, a lo largo de todo el programa.
Estos le ayudarán a orientarse al momento de revisar un problema de
lógica del mismo o para recordar su funcionamiento.
Utilice la directiva EQU, para asignarle nombres a constantes y/o
variables. Esto facilitará su comprensión y lectura.
6. Se recomienda ampliamente el uso de los diagramas de flujo,
para la estructuración del respectivo programa. Estos permiten
visualizar el funcionamiento a “grosso modo” del mismo.

55
STATUS
7 (L/E) 6 (L/E) 5 (L/E) 4 (L) 3 (L) 2 (L/E) 1 (L/E) 0 (L/E)

IRP RP1 RP0 TO PD Z DC C


C. Bit de acarreo en el bit MSB
Vale 1 cuando en el resultado de una operación aritmética, se ha producido una acarreo (suma)
Vale 0 si no se ha producido un acarreo.
Para el caso de una resta, ocurre todo lo contrario a lo expuesto:
Vale 1 si no se ha producido un "préstamo"
Vale 0 si se ha producido un "préstamo"
DC. Acarreo en el cuarto bit (Nibble bajo). Misma descripción de C, pero referida al cuarto bit.
Z. Cero.
Vale 1 si el resultado de una operación lógico - aritmética es cero
Vale 0 si el resultado de una operación lógico- aritmética NO es cero
IRP. Bit para direccionamiento indirecto de los bancos de datos.
RP1 - RP0. Bits para direccionamiento directo de los bancos de datos.
1 - 1 : Banco 3
1 -0 : Banco 2
0 - 1 : Banco 1
0 - 0 : Banco 0
TO. Time Out
Se pone a 1 después de la conexión de la alimentación al microcontrolador, o al ejecutarse las
instrucciones clrwdt ó sleep
Se pone a 0 cuando el perro guardián se ha desbordado.
PD. Power Down
Se pone a 1 después de la conexión de la alimentación al microcontrolador o al ejecutarse la
instrucción clrwdt
Se pone a 0 mediante la ejecución de la instrucción sleep

56
CONFIGURANDO UN PUERTO
La configuración de puertos es muy fácil:
1. Se selecciona el banco 1
• Aquí se encuentran los registros que manipulan mediante software
a los circuitos triestados que determinan que un pin o puerto
trabaje como entrada o salida.
2. Se configuran mediante los registros asociados a los puertos
(TRISA y TRISB), los pines de un puerto como entrada o
salida.
• Si coloco un uno (1) en un bit asociado a un puerto (RA0, RA1,
RB5, RB7,etc), éste se comportará como una entrada y solamente
podremos leer por esta entrada.
• Si coloco un cero (0) en un bit asociado a un puerto, éste se
comportará como una salida y solamente podremos escribir por
esta entrada.
• Podemos hacer analogía de la siguiente forma:
1 = In = Entrada = Solo lectura
0 = Out = Salida = Solo escritura

57
CONFIGURANDO UN PUERTO
La configuración de puertos es muy fácil:
3. Se selecciona o se regresa al banco 0, para trabajar con los
puertos que han sido previamente configurados.
• Si un puerto (o pin) ha sido configurado como salida, entonces se
podrá escribir sobre él, para sacar datos.
• Si un puerto (o pin) ha sido configurado como entrada, entonces
se podrá leer los datos que están ingresando por él.
• Nota: Escribir sobre un puerto (o pin) configurado como entrada,
no tiene ningún efecto. Si se desea escribir sobre él, es necesario
que el mismo sea habilitado como salida.

58
CONFIGURANDO UN PUERTO COMO ENTRADA/SALIDA (POR BYTE)
Recordemos los tres pasos:
 Por Byte:
A) bsf STATUS, 5 ; (1) Selección de banco 1
movlw FFH ; B’11111111’
movwf TRISB ; (2) Todos los bits del puertoB están
; configurados como entradas
bcf STATUS,5 ; (3) Se regresa al banco 0

B) bsf STATUS, 5 ; (1) Selección de banco 1


movlw 00H ; B’00000000’
movwf TRISA ; (2) Todos los bits del puertoA están
; configurados como salidas
bcf STATUS,5 ; (3) Se regresa al banco 0

C) bsf STATUS, 5 ; (1) Selección de banco 1


movlw B’10010001 ; B’ESSESSSE’
movwf TRISB ; (2) Mixto E/S en un mismo puerto
bcf STATUS,5 ; (3) Se regresa al banco 0

59
CONFIGURANDO UN PUERTO COMO
ENTRADA/SALIDA (BIT A BIT)
Recordemos los tres pasos:
Bit a bit:
bsf STATUS,5 ; (1) Selección de Banco 1
bsf PuertoA,1 ; (2) ¿Salida o Entrada?
bcf PuertoA,2 ; (2) ¿Salida o Entrada?
bsf PuertoA,3 ; (2) ¿Salida o Entrada?
bcf PuertoB,0 ; (2) ¿Salida o Entrada?
bcf PuertoB,2 ; (2) ¿Salida o Entrada?
bcf PuertoB,3 ; (2) ¿Salida o Entrada?
bsf PuertoB,5 ; (2) ¿Salida o Entrada?
bcf PuertoB,7 ; (2) ¿Salida o Entrada?
bcf STATUS,5 ; (3) Se regresa al banco 0
Nota: Estamos asumiendo que en este ejemplo hemos etiquetado
previamente a 05H como PuertoA y 06H como PuertoB.

60
REGISTROS ASOCIADOS A LOS PUERTOS
De configuración:
◦ TRISA (85H, Banco 1)
◦ TRISB (86H, Banco 1)
De Trabajo (Lectura/Escritura)
◦ PORTA (05H, Banco 0)
◦ PORTB (06H, Banco 0)
PORTA y PORTB, son registros de Lectura/Escritura, como
cualquier otro registro de propósito general, sólo que están
directamente vinculados a los puertos del microcontrolador.
Por lo tanto su Lectura/Escritura NO difiere de la de cualquier otro
registro

61
LEER Y/O ESCRIBIR EL UN VALOR
EN UN PUERTO
Ejemplo 1. Lea el valor presente en el puerto A y guárdelo en un
Registro DatoA.
movf PORTA,0 ; PORTA→W
movwf DatoA ; W→DatoA

Ejemplo 2. Escriba sobre el puerto B el siguiente valor: 49H


movlw 49H ; 49H→W
movwf PORTB ; W→PORTB

Ejemplo 3. Active el bit RB0, desactive el bit RB1 y active el bit RA4:
bsf PORTB,0 ; RB0= 1
bcf PORTB,1 ; RB1= 0
bsf PORTA,4 ; RA4= 1

62
LEER Y/O ESCRIBIR UN VALOR EN UN PUERTO
¿Qué Efectos se tiene sobre el
siguiente circuito?

• ¿Qué Efectos se tiene sobre el


circuito si se aplican las siguientes
instrucciones?
movlw B’00000001’
movwf PORTB

• ¿Qué Efectos se tiene sobre el


siguiente circuito si se aplican
estas siguientes instrucciones?
bcf PORTA,0
bsf PORTA,1
bcf PORTA,2

63
LEER Y/O ESCRIBIR UN VALOR EN UN PUERTO

Para el siguiente circuito, ¿Qué


valor debemos colocar en
puerto B para que se visualice
un 7 en el display?

• ¿Cómo hacemos para saber el


valor del bit RA0?
Basta con explorar su estado
lógico mediante alguna de las
instrucciones de testeo y/o
exploración: btfss f,b ó btfsc
f,b:
btfss PORTA,0
goto RutinA
goto RutinB

64
ESCRIBIR Y LEER SOBRE UN PUERTO
Para configurar los Puertos como entradas y/o salidas, debemos de estar en el
banco 1. Una vez configurados, para poder leer y/o escribir sobre estos,
debemos de cambiarnos al banco 0.

Ejemplo. Realice un
programa que configure al
Puerto A como entrada y el
Puerto B como salida.
Además el Puerto B sacará
los estados que está leyendo
del Puerto A.

65
TOMA DE DECISIONES. EJEMPLO
Dado el siguiente circuito, Active el LED
ubicado en RB0 si RA0, vale 0 y en caso
contrario, active el LED ubicado en RB1.

66

Das könnte Ihnen auch gefallen