Está en la página 1de 13

1.2 Números, Números, Números...

TABLE OF CONTENTS
Introducción
1. El mundo de los microcontroladores

2. Programación de los microcontroladores

3. Microcontrolador PIC16F887

4. Ejemplos
Apéndice A: Es hora de divertirse

 
PAGE2/48
Jump to:
GO

¡La matemática es una gran ciencia! Todo es tan lógico y simple... El universo
de los números se puede describir con sólo diez dígitos. No obstante,
¿realmente tiene que ser así? ¿Necesitamos exactamente esos 10 dígitos? Por
supuesto que no, es sólo cuestión del hábito. Acuérdese de las lecciones de la
escuela. Por ejemplo, ¿qué significa el número 764? Cuatro unidades, seis
decenas y siete centenas. ¡Muy simple! ¿Se podría expresar de una forma más
desarrollada? Por supuesto que sí: 4 + 60 + 700. ¿Aún más desarrollado? Sí: 4*1
+ 6*10 + 7*100. ¿Podría este número parecer un poco más “científico”? La
respuesta es sí otra vez: 4*100 + 6*101 + 7*102. ¿Qué significa esto realmente?
¿Por qué utilizamos exactamente estos números 100, 101 y 102 ? ¿Por qué es
siempre el número 10? Es porque utilizamos 10 dígitos diferentes (0, 1, 2...8, 9).
En otras palabras, es porque utilizamos el sistema de numeración en base 10,
es decir el sistema de numeración decimal.
SISTEMA DE NUMERACIÓN BINARIO

¿Qué pasaría si utilizáramos sólo dos números 0 y 1? Si sólo pudiéramos


afirmar (1) o negar (0) que algo existe. La respuesta es “nada especial”,
seguiríamos utilizando los mismos números de la misma manera que
utilizamos hoy en día, no obstante ellos parecerían un poco diferentes. Por
ejemplo: 11011010.¿Cuántas son realmente 11011010 páginas de un libro?
Para entenderlo, siga la misma lógica como en el ejemplo anterior, pero en el
orden invertido. Tenga en cuenta que se trata de aritmética con sólo dos
dígitos 0 y 1, es decir, del sistema de numeración en base 2 (sistema de
numeración binario).
Evidentemente, se trata del mismo número representado en dos sistemas de
numeración diferentes. La única diferencia entre estas dos representaciones
yace en el número de dígitos necesarios para escribir un número. Un dígito (2)
se utiliza para escribir el número 2 en el sistema decimal, mientras que dos
dígitos (1 y 0) se utilizan para escribir aquel número en el sistema binario.
¿Ahora está de acuerdo que hay 10 grupos de gente? ¡Bienvenido al mundo de
la aritmética binaria! ¿Tiene alguna idea de dónde se utiliza? Excepto en las
condiciones de laboratorio estrictamente controladas, los circuitos
electrónicos más complicados no pueden especificar con exactitud la
diferencia entre dos magnitudes (dos valores de voltaje, por ejemplo), si son
demasiado pequeños (más pequeños que unos pocos voltios). La razón son los
ruidos eléctricos y fenómenos que se presentan dentro de lo que llamamos
“entorno de trabajo real” (algunos ejemplos de estos fenómenos son los
cambios imprevisibles de la tensión de alimentación, cambios de temperatura,
tolerancia a los valores de los componentes etc...). Imagínese una
computadora que opera sobre números decimales al tratarlos de la siguiente
manera: 0=0V, 1=5V, 2=10V, 3=15V, 4=20V... 9=45V!? ¿Alguien dijo baterías?
Una solución mucho más fácil es una lógica binaria donde 0 indica la ausencia
de voltaje, mientras que 1 indica la presencia de voltaje. Simplemente, es fácil
de escribir 0 o 1 en vez de “no hay voltaje” o “ hay voltaje”. Mediante el cero
lógico (0) y uno lógico (1) la electrónica se enfrenta perfectamente y realiza con
facilidad todas las operaciones aritméticas. Evidentemente, se trata de
electrónica que en realidad aplica aritmética en la que todos los números son
representados con sólo dos dígitos y donde sólo es importante saber si hay
voltaje o no. Por supuesto, estamos hablando de electrónica digital.

