Documente Academic
Documente Profesional
Documente Cultură
Y LABORATORIO
Bolilla I INTRODUCCIN
Sistemas de Numeracin
Caractersticas.
Nomenclatura de cada sistema de numeracin.
Conversin entre sistemas.
Binario a Decimal. Binario a Octal. Binario a Hexadecimal.
Octal a Binario. Octal a Decimal. Octal a Hexadecimal.
a Binario. Hexadecimal a Octal. Hexadecimal a Decimal.
Decimal a Binario. Decimal a Octal. Decimal a Hexadecimal.
Operaciones Lgico-Aritmticas.
Operaciones Aritmticas Bsicas.
Suma. Resta. Multiplicacin. Divisin. Mtodo de restas y sumas sucesivas.
Operaciones Lgicas Bsicas.
AND. OR. EXOR.
Sistemas de Numeracin limitados en cifras.
Binario limitado en 8, decimal y hexadecimal limitados en 2.
Suma en sistemas limitados en cifras.
Resta en sistemas limitados en cifras.
Complemento al MVR. Ca2. Ca1.
Comparacin.
Representacin o Codificacin.
Nmeros Naturales. Nmeros Enteros.
Cdigo ASCII. Cdigos BCD. Cdigo Grey. Cdigo Johnson.
Codificacin BCD.
Suma. Resta.
Nmeros Enteros.
Suma de nmeros enteros.
Definiciones y trminos
Nociones de Memorias
Caractersticas
Clasificacin.
Por uso de la memoria
Por forma de acceso al registro deseado
Por la forma de almacenamiento.
Bolilla II MICROCONTROLADORES
Descripcin y Caractersticas
Bloques Principales
Caractersticas Generales.
Funcionamiento bsico
Clasificacin
PIC16F628A
Caractersticas y patillaje (Hoja de Datos)
Caractersticas principales. Caractersticas Especiales. Patillaje.
Diagrama interno.
Tipos de fuente
Clases de oscilador.
Circuitos de Entrada o Salida. Circuitos de Entrada. Circuitos de Salida.
Memoria interna.
Mapa de Memoria
Memoria de Programa
Memoria de Datos. Memoria EEPROM
Registros Internos.
SFR del ncleo. SFR de perifricos
Set de instrucciones del PIC16F628A
Nomenclatura. Instrucciones orientadas a registros.
Instrucciones orientadas a bit.
3
Memoria EEPROM.
Descripcin. Funcionamiento.
Lectura-escritura desde software
Lectura-escritura desde el quemador.
Bolilla VI
COMUNICACIONES
Introduccin a comunicacin de microprocesadores.
Tipos de comunicacin
Comunicacin Paralela. Caractersticas
Unidireccional.
Practica de envo y recepcin
Unidireccional con aviso de dato valido (STB y ACK).
Practica de envi y recepcin
Bi-direccional con Handshaking (Entrega en mano propia).
Practica de envi y recepcin
Comunicacin Serie. Caractersticas
Elementos (paridad, stop y arranque)
Mtodos RZ, NRZ, Ancho de pulso
Comunicacin maestro-esclavo y sin jerarqua
Protocolos I2C, RS232 y RS485
Memorias seriales.
Bolilla VII
CONVERSION A/D y D/A
Principios. Mtodos. Practicas
BOLILLA I: INTRODUCCIN
Sistemas de Numeracin
Se llama Sistema Numrico al conjunto ordenado de smbolos y a las reglas con que se combinan para
representar las cantidades numericas.Cada sistema de numeracin se identifica segn la cantidad de
simbolos diferentes que utiliza para su representacin. Este valorse llama base o raiz.
Se usan en este texto varios sistemas de numeracin distintos. Los sistemas digitales usan el sistema
binario, pero los operadores, programadores y usuarios estn acostumbrados a usar el sistema decimal. Por
lo tanto se buscan sistemas numricos que sirvan de nexo entre el binario y el decimal.
Caractersticas
La cantidad de smbolos diferentes en cada sistema define la base del mismo.
Sistema decimal: base 10 (10 smbolos) : 0,1,2,3,4,5,6,7,8,9
Sistema binario: base 2 (2 smbolos): 0,1
Sistema octal: base 8 (8 smbolos) : 0,1,2,3,4,5,6,7,8
Sistema hexadecimal: base 16 (16 smbolos) : 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F
Todos son ponderados, o sea que para cada smbolo su valor depende de su posicin relativa dentro del
nmero. Por ejemplo 5271 en sistema decimal: el uno de ms a la derecha tiene orden cero, y el 5 de ms a
la izquierda tiene orden 3. En este caso el smbolo de orden 0 representa una unidad, el smbolo de orden 1
representa 70 unidades, el smbolo de orden 2 representa 200 unidades y el smbolo de orden 3 representa
5000 unidades.
Los sistemas con procesador usan el sistema de numeracin binario, pero se utilizan representaciones y
conversiones a otros sistemas de numeracin. Para indicar en que sistema de numeracin se expresa cada
nmero, se le coloca un subndice al final dependiendo del sistema al que pertenece: B binario, O octal, D
decimal y H hexadecimal.
La representacin ms comn es con el sistema hexadecimal, pues se necesitan menos smbolos para
representar cantidades y adems de muy fcil conversin binario-hexadecimal y viceversa.
Binario
Hexa
Octal
1000
1001
1010
1011
1100
1101
1110
1111
8
9
A
B
C
D
E
F
10
11
12
13
14
15
16
17
Operaciones Lgico-Aritmticas
Operaciones Aritmticas Bsicas
Suma
Decimal
Hexadecimal
Binario
32 + 84 = 116
FB + A1 = 19C
0110 + 1100 = 10010
0+0=0
1+0=1
0+1=1
1 + 1 = 0 y hay Acarreo o Carry
Resta
Decimal
Hexadecimal
Binario
54 32 = 22
835 647 = 188
AC 7B = 31
D9E AF4 = 2AA
10011 01100 = 00111
0-0=0
1-1=0
1-0=1
0 - 1 = 1 y pido 1 o Borrow
Multiplicacin
Decimal
25 x 7 = 175
La multiplicacin se puede descomponer en sucesivas sumas del multiplicando. Tantas como indique el
multiplicador.
25 + 25 = 50
(2 veces)
50 + 25 = 75
(3 veces)
75 + 25 = 100
(4 veces)
100 + 25 = 125 (5 veces)
125 + 25 = 150 (6 veces)
150 + 25 = 175 (7 veces)
Hexadecimal
17
xBC
114
FD
10E4
7 x C =54
7 x B = 4D
Binario
110110
x 110
000000
110110
110110
101000100
0x0=0
0x1=0
1x0=0
1x1=1
Divisin
La divisin permite averiguar cuantas veces cabe el divisor en el dividendo. Calcula la proporcin entre el
divisor y el dividendo.
Se puede hacer la divisin clsica, sumar en divisor a si mismo hasta que llegue al valor del dividendo, o
restar el divisor del dividendo hasta que el resto sea menor al dividendo.
Decimal
245
/37
222
6
023
&
Por el mtodo de sumas sucesivas
37
(1 vez)
+37
(2 veces)
74
Resultado menor que el dividendo
+37
(3 veces)
111
Resultado menor que el dividendo
+37
(4 veces)
148
Resultado menor que el dividendo
+37
(5 veces)
185
Resultado menor que el dividendo
+37
(6 veces)
222
Resultado menor que el dividendo
+37
(7 veces)
259
Resultado mayor que el dividendo.
El mayor nmero de sumas que su resultado no supere al dividendo es el cociente. La diferencia entre ese
valor y el dividendo es el resto.
Resto = 245 222 = 23
Por el mtodo de sucesivas restas del divisor al dividendo.
245
-37
(1 vez)
208
-37
(2 veces)
171
-37
(3 veces)
134
-37
(4 veces)
097
-37
(5 veces)
060
-37
(6 veces)
023
Se debe detener cuando el resultado es menor que el divisor
Este resultado es el resto, y el nmero de veces que se realizo la resta el cociente.
Hexadecimal
4F5
475
080
&
F2B9
D4
1EB
1A8
439
424
015
&
/D4
125
/A3
7
10
(+)
0 + 0 => 0
0 + 1 => 1
1 + 0 => 1
1 + 1 => 1
Para nmeros de varias cifras se realizan operaciones individuales entre bit de igual peso, sin generar
ninguna clase de acarreo entre posiciones de diferente ponderacin.
1011 0110 + 0110 0111 => 1111 0111
Operacin Exor (#)
0 # 0 => 0
0 # 1 => 1
1 # 0 => 1
1 # 1 => 0
1001 0111 # 0100 1011 => 1101 1100
Para nmeros de varias cifras se realizan operaciones individuales entre bit de igual peso.
12
4F + B9 = 08
Suma de mximos
y CY=1 AC=1
FF + FF = FE y CY=1
Binario
1101 1001
+0010 0001
1111 1010
y CY=0 AC=0
1101 1011
+0110 0001
0011 1100
CY=1 AC=0
1010 0111
+0100 1010
1111 0001
CY=0 AC=1
1001 0111
+1010 1001
0100 0000
CY=1 AC=1
Suma de mximo
1111 1111
+1111 1111
1111 1110
CY=1
y no hubo Borrow
La resta es una operacin compleja de implementar. Lo importante es que la resta siempre reporte la
diferencia entre los operandos.
La resta se define:
a-b=c a=b+c
Se plantea desde otra forma equivalente
a + (-b) = c
Se debe buscar como representar el valor (-b)
b - b = 00
Entonces
b + (-b) = 00
Observacin:
En sistemas limitados en cifras sumar el valor 100 en forma terica es lo mismo que
sumar 00 en forma practica. No podemos sumar 100, pero si podemos sumar 99 + 01.
Considerando la observacin anterior
b + (-b) = 99 + 1
Se deduce
-b = 99 + 1 - b
lo cual es
-b = 99 - b + 1
Se define el complemento a 10 de un valor x como la diferencia de x con el mximo representable ms
uno.
Ca10(x) = 99 - x + 1
Tambin se define Ca10(x) como el valor que sumado a x da como resultado 0.
Con el Ca10 podemos transformar la resta en una suma.
a - b = a + Ca10(b)= c
Ejemplo:
14
43 - 25 = 18 y no hubo Borrow
Se convierte en suma
Ca10(25) = 99 25 + 01 = 75
Queda
43 + 75 = 18 y CY=1
Se observa que en esta suma hay un acarreo, indicando que en la resta original no hubo borrow. El borrow
y el acarreo son de diferente valor. Ambos se representan con CY
Se estudiara un caso donde el minuendo es menor que el sustraendo.
43 - 57 = ?
Y como
Ca10(57) = 99 57 + 01 = 43
Queda
43 + 43 = 86 y CY=0
Este resultado seria el mismo que ejecutar la resta.
43 53 = 86 y hubo borrow
El borrow significa que se pidi prestado uno. Por lo tanto el sustraendo es mayor que el minuendo.
El carry = 0 indica que en la resta original hay borrow. Y nos indica que el minuendo es menor que el
sustraendo.
El valor del resultado a primera vista no representa la diferencia entre los dos valores. Pero se estudia como
se relaciona con la diferencia.
Ca10(-86) = 99 86 + 01 = 14
Se comprueba
57 43 = 14
Se deduce que cuando la resta tiene borrow el resultado representa el Ca10 de la diferencia entre los
operandos.
Binario
El mximo representable es en este caso 1111 1111.
Ejemplo
Calculo Ca10(1001 1011)
El Ca10 del sistema binario corresponde al Ca2 del sistema decimal
En la practica no se puede representar 1 0000 0000, as que se hace la resta con 1111 1111 y despus le
sumamos 1. Cualquier valor ser menor que el MVR.
1111 1111
- 1001 1011
0110 0100
0110 0100
+0000 0001
0110 0101
Entonces
Ca10(1001 1011) = 0110 0101
Ejemplo de resta
1011 0010 -1001 0110 = ?
Se hace el complemento del sustraendo
Ca10(1001 0110) = 1111 1111 - 1001 0110 + 0000 0001 = 0110 1010
Se suman ambos valores
1011 0010
+0110 1010
0001 1100
y CY=1
La resta no tiene borrow y su resultado es 00011100
Otro ejemplo de resta
0111 0101 -1001 1000 = ?
Se convierte en suma
Ca10(1001 1000) = 1111 1111 1001 1000 + 0000 0001
Ca10(1001 1000) = 0110 1000
15
0111 0101
+0110 1000
1101 1101 y CY=0
La resta tiene borrow y su resultado es 11011101
Al tener borrow se debe complementar el resultado para saber la diferencia.
Ca10(1101 1101) = 1111 1111 1101 1101 + 0000 0001
Ca10(1101 1101) = 0010 0011 Siendo esta la diferencia entre los operandos.
Hexadecimal
Mximo representable FF
Por lo tanto el Ca10 del hexadecimal corresponde al Ca16 del decimal.
Ejemplo
Calculo Ca10(A2)
FF
5D
-A2
y
+01
5D
5E
Ejemplo de resta:
E4 3F = ?
Ca10(3F) = FF - 3F + 01 = C1
E4
+C1
A5
y CY=1
La resta no tiene borrow y su resultado es A5
Definicin de Complemento al MVR (Ca[MVR]) o (Ca[10-1])
En un sistema con limite de cifras se define el complemento al MVR de x (diferente a
opuesto y a inverso) como el valor que sumado a x da el mximo representable.
x + Ca[10-1](x) = mximo representable
Ejemplos:
Decimal
En este sistema seria Ca9
Ca9(12) = 99 - 12 = 87
Ca9(83) = 99 - 83 = 16
Hexadecimal
En este sistema seria CaF
CaF(A4) = FF - A4 = 5B
CaF(15) = FF - 15 = EA
Binario
En este sistema seria Ca1
Ca1(0111 0101) = 1111 1111 - 0111 0101 = 1000 1010
Ca1(1001 1100) = 1111 1111 - 1001 1100 = 0110 0011
Notas
# Se deduce que
Ca10(x) = Ca[10-1](x) + 1
# Se observa que
Ca10[ Ca10(x) ]= x
Ejemplo decimal limitado a 2 cifras
Ca10(73) = 99 73 + 1
Ca10[Ca10(73)] = 99 ( 99 73 + 1 ) + 1
Ca10[Ca10(73)] = 99 99 + 73 1 + 1
Ca10[Ca10(73)] = 73
# Se observa que
Ca[10-1]{Ca[10-1](x)} = x
16
Comparacin
Esta operacin lgica en si es una resta en la cual no interesa el resultado. Se recaban datos respecto al
resultado y la relacin entre los operandos.
Se puede saber cual de los operandos es mayor o si son iguales.
La operacin de resta activa estos indicadores:
BW
Si no se pidio prestado uno en la resta vale 0
Z
Si el resultado es cero vale 1
AC
Si no hubo borrow entre los nibles bajos y los altos vale 1
P
Segn la paridad del resultado es su valor
S
Indicador de signo, copia el valor del MSB
El anlisis de estos indicadores permite deducir como es la relacin de x con y o sea (x y )
Si
BW=0
entonces x >= y
Si
BW=1
entonces x < y
Si
Z=1
entonces x = y
Si
Z=0
entonces x y
Si
BW=1 o Z=1 entonces x <= y
Si
BW=0 y Z=0
entonces x > y
17
Representacin o Codificacin
En un sistema binario limitado a 8 cifras u 8 bit, o sea un byte, se pueden tener 256 valores diferentes.
Se puede asociar cada valor a un nmero, letra o smbolo. Al intercambiar informacin con otros dispositivos
es necesario que usen el mismo sistema de codificacin.
Nmeros naturales (N):
Si se asocia a los nmeros naturales podemos representar desde el 0 (0000 0000) hasta el
255 (1111 1111) inclusive en una correspondencia biunvoca
Nmeros enteros (Z):
Al representar nmeros enteros se debe prever como diferenciar a los negativos y los
positivos, o sea como indicar el mdulo y el signo.
Hay dos tcnicas posibles.
I) Se usa el MSB como indicador del signo y los 7 bit restantes como el mdulo.
bit 7 = 0 signo positivo y bit 7 = 1 signo negativo.
1 111 1111 = -127
FF
1 000 0001 = -1
81
0 000 0001 = 1
01
0 111 1111 = 127
7F
0 000 0000 = 0
00
1 000 0000 = 0
80
No hay relacin biunvoca por que el cero tiene dos representaciones posibles. Aunque es un cdigo viable
no es 100% ptimo.
II) Se usa del bit 0 al bit 6 para representar el modulo, pero a los nmeros negativos se le aplica el
complemento a 2. As se representa
0000 0000 = 0 00
0111 1111 = 127
7F
Para hallar la representacin de -127:
Ca2(0111 1111) = 1111 1111 0111 1111 + 0000 0001
-127 = 1000 0001
81
Se hace lo mismo para hallar la representacin de -1:
Ca2(0000 0001) = 1111 1111 0000 0001 + 0000 0001
-1 = 1111 1111
FF
Para averiguar a cual valor representa el byte 1000 0000 se le aplica el Ca2
Ca2(1000 0000) = 1111 1111 1000 0000 + 0000 0001 = 1000 0000
1000 0000 = -128
80
Permite representar 256 nmeros diferentes, desde -128 hasta 127 inclusive.
Se pueden idear otras codificaciones multi-byte para nmeros fuera del rango [-128 , 127] o fraccionarios.
Pero depende de cada usuario y sistema.
Cdigo ASCII
Estndar Americano derivado del Cdigo ISO que permite la transmisin de informacin entre
maquinas. Con 256 combinaciones permite representar smbolos ortogrficos, gramaticales, especiales,
dgitos y comandos de control del texto.
Este sistema usa los 7 bit mas bajos para representar los smbolos, y el MSB ajusta la paridad del byte, as
la misma es siempre par. Lo cual sirve para detector de errores.
Hoy en da se le han realizado modificaciones generando as varias versiones de uso limitado.
Codifica:
Las letras del alfabeto ingles
Los signos de la escritura inglesa ( ! ? ( ) . : , ; { } [ ] )
Caracteres especiales ( \ / @ # $ % & = + - _ * < > ^ ~ | )
Dgitos (0 1 2 3 4 5 6 7 8 9)
Comandos especiales para control de texto
Combinaciones sin usar para que cada usuario pueda agregar sus propios signos
Cdigos BCD
Es un sistema que representa cada smbolo decimal con un grupo de 4 bit. Hay varias formas de
codificacin en BCD. El ms comn es donde cada dgito se convierte a su equivalente binario. Entonces
cada numero decimal se convierte a una serie binaria donde cada 4 bit se representa un dgito.
18
. . . 255 127 63 31 15 7 3 1
En binario natural la ponderacin es
. . . 11111111 1111111 111111 11111 1111 111 11 1
Se consideran los bits de valor 1 desde el MSB al LSB. El primero que vale uno tendr ponderacin
positiva. El siguiente que valga 1 tendr ponderacin negativa, el siguiente ponderacin positiva, el siguiente
ponderacin negativa y as sucesivamente con todos los bit que valen 1. Los bit de valor cero se ignoran.
Por ejemplo:
Cdigo grey 01101011 corresponde
al decimal +0 +127 -63 +0 +15 +0 -3 +1 = 77
al binario +0 +1111111 -111111 +0 +1111 +0 -11 +1 =1010011
Para obtener la representacin de un nmero se procede del modo siguiente:
1.- Se convierte el nmero a binario.
2.- Al valor as obtenido, se hace una EX-OR con el mismo valor una vez movido un bit a la derecha
(bit que se desprecia).
Veamos un ejemplo: Obtener el cdigo Gray del decimal 14.
1.
14D = 1110B
2.
1110 EX_OR 0111 = 1001
Luego el nmero 14 en cdigo Gray ser 1001
Hay varias versiones del cdigo Gray.
19
Cdigo Johnson
Es una secuencia donde se cambia un bit por vez y permite corregir errores de secuencia. Es muy usado
en decodificadores de posicin. No representan ni se asocian a ningn valor, solo que despus de recibir un
nmero ya sabemos cual recibiremos despus. Adems puede empezar con cualquier valor.
Para el caso de 5 bit seria:
11100
11000
10000
00000
00001
00011
00111
01111
11111
11110
Esta rotacin de los bits se puede realizar hacia la derecha o la izquierda.
Codificacin BCD
Los sistemas que hacen de interfase entre los humanos y el micro son ms simples si el sistema de
numeracin es en base 10. Se diseo un cdigo que representa con un byte nmeros en base 10 desde el
00 al 99. Se llama BCD, binario codificado decimal. Se puede representar un sistema decimal limitado a 2
cifras.
El BCD 8421 permite realizar sumas y restas con menor dificultad. Por lo estndar que es hay gran cantidad
de circuitos digitales diseados para manejar este sistema y los micros prevn su uso.
Ejemplo
56D <=> 0101 0110B
10D <=> 0001 0000B
Suma
22D + 57D = 79D
CY=0 y AC=0
0010 0010B
+ 0101 0111B = 0111 1001B
CY=0 y AC=0
En este ejemplo ni las unidades ni las decenas superan el mayor smbolo.
Otro caso
58D + 27D = 85D
CY=0 AC=1
0101 1000B + 0010 0111B = 0111 1111B
CY=0 y AC=0
Aqu el nible bajo tiene un valor ilegal. Es necesario ajustar el resultado binario para que sea acorde con el
BCD.
Se estudia el ajuste necesario llamado Ajuste Decimal
Si se suma 09 y 01 el resultado debe se 10.
09D
0000 1001B
+01D
+0000 0001B
10D
0000 1010B
Se esperaba 0001 0000 como resultado pero dio 0000 1010. Se analiza la diferencia.
0001 0000B
-0000 1010B
0000 0110B
Esta diferencia es constante para cualquier valor ilegal. Es el nmero de ttradas no usadas. Se usa para
corregir los resultados incorrectos. Con solo sumar 0110 al nible bajo se ajusta el resultado
Aplicamos la correccin a la operacin realizada.
0111 1111B
+0000 0110B
1000 0101B = 85D
CY=0
AC=1
Resultado esperado
20
Otro caso
29D + 38D = 67D
CY=0 y AC=1
0010 1001B + 0011 1000B = 0110 0001B
CY=0 y AC=1
Aqu ambos nibles son valores permitidos, pero hubo acarreo en el nible bajo. Esto indica que los nibles
bajos suman ms de 15 entre si.
Se espera 67 y resulto 61, la diferencia sigue siendo 6.
0110 0001B
+0000 0110B
0110 0111B = 67D
Resultado esperado
CY=0
AC=0
Otro caso
62D + 53D = 15D CY=1 y AC=0
0110 0010B + 0101 0011B = 1011 0101B
CY=0 y AC=0
Se observa que el nible alto es una ttrada no valida. Tiene un valor mayor de 9. Se realiza un estudio
similar al del nible bajo.
Ajuste Decimal
90D
1001 0000B
+10D
+0001 0000B
00D
1010 0000B
Lo esperado es 0000 0000B y resulto 1010 0000B. Se analiza la diferencia.
0000 0000B
-1010 0000B
0110 0000B
Al sumar 0110 0000B se corrige la diferencia en el resultado
1011 0101B
+0110 0000B
0001 0101B = 15D Resultado esperado
CY=1
AC=1
Otro caso
94D + 73D = 67D CY=1 y AC=0
1001 0100B + 0111 0011B = 0000 0111B
CY=1 y AC=0
Aqu ambos nibles son valores permitidos, pero hubo acarreo en el nible alto. Esto indica que los nibles altos
suman ms de 15 entre si.
Ajustamos el nible alto
0000 0111B
+0110 0000B
0110 0111B = 67D Resultado esperado
CY=0
AC=0
Otro caso
53D + 89D = 42D
CY=1 y AC=1
0101 0011B + 1000 1001B = 1101 1100B
CY=0 y AC=0
Se observa que tanto el nible bajo como el alto tienen valores no permitidos. Se ajustan ambos nibles al
mismo tiempo.
1101 1100B
+0110 0110B
0100 0010B
= 42D Resultado esperado.
CY=1
AC=1
21
Otro caso
98D + 89D = 87D
CY=1 AC=1
1001 1000B + 1000 1001B = 0010 0001B
CY=1 AC=1
Ambos nibles tienen valores permitidos pero la existencia de acarreo y semi-acarreo indica la necesidad de
ajustar ambos. Se ajustan ambos al mismo tiempo.
0010 0001B
+0110 0110B
1000 0111B = 87D Resultado esperado.
CY=0
AC=0
La mayora de los micros tienen una instruccin de ajuste decimal, que ejecutada despus de realizar una
suma con nmeros binarios verifica el resultado y ajusta si es necesario.
Resta
Ejemplo de resta
75D - 34D = 41D BW=0 y AC=0
0111 0101B - 0011 0100B = ?
Se convierte la resta en suma mediante el complemento a 10 del sustraendo. Se hace Ca10 por que el
nmero binario representa un nmero decimal.
Ca10(34) = 99 - 34 + 1 = 66D
Ca10(0011 0100) = 1001 1001 - 0011 0100 + 0000 0001 = 0110 0110 B
01110101B
+ 01100110B
11011011B
CY=1
AC=0
Como todo resultado de suma BCD es necesario realizar el ajuste decimal.
1101 1011B
+0110 0110B
0100 0001B
Ca10(0100 0011) = 1001 1001 - 0100 0011 + 0000 0001 = 0101 0111 B
0010 1000B
+0101 0111B
0111 1111B
CY=0
AC=0
Se realiza el ajuste decimal del resultado.
0111 1111B
+0000 0110B
1000 0101B =85D Resultado esperado
CY=0
AC=1
El valor del CY indica que hubo borrow. La diferencia se calcula al hacer el complemento a 10 del resultado.
Ca10(1000 0101) = 1001 1001 - 1000 0101 + 0000 0001 = 0001 0101
La diferencia es 0001 0101B o 15D.
Otro caso
34D - 58D = 76D
BW=1 y AC=1
0011 0100B - 0101 1000B = ?
Se convierte la resta en suma con el Ca10.
Ca10(0101 1000) = 1001 1001 - 0101 1000 + 0000 0001 = 0100 0010 B
0011 0100B
+0100 0010B
0111 0110B
CY=0
AC=0
No es necesario realizar el ajuste decimal.
0111 0110B = 76D Resultado esperado.
El CY indica que hubo borrow. Se calcula la diferencia mediante el complemento a 10 del resultado.
Ca10(0111 0110) = 1001 1001 0111 0110 + 0000 0001 = 0010 0100
La diferencia es 0010 0100B o 24D.
Se deducen una serie de pasos para realizar la resta entre nmeros binarios con codificacin
decimal o sea BCD 8421.
1) Realizar el Complemento a 10 del sustraendo.
99D - sustraendo + 01D
1001 1001B - sustraendo + 0000 0001B
2) Sumar el minuendo y el Ca10 del sustraendo.
3) Realizar ajuste decimal del resultado.
4) Interpretar el resultado.
Si el CY=1 el resultado es la diferencia entre el minuendo y el sustraendo, siendo el ltimo menor
que el primero
Si el CY=0 el resultado es el Ca10 de la diferencia entre el minuendo y el sustraendo, siendo el
ltimo mayor que el primero.
Nmeros Enteros
Para representar nmeros enteros se debe prever como diferenciar a los negativos de los positivos, o sea
como indicar el modulo y el signo. La mejor forma es mediante el Ca2
Su usa del bit 0 al bit 6 para representar el mdulo, pero a los nmeros negativos se le aplica el
complemento a 2.
As se representan:
0000 0000B = 0D
0111 1111B = 127D
1000 0000B = -128D
1111 1111B = -1D
23
0101 1001B
0010 1101B
1000 0110B
Ca2(0000 1100B)
Ca2(0011 1001B)
=
=
1111 0100B
1100 0111B
1011 1011B
S=1 CY=1 AC=0
Ca2(0111 0000B)
Ca2(0011 0110B)
=
1001 0000B
=
1100 1010B
0101 1010B
S=0 CY=1 AC=0
0110 1111B
=
1011 0011B
0010 0010B
S=0 CY=1 AC=0
0011 0110B
=
1010 0011B
1101 1001B
24
Definiciones Y Trminos
BIT- Unidad de informacin.
BINIT- Abreviacin de Dgito Binario, pero por deformacin se llama BIT. Cada uno de los smbolos del
sistema de numeracin binario.
PALABRA- Conjunto de bits ordenados. Tambin se le identifica con grupo de 8 bits.
BYTE- Conjunto ordenados de 8bit. (Cada bit tiene su ponderacin)
MSB- Most Significative Bit - bit ms significativo, de mayor peso o ponderacin.
NIBLE- Conjunto ordenado de 4 bit. Dos nibles forman un byte.
DATO- Es una porcin de informacin, se usa como sinnimo de palabra. Tambin se le llama a los bytes
no usados para comandar al micro.
PROCESADOR- Dispositivo fsico. Conjunto de elementos capaz de ejecutar un programa.
PROCESO- Secuencia de eventos para obtener un resultado o cumplir un objetivo.
P MICROPROCESADOR- Procesador implementado en un solo chip o circuito integrado.
MICROCONTROLADOR- Conjunto de los elementos de un sistema (procesador, RAM, ROM y perifricos)
integrados en un solo chip.
UCP, CPU- Unidad de Proceso Central o Unidad de Control de Proceso
OPERACIN MATEMTICA- Son operaciones que cada bit afecta al bit de orden superior. Son la suma, la
resta, la multiplicacin y la divisin. Solo los micros ms potentes y dedicados a clculos tienen la
multiplicacin. La divisin solo algunos muy escasos.
OPERACIN LGICA- Son operaciones donde cada bit no afecta a otro de mayor peso, como EX-OR,
NAND, SET, RESET, AND, NOT, OR, etc.
ROTACION A
LA IZQUIERDA
B7 B6 B5 B4 B3 B2 B1 B0
ROTACION A
LA DERECHA
INTERCAMBIO
DE NIBLES
SWAP
B7 B6 B5 B4 B3 B2 B1 B0
B7 B6 B5 B4 B3 B2 B1 B0
DECISIN- Es optar entre dos acciones a realizar dependiendo del resultado de alguna operacin lgicamatemtica.
BUS- Conjunto de lneas fsicas que transportan bits asociados entre s.
BUS DE DATOS- Conjunto de lneas fsicas que llevan datos. Cada una de ellas se encarga de transportar
un bit de la palabra.
BUS DE DIRECCIONES- Similar al anterior pero cada lnea transporta un bit de la direccin a utilizar.
BUS DE CONTROL- Grupo de lneas fsicas que transportan a las seales para coordinar acciones dentro y
fuera del micro. Es mas difcil distinguirlas por que no siempre corren paralelas entre si.
REGISTRO- Dispositivo fsico para almacenar un dato, palabra o byte.
MEMORIA- Dispositivo fsico para almacenar informacin, conformada por registros.
BUFFER- Dispositivo fsico que acopla dispositivos entre si. Permite amplificar en corriente las seales
entre elementos.
POSICIN DE MEMORIA- Los registros dentro de la memoria estn ordenados, por lo cual cada registro
tiene su posicin de memoria y esta se identifica con una direccin de memoria.
DIRECCIN DE MEMORIA- Dato numrico que permite definir un registro o posicin de memoria dentro de
la misma.
RAM- Porcin de la memoria del sistema que puede ser escrita o leda. Generalmente alberga datos.
ROM- Porcin de la memoria del sistema que solo puede ser leda. En general alberga comandos.
25
MAPA DE MEMORIA- Esquema o representacin de todas las posiciones de memoria que visualiza las
clases de datos y su uso en el sistema.
Permite tratar los datos como un objeto. Sin importar el agrupamiento que se haga de los
datos estos siempre estarn colocados en posiciones sucesivas de memoria.
26
27
Nociones de Memorias
Caractersticas
Son dispositivos electrnicos destinados a conservar
informacin. Estn formadas por elementos o clulas ordenadas
llamados registros y un bloque de control. En cada registro se
guarda un dato. Este dato puede se de uno o varios bit de
longitud. La memoria tiene lneas de entrada y/o salida de datos
(bus de datos) comunes a todos los registros y otras lneas
dedicadas a seleccionar el registro con cual trabajar (bus de
direcciones). Las lneas que controlan el proceso de lectura o escritura forman el bus de control.
El bus de control se compone por el indicador de operacin a realizar (lectura o escritura), el reloj maestro
para sincronizar la operacin y alguna seal extra para coordinar el intercambio de datos en el momento
que estos son estables y validos.
Los parmetros ms importantes de una memoria son la capacidad de almacenamiento de informacin, el
tiempo de acceso al dato seleccionado y el nmero de bit de cada dato.
El nmero de bit de cada dato es la longitud de la palabra que almacena la memoria. Este valor multiplicado
por el nmero de registros interna nos dice la capacidad de almacenamiento de la memoria
2048 registros de 8 bit cada uno, es una memoria de 16 Kbit o 2Kbyte.
16384 registros de 1 bit cada uno, es una memoria de 16Kbit.
El tiempo de acceso se mide desde que se presentan los valores en los pines de control y hasta el momento
en que el dato es valido y estable.
Se clasifican segn
Uso de la memoria
Mtodo de acceder al registro deseado
Mtodo fsico de almacenamiento de informacin
Clasificacin
Por el uso de la memoria
Memoria de Programa ROM: Se almacena en ella las instrucciones del programa a ejecutar.
Algunos micros tienen esta memoria de mayor nmero de registros y de bit que la memoria de datos. No
pierde su informacin aunque pierda alimentacin. Se graba antes de poner a funcionar el sistema
Memoria de Datos RAM: Se usan para almacenar informacin que varia a lo largo del programa.
Tiene igual nmero de bit que la ALU del micro. Tiene que tener suficiente velocidad de acceso como para
no entorpecer al procesador.
En el bus de direcciones se selecciona la direccin de la posicin de memoria del registro a operar. Con el
bus de control se indica que operacin se va ejecutar y en que momento hacerlo. El dato pasa por el bus de
datos hacia o desde la memoria. Pueden ser tanto internas como externas al chip del microcontrolador.
El CB tiene seales bsicas como selector de lectura (RD) , selector de escritura (WR), habilitador de
salidas (OE) , selector de chip (CS), etc.
Acceso Serial: Para acceder a un registro se necesita acceder antes a los anteriores. O sea para
que se lea un dato es necesario leer todos los bits de los datos previos. La velocidad de acceso varia segn
la posicin del registro. Exteriormente tiene pocas lneas de control. En forma serial se indican los
comandos para indicarle a la memoria que operacin se le aplicada, el clock maestro (CK) marca el tiempo
28
de cada bit. Cada palabra entra o sale bit por bit por la misma lnea (D). Se cuentan los bits para saber
cuando comienza y termina cada palabra, y as saber en que nmero de registro se est leyendo. Depende
de la memoria en particular si se deben guarda los datos ledos en algn otro sitio. Las lineas S0 y S1
habilitan el funcionamiento del chip. Bsicamente tienen una memoria RAM interna y una interfase de
comunicacin serial. Su control es complejo y requieren de un procesador o similar para manejarlas.
Se usan como memorias externas al chip del microcontrolador, debido a que necesita dedicar pocos pines
del mismo para controlarla.
29
Bloques Principales
En su descripcin se observa que son una evolucin de los circuitos digitales combinacionales y
secuenciales. La gran ventaja de los procesadores frente a los automatas y maquinas de estado es que la
orden o seales de seleccion de secuencia se codifican en la memoria ROM del sistema. Lee el comando
desde la memoria y determina cual secuencia debe ejecutar.
El ncleo interno es el procesador. El externo delimita al controlador. Se lo define como micro cuando esta
integrado todo en un solo chip.
Sus partes principales son:
Bloque de control- Es la seccion mas importante del sistema. En la mayoria de los diagramas de bloques
de los procesadores no se dibuja. Pero cuanto ms complejo es, ms funciones tiene el dispositivo. El
bloque de control es un generador de secuencias, (automata programable), la misma es seleccionada segun
varias seales o bit. Las diferentes secuencias que puede generar son la microprogramacion del
procesador, determinadas durante el diseo del procesador. A todos los elementos del sistema les llegan
seales de control.
ALU- Unidad encargada de todas las operaciones lgicas-matemticas. Es un circuito combinacional sin
capacidad de almacenamiento. Consta de dos entradas de operandos, varias lineas de seleccion de funcion
y dos salida, una para el resultado y otra de indicadores de la clase de resultado. Para poder operar, a la
ALU se le asocia Acumulador, Banderines y lneas de control. Segn la cantidad de bit de las entradas se
clasifica al procesador.
Memoria de programa Dispositivo donde se almacenan ordenadas las instrucciones a seguir. Es una
memoria ROM
Memoria de trabajo Dispositivo donde se puede escribir y leer para guardar cualquier dato variable durante
la ejecucin del programa. Es una memoria RAM.
Registros internos Dispositivos para guardar informacin o datos importantes, de mayor frecuencia de uso
o configuracin de funcionamiento. Pueden formar parte o no del mapa de memoria RAM.
29
Acumulador Registro que acta en conjunto con la ALU. Le suministra uno de los operandos o es el
destino de su resultado. La mayora de las instrucciones lo usan como destino o fuente de datos.
Banderines son indicadores sobre la clase de resultado. Se almacenan en el registro de estado del
programa PSW. Tambin puede guardar informacin sobre el estado del programa.
Bus de Datos -DB. Lneas fsicas que interconectan todos los elementos que manejan datos en el sistema.
Es una forma optima de poder interconectar varios dispositivos que manejen datos. Se multiplexa en el
tiempo quien usa este bus (Registros Internos, ALU, Memoria, Perifericos, etc))
Bus de Direcciones -AB. Lneas fsicas que llevan la informacin para seleccionar el registro de la
memoria con que se va a trabajar o cual puerto perifrico activar
Bus de Control -CB. Lneas fsicas que llevan las seales que se encargan de comandar el funcionamiento
de cada elemento. Aunque cada bit del bus tiene diferente significado o destino, igual comparten la finalidad
de controlar.
Registro de Instrucciones En el se guarda la instruccin mientras se la interpreta e implementa la
secuencia de acciones a realizar.
Contador de Programa Registro que guarda la posicin de la prxima instruccin a ejecutar. Tiene la
capacidad de incrementar, decrementar o cargarse con un valor particular.
Registro de Direcciones Registro donde se guarda la informacin sobre la posicin de memoria o
periferico con la cual se esta trabajando. De l nace el AB.
Perifricos Dispositivos que comunican el sistema con el mundo exterior.
Caractersticas Generales
Los microcontroladores son dispositivos electrnicos digitales sincrnicos programables que para funcionar
adems de alimentacin y seales de entrada necesitan un programa para ejecutar..
Son electrnicos por la tecnologa de aplicacin.
Son digitales por que manejan seales discretas, es decir con niveles cuantificados o pre-establecidos. En
este caso solo dos posible (1 o 0). Por lo tanto, la escritura de una salida o lectura de una entrada es solo
para alguno de estos valores.
Son sincrnicos debido a que todas sus acciones estn acompasadas por una oscilacin de referencia o
seal de RELOJ (CK).
Son programables pues su estado depende de las seales de entrada y su estado previo.
La gran ventaja de los procesadores frente a los automatas y maquinas de estado es que la orden o seales
de seleccion de secuencia se codifican en la memoria ROM del sistema, a este conjunto de ordenes se les
llama programa.
Al programa lo ejecutan una instruccin por vez, pero algunos procesan ms de una al mismo tiempo. En
tal caso superponen la ejecucin de una instruccin, con la bsqueda y almacenaje en el Registro de
Instrucciones de la siguiente (pipeline).
Pueden verificar una condicin y determinar entre dos posibles respuestas. Ah es donde se presenta la
aparente inteligencia de un micro.
Trabajan con baja tensin y corriente, por eso la necesidad de perifricos y drivers para interactuar con el
universo.
Los micros manejan mltiples seales de las cuales las ms comunes son:
OSC. Seal de oscilacin generada dentro o fuera del sistema para funcionamiento del mismo.
CLK, CK o reloj. Sincroniza todas las acciones de los dispositivos internos o externos al chip.
Interrupcin. Seal externa al procesador que avisa de la ocurrencia de un evento. Solicita al micro
ejecutar una subrutina particular en respuesta. No todos los micros pueden manejar interrupciones.
DMA. Seal que le solicita al micro dejar en alta impedancia los buses, para ser utilizados por otro
elemento, modulo o chip.
RST o reset. Seal que indica al micro inicializarse. Reinicia sus contadores y comienza el programa desde
el principio nuevamente. Puede o no borrar el contenido de los registros internos.
TXD y RXD. Son seales de transmisin serial: TXD de envo y RXD de recepcin de datos.
Ejemplos de seales de OSC y CLK:
Para el 8080 se necesita dos seales de oscilador
de diferente en fase y ciclo de trabajo.
30
La seal interna de reloj del procesador es siempre de mayor frecuencia que la suministrada al sistema.
Esto permite al procesador que en cada ciclo mquina (periodo de CLK) se lleve a cabo varias acciones,
mientras que el sistema realiza una sola. El micro puede ser considerado un complejo cmulo de flipflop y
puertas lgicas.
Funcionamiento Bsico
Cuando es energizado se debe mantener en estado de reset hasta que la tensin de funcionamiento sea
alcanzada. El reset puede ser generado con circuitos externos o internos al chip.
Cuando sale de reset el procesador lee la posicin de memoria ROM llamada Vector de Inicio. En esta
posicin se encuentra la primera instruccin a ejecutar. Para esto carga el PC con el valor del vector de
reset, copia el PC en el Registro de direcciones, que lo vuelca al AB. Habilita el DB entre la memoria ROM
y el registro de instrucciones (IR). Envia la seal de lectura a la ROM y de escritura en el IR. Esta accin
se llama FETCH. Una vez hecho esto incrementa en uno el PC, apuntando este a donde se encuentra la
siguiente instruccin a ejecutar.
El bloque de control la decodifica y ejecuta los pasos indicados por esa instruccin. Genera la secuencia
indicada. Esta accin se llama EJECUCION. La bsqueda (fetch) y ejecucin de una instruccin se llama
ciclo de instruccin. El ciclo de instruccion puede variar de una instruccion a otra, si la instruccion ocupa
ms de un aposicion de ROM se realizan todos los FETCH necesarios para cargarla completamente.
La seal de reloj CK se genera a partir de la seal OSC del oscilador del sistema. Algunos micros
necesitan dos seales de oscilador externas y otros las generan dentro del chip (oscilador interno). La
duracin de un ciclo de instruccin depende de la clase de instruccin a ejecutar y del micro en particular.
El bloque de control se une a todos los elementos del sistema mediante el bus de control. Dirige todas las
acciones de los componentes del micro. Tambin dirige las acciones de los dispositivos del sistema. Por
comodidad solo se dibuja la seccin ms relevante.
Mediante el contador de programa (PC) se sabe que instruccin ejecutara a continuacin.
La memoria es direccionada por el registro de direcciones, que se conecta por el bus de direcciones, e
intercambia datos mediante el bus de datos.
La conexin hacia el exterior ya sea para tomar o entregar datos se realiza a travs de los perifricos.
Estos sirven de acopladores entre el microsistema y el exterior.
Segn cuantas partes estn dentro de un solo chip se habla de procesador, microprocesador o
microcontrolador.
31
Clasificacin
Se clasifican:
Segn la cantidad de bit de los datos que maneja su ALU.
Pueden ser de micros 8, 10, 16, 32, 64, etc bits.
Segn la arquitectura u organizacin de la memoria del sistema:
-VON NEWMAN se usa un solo bus de datos y direcciones para la memoria de datos y programa.
-HARVARD cada rea de memoria tiene su bus de datos y de direcciones.
HARVARD
VON NEWMAN
Bus de Control - CB
Bus de Datos - DB
ROM
RAM
Bus de Direcciones - AB
RAM
ROM
CPU
CPU
Bus de Control - CB
ABrom
Bus de Dir. ROM
Bus de Instrucciones
DBrom
DBram
Bus de Datos RAM
Bus de Dir. RAM
ABram
Segn la estructura o arquitectura del sistema tambin pueden ser ARQUITECTURA CERRADA o
ARQUITECTURA ABIERTA. En los micros de arquitectura cerrada su sistema solo se puede tener los
elementos que el fabricante suministra. No es posible agregarle RAM, ROM, u otros perifricos. Los de
arquitectura abierta pueden formar sistemas de varias configuraciones de RAM, ROM o perifricos. La
diferencia est en si el micro tiene o no los buses accesible al usuario. Esto influye directamente en el
nmero de patillas del chip, por cada lnea del bus se necesita una patilla o pin.
Segn el set de instrucciones. Estas son determinadas por el fabricante para cada componente o su familia.
Aunque la denominacin se hace en referencia a las instrucciones, tambin implica la tecnologa de
fabricacin y la filosofa de diseo del chip.
CISC- Complex Instruction Set Computer. Conjunto de muchas instrucciones complejas, potentes y
hasta redundantes.
RISC- Reduced Instruction Set Computer. Conjunto de pocas instrucciones, generalmente bsicas.
Muchos parmetros estn definidos por defecto por ejemplo uno de los operandos y el destino de la
operacin.
SISC- Specific Instruction Set Computer. Conjunto de instrucciones que adems de ser reducido es
especifico al uso del procesador.
VLIW- Very Large Instruction Word. Conjunto de instrucciones muy complejas. Cada instruccin define
todos los parmetros de funcionamiento. Sustituye a muchas instrucciones de un sistema RISC.
Segn la cantidad de memoria del sistema. La cantidad de memoria ROM nos habla de lo complejo que
podr ser el programa y la cantidad de memoria RAM la capacidad de manejar variables.
32
PIC16F628A
Caractersticas y Patillaje
Microcontrolador fabricado por Microchip. Es un dispositivo de la gama media. Internamente tiene una CPU
con arquitectura HARVARD y tecnologa RISC de alto rendimiento.
Sus caractersticas principales son:
*Set de instrucciones reducidas a 35 grupos.
*Todas las instrucciones se ejecutan en un ciclo de maquina, excepto los saltos que se ejecutan en 2 ciclos.
*Velocidad de funcionamiento: DC a frecuencia mxima indicada por el fabricante.
*Memoria de Programa FLASH-ROM de 2048 palabras de 14 bits
*Memoria de Datos RAM de 224 bytes
*Memoria de Datos EEPROM de 128 bytes
*Todas las instrucciones son de una sola palabra de 14 bits
*Datos de 8 bit
*Registros internos mapeados en la RAM
*Pila por hardware de 8 niveles exclusivamente para el PC
*Modos de Direccionamiento Inherente Inmediato, Directo, Indirecto y Relativo
*10 Fuentes de Interrupcin:
- Externa pin RB0/INT
- Desborde del TMR0
- Cambio de nivel en PORTB<4:7>
- Terminacin del ciclo de escritura en EEPROM
- Cambios en los comparadores
- Recepcin de un dato en la USART
- Transmisin de un dato en la USART
- Modulo CCP
- Desborde del TMR1
- Recarga del TMR2
*16 patillas de entrada/salida con control de direccin individual
* Alta corriente de fuente/sumidero para manejo directo de LED
- Corriente de Sumidero 25 mA mx. por pin
- Corriente de Fuente 25 mA mx. por pin
*Perifricos
- 2 puertos de 8 bit
- TMR0 contador/temporizador de 8 bit
- TMR1 contador/temporizador de 16 bit
- TMR2 temporizador recargable de 8 bit
- Modulo de comparacin, captura y modulacin PWM
- 2 comparadores analgicos
- Modulo de voltaje de referencia
- Interfase de comunicacin serial
- Memoria EEPROM
Caractersticas Especiales del Microcontrolador:
* Memoria de Datos EEPROM con 1:000.000 de ciclos de borrado/escritura
* Retencin de Datos EEPROM mayor a 40 aos
* (ICSP) Circuito de Programacin Serial Interno - va 3 pin
* Reset al energizar (POR)
* Retardo al encender (PWRT)
* Retardo de arranque del Oscilador (OST)
* Reset de arranque en caliente (BOR)
* Vigilante (WDT) con su propio oscilador RC interno para un funcionamiento confiable
* Proteccin de Cdigo de ROM y EEPROM por separado
* Mdulo completo de oscilador con 8 modos de funcionamiento
*Oscilador interno de 4Mhz calibradoal 1%
*Oscilador interno de 48Khz de bajo consumo
* Tecnologa de bajo consumo, alta velocidad
* Modo de bajo consumo (SLEEP) economizador de energa
* Diseo totalmente esttico que permite detener el OSC
* Amplio rango de voltaje de operacin: 2.0V a 5.5V
33
Patillaje
PIN
17
18
1
2
3
Nombres
RA0
AN0
RA1
AN1
RA2
AN2
Vref
RA3
AN3
CMP1
RA4
T0CKI
CMP2
RA5
MCLR
4
Vpp
RA6
OSC2
15
CLKOUT
RA7
OSC1
16
CLKIN
6
7
8
9
10
11
12
RB0
INT
RB1
RX
DT
RB2
TX
CK
RB3
CCP1
RB4
PGM
RB5
RB6
T1OSO
T1CKI
DESCRIPCIN
Bit 0 del Puerto A
Entrada (-) del comparador 1
Bit 1 del Puerto A
Entrada (-) del comparador 2
Bit 2 del Puerto A
Entrada (+) del comparador 2
Salida analgica del modulo de referencia de voltaje.
Bit 3 del puerto A
Entrada (+) del comparador 1
Salida del comparador 1
Bit 4 del Puerto A. Salida de colector abierto
Entrada de reloj del Timer0
Salida del comparador 2 (colector abierto)
Bit 5 del Puerto A
Cuando esta configurado como Reset Maestro un cero en este
terminal fuerza el estado de RESET en el micro. Su nivel alto no
debe exceder a Vdd
Entrada de tensin de programacin
Bit 6 del Puerto A
Conexin para un cristal o resonador al oscilador en modo HS, XT
o LP
Salida de seal de Reloj CK para el oscilador en modo RC o
INTOSC a de la frecuencia de oscilacin en OSC1.
Bit 7 del Puerto A
Conexin para un cristal o resonador al oscilador en modo HS, XT
o LP.
Conexin del puente RC al oscilador en modo RC o entrada de
oscilacin externa en modo HS, XT o LP
Bit 0 del Puerto B
Entrada de interrupcin por flanco
Bit 1 del Puerto B
Pin de recepcin de datos asincrnicos de la SCI
Pin de entrada/salida de datos sincrnicos de la SCI
Bit 2 del Puerto B
Pin de transmisin de datos asincrnicos de SCI
Entrada o salida de seal de clock sincrnico de la SCI
Bit 3 del Puerto B
Entrada/Salida del modulo CCP1
Bit 4 del puerto B. Dispara interrupcin por cambio de estado
Entrada de voltaje de programacin.
Bit 5 del Puerto B
Bit 6 del Puerto B
Entrada al oscilador del TMR1
Entrada de reloj para el TMR1
34
I/O
Bidireccional
Entrada
Bidireccional
Entrada
Bidireccional
Entrada
Salida
Bidireccional
Entrada
Salida
Bidireccional
Entrada
Salida
Entrada
Entrada
Entrada
Bidireccional
Entrada
Salida
Bidireccional
Entrada
Entrada
Bidireccional
Entrada
Bidireccional
Entrada
Bidireccional
Bidireccional
Salida
Bidireccional
Bidireccional
Bidireccionall
Bidireccional
Entrada
Bidireccional
Bidireccional
Entrada
Entrada
13
5
14
PGC
RB7
T1OSI
PGD
GND
Vdd
Entrada
Bidireccional
Entrada
Bidireccional
Entrada
Entrada
La memoria de programa ,interna al chip, contiene 2048 palabras de 14 bit, la misma longitud que cada una
de las instrucciones del micro. La memoria de datos RAM ,interna al chip, tiene 224 registros de un byte y la
memoria EEPROM de datos 128 registros de 8 bits.
El contador de programa (PC) es de 13 bit lo que permite direccionar 8 K o pginas, pero solo est
35
36
Clases de Oscilador
El PIC16F628A tiene un circuito oscilador interno completo. No necesita componentes para generar la seal
de reloj CK. Pero acepta varias configuraciones del oscilacin, como puede ser un circuito de resistenciacondensador en serie, un cristal piezoelctrico o una onda cuadrada desde el exterior.
La seleccin se realiza durante la quema del chip:
XT- Oscilador a cristal o resonador
HS- Oscilador a cristal o resonador de alta velocidad
LP- Oscilador a cristal o resonador de bajo consumo
RC- Oscilador a Condensador y Resistencia, con o sin salida de CK por pin 15
EC- Seal de oscilador desde fuente externa
INTOSC- Oscilador interno (4Mhz o 48Khz) con o sin salida de CK por pin 15
Modos HS, XT y LP aceptan un cristal o resonador cermico conectado a los terminales OSC1/CLKIN y
OSC2/CLKOUT.
El cristal necesita de un par de condensadores a masa. Estos elementos tienen
una frecuencia muy estable, excepto frente a la temperatura.
En la documentacin del micro esta la informacin sobre los valores de dichos
capacitares segn la frecuencia del cristal.
El resonador cermico no necesita de estos
condensadores. El pin central es la conexin a masa del
resonador.
El oscilador a cristal tiene como ventaja la robustez, exactitud y estabilidad en el tiempo. Los resonadores
tienen iguales prestaciones que los cristales y adems la simpleza de su instalacin. Como desventaja
ambos presentan mucha dependencia con la temperatura. En caso de ser necesario se le hace trabajar
caliente adosndoles una resistencia.
El oscilador RC en cambio es estable frente a la temperatura y muy econmico, pero presenta un gran
porcentaje de error y con el tiempo variaciones de valor en su capacitor.
El oscilador interno puede sacar la seal de CK por el terminal 15 o usarlo como RA6. Adems en
funcionamiento se puede setear el mismo entre 48Khz o 4Mhz.
37
Tipos de Fuente
El PIC16F628A es un integrado con un amplio rango de funcionamiento. Funciona desde 2,0 volt hasta 5,5
volt. Por su bajo consumo la fuente ms simple es con un regulador 78L05. Los capacitares son para filtrado
y estabilizacin de la fuente.
Los terminales de masa de los componentes de
la fuente deben estar lo mas cerca posible, as
se evitan ruidos.
En caso de existir ruidos electromagnticos es necesario blindar el sistema junto con la fuente. La lnea
punteada significa una jaula de Faraday o caja aterrada. La entrada de corriente al sistema se hace a travs
de choques, para evitar que la interferencia magntica captada pase por los cables.
38
Circuitos de Entrada
Es necesario modificar los valores de las seales de entrada para que no daen al chip. Se logra tomando
una muestra dependiente al valor original. La tensin no puede ser mayor a 5,5 volt ni menor a 0 volt. Al
tener entradas de alta impedancia se considera que la corriente que absorbe es despreciable.
Entrada con puente divisor de tensin:
Este circuito es para seales activas a nivel alto, protege
contra tensiones excesivas positivas (el diodo zener) y
negativos (diodos 1n4007 y 1n4148)
Si las resistencias se calculan para que la tensin en el pin
no supere a Vdd, se puede prescindir de los diodos 1n4007
y del diodo zener. Si no hay ninguna tensin de entrada las
resistencias ponen a 0v el pin.
Entrada Opto-aclopada
Este circuito permite que la seal tenga una fuente diferente a
la del chip. Asla elctricamente el chip del resto del sistema.
Para tensiones con polaridad se usa el CNY17 o 4N25 , para
seal de alterna se usa el PC814 o LTV814. Ideal para aislar
al micro de la planta industrial.
39
Circuitos de salida:
La corriente de salida es muy pequea, mximo 25 mA por pin. Funciona como una fuente de tensin con
una gran resistencia interna. A corriente mxima, solo tendramos la mitad de la tensin de Vdd. Para
manejar la mayora de los dispositivos de salida se debe amplificar la salida en corriente y tensin.
Los pines del pic manejan muy poca corriente a pesar de ser mucho mayor que sus
antecesores. Un led es un dispositivo que pueden manejar directamente.
En este caso drena corriente a masa. El led enciende cuando hay un cero escrito
Salida opto-acoplada
Si se precisa manejar dispositivos de
alterna es mejor aislar al micro de la etapa
de potencia. El opto-acoplador es el
MOC8031 (opto- triac) u otro de la familia.
40
Memoria Interna
Mapa de Memoria
La memoria del PIC16F628A se divide en dos grandes bloques, Memoria de Programa y Memoria de Datos.
Cada bloque tiene su bus de datos, bus de direcciones y selector de direcciones.
41
BANCO 00
No todas las posiciones de memoria tienen el
registro implementado.
En el banco 10 solo estn implementados desde la
posicin 20h(120h) a la 4Fh (14Fh).
En el banco 11 no tienen ninguna registro GPR
implementado
Las ultimas 16 direcciones de memoria de cada
banco estn implementadas sobre los registros 70h7Fh del banco 00. Si se direcciona al registro 1FFh,
se esta trabajando con el registro 7Fh. Si se
direcciona el registro 75h (175h) del banco 10 se
accede al registro 75h del banco 00
1FFh
00
SFR
SFR
SFR
SFR
1F
20
20
GPR
GPR
GPR
2F
6F
70
GPR
7F
42
BANCO 00
00
01
02
03
04
05
06
07
08
09
0A
0B
0C
0D
0E
0F
10
11
12
13
14
15
16
17
18
19
1A
1B
1C
1D
1E
1F
20
INDF
TMR0
PCL
STATUS
FSR
PORTA
PORTB
---------------------PCLATH
INTCON
PIR1
----------TMR1L
TMR1H
T1CON
TMR2
T2CON
--------------CCPR1L
CCPR1H
CCP1CON
RCSTA
TXREG
RCREG
----------------------------CMCON
BANCO 01
80
81
82
83
84
85
86
87
88
89
8A
8B
8C
8D
8E
8F
90
91
92
93
94
95
96
97
98
99
9A
9B
9C
9D
9E
9F
A0
80 Registros de
Propsito
General
6F
70
80 Registros de
Propsito General
BANCO 10
100
101
102
103
104
105
106
107
108
109
10A
10B
10C
10D
10E
10F
110
111
112
113
114
115
116
117
118
119
11A
11B
11C
11D
11E
11F
120
14F
150
48 Registros de
Propsito General
BANCO 11
180
181
182
183
184
185
186
187
188
189
18A
18B
18C
18D
18E
18F
190
191
192
193
194
195
196
197
198
199
19A
19B
19C
19D
19E
19F
1A0
INDF
OPTION
PCL
STATUS
FSR
-------TRISB
---------------------PCLATH
INTCON
-----------------------------------------------------------------------------------------------------------------------------------------
--------
16F
170
Accesibles a travs
de 70 a 7F
FF
INDF
TMR0
PCL
STATUS
FSR
-------PORTB
---------------------PCLATH
INTCON
-----------------------------------------------------------------------------------------------------------------------------------------
--------
EF
F0
16 Bytes
7F
INDF
OPTION
PCL
STATUS
FSR
TRISA
TRISB
---------------------PCLATH
INTCON
PIE1
-------PCON
---------------------PR2
-----------------------------------TXSTA
SPBRG
EEDATA
EEADR
EECON1
EECON2
-------VRCON
1EF
1F0
Accesibles a
travs de 70 a 7F
17F
Accesibles a
travs de 70 a 7F
1FF
STATUS- Posicin 03h, 83h, 103h y 183h. Contiene informacin sobre el estado del sistema, banco
seleccionado y banderines de la ltima operacin realizada. Como todo registro puede ser destino de
cualquier instruccin. Algunos bits no pueden ser escritos. Se forma por los bit: IRP, RP1, RP0, TO, PD, Z,
DC, C
IRP Selecciona el conjunto de bancos a utilizar con el direccionamiento indirecto. Si vale 0
direcciona los bancos 00 y 01, si vale 1 direcciona los bancos 10 y 11.
RP1:RP0 seleccionan el banco de memoria de datos a usar cuando se direcciona memoria en forma
directa.
TO indica salida del Watch Dog Timer. Despus de encender el chip, o de una instruccin SLEEP o
CLRWDT vale 1. Cuando termina el tiempo del WDT vale 0. No puede ser escrito por el programador.
PD Bit de bajo consumo. Despus de encender el chip, o de una instruccin CLRWDT vale 1.
Despus de una instruccin SLEEP vale 0. No puede ser escrito por el programador.
Z Bit de Cero. Si el resultado de una operacin lgica o matemtica es cero vale 1
DC Bit de Semiacarreo o Acarreo Digital. Si hay acarreo/borrow entre los bit 3 y bit 4 de una
suma/resta (instrucciones ADDLW, ADDWF, SUBLW o SUBWF) vale 1.
C Bit de Acarreo. Indica si hay acarreo o borrow de la suma o resta.
FSR- Posicin 04h, 84h, 104h y 184h. Puntero que se usa para el direccionamiento indirecto de la RAM.
Solo puede direccionar 256 registros, para cubrir todo el mapa de memoria se vale del valor del bit IRP.
INDF- Posicin 00h, 80h, 100h y 180h. Registro sin implementacin fsica. Se usa en conjunto con FSR
para el direccionamiento indirecto por registro. Toda instruccin que lo use en realidad usa el registro
direccionado por FSR. Para toda operacin o movimiento que est dirigida al INDF, en realidad se lleva a
cabo con el registro direccionado por el valor del FSR.
PCL- Posicin 02h, 82h, 102h y 182h. El byte bajo del PC es modificado y ledo a travs de este registro.
PCLATH- Posicin 0Ah, 8Ah0, 1Ah y 18Ah.. Los 5 bit MSB del PC solo pueden ser escritos pero no ledos.
Se vuelcan en el PC cuando el PCL es escrito u operado.
PCL
PCLATH
X
PC
Bit 12 Bit 11 Bit 10 Bit 9 Bit 8 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
En las instrucciones que usan PCL como destino se cargan los bit 0 a 4 de PCLATH en los bit 8 al 12 del
PC.
En las instrucciones call y goto los bit 4 y 5 de PCLATH se cargan en los bit 11 y 12 del PC.
INTCON- Posicin 0Bh, 8Bh, 10Bh y 18Bh. Controla el funcionamiento y la respuestas a las interrupciones.
El micro tiene 10 fuentes de peticin de interrupcin, las cuales puede habilitar o no en forma individual o
global. Solo 3 de estas fuentes se controlan desde este registro. Los bit son GIE, PIE, T0IE, INTE, RBIE,
T0IF, INTF, RBIF
GIE - Habilitacin Global de las interrupciones.
Valor 1 - Habilita todas interrupciones no enmascaradas.
Valor 0 - Deshabilita todas las interrupciones
PEIE - Habilitacin general de interrupcin de perifricos.
Valor 1 - Habilita la interrupcin.
Valor 0 - Bloquea la interrupcin
T0IE - Habilita la interrupcin por desborde del TIMER0
Valor 1 - Habilita la interrupcin.
Valor 0 - Bloquea la interrupcin
INTE - Habilitacin de interrupcin del pin RB0/INTE
Valor 1 - Habilita la interrupcin.
Valor 0 - Bloquea la interrupcin
RBIE - Habilita la interrupcin por cambio de nivel lgico de cualquier pin RB4-RB7
Valor 1 - Habilita la interrupcin.
Valor 0 - Bloquea la interrupcin
T0IF - Indicador de solicitud de interrupcin al pasar de FFh a 00h de TMR0
Valor 1 - El TIMER0 desbordo. Debe ser puesto a 0 por software.
INTF - Indicador de interrupcin solicitada por RB0/INT
Valor 1 - Ocurri un flanco valido en el pin 6. Debe ser puesto a 0 por software.
RBIF - Indicador de peticin de interrupcin por cambio en el puerto B.
44
Valor 1 - Al menos uno de los pines RB4-RB7 cambi de nivel lgico. Debe ser puesto a 0
por software.
PIE1- Posicin 8Ch. Registro de mascara de las interrupciones de los perifricos. Habilitacin de
interrupcin para 7 de los 10 perifricos. Sus bit son EEIE, CMIE, RCIE, TXIE, CCP1IE, TMR2IE y
TMR1IE.
EEIE Mascara de interrupcin por fin del ciclo de escritura en la EEPROM
1 Habilita
0 No habilita
CMIE Mascara de interrupcin por cambio en los comparadores
1 Habilita
0 No habilita
RCIE Mascara de interrupcin por recepcin en la USART
1 Habilita
0 No habilita
TXIE Mascara de interrupcin por transmisin de la USART
1 Habilita
0 No habilita
Bit 3 - No implementado. Se lee como cero
CCP1IE Mascara de interrupcin del modulo CCP1
1 Habilita
0 No habilita
TMR2IE Mascara de interrupcin por comparacin del TMR2 con PR2
1 Habilita
0 No habilita
TMR1IE Mascara de interrupcin por desborde del TMR1
1 Habilita
0 No habilita
PIR1- Posicin 0Ch. Registro de banderas de interrupcin. Todos sus bit son puestos a uno por hardware y
es necesario limpiarlos por software. Sus bits son EEIF, CMIF, RCIF, TXIF, CCP1IF, TMR2IF y TMR1I.
EEIF interrupcin por finalizacin de la escritura en la EEPROM
1 El ciclo de escritura finalizo correctamente.
0 No ha terminado el ciclo de escritura o no ha comenzado. Se pone a cero por software
CMIF Aviso de interrupcin por cambio en los comparadores
1 La salida de los comparadores ha cambiado
0 La salida de los comparadores no ha cambiado. Se pone a cero por software
RCIF Aviso de interrupcin por recepcin de la USART
1 El buffer de recepcin de la USART esta lleno
0 El buffer de recepcin de la USART esta vaco
TXIF Aviso de interrupcin por transmisin de la USART
1 El buffer de transmisin de la USART esta vaco
0 El buffer de transmisin de la USART esta lleno
Bit 3 - No implementado. Se lee como cero
CCP1IF Aviso de interrupcin del modulo CCP
Modo Captura
1 Ha ocurrido una captura del TMR1
0 No ha ocurrido una captura del TMR1. Se pone a cero por software
Modo Comparador
1 CCPR1 alcanzo el valor de TMR1.
0 CCPR1 es diferente a TMR1. Se pone a cero por software
Modo Modulador de Ancho de Pulso
X No se usa
TMR2IF Aviso de Interrupcin por TMR2
1 El TMR2 alcanzo el valor del PR2
0 El TMR2 no alcanzo el valor del PR2. Se pone a cero por software
TMR1IF Aviso de interrupcin por desborde del TMR1
1 Ocurri un desborde del TMR1.
0 No ha desbordado el TMR1. Se pone a 0 por software
PCON- Posicin 8Eh. Registro de control de oscilador y energa. Sus bit son OSCF, POR y BOR.
Bit 7 al 4 - No implementados. Se leen como ceros
OSCF - Frecuencia del oscilador en modo INTOSC
1 4 Mhz
45
0 48 Khz
Bit 2 No implementado. Se lee como cero
POR Reset por Encendido
1 No ha ocurrido un reset por encendido.
0 Ha salido de reset por encendido. Debe ser puesto a 1 por software.
BOR Reset por Arranque en Caliente (baja tensin)
1 No ha ocurrido un reset por baja tensin
0 Ha salido de reset por haber bajado Vdd . Debe ser puesto a uno por software
SFR de los perifricos:
Estn mapeados sobre la memoria RAM. Esto permite usar las mismas instrucciones para manejar los
puertos de los perifricos que los registros RAM. Inclusive varios perifricos comparten SFRs, usando
distintos bit del mismo registro. Se ubican en las primeras 32 posiciones de cada banco.
Inclusive varios perifricos comparten SFRs, usando distintos bit del mismo registro.
Puertos I/O: Se conectan a los pines para entregar o adquirir datos del exterior al chip. El puerto B se
configura con el registro TRISB (086h y 186h) y usa el registro PORTB (006h y 106h) como buffer. Tiene bit
de configuracin (INTEDG y RBPU) en el registro OPTION_REG (081h y 181h). Las interrupciones que
puede generar se controlan con algunos bits del registro INTCON (00Bh, 08Bh, 10Bh y 18Bh). El puerto A
se configura con el registro TRISA (083h) y usa el registro PORTA (005h) como buffer.
PORTA Posicin 05h. Registro que copia/fuerza el valor de los pines RA0-RA7. En el caso de efectuar una
lectura sobre un pin, que esta dispuesto como salida, se lee el bit correspondiente de este registro. Si el
circuito exterior vara la tensin del pin, se produce una lectura diferente a lo escrito y esto lo evita. Por
ejemplo: si se escribe un 1, y si la corriente a masa es muy grande en el pin, este puede bajar su tensin
hasta 1/5 Vdd y esto se vera como nivel lgico 0. Si se setea un terminal como entrada, el bit
correspondiente es inmune a las operaciones de escritura. El pin RA5 solo funciona como entrada
-PORTB Posicin 06h y 106h. Registro que copia/fuerza el valor de los pines de RB0-RB7. En el caso de
efectuar una lectura sobre un pin que est dispuesto como salida, se lee el bit correspondiente de este
registro. Esto evita que, si el circuito exterior vara la tensin del pin se produzca una lectura diferente a lo
escrito. Por ejemplo: si escribimos un 1, y si la corriente a masa es muy grande en el pin, este puede bajar
su tensin hasta 1/5 Vdd y esto se vera como nivel lgico 0. Si se setea un terminal como entrada, el bit
correspondiente ser inmune a las operaciones de escritura.
TRISA Posicin 85h. Selecciona si los pines del puerto A sern entradas o salidas.
Valor 1 el terminal ser Entrada
Valor 0 el terminal ser Salida
TRISB Posicin 86h y 186h. Selecciona si los pines del puerto B sern entradas o salidas.
1 - Entrada
0 - Salida
TIMER0: Es un contador/temporizador libre que se configura con algunos bit (T0CS, T0SE, PSA, PS2,
PS1 y PS0) del OPTION_REG y se usa el registro TMR0 (001h y 101h) como buffer. Puede usar como
entrada de clock al pin 3 (RA4/T0CKI), lo cual altera el bit TRISA,4. La interrupcin que puede generar se
controla con el INTCON.
TMR0 Posicin 01h y 101h. Registro que se usa para cargar o copiar el valor de TIMER0. Este contador se
incrementa mediante eventos en el pin 3 o con ciclos de mquina. Cada vez que es escrito TMR0, el
TIMER0 se detiene durante 2 ciclos de reloj.
OPTION Posicin 81h y 181h. Registro que regula parte del funcionamiento interno del micro. Sus bit son
los siguientes: RBPU, INTEDG, T0CS, T0SE, PSA, PS2, PS1, PS0
RBPU - Habilita resistencia pull-up internas a las entradas del puerto B. Estas resistencias son de
aproximadamente 10 K.
Valor 1 - Inhabilitadas.
Valor 0 - Habilitadas
INTEDG - Selecciona el flanco de activacin de interrupcin para el pin RB0/INT.
Valor 1 - Interrupcin por flanco de subida
Valor 0 - Interrupcin por flanco de bajada
T0CS - Selecciona el origen del reloj del TIMER0, si ser RA4/TOCKI o clock interno.
Valor 1 - Transicin del pin RA4/TOCKI
Valor 0 - Ciclo de reloj interno o ciclo maquina o ciclo de instruccin.
T0SE - Elige el flanco de activacin de RA4/TOCKI.
Valor 1 - Activacin por flanco de bajada
Valor 0 - Activacin por flanco de subida
PSA - Selecciona a cual contador se le aplica el pre-escalador, si a TIMER0 o WDT. Hay un solo
divisor, este se puede aplicar al TIMER0 o al Vigilante. Si se aplica el divisor al WDT, el TIMER0 se
46
incrementa con cada 2 ciclos de CK. Si se aplica el divisor al TIMER0, el Vigilante se incrementa con cada
ciclo de CK.
Vale 1 Divisor aplicado al WDT
Vale 0 Divisor aplicado al TMR0
PS2:PS1:PS0 Seleccionan la proporcin del pre-escalador. La escala segn su aplicacin es
diferente.
PS2:PS1:PS0
000
001
010
011
100
101
110
111
Timer0
1:2
1:4
1:8
1:16
1:32
1:64
1:128
1:256
WDT
1:1
1:2
1:4
1:8
1:16
1:32
1:64
1:128
f,d
f,d
f,d
f,d
f,d
f,d
f,d
f,d
f,d
f,d
RRF
f,d
SUBWF
SWAPF
XORWF
f,d
f,d
f,d
Sumar registros W y f.
W AND f
Complementar f
Decrementar f
Decrementar f y saltar si es cero
Incrementar f
Incrementar f y saltar si es cero
W OR f
Mueve f
Rotar a la Izquierda a travs de Carry
f,n f,n+1 y f,7 CY ; CY f,0
Rotar a la Derecha a travs de Carry
f,n f,n-1 y f,0 CY ; CY f,7
Resta W de f
Intercambia los nibles de f. f,0f,4 ; f,1 f,5
W OR-exclusiva f
Afecta C,DC,Z
Afecta Z
Afecta Z
Afecta Z
Afecta Z
Afecta Z
Afecta Z
Afecta C
Afecta C
Afecta C,DC,Z
; f,2-f,6 ; f,3f,7
Afecta Z
Estas instrucciones son la excepcin, por la clase de accin que realizan y sobre quien la realizan.
CLRW
Cargar 00 en W
Afecta Z
CLRF
f
Cargar 00 en f
Afecta Z
MOVWF
f
Cargar f con W
Operaciones Orientadas a Bits
Su sintaxis es:
mnemnico
f,b
El smbolo f representa un valor numrico de 7 bit que corresponde a la direccin de memoria RAM a
utilizar en la instruccin, dentro del banco en uso. El smbolo b representa un valor de 3 bit que
corresponde al orden del bit elegido. No es capaz de realizar lgebra booleana
Contiene:
-
Duracin 1 o 2 ciclos de CK
El resultado siempre es en el mismo bit seleccionado, pues no realiza lgebra entre dos bits
BCF
BSF
BTFSC
BTFSS
f,b
f,b
f,b
f,b
goto nnn
;Como PIC16F628A solo tiene 7FF posiciones fisicas de ROM el valor de los 2 MSB
del PC, que se cargan con PCLATH, no afecta el resulatdo del salto.
Cualquier operacin o movimiento que tenga como destino del resultado al registro PCL, afectara al PC. Los
8 bits que se cargan en el PCL inmediatamente se cargan en los 8LSB del PC, y los 5 bit existentes del
PCLTAH en los 5 MSB del PC.
Movwf PCL
; W --> PCL y PCLTAH:PCL -->PC
Addwl PCL, f ; W + PCL --> PCL y PCLTAH:PCL -->PC
Para cualquier modificacin del PC hay siempre que tener en cuenta el valor actual del PCLATH.
-En este micro la operacin de movimiento MOVF afecta el flag Z. Esto permite averiguar si el contenido de
un registro es cero.
movf
VAR1,f
btfss
STATUS,Z
goto
CERO
NOCERO
.....
NO
50
SI
51
DIAGRAMA
DE FLUJO
PROGRAMA
FUENTE
ENSAMBLADOR
PROGRAMA
OBJETO
SIMULADOR
PROGRAMADOR
CHIP Y
SISTEMA REAL
El ensamblador (assembler) o compilador es un programa que se encarga de extraer el archivo objeto
(*.hex) del programa fuente (*.asm). Adems tambin genera el archivo de listado (*.lst) y el de errores
(*.err).
El programador es el software que se ocupa de manejar el hardware (quemador, grabador o programador)
que graba el chip.
El programa objeto antes de ser cargado en el chip, puede ser probado por el simulador. Este es un
programa de PC que virtualmente simula las entradas y salidas del PIC siguiendo el cdigo mquina del
programa objeto.
En cualquier punto del proceso se puede volver al diagrama de flujo o a editar el programa fuente.
El programa fuente se escribe como un archivo de texto sin formato con cualquier procesador de texto
(MPLAB editor, EDIT.COM, WORDPAD, BLOCK de NOTAS, WRITE, WORD, etc.).
El ensamblador que se usa ser el suministrado por Microchip. Para MS-DOS es el MPASM.EXE y para
Windows el MPASMWIN.EXE.
El simulador a usar es el MPLAB SIM. No permite simular algunas interrupciones ni la interfase serial.
Microchip suministra una herramienta llamada MPLAB IDE que rene todos estos elementos. Es un entorno
de desarrollo (IDE) con todos estos elementos (y otros ms) integrados. Este software permite manejar
hardware como el quemador de microchip o el emulador de pics.
Los PICmicro tienen incluida una interfase serial de programacin. Por lo tanto se puede leer y programar
con un circuito simple y un PC con puerto paralelo (LPT1), serial (COM) o USB.
El quemador a usar puede ser cualquiera, original de Microchip o de terceros.
50
51
52
Diagrama De Flujo
Son representaciones grficas de cualquier proceso (industrial, programacin, trmite burocrtico, deteccin
de fallas, etc.). Interesa a este curso solo el aplicado a los procesadores y su programacin.
Los diagramas de flujo se componen por elementos llamados bloques. A cada bloque llega y/o salen lneas
que indican la direccin por donde sigue el proceso.
Cada bloque puede tener varias salidas o ninguna, pero una entrada sola o ninguna.
En cada bloque se describe la funcin que realiza, con que parmetros y sobre que variable la aplica.
Por ejemplo en este bloque, se realiza una suma entre 2 variables.
El resultado se carga en una tercera variable. Las lneas de flujo
solo indican cual bloque se ejecutara a continuacin.
En los bloques no solo pueden ir funciones lgico-matemticas
sino tambin una
GUARDA EL MAYOR
descripcin del tratamiento
DE AMBOS
que se le hace a los datos.
Por ejemplo: Un bloque puede manejar ms de un dato de entrada pero solo tiene una lnea de llegada de
informacin.
Las lneas de flujo no indican cuantos o cuales datos hay en proceso o son procesados, sino de que bloque
salir y a cual entrar. Por eso indican el flujo de informacin y no el nmero de datos en proceso.
Todo proceso tiene ms de un diagrama de flujo que lo represente. Se elige y prioriza que aspectos del
mismo se desea mostrar.
Se realiza primero un diagrama general donde se muestra una idea del proceso a llevar a cabo. Este
diagrama debe ser de fcil entendimiento. Sus bloques representan funciones complejas o son el resumen
de varias acciones. De este primero se procede a realizar otro mas detallado donde se representen menos
acciones por cada elemento. O sea se convierte cada bloque de funciones complejas en varios elementos
con funciones simples, bsicas y especficas.
Se debe seguir desglosando hasta que solo queden bloques con funciones bsicas que son las que puede
realizar el micro.
Esto es personalizar el diagrama de flujo, se realiza para un procesador en particular y se limita por las
caractersticas fsicas del sistema.
Las respuestas, que esperamos nos entregue el sistemas, sern las salidas. El micro las entrega como
valores digitales que los perifricos convierten en seales entendibles para el exterior.
Es necesario discernir que elementos del problema son relevantes y alteran las salidas, es decir que se
deben considerar para seleccionar las entradas.
Los perifricos se encargan de convertir estos elementos de entrada en valores digitales que los
representen. A los datos de entrada el micro les aplica el proceso que le indica el programa.
Generar la respuesta es entregar datos a los perifricos o calcular un resultado, lo cual constituye el o los
elementos de salida.
Smbolos Grficos
Para realizar los diagramas de flujos se usan smbolos, los cuales tienen su forma segn la clase de funcin
que tengan.
Las las lineas de flujo son flechas o ramas del diagrama de flujo,
qu indican al salir de un bloque a cual entran. O sea el orden en
que deben recorrerse. Los codos indican saltos en el programa, al
salir de un bloque, no se va al inmediato siguiente sino que se
CORRECTO INCORRECTO
saltea al menos uno posterior o se vuelve a entrar en otro anterior.
Una rama puede confluir en otra pero una rama no puede bifurcarse o abrirse en dos.
Smbolo de inicio de programa o subrutina. En su
interior se coloca el nombre del programa,
subrutina o la palabra INICIO. Ntese solo tiene
una flecha de salida o partida del proceso.
INICIO
SUBRUTINA
FIN
INTERRUPCIN
RETORNO
(x) + 2Y
SUBRUTINA
Conectores dentro de pgina. Son etiquetas que se colocan para indicar que una rama
del diagrama de flujo contina en otro lado, o proviene de otro lugar, dentro de la misma
pgina. Siempre se dibujan de a pares. El conector de salida es al que llega la flecha y el de
entrada es del que sale la rama. Ambos deben tener el mismo smbolo en el interior para
saber que se corresponden. As se evitar dibujar lneas que atraviesen toda la hoja.
Conectores fuera de pgina. Son etiquetas que indican que la rama del diagrama de flujo
contina en, o proviene de, una pagina diferente. Se dibujan de a pares, uno en cada pgina.
El de partida es al que llega la lnea y el de llegada es del que sale la rama. Ambos deben
tener el mismo smbolo para saber que estn asociados.
INGRESE EDAD
MOSTRAR TOTAL
Otros simbolos como estructuras de control de flujo como WHILE, IF THEN, CASE, etc no se utilizan en
assmbler por ser necesario realizarlas con varios bloques mas simples.
i) Diagrama Alineado
En esta estructura todos los bloques se dibujan sobre una lnea vertical. Demanda
mayor cantidad de pginas, no es tan fcil de entender su funcionamiento, pero en
cambio es ms fcil realizar el programa fuente y determinar cuando hay un salto.
INICIO
HORA --> W
S1=1
NO
SI
S2=0
ii) Diagrama Sbana o Extendido
Los bloques se distribuyen libremente dentro de la pgina. Se necesita menor nmero
de pginas y es ms fcil de entender. Se dificulta determinar el nmero correcto de
saltos y extraer el programa fuente.
INICIO
NO
ANTIHOR --> W
S2=0
HORA --> W
SI
NO
SI
ANTIHOR --> W
S1=1
En este curso se utiliza unicamente el
diagrama alineado, excepto que se le
explique el programa a un lego.
S2=0
S2=0
ANTIHOR --> W
ANTIHOR --> W
FIN
FIN
El programa se desarrolla sobre una lnea vertical de arriba hacia abajo, que comienza con el bloque de
inicio de programa y en caso de finalizar lo har con el bloque de fin de programa.
Si el diagrama corresponde al programa principal, el bloque de inicio corresponde a la salida de reset del
micro. Si es de una subrutina, dicho bloque marca el inicio de la misma.
Los bloques se ejecutan en orden descendente a medida que transcurre el tiempo. Se unen con lneas de
flujo. La lnea de flujo que avanza de un bloque al siguiente consecutivo se dibuja sobre la lnea vertical de
gua. Si se produce un salto hacia un bloque posterior la lnea de flujo baja por la derecha del eje, y, si el
salto es a un bloque anterior lo hace por la izquierda del eje.
Recordar: por la derecha se avanza y por la izquierda se retrocede.
Siempre a un bloque se llega por arriba y se sale por abajo o el costado.
Es muy til hacer aclaraciones al diagrama de flujo o comentarios al borde de cada elemento as se da una
idea ms clara de lo que hace. El comentario ms importante es indicar la etiqueta de posicin a cada
llegada de un salto.
Se asocia a la variable con un elemento fsico del micro que tenga idnticas propiedades. Primero debe ser
un elemento que pueda ser escrito y ledo, eso se aplica a la RAM esttica. Para que no altere el
funcionamiento del micro se descartan los SFR. Solo quedan los GPR.
Consideremos un registro GPR, este tiene dos partes:
CONTENIDO: valor numrico que almacena y puede variar en cualquier momento.
DIRECCIN: valor numrico que indica su posicin, esta prefijado por el fabricante y es inamovible.
La asociacin es:
VALOR
<=>
CONTENIDO
NOMBRE
<=>
DIRECCIN
Es aconsejable al principio del programa asignarle un valor, as no genera ninguna indeterminacin posible.
La variable en deben tener el mismo nmero de bit que el registro del micro con cual se asocia.
La variable tiene dos niveles. El lgico que es la capacidad de variar su valor pero no su nombre. El
fsico que es capaz de variar su contenido pero no su posicin.
El nombre se le asocia como etiqueta al valor numrico de la posicin de memoria del registro. El valor que
le asignamos a la variable es el contenido que se carga en el registro.
Consideremos la variable de nombre VAR1, la asociamos con el registro de RAM de la posicin 21h. Hacer
valer E7h a VAR1 es cargar el valor E7h en la posicin de memoria 21. No hay que confundir el valor que
se carga en la variable con el valor de posicin de memoria que se asocia a la variable.
Una variable particular es la Variable de Lazo, variable cuyo valor es verificado como condicin para salir de
un bucle condicionado.
Puntero o Vector es una variable que permite direccionar una posicin de memoria o una direccin
de puerto. Se usa para direccionar distintas posiciones de memoria
con la misma instruccin. O sea almacenar la direccin del
operando. Cambiar de operando representa solo modificar el
M(Pd) <-- VAR1 M(Pb) <-- M(20)
contenido de la variable, pero la instruccin siempre es la misma.
Su nombre puede ser cualquiera. Comnmente se le comienza con
la letra P o V.
Si tenemos un grupo de datos en posiciones continuas de memoria se les puede agrupar en un conjunto,
y llamar a ese grupo serie o matriz. Toda matriz implica un
registro que le sirve de puntero para direccionar los elementos
del mismo. As que en el programa se trabaja con la matriz, que
Pd + 1 --> Pd
Pb + VAR1 --> Pb
implica varios datos y se invocan con el puntero.
Por ejemplo: Pdest, Porig, Vmatriz, Vec1. Su nmero de bit
depende de la capacidad de direccionar posiciones diferentes. Si
direcciona 256 posiciones ser de 8 bit, si direcciona 1024 ser de 10 bit, si direcciona 65535 ser de 16 bit.
Se le debe asignar un valor antes de usarlo por primera vez, y puede ser actualizado por una asignacin, un
incremento, un decremento u otra operacin.
Vector es el puntero asociado a una dimension de una matriz.
Indice es un puntero que para seleccionar un dato no es necesario alterarlo, sino que al usarlo se le suma
un valor llamado corrimiento.
Direccionamiento Indirecto por Registro. Se tiene la direccin de memoria del puntero que contiene la
direccin del dato. La instruccin contiene la direccin de memoria del registro usado como puntero. El
puntero puede estar formado por uno o dos registros concatenados. Se usa indicando el valor de la
posicin de memoria o el nombre de la variable puntero.
Por ejemplo: M[M(F4h)] la direccin de memoria F4h es usada como puntero, M(Pdat) la direccion
del puntero es el valor la etiqueta Pdat , M[VAR1] la direccin del puntero es la etiqueta VAR1 para indicar
que se usa el contenido de la variable se escribe entre parentesis rectos.
Direccionamiento indexado. Se identifica el puntero nombrndolo y se indica el corrimiento a sumarle para
ubicar al dato. La instruccin incluye como parmetros el vector (por su posicin y no direccin de memoria)
a utilizar y el valor o la posicin del corrimiento que se le debe sumar al mismo para direccionar el dato a
operar. Si se utiliza con series de datos, al vector se le suma un valor para determinar cual elemento de la
serie se selecciona, despus de la operacin el vector ndice queda inalterado. A los punteros con esta
capacidad se les llama ndice. Por ejemplo M(vector + corrimiento), M(vector + VAR1), M(Pdat + k)
Direccionamiento Relativo. Idntico al indexado, pero el puntero a utilizar es el PC. M(PC + corrimiento)
Los puertos se identifican con la letra P y el sistema es igual que el de las memorias.
P(nn) o PA
-Direccionamiento directo, se selecciona el puerto de la direccin nn. Tambin se le
puede nombrar con una cadena de caracteres o etiqueta Ej.: PB, MOTORES, LEDS
P[(VAR1])o P(dat)
-Direccionamiento indirecto, la variable contiene la posicin del puerto
57
Estas son las formas de direccionamiento que maneja el PIC16F628A. Una instruccin puede tener ms de
una forma de direccionar, una para cada operando y otra para el destino.
El PIC tiene solo las siguientes formas de direccionamiento:
Inherente, inmediato, directo, indirecto por registro y relativo.
Y tiene dos instrucciones que no usan operando, ni tienen un registro indicado aparentemente: NOP y
SLEEP.
Para direccionar distintas posiciones de memoria pero con la misma instruccin (en un lazo), se usa
una variable que almacena la direccin del operando. Para cambiar de operando se modifica el contenido
de la variable pero la instruccin siempre es la misma, a estas variables se les llama punteros.
Si tenemos un grupo de valores en posiciones continuas de memoria se les puede agrupar en un
conjunto, y llamar a ese grupo serie. Toda serie implica tambin un registro que le sirve de puntero (vector)
para direccionar los elementos de la misma. As en el programa se trabaja con el vector, que puede asumir
todos los valores posibles de las posiciones de memoria de los elementos del conjunto. Si tenemos la
posibilidad de hacer direccionamiento indexado, el puntero pasa a ser el ndice de la serie.
Si los datos se ordenan en grupos de 256, forman una pgina. Eso permite que con un byte se les pueda
direccionar a todos. Si el puntero fuera de 2 bytes, el byte bajo del puntero indica la posicin del registro, y
el byte alto del puntero selecciona de cual pgina es el registro. Es como que todos los datos se encuentran
en una grilla con su posicin vertical y horizontal particular. A esta forma de ver los datos se les llama
matriz, array o arreglo. Se indica el nmero de grupos por el nmero de registros por grupo. Por ejemplo si
se usan 10 pginas, se dice matriz de 10 x 256, o sea se consideran 10 grupos de 256 elementos cada
grupo.
Entorno de Desarrollo MPLAB-IDE
Este software nos permite dentro de un mismo espacio de trabajo tener utilidades tales como:
El editor para escribir el archivo fuente. Este es un archivo de texto sin formato guardado con
extensin .ASM, las ultimas versiones de MPLAB nos indican con colores que es cada palabra escrita
(comando, mnemnico, valor decimal, hexadecimal, binario, comentario, etc.)
El compilador para generar el archivo objeto , el archivo de errores y el listado del programa. Utiliza
el MPASMWIN.
El simulador para probar la lgica del programa y poderlo depurar (debugger). Utiliza el MPLAB-SIM
Las versiones a partir de la 5.7.4 permiten programar para el PIC16F628A.
compilador solo toma en cuenta los LSB que requiere el parmetro. Si necesita ms bit completa con '0' los
MSB que falten.
KAR EQU 0x31
;KAR = B'00110011'
movlw KAR
;Carga W con B'00110011' Usa los 8 bit de la etiqueta
movwf KAR
;Mueve W a la posicin M(RP1:RP0:'0110011') Usa los 7 LSB de la etiqueta
bsf
KAR, KAR
;Pone a 1 el bit de orden '011' del registro M(RP1:RP0:'0110011')
; Usa los 7 LSB de la etiqueta para identificar el registro y los 3 LSB
; para indicar el orden del bit.
Goto KAR
;Carga los 11 LSB del PC con '00000110011'
ORG
Sirve para ubicar las instrucciones que se escriban a continuacin de la
posicin indicada de memoria.
Su sintaxis es
ORG 0xnnnn
;El programa a partir de aqu se ubicara desde la posicin
;nnnn en adelante.
Su uso permite escribir el programa como quede ms cmodo y que el compilador lo ordene.
El PIC16F628A al ser reseteado pone el PC a cero. Por lo tanto se obtiene el vector de RESET en 000h.
Al atender una peticin de interrupcin, el programa principal, la busca en la posicin 004h. Por lo tanto se
tiene el vector de interrupcin en 004h.
Entre el vector de inicio y el vector de interrupcin hay pocas posiciones de memoria. Para poder desarrollar
un programa ms o menos completo es necesario saltar por arriba de la subrutina de interrupcin. O sea
colocar una instruccin goto hacia donde comienza el programa principal.
Las subrutinas en este micro deben comenzar en cualquier posicin ROM
ORG 0x000
VECTOR_de_RESET
goto
INICIO
ORG 0x004
VECTOR_de_INTERRUPCION
.
.
.
retfie
SUBRUTINA
; Comienza de subrutina
;Al no indicar un valor determinado, el propio
;compilador le signa la posicin.
; Cuenta una posicin por cada instruccin
; desde el ltimo comando org.
.
.
.
return
ORG
INICIO
.
.
.
0x0100
; Inicio del Cuerpo del programa principal.
;
Si las etiquetas de posicin deben ir en una posicin determinada (por ejemplo vector_de_interrupcion)
primero colocamos el comando ORG y en la lnea siguiente la etiqueta de posicin.
END
;Indica el final del programa a compilar. Todo lo que se escriba a
continuacin no ser compilado por el ensamblador. Despus de este comando debe haber un carcter de
retorno de carro (enter) o rengln en blanco.
LIST
;Este comando ajusta varios parmetros de cmo se realizar la
compilacin. Uno de ellos es para que micro realizar el programa objeto. Antes de comenzar con el
60
programa fuente es necesario elegir para qu micro se har esta asociacin. Cada micro tiene su propio set
de instrucciones. Inclusive dentro de la misma familia debido a sus caractersticas personales puede variar.
En este curso se elige el PIC16F628A.
LIST p=16f628a
Ejemplo para compilar para el pic16f628a. Le dice al compilador para que micro esta diseado el programa.
Se debe colocar primero este comando sino no reconoce los dems.
__CONFIG
bxxxxxxxxxxxxx
; El dato se guarda en la posicin 2007 para el
pic16f628a y configura varios parmetros de funcionamiento del micro: proteccion de la ROM, proteccin de
la EEPROM, tensin baja de programacin, retardo de encendido, reset por baja tensin, reset externo,
WDT y modo del oscilador
--
--
--
--
CPD
LVP
BOREN
MCLRE
FOSC2
PWRTE
WDTE
FOSC1
FOSC0
Bit
13
Bit 0
61
__IDLOCS
hxxxx
;Graba los nibles IDLOCS de las posiciones 2000 a 2003. El PIC
16F628A tiene la posibilidad de grabar los nibles bajos de las posiciones 2000 a 2003 con un valor que
puede ser usado como nmero de serie, identificador o cualquier otro uso.
Solo estos dos comandos pueden grabarse en las posiciones de memoria de configuracin.
INCLUDE <nom_file.inc>
;Inserta las lneas del archivo nom_file.inc en el programa fuente.
Este archivo debe encontrarse en la misma carpeta que el archivo fuente, o se debe incluir el path completo,
o estar en la carpeta de trabajo del MPLAB. En general se incluye un archivo con todos los nombres de los
SFR declarados.
Include <p16f628a.inc>
;Inserta el archivo p16f628a.inc ubicado en la
;carpeta del MPLAB. Este archivo contiene la declaracin de las
; etiquetas para todos los SFR y sus bit de este chip
INICIO
programa.
FINAL
Comandos
EQU
EQU
EQU
Operandos
0xnnn
0x05
0x2A
Comentarios
;Seleccionar principio de la subrutina.
;Indica posicin del buffer del puerto A
;Indica posicin de la variable VAR1
ORG
INICIAR
movlw
movf
goto
END
0x35
VAR1
INICIO
Al escribir un programa fuente se debe encabezar con una descripcin del autor sobre el programa, versin
y fecha. Una explicacin de para que problema se aplica y como lo soluciona.
El primer comando que se escribe es LIST as se le indica al compilador como debe tratar al archivo fuente.
En particular para que micro se esta trabajando.
Los siguientes comandos son __CONFIG para cargar la palabra de configuracin, __IDLOCS para
identificar el software.
62
A continuacin se debe declarar todas las etiquetas de las posiciones de los SFR, esto se puede hacer con
el comando INCLUDE.
Se asocia cada variable con una posicin de memoria RAM o registro GPR. Se debe observar si al registro
elegido se le pueden aplicar las operaciones y movimientos que sufre la variable.
El registro ms verstil es el de trabajo (W). No se debe asociar ninguna variable a este registro en forma
permanente, sino siempre temporal. Esto se debe a que muchas veces al operar se necesita mover la
variable del registro elegido al W y despus nuevamente al registro.
Si la variable tiene ms bits que un registro, hay que asociarla a ms de una posicin de memoria RAM.
Solo hay dos punteros accesibles al operador, el de direccionamiento indirecto FSR para la RAM y el
contador de programa PC para la ROM.
Se puede direccionar un dato solo de estas formas:
Direccionamiento inmediato. El dato o literal esta incluido en la instruccin.
Direccionamiento inherente. La instruccin define el registro a usar sin incluir su direccin.
Direccionamiento directo. La instruccin incluye la direccin donde esta el operando o dato.
Direccionamiento indirecto por registro. El registro a usar como puntero es el FSR. La instruccin
direcciona al registro INDF (00h), pero busca el dato en la posicin direccionada por FSR.
Direccionamiento Relativo. Se utiliza el PC para direccionar ROM mediante una rutina.
A cada valor de posicin ROM (Vector de Interrupcin, Vector de Inicio, Subrutinas, etc.) se le asocia con
una etiqueta de posicin, la cual es calculada automticamente por el compilador.
El compilador asigna a cada instruccin una posicin de ROM y calcula para cada etiqueta de posicin su
valor. El compilador cuenta desde el ltimo comando ORG y sino lo hubiera por defecto comienza en 0000h.
63
Movimientos y asignaciones
La operacin ms simple es la asignacin de valores a una variable. Si es un valor genrico de 8 bit se
representa con dos letras en minscula (nn, xx, yy), si es de 12 bit con tres minsculas (nnn, mmm, qqq) y si
es de 16 bit se usan cuatro letras (nnmm, ppqq, yyyy, vvzz)
El destinatario de la asignacin es una variable o puntero.
Aunque en el diagrama se indique un valor genrico, en el
programa fuente solo se puede asignar un valor numrico
VAR <-- nn
K <-- 10
conocido. En lenguajes de alto nivel aceptan usar valores
genricos, en assembler no pueden haber ambigedades.
En el pic el nico registro que permite cargar un valor en
forma inmediata es W, as que primero cargamos el valor en W y despus lo movemos al registro K
Los nombres de las variables aqu sern usados como etiquetas para determinar su posicin
movlw
0x10
;Se carga W con 10h
movwf
K
;Mover W al registro de direccion K
Se hacen asignaciones para cargar valores en las posiciones de memoria, para el valor de los punteros, o
para a enviar datos por los puertos. Las asignaciones son movimientos de datos, desde la instruccin hacia
el registro destino. Implican un direccionamiento Inmediato.
Los movimientos de datos significan copiar el contenido de un elemento en otro. Solo se puede hacer entre
elementos de igual clase. Por ejemplo el valor de un puntero de 10 bit no puede ser copiado en una variable
de 8 bit. El elemento que suministra la informacin es llamado origen y el que la recibe destino. El dato
residente en el origen no se altera, solo se destruye el dato anterior al movimiento en el registro destino.
No hay instruccin que mueva los datos de un registro GPR o SFR a otro. El dato
debe ir primero al W y despus al registro destino.
VAR1 --> VAR2
movf
VAR1,W
;mover VAR1 al W
movwf
VAR2
;mover W al VAR2
El dato se copia en el registro destino y en el W.
El mover el contenido de un registro a otro, significa en realidad, copiar el valor que almacena un registro
llamado origen o fuente en el registro llamado destino.
VAR1 VAR1
Cuando un dato es trado de memoria es necesario tener su posicin de alguna manera. Ya sea el valor de
su direccin en forma directa, almacenada en alguna variable o puntero o por el resultado de una operacin.
Una variable de muchos bits puede ser formada por la concatenacin de dos variables ms cortas.
Ejemplo Pdest = VAR1:VAR2
Los dos puntos en medio significa que se concatenan, aportando VAR1 los bit ms significativos y VAR2 los
bit menos significativos.
El direccionamiento es independiente de que un registro este mapeado sobre el otro banco o no este
implementado fisicamente. Por ejemplo los registros 70h, F0h, 170h y 1F0h estan todos mapeados sobre el
70h. Por lo tanto acceder a cualquiera de estas direcciones es trabajar sobre el registro 70h.
Otro ejemplo es el registro 0x18F no esta implementado fisicamente, el escribir o leer no genera error
ninguno, su contenido es considerado 00.
64
ROM
NN0 --> W
XX1
M(VAR) --> W
Pdat = FSR
W
NN2
M(Pdat) --> W
0x04 FSR
NN1
NN2
XX1
movf INDF, W
movf 0x00, 0x0
-La instruccin indica, no la posicin donde se guarda el dato sino, donde se guarda el valor de la posicin
de memoria. Se invoca el uso de un puntero el cual almacena la posicin del dato a usar. Se llama
direccionamiento indirecto por registro.
Este micro tiene un solo puntero (FSR) para la memoria RAM, pero no tiene instrucciones especficas para
usarlo. Cualquier instruccin que direcciona en forma directa la posicin 0x00 de RAM o sea el registro
INDF, es interpretada como que utiliza al puntero FSR. El registro INDF no tiene implementacin fsica en el
hardware.
El bloque ser,
M(Pdat) W
M(FSR) W
Se debe asociar este puntero lgico Pdat al nico puntero
fsico FSR.
La instruccin o mnemnico es
movf 0x00,.0
movf INDF,W
Observar que en el mnemnico no se nombra al FSR y se usa la misma instruccin que en el
direccionamiento directo. La diferencia esta en el argumento, el cual es 00 o INDF. Estas instrucciones no
alteran el valor del FSR.
La existencia de ms de un banco implica una dificultad si se desea trabajar con registros en los cuatro
bancos. El FSR tiene la capacidad de con sus 8 bits selecccionar 256 posiciones RAM, se utiliza el bit IRP
(STATUS,7) para indicar el grupo de los bancos 00-01 o 10-11.
Cargar una posicin de memoria seleccionada por puntero. Solo se puede utilizar el FSR de 8 bit ubicado en
04h. Este basta para direccionar todos los registros RAM. Para utilizarlo se trabaja
con el registro INDF
;Se debe tener cargado el FSR con el valor deseado y seteado el bit IRP
45 --> M(Pdat)
movlw
0x45
;Cargar 45 en W
movwf
INDF
;Mover W a M(Pdat)
Cargar una posicin de memoria seleccionada por una variable llamada puntero lgico. Solo se puede
utilizar el FSR como puntero fsico de 8 bit ubicado en 04h. Para utilizarlo se trabaja
con el registro INDF. Se debe cargar el valor de la variable en FSR
45 --> M[VAR1]
movf
VAR1, W
;Se debe tener seteado el bit IRP
movwf
FSR
;Copio el valor de VAR1 en el FSR
movlw
0x45
;Cargar 45 en W
movwf
INDF
;Mover W a M[VAR1]
Cargar el valor de una variable en un registro direccionado por puntero.
;Se debe tener cargado el FSR con el valor deseado y seteado el bit IRP
movf
VAR2,W
;Colocar VAR2 en el registro de trabajo W
VAR2 M(Pdat)
movwf
INDF
;Cargar el registro M(Pdat) con el valor de
; VAR2
El registro INDF permite usar el direccionamiento a travs del puntero FSR.
Mover la informacin entre dos posiciones dadas ambas mediante direccionamiento indirecto. El dato debe
pasar por el W. Se indican dos punteros lgicos pero solo esta el FSR como
puntero fsico. Se deben usar registros auxiliares para almacenar el valor de los
M(Porig) M(Pdest)
punteros cuando no son usados.
65
Estos van a ser Porig y Pdest. Para guardar momentneamente el dato se usa AUX. Este es un bloque
complejo que es conveniente convertir en un conjunto de bloques simples.
Porig FSR
M(FSR) AUX
Pdest FSR
AUX M(FSR)
movf
Porig,W
;Traer valor actual de Porig
movwf
FSR
;Se coloca Porig en el registro FSR
movf
INDF,W
;M(Porig) W
movwf
AUX
;Se guarda el dato en un reg auxiliar
movf
Pdest,W
;Traer valor actual de Pdest
movwf
FSR
;Se coloca Pdest en el registro FSR
movf
AUX,W
;Traer el dato desde el reg auxiliar.
movwf
INDF
;Guardo dato en M(Pdest)
Ahora cada bloque se asocia a 2 instrucciones.
Ejercicio:
R3
R4
R2
R1
Cambie el contenido de los registros R1, R2, R3, R4
Mover R1 a R2, R2 a R3, R3 a R4 y R4 a R1
A partir del diagrama de flujo diseado como solucin se escribe el programa fuente correspondiente.
;------------Ejercicio Rotacin de Registros ----------------------;Es aconsejable llenar el programa de comentarios que guen
;en la comprensin del mismo
;Primero definir el micro a usar y las condiciones de uso
LIST
__CONFIG
p=16f628a
0x2150
;Configura el ensamblador
;Configura Oscilador XT ,
;No WDT, Si PWRT, No CP
;Se debe definir los valores de las variables a usar.
;No usa ningn modulo interno.
AUX
EQU
0x20
R1
EQU
0x21
R2
EQU
0x22
R3
EQU
0x23
R4
EQU
0x24
INICIO
R1 W
W AUX
R4 W
W R1
R3 W
W R4
R2 W
W R3
AUX W
W R2
FINAL
66
El intercambio es un movimiento que no destruye ninguna de las dos informaciones. Pocos micros pueden
realizar esa accin en una sola instruccin
Este bloque complejo se debe desglosar en varios ms
VAR1 BAR2
simples. Tomando la experiencia del ejercicio anterior es
var2 M(Pxx)
necesario crear una variable auxiliar para realizar el
intercambio.
VAR1 W
W AUX
BAR2 W
W VAR1
Movf
movwf
movf
movwf
movf
movwf
VAR1, W
AUX
BAR2, W
VAR1
AUX, W
VAR1
AUX W
W VAR1
Operaciones
Las operaciones pueden ir en un solo bloque, en general los micros solo pueden operar con 2 variables y
una de ellas ser usada como destino del resultado si lo hay. Por lo tanto las operaciones complejas o multivariables solo van en los diagramas generales y no en los personalizados. Adems solo hacen operaciones
lgico-matemticas simples y bsicas.
2A + B + 15 --> C
movf
addwf
addwf
addlw
movwf
A, W
A, W
B, W
0x15, W
C
W C
Otra forma de personalizarlo es la siguiente:
movf
movwf
A W
addwf
C + W C
movf
W C
addwf
15 W
C + W C
movlw
addwf
C + W C
B W
A, W
C
C, W
B, W
C, W
0x15
C, W
67
Cualquier bloque que opere con ms de 1 variable es complejo puede ser simplificado en varios bloques.
VAR1 W
VAR2 and W W
movf
andwf
movwf
VAR1, W
VAR2, W
VAR3
W VAR3
Saltos y Decisiones
La llegada de una rama a otra implica colocar una etiqueta que marque esa posicin en el programa fuente.
Son nombres que van colocados sobre el margen izquierdo, sin espacios en blanco.
Los codos implican saltos hacia algn bloque del programa que no es el consecutivo. Se asocian con la
instruccin goto, y con un argumento que representa una posicin como una
etiqueta de posicin..
goto
ETIQUETA_DE_POSICION
Un salto implica no ejecutar el bloque siguiente inmediato. Se sale de un bloque y se ira a otro que no esta
inmediato siguiente.
La direccin del salto puede estar en un valor cargado en forma inmediata, estar almacenado en un registro
de memoria (interno o externo al procesador), o ser el resultado de una operacin o ser un valor inherente o
prefijado por el fabricante. En el diagrama de flujo se representan con un codo en la linea de flujo. El destino
del salto, que sera la entrada de algn bloque se identifica con una etiqueta de posicin.
LLEGADA1
LLEGADA1
VAR1 00
VAR2 VAR1
clrf
movf
movwf
goto
VAR1
VAR1, W
VAR2
LLEGADA1
incf
PD, F
LLEGADA2
LLEGADA2
PD + 1 PD
A = 22?
SI
hubo acarreo en una suma o borrow en una resta) y Z (indica si el resultado de una instruccin es cero).
Para el PIC16F628A los indicadores son bit del registro STATUS (posicin 0x03) y puede chequear todos
los bit de la RAM. Maneja los indicadores de la ALU como a cualquier otro bit dentro de cualquier registro
GPR y SFR.
Los bits dentro de la variable se numeran segn su orden. La notacin es el nombre de la variable seguido
de una coma y del ordinal del bit elegido.
VAR nn
VAR 1 VAR
CY= 1
SI
SI
Z=0
NO
K+1K
NO
K+1K
En el primero de estos ejemplos se verifica cuando no se activa el flag Z indicando que VAR alcanzo el valor
cero.
En el segundo ejemplo se detecta si hay un desborde de la suma.
La deteccin de bit en el PIC se hace sobre cualquier bit de los registros SFR y GPR, es decir sobre todo el
mapa de memoria RAM. La bifurcacin solo pueden saltar una instruccin, se ejecuta o no la siguiente
instruccin.
Al personalizar los diagramas de flujo se necesita considerar este punto para contar correctamente los
saltos de programa.
Considere el siguiente ejemplo:
K 5E
K 5E
LLEGADA
NO
K1K
K1K
K = 00
STATUS, Z = 1
SI
SI
NO
movlw
movwf
LLEGADA
decf
btfss
goto
..
...
0x5E
K
K,F
STATUS, Z
LLEGADA
En el diagrama de la derecha se observa el detalle de los saltos para un diagrama personalizado. Los
bloques de decisin incluyen siempre un salto, en los PIC sucede solo si se cumple la condicin. El otro
salto en el ejemplo no esta incluido en el bloque, es un smbolo aparte.
Los bloques de decisin saltan una instruccin cuando se cumple la condicin. Si no se cumple ejecutan la
instruccin siguiente. Se debe realizar la consulta de forma que la respuesta afirmativa genere el salto. La
forma de clarificar los diagramas es utilizar esta forma para los bloques de decisin:
SI
NO
La mayora de los bloques simples se puden representar con una o ms instrucciones. Siguiendo la filosofia
RISC, Microchip en los PIC incluyo las instrucciones decfsz reg, d y incf reg, d las cuales pueden
asociarse a una estructura de varios bloques simples. Estas instrucciones son potentes y complejas a
diferencias del resto de las instrucciones que son sencillas, inclusive se pueden con implementar con una
69
pequea rutina. Pero al permitir asociarse con una estructura muy usada facilita la confeccion de
programas.
Observar que ninguna de esta instrucciones alteran los indicadores CY y Z.
Al asociar diagrama de flujo con instrucciones se convierte de a un bloque por vez:
movlw 0x5E
movwf K
K 5E
LAZO
LAZO
K1K
NO
K = 00
SI
K 5E
AUMENT
K+1K
movlw 0x5E
movwf K
AUMENT
incfsz K,F
goto
NO
AUMENT
K = 00
SI
SI
CY = 1
NO
VAR2 33
SI
VAR3, 3 = 0
NO
VAR3 + 02 VAR3
LLEGAR1
CY = 0
SI
LLEGAR1
NO
VAR2 33
btfsc STATUS,CY
goto
LLEGAR2
movlw
0x33
movwf
VAR2
goto
LLEGAR3
;Si CY es cero PC + 1 PC
;Si es uno saltar a LLEGAR2
btfsc
goto
LEGAR2
LLEGAR2
VAR3, 3 = 1
SI
NO
LLEGAR3
VAR3 + 02 VAR3
VAR1,.3
LLEGAR1
LLEGAR3
movlw
addwf
0x02
VAR3,F;
70
Para comparar dos variables primero debemos restarlas entre si. Y que el resultado no afecte a ninguna de
las dos. Despus se verifican los flag de CY (STATUS,0) y Z (STATUS,2). En la resta el CY representa el
negado del borrow. Por lo tanto si la resta lleva borrow entonces CY=0
VAR1 VAR2
VAR1 = VAR2
;
Z=1
CY=X
VAR1 VAR2
;
Z=0
CY=X
VAR1 < VAR2
;
Z=X
CY=0
VAR1 VAR2
;
Z=X
CY=1
VAR1 > VAR2
;
Z=0
CY=1
VAR1 VAR2
;
Z=1
CY=X o Z=0 CY=0
Observar que la repuesta que genera el salto es la afirmativa
VAR1 VAR2 --> w
VAR1 = VAR2
NO
Se transforma en
VAR1 VAR2
SI
NO
K + 1 --> K
K + 1 --> K
VAR1 = VAR2
SI
NO
SI
K + 5 --> K
VAR2,W
VAR1,W
STATUS,Z
K,F
VAR1 = VAR2
SI
NO
K + 5 --> K
NOIGUAL
movf
subwf
btfss
VAR2,W
VAR1,W
STATUS,Z
goto
movlw
addwf
NOIGUAL
NOIGUAL
0x5E
K,F
VAR1 VAR2
SI
K + 1 --> K
Se transforma en
movf VAR2,W
subwf VAR1,W
;Restar / comparar
btfss STATUS,Z
;Si la bandera Z es
;uno se salta la instruccin inmediata.
;Si Z=1 PC + 1 PC
incf
K,F
.
71
K + 1 --> K
SI
VAR1 VAR2
NO
SI
VAR1 VAR2
SI
NO
K + 5E --> K
K + 5E --> K
movf
subwf
btfsc
goto
movlw
addwf
IGUALES
VAR2,W
VAR1,W
STATUS,Z
IGUALES
0x5E
K,F
IGUALES
movf
subwf
btfss
SI
VAR2,W
VAR1,W
;Restar
STATUS,CY
;Si BW=0 PC+1 PC
K,F
K + 1 --> K
incf
SI
NO
K + 1 --> K
Se transforma en
movf
subwf
btfsc
NO
VAR1 VAR2
SI
incf
.
K + 1 --> K
K + 1 --> K
K + 1 --> K
VAR2,W
VAR1,W
STATUS,CY
NOMAYOR
STATUS,Z
K,F
72
SI
NO
VAR1 = VAR2
movf
subwf
btfss
goto
btfss
incf
NOMAYOR
SI
NO
K + 1 --> K
NOMAYOR
SI
VAR1 VAR2
VAR1 = VAR2
SI
NO
SI
K + 1 --> K
VAR1 VAR2
SI
NO
movf
subwf
btfss
btfss
incf
.
VAR2,W
VAR1,W
STATUS,Z
STATUS,CY
K,F
K + 1 --> K
;Comparar
;Si son iguales altar e incrementar
;Si no es menor salto sin incrementar
Algunos micros pueden manejar lgebra booleana, setear (poner a 1) o resetar (poner a 0) un bit
determinado dentro de una variable. Resetear se le llama tambin limpiar (clear) el bit. Otra operacin es el
complemento a 1 del bit. Otras operaciones lgicas como OR o AND son ms escasas.
Ejemplos
VAR,1
identifica al bit 1 de VAR por el nmero de orden
PUERTA, SENSOR identifica al bit mediante la etiqueta SENSOR
PUERTA, 1 <-- 0
VAR1, 1 <-- 1
PUERTA, SENSOR = 1
Hay micros que solo pueden chequear los bit de las banderas de
SI
resultado. Por lo tanto se utilizan tcnicas que permitan verificar cualquier bit de cualquier variable. Hay 2
formas principales y ambas son destructivos de la informacin de la variable.
Modo de enmascaramiento.
Se considera este ejemplo:
queremos verificar el bit 4 de una variable VYR.
Primero se copiar esta informacin en un lugar seguro.
Se hace una operacin AND con el valor 00010000B.
El resultado se resume a dos posibles: es 00H o es 10H.
Se detecta si el resultado es cero o no, verificando el flag Z.
Si Z=1 entonces VAR,4 = 0
Si Z=0 entonces VAR,4 = 1
Modo de desplazamiento.
Se considera el ejemplo anterior.
Primero copiar esta informacin en un lugar seguro.
Se giran los bits de la variable hacia la izquierda (o la
derecha) hasta que el bit deseado quede en el flag de CY.
Se detecta si el flag de CY vale cero o uno.
Si CY=1 entonces VAR,4 = 1
Si CY=0 entonces VAR,4 = 0
ENMASCARAMIENTO
VYR --> VAR
VAR AND 10
Z=1
PROCESAR
DESPLAZAMIENTO
VYR --> VAR
VAR,n --> VAR, n+1
CY = 1
73
PROCESAR
K = 00
SI
Se necesita conocer el valor con que cada variable llega al lazo. Se debe asegurar
de no entrar en el lazo con alguna variable teniendo un valor que perjudique el
desarrollo del mismo.
Si su valor se asigna independiente del valor anterior no es tan importante, pero si
su valor depende de valores anteriores como en los incrementos o decrementos es
necesario tener certeza de su valor al comienzo de la primera vuelta de la iteracin.
Por lo tanto antes de entrar al lazo se le debe asignar un valor de inicio.
En este ejemplo la variable K es la variable de lazo. El puntero Pd no tiene valor
conocido al entrar en el lazo. Afecta el desempeo del programa pero no la salida
de la iteracin.
La variable de lazo se puede chequear en cualquier lugar del
lazo. Si se hace al final permite ahorrar un salto, de lo
contrario se necesitan al menos dos. Uno para salir y otro
para reiniciar el lazo
Para salir del lazo se puede chequear ms de una variable, la misma varias veces o
diferentes condiciones de la variable. Es decir tener ms de un bloque de decisin que
permite salir del mismo.
K <-- 00
PROCESO
K + 1 --> K
VAR = 2B
Pd + K --> Ps
K --> VAR2
Cuando se tratan datos, se deben toman de algn lado. Si es siempre de la misma posicin de memoria se
puede usar el direccionamiento directo del operando. Pero si los datos estn ordenados en posiciones de
memoria sucesivas se los considera como con una serie o matriz, facilita entonces usar un puntero, al
variarlo en cada vuelta cambia la posicin del dato seleccionado. En los lazos se hacen muy tiles los
punteros. Dentro del lazo se utiliza la misma instruccin, pero al variar el contenido del puntero cambia el
dato seleccionado. En los PIC se utiliza el direccionamiento indirecto por registro.
Los punteros se deben asociarse con el registro FSR de posicin 04h. Cuando el programa contiene ms
de un puntero lgico, se debe guardar cada puntero en un registro. Para usar cada puntero se coloca su
contenido en el FSR.
74
Ejercicio: Se tiene un conjunto de KANT datos almacenados a partir de la posicin ORIG. Aplicar el Ca1 a
cada uno de los elementos del conjunto.
INICIO
Primer mtodo es tratar cada dato en forma individual, se direcciona
cada dato en forma directa. Es necesario hacer esto para cada dato.
M(ORIG) <-- M(ORIG)
Por lo tanto las acciones se realizan KANT veces.
El primer valor se ubica en la posicin ORIG y el ltimo o sea el
M(ORIG + 1) <-- M(ORIG + 1)
kant-simo valor en la posicin ORIG + KANT 1.
En este ejemplo no se especifica el nmero de elementos a operar,
M(ORIG + 2) <-- M(ORIG + 2)
pero no afecta el tema a tratar.
En el diagrama anterior se nota lo repetido de la estructura operar el
dato. Esta repeticin se puede ejecutar con un lazo finito. Se
identifica lo que varia en cada iteracin, en este caso es la posicin M(ORIG + KANT - 1) <-- M(ORIG + KANT - 1)
de memoria usada para buscar el dato.
INICIO
En el programa anterior se usa direccionamiento directo. En el lazo
se debe usar direccionamiento indirecto. Se agregan 2 variables, un puntero y una variable de lazo. El
puntero que asumir el valor de cada una de las posiciones de memoria, se
INICIO
inicializa con el valor ORIG y se incrementa en 1 para cada vuelta del lazo. Todo
lazo finito necesita una variable de lazo, se utiliza la variable LAZO que comienza
Pdat <-- ORIG
con el valor KANT. Agregar un lazo finito implica agregar una variable de lazo.
El bloque M(Pdat) M(Pdat) toma el dato de una posicin diferente en cada
LAZO <-- KANT
vuelta del bucle. As no es necesario ir nombrando cada registro a usar en forma
BUCLE
directa.
M(Pdat) <-- M(Pdat)
Este lazo se repite KANT veces, desde que la variable de lazo LAZO vale KANT
hasta que vale 1. Al final del ltimo lazo asume el valor cero, por lo que el bloque
de decisin termina la iteracin.
Pdat + 1 --> Pdat
Se observa que el puntero y la variable de lazo adquieren un valor diferente al de
entrada en la iteracin. En particular el puntero termina con un valor
correspondiente al del ltimo elemento de la serie ms uno. Si se va a usar de
nuevo el puntero Pdat deberamos asignarle el valor de inicio (ORIG).
Personalizado para el PIC16F628A este programa queda:
El puntero se asocia al registro FSR, que es el nico puntero de la memoria RAM.
LAZO = 00
SI
FINAL
Este programa es ms corto en cantidad de bloques a usar, pero demora ms tiempo en terminar que la
solucin anterior. Tambin utiliza ms variables que la primera solucin, por lo que consume ms recursos
del sistema.
INICIO
INICIO
movlw
ORIG
;Debe declararse el valor de esta etiqueta
movwf
Pdat
;Debe asociarse a una direccin de RAM
Pdat <-- ORIG
movlw
KANT
LAZO <-- KANT
movlw
LAZO
BUCLE
BUCLE
movf
Pdat, W
;Preparo el puntero a utilizar
Pdat --> FSR
movwf
FSR
comf
INDF, F
;Opero el dato
M(FSR) <-- M(FSR)
incf
Pdat, F
;Actualizo el puntero
Pdat + 1 --> Pdat
LAZO 1 --> LAZO
NO
decfsz
goto
FINAL
LAZO, F
BUCLE
LAZO = 00
75
Matrices Y Series:
Las series permiten trabajar con grupos de valores tratndolos como un todo, en vez de pensar el proceso
para cada dato, se razona para toda la serie. Es muy util para estos casos realizar un lazo, se define el
puntero de inicio y despus se le actualiza o indexa para ir seleccionando cada uno de sus elementos. Se
usa el nmero de elementos para cargar la variable de lazo.
Las matrices sirven igual que las series, pero usan ms de un puntero. La utilidad de este elemento radica
en que permite organizar los datos dentro de la memoria.
Ambos elementos son formas lgicas de organizar los datos. Fsicamente en memoria se almacena un dato
a continuacin de otro.
En el manejo o representacin de matrices y series se usa un puntero por cada dimensin. La seleccin de
datos comnmente se hace en orden secuencial, o sea se toman uno a uno y en forma consecutiva, y
adems se les aplica a todos el mismo proceso o muy parecido. Por estas caractersticas es muy
conveniente el uso de lazos en el manejo de dichas estructuras. En cada repeticin se modifican los
vectores de entrada a la matriz y se selecciona un nuevo dato.
La matriz ms simple es la serie, solo se necesita saber el valor del puntero, que indicar la posicin del
primer elemento, y el nmero de datos que componen la serie llamado longitud.
En el PIC16F628A solo se tiene un puntero de memoria RAM, el registro FSR (posicin 04h). Permite
direccionar posiciones de RAM en cualquiera de los bancos, en conjunto con el bit STATUS,IRP.
Ejercicio:
Dado una serie de KANT elementos a partir de la posicin ORIG,
colocarla a partir de la posicin DEST.
Hay un solo puntero fsico (FSR) en el micro, por lo que es necesario
ir alternando la informacin de cada uno de los punteros lgicos del
programa.
La mayora de los micros, y en particular el PIC16F628A, no pueden
mover de una posicin de memoria direccionada por un puntero a
otra posicin de memoria direccionada de la misma forma. Por lo
tanto hay que usar una variable que sirva de intermediario.
Antes de entrar en el lazo a todas las variables se le asigna un valor
inicial. Valor con el que operan durante la primera vez que recorran
el lazo. Al salir de la iteracin vemos que su valor se ha modificado.
K=0
Pdest = DEST + K + 1
Pdat = ORIG + K + 1
Observar que los punteros en este diagrama terminan valiendo uno
ms que la posicin de los ltimos elementos.
Personalizar este diagrama presenta una particular dificultad en el
bloque de movimiento con el origen y el destino direccionados en
forma indirecta por registro.
INICIO
Pdat <-- ORIG
Cargo parametros
de entrada
Traigo un dato
de la seie
origen a la
serie destino
Actualizo ambios
punteros
K 1 --> K
NO
K = 00
SI
FINAL
Pdat -->W
W --> FSR
M(FSR) --> W
W --> VAR
Pdst --> W
W --> FSR
VAR --> W
W --> M(FSR)
76
INICIO
LAZO
INICIO
W <-- ORIG
Pdat <-- W
W <-- DEST
Pdst <-- W
W <-- KANT
K <-- W
LAZO
movf PDAT,W
movwf FSR
;Coloca 1 puntero lgico en el puntero fsico
movf INDF,W
movwf VAR ;El dato trado es colocado en la variable de intercambio
Pdat --> W
W --> FSR
M(FSR) --> W
movf PDST,W
movwf FSR
;Coloca 2ndo puntero lgico en el puntero fsico
W --> VAR
movf
W --> FSR
Pdst--> W
movwf INDF
incf
PDAT,F
incf
PDST,F
decfsz K,F
;Verifica si queda algn elemento por trasladar
goto
LAZO
VAR --> W
W --> M(FSR)
Pdat + 1 --> Pdat
Pdst + 1 --> Pdst
K + 1 --> K
NO
FINAL
;------------Ejercicio traslado de una Serie ----------------------;Es aconsejable llenar el programa de comentarios que guen ;en la comprensin del
mismo
;Primero definir el micro a usar y las condiciones de uso
LIST
p=16f628a
;Configura el ensamblador
__CONFIG
0x2150
;Configura Oscilador XT ,No WDT, Si PWRT, No CP
;Se debe definir los valores de las variables y constantes a usar.
ORIG
EQU
0x20 ;Valor inicial del puntero fuente
DEST
EQU
0x30 ;Valor inicial del puntero destino
KANT
EQU
0x0A ;Nro de elementos de la serie
PDAT
EQU
0x70 ;Puntero de la serie
PDST
EQU
0x71 ;Puntero de la serie final
K
EQU
0x72 ;Variable de lazo
VAR
EQU
0x73 ;Variable auxiliar para procesar los datos
;Cargo los nombres de los FSR mediante el comando include
include
<p16f628a.inc>
INICIO
LAZO
ORG
movlw
movwf
movlw
movwf
movlw
movwf
0x0000
ORIG
PDAT
DEST
PDST
KANT
K
movf PDAT,W
movwf FSR
movf INDF,W
K = 00
SI
FINAL
FINAL
movwf
movf
movwf
movf
movwf
incf
incf
decfsz
goto
VAR
PDST,W
FSR
VAR,W
INDF
PDAT,F
PDST,F
K,F
LAZO
END
Subrutinas
Es una seccin del programa con principio y fin definidos, usado mediante invocacin o llamada en el
programa principal. No depende de su extensin sino de que se desarrolle aparte y ser invocada por el
programa principal.
El diagrama se debe desarrollar aparte (sin ramas que lo conecten) del diagrama
principal. En el bloque de inicio va el nombre de la subrutina. El nombre en el inicio
SUBPROCESO
debe ser el mismo que en el bloque de invocacin, de esa forma se asocia un
diagrama con otro.
La instruccin que se asocia a este bloque es CALL nnn. El argumento de la misma es un valor numrico
que indica la direccin ROM donde comienza la subrutina.
En lugar de un numero se utiliza una etiqueta, que se define al comienzo de la subrutina como etiqueta de
posicin. El compilador la calcula automticamente.
Las subrutinas se desarrollan antes o despus del programa
SUBPROCESO principal. En el caso de los PIC16F628A se pueden ubicar en
SUBPROCESO
cualquier parte de la ROM
VAR + 1 --> VAR El o los bloques de finalizacin se llaman de retorno. Puede
tener ms de un bloque de finalizacin, el bloque de retorno
RETORNO
que se ejecute al cumplirse alguna condicin se le llama
retorno condicionado.
SUBPROCESO
incf
VAR2,f
return
Otra forma puede ser
SUBPROCESO
incf
VAR2,f
retlw PRONTO
PROGRAMA_PRINCIPAL
.
call
SUBPROCESO
.
.
call
SUBPROCESO
.
.
La conexin entre el programa principal y la subrutina son las variables que se comparten, llamadas de
intercambio. Es decir las usa el programa principal y las usa la subrutina. Se debe tener cuidado de no
alterar ninguna variable que se necesite con su valor original despus de ejecutar la subrutina y regresar al
programa principal.
La unin entre la subrutina y el programa principal es la o las variables que usen en comn. El programa
principal entrega los datos a la subrutina en las variables de entrada y las variables en que la subrutina
entrega sus datos son variables de salida.
78
ROM
PROG. PRINCIPAL
Instruccin
Instruccin
CALL nnn
Instruccin
Instruccin
CALL nnn
Instruccin
nnn
Instruccin
Instruccin
SUBRUTINA
Instruccin
RETURN
Ejercicio: Realizar una rutina que halle la diferencia absoluta entre dos
nmeros, ambos cargados de forma directa.
INICIO
COMPLEMENTO A2
VAR2
-->
RESTA
programa en la variable RESTA se encuentre el valor de la
diferencia entre nn1 y nn2.
NO
Si la subrutina altera alguna variable de la que no queremos
CY = 0
perder su valor debemos hacer un respaldo o copia de ella.
SI
Al finalizar la subrutina esta automticamente vuelve
RESTA --> VAR2
al programa principal. Se retorna a la siguiente instruccin
despus del llamado a subrutina. Esto es posible gracias a la
COMPLEMENTO A2
pila, la cual es una estructura lgica que permite almacenar
VAR2 --> RESTA
datos en forma temporal, con fcil acceso. En algunos micros
es un rea de la memoria RAM definida por el usuario, en
FINAL
otros son registros especiales para tal fin. La pila puede estar
definida en la RAM o ser hardware en registros especiales. Al menos se debe guardar el valor de contador
de programa. La profundidad o capacidad de la pila limita la posibilidad de encadenar subrutinas una dentro
de otra.
La pila del PIC16F628A es un banco de 8 registros (por hardware) de 13 bit usados nicamente para este
propsito. Solo almacena valores del PC. Esto limita a solo 8 subrutinas anidadas.
INICIO
MAYOR
D1 - D2
M(P1) D1
M(P2) D2
DEST + 1 DEST
P1 + 1 P1
D1 < D2
NO
MAYOR
P2 + 1 P2
D1 DM1
DM1 M(DEST)
K-1K
D2 DM2
DEST + 1 DEST
DM2 M(DEST)
NO
K = 00
SI
FIN
RETORNO
D1 DM2
D2 DM1
79
RETORNO
SI
Este diagrama es una solucion general. Muchos de los bloques no pueden ser representados por una
instruccion. Por lo tanto convertiremos esos bloques en varios ms simples.
La subrutina tiene 2 posibles retornos. Cuando ambos valores son iguales no importa cual se coloque
en DM1 y en DM2.
Las variables D1, D2, DM1 y DM2 sirven para el intercambio de informacion entre la subrutina y el programa
principal.
Se personaliza y desglosa el diagrama en bloques mas simples.
INICIO
INICIO
MAYOR
movf
D2, W
D2 W
W FSR
subwf
D1, W
D1 - W
INDF W
btfss
goto
STATUS, CY
NOMAYOR
CY = 1
P1 W
movf P1, W
movwf FSR
movf INDF, W
movwf D1
MAYOR
W D1
P2 W
movf P2, W
movwf FSR
W FSR
DEST, F
return
NOMAYOR
movf
MAYOR
DEST W
movf DM1, W
movwf INDF
DM1 W
movf
W INDF
movwf DM1
return
DEST W
movf DM2, W
movwf INDF
DM2 W
W FSR
W INDF
DEST + 1 DEST
incf
DEST, F
incf
P1, F
P1 + 1 P1
incf
P2, F
P2 + 1 P2
K-1K
NO
K = 00
SI
FIN
D1, W
movwf DM2
DEST + 1 DEST
FIN
80
NO
D1 W
W DM1
D2 W
W DM2
RETORNO
W FSR
movf DEST, W
movwf FSR
decfsz K, F
goto
INICIO
D2, W
movwf DM2
W D2
call MAYOR
incf
movf
INDF W
movf INDF, W
movwf D2
movf DEST, W
movwf FSR
movf
D1, W
movwf DM1
SI
D2, W
NOMAYOR
D1 W
W DM2
D2 W
W DM1
RETORNO
;------------Ejercicio con 3 punteros ----------------------;Es aconsejable llenar el programa de comentarios que guen en la comprensin del mismo
;Para simularlo se debe cargar en las posiciones 0x20, 0x21, 0x22 y 0x23 valores adecuados y
;los registros RAM del espacio de las series con datos variados.
;Primero definir el micro a usar y las condiciones de uso
LIST
p=16f628a
;Configura el ensamblador
__CONFIG
0x2150
;Configura Oscilador XT ,No WDT, Si PWRT, No CP
;Se debe definir los valores de las variables y constantes a usar.
P1
EQU
0x20
;Puntero logico de la serie 1
P2
EQU
0x21
;Puntero logico de la serie 2
DEST
EQU
0x22
;Puntero de la serie resultante
K
EQU
0x23
;variable con el nro de elementos de cada serie
DM1
EQU
0x24
;Variable de intercambio con la subrutina
DM2
EQU
0x25
;Variable de intercambio con la subrutina
D1
EQU
0x26
;Variable de intercambio con la subrutina
D2
EQU
0x27
;Variable de intercambio con la subrutina
CY
EQU
.0
;El orden de los bit los expreso en decimal
;Cargo los nombres de los FSR mediante el comando include
include
<p16f628a.inc>
ORG
VECTOR_RESET
MAYOR
movf
subwf
btfss
goto
movf
movwf
movf
movwf
return
NOMAYOR
movf
movwf
movf
movwf
return
;Programa principal
INICIO
movf
movwf
movf
movwf
movf
movwf
movf
movwf
call
movf
movwf
movf
movwf
incf
movf
movwf
0x000
goto
INICIO
D2, W
D1, W
STATUS, CY
NOMAYOR
D1, W
DM1
D2, W
DM2
D1, W
DM2
D2, W
DM1
P1, W
FSR
INDF, W
D1
P2, W
FSR
INDF, W
D2
MAYOR
DEST, W
FSR
DM1, W
INDF
DEST, F
DEST, W
FSR
81
FIN
movf
movwf
incf
incf
incf
decfsz
goto
DM2, W
INDF
DEST, F
P1, F
P2, F
K, F
INICIO
END
Nunca salir de una subrutina con la instruccin goto, eso genera que la pila se llene y desborde.
Situacin que se agrava si son subrutina anidadas.
Direccionamiento Indexado
Este micro solo posee un puntero para memoria RAM, y no aceptar cargar datos en la memoria de
programa. Una forma de recuperar datos desde la ROM es mediante direccionamiento inmediato, (movlw k,
addlw k, y otras instrucciones que trabajan con literales). Pero se puede usar el contador de programa PC
para obtener datos guardados en la ROM de programa. El PC siempre guarda la direccin de la prxima
instruccin a ejecutar.
El PC se pude alterar a travs de 2 registros, PCL y PCLATH
PCL - Registro de lecto/escritura copia los bit 0 a bit 7 del PC.
PCLATH - Registro de solo escritura permite cargar del bit 8 al bit 12 del PC.
Cualquier operacin sobre PCL altera al PC, o sea a la secuencia del programa, y vuelca PCLATH en los 5
MSB del PC. Este salto es un GOTO COMPUTADO. Un desborde o borrow en PCL no afecta a los bits altos
del PC.
La instruccin addwf PCL,F suma W al registro PCL y guarda el resultado en PCL. Vuelca el PCL en el
byte LSB del PC, y el PCLATH en los 5 MSB del PC.
Esta instruccin altera el PC segn el resultado de esta instruccin concatenado al valor cargado en
PCLATH. Lo cargado en PCLATH no se afecta a menos que sea escrito, pues no lee al PC sino que lo
carga solamente.
Si W = 3F , PCLATH = 03 y PC=0210 por lo tanto PCL = 10
addwf
PCL,F
Da como resultado PCL = 4F entonces PC=034F. Se produce un salto computado hacia delante en el
programa
Si W = 1A , PCLATH=01 y PC = 1F3 entonces PCL = F3
addwf
PCL,F
Da como resultado PCL = 0D entonces PC = 010D. Se produce un salto computado hacia atrs en el
programa.
Se puede usar cualquier instruccin que tenga a PCL como destino.
*La instruccin
retfie
retfie
Ejercicio:
Realizar una rutina que tome el valor binario de la posicion 0x70 y halle el equivalente BCD de las unidades
y decenas. Guarde este resultado en los nibles de la posicin 0x7F, unidades en el nible bajo y decenas en
el nible alto. Utilizar la obtencin de datos mediante direccionamiento indexado.
La letra pide las decenas y las unidades del dato ya que con 8 bits solo se pueden representar 2 simbolos
BCD. Podria realizarse mediante clculos aritmeticos, el usar tabla es ms rapido y todos los datos
demoran lo mismo en ser procesados.
Con 8 bits hay 256 valores posibles, pero con decenas y unidades solo 100 valores. Una forma es para
cada posible valor de la posicin 0x70 tener un elemento de la tabla que represente sus unidades y
decenas. Implica tener una tabla de 256 elementos. Otra forma es determinar, si es mayor a 200 restarle
200 , si es mayor de 100 restarle 100, en otro caso no restarle nada. Asi se obtiene el valor de decenas y
unidades en binario, con una tabla de 100 elementos alcanzaria.
82
INICIO
M(70) --> DATO
PROCESAR DATO
CONVERSOR
M(Ind + k) --> W
RETORNO
CONVERSOR
W --> M(7F)
200h 20Ah 214h 21Eh 228h 232h 23Ch 246h 250h 25Ah
00
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
En el diagrama se incluye la tabla ROM con los datos y direcciones que ocupen. En la cabecera de cada
columna esta escrito el valor de direccion ROM para el dato inmediato, los demas van en posiciones
consecutivas. Si los datos no estan en posiciones consecutivas es necesario indicar la direccion de cada
elemento.
El uso del direccionamiento indexado supone el uso de una tabla en la ROM. Se carga PCLATH con el valor
de la pagina ROM donde se encuentra la tabla.
El bloque PROCESAR DATOS se desglosa en bloques mas simples. El proceso es restar 100, si el dato es
menor a 100 el CY ser igual a 0 sino sera 1. Mas de 3 restas no sera necesario realizar.
DATO 64 --> DATO
PROCESAR DATO
CY = 1
Basicamente se resta 100 (64h) hasta que hay borrow.
El resultado si se le suma de nuevo 100 dara el valor
de las decenas y unidades del dato. Se observa la
estructura de resta repetitiva y se convierte en un lazo,
donde la variable de lazo es el CY.
NO
SI
SI
NO
SI
CY = 1
NO
NO
02 --> PCLATH
DATO --> PCL
movlw d'100'
addwf DATO, F
call
CONVERSOR
M(PC) --> W
CONVERSOR
RETORNO
CONVERSOR
movlw
0x02
movwf PCLATH
movf
movwf
DATO, W
PCL
movwf OUTDT
goto
INICIO
La tabla ROM se escribe en el programa con instrucciones RETLW k, en cada posicin de memoria, donde
k es el dato deseado. Colocando la etiqueta de posicin en la direccion adecuada el ensamblador calcula la
direccion para las instrucciones que le sigan. En este programa la etiqueta de posicin esta ubicada en
0x200. En estas posiciones los 8 LSB los carga el PCL, los 5 MSB los carga el PCLATH, por esto se carga
02 en el mismo.
Se sustituye los valores 0x70 y 0x7F por las etiquetas INDAT y OUTDT
83
0x02
PCLATH
movf
DATO, W
movwf
PCL
;Se produce un goto computado
;Debido al goto computado aqui no lleva instruccin de retorno
;*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*ORG
0x100
PRINCIPIO
INICIO
movf
INDAT, W
movwf
DATO
PROCESAR
movlw
d'100'
subwf
DATO, F
btfsc
STATUS, CY
goto
PROCESAR
movlw
addwf
d'100'
DATO, F
call
CONVERSOR
movwf
OUTDT
goto
INICIO
;El programa no tiene fin vuelve a iniciarse
;El programa principal termino pero despus de l se coloca una subrutina que viene
;de la pgina 00
;-----------------------------TABLA ROM---------------------------------------ORG
0x200
BINBCD
retlw
0x00 ;Como se sali del programa principal llamando a una subrutina,
84
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
0x01
0x02
0x03
0x04
0x05
0x06
0x07
0x08
0x09
0x10
0x11
0x12
0x13
0x14
0x15
0x16
0x17
0x18
0x19
0x20
0x21
0x22
0x23
0x24
0x25
0x26
0x27
0x28
0x29
0x30
0x31
0x32
0x33
0x34
0x35
0x36
0x37
0x38
0x39
0x40
0x41
0x42
0x43
0x44
0x45
0x46
0x47
0x48
0x49
0x50
0x51
0x52
0x53
0x54
0x55
0x56
0x57
0x58
0x59
85
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
;Fin de la tabla ROM
END
0x60
0x61
0x62
0x63
0x64
0x65
0x66
0x67
0x68
0x69
0x70
0x71
0x72
0x73
0x74
0x75
0x76
0x77
0x78
0x79
0x80
0x81
0x82
0x83
0x84
0x85
0x86
0x87
0x88
0x89
0x90
0x91
0x92
0x93
0x94
0x95
0x96
0x97
0x98
0x99
86
Contadores y Temporizadores:
Son estructuras lgicas que permiten contar eventos.
El primero comnmente se refiere a eventos o seales, su perodo es variable segn qu lo haga actuar,
son de pequeo valor y baja frecuencia.
El segundo se refiere a medir el tiempo, su uso es en general para producir retardos. Lo normal es usar el
ciclo de mquina para modificarlo, por lo que no es raro que sean de gran tamao. Inclusive es comn usar
varios registros para formar una cifra mayor.
El micro es ms rpido que la mayora de los actuadores o que las acciones del operador. Es vital en
algunos casos generar demoras para poder esperar resultados, ah el lazo en conjunto con un contador
permite hacer un retardo o espera. Los micros ms modernos permiten colocar al chip en modo STANDBY
o POWER DOWN, donde no se ejecutan instrucciones ni se avanza en el programa. El mismo sale de dicho
estado cuando se presentan ciertas seales externas como peticiones de interrupcin o reset.
En los casos que no se puede detener el micro o se necesita seguir haciendo otras funciones se pueden
implementar retardo. El temporizador bsico consta de una variable dentro de un lazo, donde en cada
iteracin se le suma o resta uno a dicha variable. Asignarle un valor antes del lazo y disminuir la variable del
contador es la ms usual. Debido a que es ms sencillo detectar cuando se hace cero (bandera Z=1) que
cualquier otro valor.
Esta es la estructura base de un contador. Al llegar a 00 se sale del loop. El clculo de tiempo de duracin
del contador debe ser realizado tomando en cuenta el tiempo de instruccin de todas las instrucciones que
lo componen.
K nn
LAZO
0xnn
K
;Dura 1 ciclo
;Dura 1 ciclo
Decfsz
K, F
Goto
LAZO
;Dura 2 ciclos
LAZO
K1K
K = 00
Movlw
Movwf
SI
NO
Temporizador 8 bits
La instruccin decfsz K, F demora 1 ciclo en los nn-1 veces que el resultado no es 00. Cuando K se hace
00 esta instruccin genera el salto y demora 2 ciclos.
La instruccin goto LAZO siempre dura 2 ciclos y se ejecuta nn-1 veces.
Si se usa el oscilador interno de 4Mhz, cada ciclo de instruccin dura aproximadamente 1 micro-segundo.
La ecuacin de sumar todos los ciclos de instruccin es:
1 + 1 + 1x (nn-1) + 2 + 2x (nn-1)=
3 (nn 1) + 4 =
3 nn + 1 =
Para OSC= 4Mhz y nn = 1
3 x 1 + 1 = 4 micro-segundos
Para OSC= 4Mhz y nn = 255
3 x 255 + 1 = 766 microsegundos
Las simplificaciones realizadas desprecian el valor nn = 00. En la ecuacin resumida queda:
0 +1 = 1 microsegundo
En la original es:
3 x (00 -1) + 4 =
El sistema de numeracin es limitado en cifras, as que (00 1) es igual a 255:
3 x (255) + 4 = 769 microsegundos
Si con una variable no alcanza se pueden usar dos contadores encadenados. Encadenar dos contadores
permite dar mayor exactitud al contador completo, y ms fcil de variar si queremos modificarlo que si fuese
una variable sola. Adems muchas veces los registros del micro son pequeos para el valor que se necesita
del retardo. En el ejemplo del temporizador de 16bit se realiza el lazo central 5E x 2A veces. El clculo
exacto de cunto dura un retardo depende del nmero de instrucciones ejecutadas antes de terminar el
contador, cuanto dura cada instruccin, etc. A su vez la duracin de la instruccin depende del oscilador
principal, una diferencia de nanosegundos en cada ciclo de instruccin se convierte en varios minutos al
87
cabo de un rato. El ajuste final se debe realizar en forma emprica, as que cuanto ms ajuste pueda tener el
programa ms exacto puede ser el temporizador.
El encadenamiento de variables para ampliar un temporizador o contador puede ser tan grande como se
necesite. Cada variable agrega 8 bit al contador/temporizador.
Se llaman contadores de 8 bit, 16 bit, 24 bit, etc
K2 nn2
LAZO2
LAZO2
K1 nn1
LAZO1
Movlw nn2
Movwf K2
; 1c
; 1c
Movlw nn1
Movwf K1
; [1c] x nn2
; [1c] x nn2
Decfsz
K1, F
Goto
Decfsz
K2, F
Goto
LAZO2 ; 2c x (nn2 1)
LAZO1
K 1 1 K1
NO
K1 = 00
SI
K2 1 K2
NO
K2 = 00
; 1c x (nn2 1) + 2
SI
Temporizador 16 bits
LAZO3
LAZO2
K1 nn1
LAZO2
LAZO1
K 1 1 K1
NO
K1 = 00
SI
Movlw nn3
Movwf K3
; 1c
; 1c
Movlw nn2
Movwf K2
; {1c} x nn3
; {1c} x nn3
Movlw nn1
Movwf K1
Decfsz
K1, F
Goto
Decfsz
K2, F
Goto
Decfsz
K3, F
Goto
LAZO3 ; 2c x (nn3 1)
LAZO1
K2 1 K2
NO
K2 = 00
SI
K3 1 K3
NO
K3 = 00
; 1c x (nn3 1) + 2
SI
Temporizador 24 bits
88
Herramientas de Programacin
El uso de este entorno de desarrollo (IDE) se basa en la idea de generar un proyecto donde se escribe el
archivo fuente y todas las libreras que se necesiten (algunas ya las incluye el propio entorno). Despus el
MPLAB genera el resto del trabajo.
La versin usada en este curso podra ser de la 5.70.40 en adelante que es la primera que soporta al
PIC16F628A.
En otro material se incluye las explicaciones de cmo se utiliza. Debido a una cuestin de costos solo
usaremos las utilidades de MPLAB que no requieren hardware extra.
PROGRAMADOR
Se usara el que este disponible
PROBADOR
Para simularle el mundo al pic usaremos un banco de LEDs, un banco de switch, una matriz de leds y una
matriz de switch. La fuente es de 5 volt, se aconseja que sea regulada debido a la tolerancia del pic
Agregamos el plano electrnico sugerido.
89