Autor Tema: Concatenar contenido de dos registros  (Leído 1257 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Mecátronica2012

  • PIC10
  • *
  • Mensajes: 5
Concatenar contenido de dos registros
« en: 24 de Enero de 2019, 02:42:16 »
Buenas tardes, estoy construyendo un sencillo proyecto para leer la temperatura de un sensor probablemente un lm35 y desplegarla  en dos displays de 7 segmentos usando multiplexacion.  El programa lo estoy planteando en C en el ide del Pic c compiler, debido a que es algo didáctico, mi intención es prescindir de las funciones del ADC que trae el compilador que a mi gusto abstraen demasiado y alejan al programador de los "fierros".
En este momento estoy atorado, ya que no se como leer el resultado obtenido de la conversion, de los registros adresl y adresh, en el modo de 10 bits que es el que quiero usar, se usaría el resultado del adresl, y los dos bits menos significativos del adresl dependiendo de la justificación usada.
Una idea que rondaba en mi cabeza era hacer una especie de concatenacion, convirtiendo el valor de cada registro a char, concatenarlos y luego castear nuevamente a int16, quizás esté diciendo alguna burrada, alguien me podría orientar?
Muchas gracias a todos.
« Última modificación: 24 de Enero de 2019, 02:45:41 por Mecátronica2012 »

Desconectado AleSergi

  • PIC16
  • ***
  • Mensajes: 173
Re:Concatenar contenido de dos registros
« Respuesta #1 en: 24 de Enero de 2019, 03:42:49 »

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 7051
Re:Concatenar contenido de dos registros
« Respuesta #2 en: 24 de Enero de 2019, 06:47:37 »
Considero que si te planteas representarlo como entero, lo justifiques a la derecha.

Y luego en un entero de 16 bits podes desplazar las 2 cantidades:

tu_var = ADRESH << 8;
tu_var |= ADRESL;


Sino la otra, busca lo que es una union, y hace la union de 2 variables  de 8bits con una de 16 bits... De esa forma podes acceder indivualmente sin hacer Shifts.

Desconectado Mecátronica2012

  • PIC10
  • *
  • Mensajes: 5
Re:Concatenar contenido de dos registros
« Respuesta #3 en: 02 de Febrero de 2019, 17:59:07 »
Buenas tardes, muchas gracias por la ayuda.
En referencia al comentario de killerjc, aun no comprendo del todo los corrimientos, si hicieramos un corrimiento a la derecha 10 veces
algo asi :
 tu_var = ADRESH << 10;

Para acomodar en el segundo byte de tu_var,  los dos bits que llevamos arrastrando del  ADRESH, y dejar reservados los primeros 8 bits de la variable  tu_var , para guardar lo que tengamos en el ADRESL, realizamos la operacion or :
tu_var = tu_var | adresl;
Es correcto este planteamiento? gracias por la ayuda

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 7051
Re:Concatenar contenido de dos registros
« Respuesta #4 en: 02 de Febrero de 2019, 18:26:18 »
Si no me equivoco en XC8 podes acceder a los 16bits directamente del ADC... En caso de que unicamente puedas acceder a los 8 bits podes usar:

- Una union
- Desplazamientos.


Respecto al desplazamiento, tenes que recordar que estas desplazando bits. Supongamos que tenes el valor 10 1101 0110 en el ADC ( 10 bits ), es decir:
ADRESH = 0000 0010
ADRESL = 1101 0110

Desplazar es simplemente mover todo 1 espacio a la izquierda o derecha... Por ejemplo si ADRESH lo desplazo 2 veces a la izquierda me quedaria 0000 1000
Si tuviera una variable de 16 bits y le guardo con el valor de ADRESH  desplazado 8 lugares a la izquierda quedaria asi:

ADRESH desplazado 8 veces a la izquierda:  0000 0010 0000 0000

Si luego le hago una OR con ADRESL quedaria:

my_var  0000 0010 0000 0000
ADRESL  0000 0000 1101 0110
---------------------------------------
OR ->    0000 0010  1101 0110


Quedando tu valor de 16 bits completo.

Desconectado Mecátronica2012

  • PIC10
  • *
  • Mensajes: 5
Re:Concatenar contenido de dos registros
« Respuesta #5 en: 05 de Febrero de 2019, 00:36:00 »
Más claro imposible, muchas gracias por la ayuda, cuando termine el proyecto pondré el código por aquí


 

anything