SISTEMA DE NUMERACIÓN HEXADECIMAL

En el principio del desarrollo de las computadoras era evidente que a la gente


le costaba mucho trabajar con números binarios. Por eso, se estableció un
nuevo sistema de numeración, que utilizaba 16 símbolos diferentes. Es
llamado el sistema de numeración hexadecimal. Este sistema está compuesto
de 10 dígitos a los que estamos acostumbrados (0, 1, 2, 3,... 9) y de seis letras
del alfabeto A, B, C, D, E y F. ¿Cuál es el propósito de esta combinación
aparentemente extraña? Basta con mirar cómo todo en la historia de los
números binarios encaja perfectamente para lograr una mejor comprensión
del tema.

El mayor número que puede ser representado con 4 dígitos binarios es el


número 1111. Corresponde al número 15 en el sistema decimal. En el sistema
hexadecimal ese número se representa con sólo un dígito F. Es el mayor
número de un dígito en el sistema hexadecimal. ¿Se da cuenta de la gran
utilidad de estas equivalencias? El mayor número escrito con ocho dígitos
binarios es a la vez el mayor número de dos dígitos en el sistema hexadecimal.
Tenga en cuenta que una computadora utiliza números binarios de 8 dígitos.
¿Acaso se trata de una casualidad?

CÓDIGO BCD

El código BCD (Binary-Coded  Decimal - Código binario decimal) es un código


binario utilizado para representar a los números decimales. Se utiliza para que
los circuitos electrónicos puedan comunicarse con los periféricos utilizando el
sistema de numeración decimal o bien utilizando el sistema binario dentro de
“su propio mundo”. Consiste en números binarios de 4 dígitos que
representan los primeros diez dígitos (0, 1, 2, 3...8, 9). Aunque cuatro dígitos
pueden hacer 16 combinaciones posibles en total, el código BCD normalmente
utiliza a las primeras diez.

CONVERSIÓN DE SISTEMAS DE NÚMERACIÓN

El sistema de numeración binario es el que utilizan los microcontroladores, el


sistema decimal es el que nos resulta más comprensible, mientras que el
sistema hexadecimal presenta un balance entre los dos. Por eso, es muy
importante aprender cómo convertir los números de un sistema de
numeración a otro, por ejemplo, cómo convertir una serie de ceros y unos a
una forma de representación comprensible para nosotros.

CONVERSIÓN DE NÚMEROS BINARIOS A DECIMALES


Los dígitos en un número binario tienen ponderaciones diferentes lo que
depende de sus posiciones dentro del número que están representando.
Además, cada dígito puede ser 1 o 0, y su ponderación se puede determinar
con facilidad al contar su posición empezando por la derecha. Para hacer una
conversión de un número binario a decimal es necesario multiplicar las
ponderaciones con los dígitos correspondientes (0 o 1) y sumar todos los
resultados. La magia de la conversión de un número binario a decimal
funciona de maravilla... ¿Tiene duda? Veamos el siguiente ejemplo:

Cabe destacar que es necesario utilizar sólo dos dígitos binarios para
representar a todos los números decimales de 0 a 3. Por consiguiente, para
representar los números de 0 a 7 es necesario utilizar tres dígitos binarios,
para representar los números de 0 a 15 - cuatro dígitos etc. Dicho de manera
sencilla, el mayor número binario que se puede representar utilizando n
dígitos se obtiene al elevar la base 2 a la potencia n. Luego, al resultado se le
resta 1. Por ejemplo, si n=4: 24 - 1 = 16 - 1 = 15 Por consiguiente, al utilizar 4
dígitos binarios, es posible representar los números decimales de 0 a 15, que
son 16 valores diferentes en total.
CONVERSIÓN DE NÚMEROS HEXADECIMALES A DECIMALES
Para realizar una conversión de un número hexadecimal a decimal, cada dígito
hexadecimal debe ser multiplicado con el número 16 elevado al valor de su
posición. Por ejemplo:

