Clase Sistemas de Numeración - v2
Clase Sistemas de Numeración - v2
Clase Sistemas de Numeración - v2
Sistemas de Numeración
Universidad del Quindío
Introducción
¿Por qué es importante dominar los sistemas de numeración empleados en
electrónica digital?
Segmento de código
Para poder comprender la información allí almacenada, es indispensable dominar los
sistemas básicos de numeración como son: El sistema binario y el sistema hexadecimal.
Mapa de memoria de un
Sistema hipotético
MSB LSB
𝑛𝑛
Ejercicio:
𝑛𝑛
0x7FB
Sistema Hexadecimal
Valores posicionales del sistema hexadecimal
¿Qué relación existe entre los valores posicionales del sistema hexadecimal frente a los
valores posicionales del sistema binario?
Conversión entre base binaria y base hexadecimal sin pasar por base 10
Pasar de binario a
hexadecimal
1 2 E 0x12E
Se agrupan de a 4 bits
Sistema Hexadecimal - Binario
Ejemplo: Convertir 0xF6AB a binario Tabla guía
F 6 A B
1111 0110 1010 1011
F F 1 1
1111 1111 0001 0001
Para llevar a cabo la suma entre números binarios tener en cuenta lo siguiente:
170 → 1 0 1 0 1 0 1 1
67 → 0 1 0 0 0 0 1 1
Base 10
𝟏𝟏 𝟏𝟏 𝟏𝟏 𝟎𝟎 𝟏𝟏 𝟏𝟏 𝟏𝟏 𝟎𝟎 237
1 1
0 0 0 0 0
1 1
1 0 1 0 1 0
0 1 1
0 1 0 0 0
01 01 01 11 10
01 00 01
No acarreo final
Resultado ???? Acarreo (Carry)
Operadores a nivel de bits
Los operadores a nivel de bits son: AND(&), OR(|), XOR(^),
NOT(~), desplazamiento a la izquierda (<<) y desplazamiento a la derecho (>>)
AND (&): Su salida es verdadera cuando ambos bits son verdaderos, falso
en caso contrario
Realizar la siguiente 0x3A6B & 0x00F3
operación:
0x3A6B 0011 1010 0110 1011
0x00F3 0000 0000 1111 0011
&
0x0063 0000 0000 0110 0011
OR (|): Su salida es falsa cuando ambos bits son falsos, verdadero en caso
contrario Realizar la siguiente 152 | 5
operación:
|
1001 1101 0x9D
Operadores a nivel de bits
XOR (^): Su salida es verdadera cuando ambos bits son diferentes, falso en
caso contrario.
Realizar la siguiente 0x6B ^ 0xF3
operación:
0x6B 0110 1011
0xF3 1111 0011 ^
0x98 1001 1000
Complemento a 2
Para llevar a cabo la resta entre dos operando se dice que es lo mismo que sumar el
negativo de un operando.
Si al hacer una suma en complemento a 2 (resta) y el valor da con acarreo, indica que el
resultado es positivo y el acarreo se ignora.
Si al hacer una suma en complemento a 2 (resta) y el valor da sin acarreo, indica que el
resultado es negativo. Para saber el verdadero resultado de la operación se debe sacar de
nuevo complemento a 2 a dicho resultado.
Representación de números con signo y sin signo
Por ejemplo: Número de 8 bits. Sin signo [0 / 255] y con signo [-128 / 127]
Número de 16 bits. Sin signo [0 / 65535] y con signo [-32768 / 32767]
Suponer que los números enteros son de 16 bits y se tiene la siguiente definición:
𝑢𝑢𝑢𝑢𝑢𝑢𝑢𝑢𝑢𝑢𝑢𝑢𝑢𝑢𝑢𝑢 𝑖𝑖𝑖𝑖𝑖𝑖 𝑣𝑣𝑣𝑣𝑣𝑣𝑣𝑣𝑣𝑣 = 82000; ¿Es posible definirlo? ¿Cuál es el valor real?
Según el formato entero en uso, solo se puede almacenara 16 bits del número, por lo
tanto, el valor hexadecimal permitido es:
A pesar que el valor 50000 está dentro del rango de 16 bits de representación de números
enteros, el valor -50000 está por fuera del rango que abarca positivos y negativos por lo
que el verdadero valor de la variable no es -50000 sino que corresponde a -15356.
Operadores a nivel de bits
Operador de desplazamiento (<< / >>)
Operador (<<): Desplazamiento hacia la izquierda
Sintaxis: valorEntero << cantidad_bits:
Ejemplo: Realizar la siguiente operación: 12 << 3
El valor entero se pasa a binario: 0000 1100 << 3 ?
Se desplaza el número 3 veces hacia la izquierda 0110 0000 = 96
Planteamiento de la solución:
1. Realizando divisiones sucesivas y guardando el residuo de cada operación y el
cociente. Tener presente que el número debe ser escrito en orden inverso.
Codificación en C
Codificado con desplazamiento
Ejemplo
Prototipo: void intToBinary(unsigned int dato, char bin[]);
El valor binario se almacena en un arreglo tipo char
Programa principal
Ejemplo
Forma 1
Forma 2
Aplicaciones de los operadores a nivel de bits
Caso de análisis: Suponga que usted tiene una variable de 8 bits sin signo llamada <A>
cuyo valor inicial es el siguiente:
Procedimiento
Como las operaciones son conmutativas, pueden ser resueltas en diferente orden y escrita
en una sola línea de código:
Caso de análisis: Suponga que usted tiene una variable de 8 bits sin signo llamada <B>
cuyo valor inicial es el siguiente:
𝑢𝑢𝑢𝑢𝑢𝑢𝑢𝑢𝑢𝑢𝑢𝑢𝑢𝑢𝑢𝑢 𝑐𝑐𝑐𝑐𝑐𝑐𝑐 B = 255; B= 1111 1111
Binario
Aplicaciones de los operadores a nivel de bits
enum{NEGRO,ROJO, CAFÉ,AMARILLO,…};
#define CIRCULO 0
#define CUADRADO 1
#define RECTANGULO 2
#define ELIPSE 3
Aplicaciones de los operadores a nivel de bits
Objetivo: Almacenar en la variable <valor> el respectivo comando para que identifique la
figura como una elipse de color violeta, es decir, la palabra final sería:
Elipse
¿Cómo sería el procedimiento a ejecutar?
1. Iniciar con un grupo en particular, por ejemplo, el color
La estrategia más apropiada para modificar una cierta cantidad de bits que representan un
grupo en particular es resumida en los siguientes pasos:
a. Definir una máscara (mask): Una máscara es un valor que contiene 1’s en los bits del
grupo respectivo
b. Definir un desplazamiento (shift): Es una variable que indicar la posición del grupo en
la variable
#define SHIFT_COLOR 0
Aplicaciones de los operadores a nivel de bits
c. Con el valor de la mascara y el desplazamiento, se debe poner en 0’s los bits del grupo a
analizar
valor = 1101 0000 Ceros en los bits del grupo
d. Una vez los bits del grupo están en cero, se puede concatenar el nuevo valor solicitado
En resumen:
Observación: Cuando el grupo es dado por un solo bit no hay necesidad de definir
máscaras y desplazamientos.
Aplicaciones de los operadores a nivel de bits
Definición de constantes:
Referencias
#define REF_AREF 0 void setReference(unsigned char ref)
#define REF_AVCC 1 {
#define REF_RESERVADO 2 ADMUX = (ADMUX & ~(REF_MASK << REF_SHIFT)) |
#define REF_2_56V 3 (ref << REF_SHIFT);
}
#define REF_MASK 0x03
#define REF_SHIFT 6
Justificación
void setResult(unsigned char jus)
#define LEFT 0 {
#define RIGHT 1 if(jus == RIGHT)
ADMUX &= ~(1<<ADLAR);
else
ADMUX |= (1<<ADLAR);
}
Aplicaciones de los operadores a nivel de bits
Con las funciones implementadas, escribir un programa que permita configurar el conversor
analógico a digital para trabajar a una referencia de voltaje interno a 2.56V, justificado a la
izquierda y leer el canal 5. Escriba una función que imprima en pantalla el valor binario del
registro.
EXTINT1 FALLING
RISING
Escriba una función principal que muestre en pantalla el valor del registro MCUCR cuando
se necesita configurar la interrupción 1 por flanco de bajada (FALLING).