CONVERSIÓN DE NÚMEROS HEXADECIMALES A BINARIOS


No es necesario realizar ningún cálculo para convertir un número hexadecimal
a binario. Los dígitos hexadecimales se reemplazan simplemente por los
cuatro dígitos binarios apropiados. Ya que el dígito hexadecimal máximo es
equivalente al número decimal 15, es necesario utilizar cuatro dígitos binarios
para representar un dígito hexadecimal. Por ejemplo:

MARCAR LOS NÚMEROS

El sistema de numeración hexadecimal, junto con los sistemas binario y


decimal, se consideran los más importantes para nosotros. Es fácil realizar una
conversión de cualquier número hexadecimal a binario, además es fácil de
recordarlo. Sin obstante, estas conversiones pueden provocar una confusión.
Por ejemplo, ¿qué significa en realidad la sentencia: “Es necesario contar 110
productos en una cadena de montaje”? Dependiendo del sistema en cuestión
(binario, decimal o hexadecimal), el resultado podría ser 6, 110 o 272
productos, respectivamente. Por consiguiente, para evitar equivocaciones,
diferentes prefijos y sufijos se añaden directamente a los números. El prefijo $
o 0x así como el sufijo h marca los números en el sistema hexadecimal. Por
ejemplo, el número hexadecimal 10AF se puede escribir así: $10AF, 0x10AF o
10AFh. De manera similar, los números binarios normalmente obtienen el
sufijo % o 0B. Si un número no tiene ni sufijo ni prefijo se considera decimal.
Desafortunadamente, esta forma de marcar los números no es estandarizada,
por consiguiente depende de la aplicación concreta. La siguiente es tabla
comparativa que contiene los valores de números 0-255 representados en tres
sistemas de numeración diferentes. Esto es probablemente la manera más
fácil de entender lógica común aplicada a todos los sistemas de numeración.

NÚMEROS NEGATIVOS
Como ya hemos visto, para escribir un número negativo en matemáticas, basta
con añadirle el prefijo “-” (signo menos). Sin embargo, en la programación, al
acabarse el proceso de la compilación, se quedan sólo los números binarios,
volviéndose las cosas más complicadas. Se utilizan sólo dos dígitos - 0 y 1,
mientras que todos los demás números, símbolos y signos se forman por
medio de las combinaciones de estos dos dígitos. En el caso de los números
negativos, la solución es la siguiente: En los números negativos, el bit más
significativo (el bit del extremo izquierdo) representa el signo del número
(donde 0 será positivo y 1 negativo). En el caso de un número de 8 bits, para
representar un valor numérico sólo quedan 7 bits. De acuerdo a este tipo de
codificación el número +127 es el mayor número positivo con signo que se
puede representar con 8 bits. Asimismo, hay cero (0) positivo y negativo
(refiérase a la tabla de la derecha). La siguiente pregunta sería: ¿Cómo es
posible saber de qué número se trata? Por ejemplo, si ponemos el número
10000001, ¿es -1 o 129? No se preocupe, de eso se encarga el compilador. Ésta
es la razón por la que se declaran variables al escribir el programa. Bueno, de
eso vamos a hablar a continuación.

BIT

La teoría dice que un bit es la unidad básica de información...Vamos a olvidarlo


por un momento y demostrar qué es eso en la práctica. La respuesta es - nada
especial- un bit es un sólo dígito binario. Similar a un sistema de numeración
decimal en el que los dígitos de un número no tienen la misma ponderación
(por ejemplo, los dígitos en el número 444 son los mismos pero tienen los
valores diferentes), el “significado” de un bit depende de la posición que tiene
en número binario. En este caso no tiene sentido hablar de unidades, centenas
etc. en los números binarios, sus dígitos se denominan el bit cero (el primer bit
a la derecha), el primer bit (el segundo bit a la derecha) etc. Además, ya que el
sistema binario utiliza solamente dos dígitos (0 y 1), el valor de un bit puede
ser 0 o 1. No se confunda si se encuentra con un bit que tiene el valor 4, 16 o
64. Son los valores representados en el sistema decimal. Simplemente, nos
hemos acostumbrado tanto a utilizar los números decimales que estas
expresiones llegaron a ser comunes. Sería correcto decir por ejemplo, “el valor
del sexto bit en cualquier número binario equivale al número decimal 64”.
Pero todos somos humanos y los viejos hábitos mueren difícilmente. Además,
¿cómo le suena “número uno-uno-cero-uno-cero...”?

BYTE

Un byte consiste en 8 bits colocados uno junto al otro. Si un bit es un dígito, es


lógico que los bytes representen los números. Todas las operaciones
matemáticas se pueden realizar por medio de ellos, como por medio de los
números decimales comunes. Similar a los dígitos de cualquier número, los
dígitos de un byte no tienen el mismo significado. El bit del extremo izquierdo
tiene la mayor ponderación, por eso es denominado el bit más significativo
(MSB). El bit del extremo derecho tiene la menor ponderación, por eso es
denominado el bit menos significativo (LSB). Puesto que los 8 dígitos de un
byte se pueden combinar de 256 maneras diferentes, el mayor número
decimal que se puede representar con un byte es 255 (una combinación
representa un cero). Un nibble o un cuarteto representa una mitad de byte.
Dependiendo de la mitad del número en cuestión (izquierda o derecha), se les
denomina nibbles “altos” o “bajos”, respectivamente.

Usted seguramente ha pensado alguna vez en cómo es la electrónica dentro de un


circuito integrado digital, un microcontrolador o un microprocesador. ¿Cómo son
los circuitos que realizan las operaciones matemáticas complicadas y toman
decisiones? ¿Sabía que sus esquemas, aparentemente complicadas consisten en
sólo unos pocos elementos diferentes, denominados circuitos lógicos o compuertas
lógicas?

Unir números

2.1.5. Sistemas de numeración: 1- Sistema binario

Nosotros normalmente utilizamos el sistema decimal de numeración: todos los


números se expresan a partir de potencias de 10, pero normalmente lo hacemos
sin pensar.

Por ejemplo, el número 3.254 se podría desglosar como:

3.254 = 3 · 1000 + 2 · 100 + 5 · 10 + 4 · 1

o más detallado todavía:

254 = 3 · 103 + 2 · 102 + 5 · 101 + 4 · 100

(aunque realmente nosotros lo hacemos automáticamente: no nos paramos a


pensar este tipo de cosas cuando sumamos o multiplicamos dos números).

2.1.7. Sistemas de numeración: 3- Sistema hexadecimal

El sistema octal tiene un inconveniente: se agrupan los bits de 3 en 3, por lo que


convertir de binario a octal y viceversa es muy sencillo, pero un byte está formado
por 8 bits, que no es múltiplo de 3.

Sería más cómodo poder agrupar de 4 en 4 bits, de modo que cada byte se
representaría por 2 cifras. Este sistema de numeración trabajará en base 16 (2 4
=16), y es lo que se conoce como sistema hexadecimal.

Pero hay una dificultad: estamos acostumbrados al sistema decimal, con números
del 0 al 9, de modo que no tenemos cifras de un solo dígito para los números 10,
11, 12, 13, 14 y 15, que utilizaremos en el sistema hexadecimal. Para representar
estas cifras usaremos las letras de la A a la F, así:

0 (decimal) = 0 (hexadecimal)
1 (decimal) = 1 (hexadecimal)
2 (decimal) = 2 (hexadecimal)
3 (decimal) = 3 (hexadecimal)
4 (decimal) = 4 (hexadecimal)
5 (decimal) = 5 (hexadecimal)
6 (decimal) = 6 (hexadecimal)
7 (decimal) = 7 (hexadecimal)
8 (decimal) = 8 (hexadecimal)
9 (decimal) = 9 (hexadecimal)
10 (decimal) = A (hexadecimal)
11 (decimal) = B (hexadecimal)
12 (decimal) = C (hexadecimal)
13 (decimal) = D (hexadecimal)
14 (decimal) = E (hexadecimal)
15 (decimal) = F (hexadecimal)

Con estas consideraciones, expresar números en el sistema hexadecimal ya no es


difícil:

254 (decimal) ->


254 / 16 = 15 (resto: 14)
14 / 1 = 14 (se terminó)

de modo que

254 = 15 · 16 1 + 14 · 16 0

o bien

254 (decimal) = FE (hexadecimal)

Vamos a repetirlo para convertir de decimal a hexadecimal número más grande:

54331 (decimal) ->


54331 / 4096 = 13 (resto: 1083)
1083 / 256 = 4 (resto: 59)
59 / 16 = 3 (resto: 11)
11 / 1 = 11 (se terminó)

de modo que

54331 = 13 · 4096 + 4 · 256 + 3 · 16 + 11 · 1

o bien

254 = 13 · 16 3 + 4 · 16 2 + 3 · 16 1 + 11 · 16 0

es decir
54331 (decimal) = D43B (hexadecimal)

Ahora vamos a dar el paso inverso: convertir de hexadecimal a decimal, por


ejemplo el número A2B5

A2B5 (hexadecimal) = 10 · 16 3 + 2 · 16 2 + 11 · 16 1 + 5 · 16 0 = 41653

El paso de hexadecimal a binario también es (relativamente) rápido, porque cada


dígito hexadecimal equivale a una secuencia de 4 bits:

0 (hexadecimal) = 0 (decimal) = 0000 (binario)


1 (hexadecimal) = 1 (decimal) = 0001 (binario)
2 (hexadecimal) = 2 (decimal) = 0010 (binario)
3 (hexadecimal) = 3 (decimal) = 0011 (binario)
4 (hexadecimal) = 4 (decimal) = 0100 (binario)
5 (hexadecimal) = 5 (decimal) = 0101 (binario)
6 (hexadecimal) = 6 (decimal) = 0110 (binario)
7 (hexadecimal) = 7 (decimal) = 0111 (binario)
8 (hexadecimal) = 8 (decimal) = 1000 (binario)
9 (hexadecimal) = 9 (decimal) = 1001 (binario)
A (hexadecimal) = 10 (decimal) = 1010 (binario)
B (hexadecimal) = 11 (decimal) = 1011 (binario)
C (hexadecimal) = 12 (decimal) = 1100 (binario)
D (hexadecimal) = 13 (decimal) = 1101 (binario)
E (hexadecimal) = 14 (decimal) = 1110 (binario)
F (hexadecimal) = 15 (decimal) = 1111 (binario)

de modo que A2B5 (hexadecimal) = 1010 0010 1011 0101 (binario)

y de igual modo, de binario a hexadecimal es dividir en grupos de 4 bits y hallar


el valor de cada uno de ellos:

110010100100100101010100111 =>
0110 0101 0010 0100 1010 1010 0111 = 6524AA7

Ejercicios propuestos:

1. Expresar en sistema hexadecimal los números decimales 18, 131, 83, 245.
2. Expresar en sistema hexadecimal los números binarios de 8 bits:
01100110, 10110010, 11111111, 00101101
3. Expresar en el sistema binario los números hexadecimales 2F, 37, A0, 1A2.
4. Expresar en el sistema decimal los números hexadecimales 1B2, 76, E1,
2A.

También podría gustarte