Se puede usar dos registros o variables de 8 bit en una variable de 16 bits?

Oh, entendí mal la pregunta, creí que quería apuntar directamente la memoria.

En este caso el bitwise de corrimiento de carro y OR es lo ideal, son operaciones que tienen equivalentes en código máquina y es lo más optimo, además, son símbolos básicos que cualquier lenguaje y compilador interpretará adecuadamente.

en caso de que quisiera usar una variable de 16 bit como puntero de dos puertos, como seria posible esto?

En basic no se puede la unión pero hacer eso no es tan rebuscado como en c.
Digamos en pbp solo se pone donde quieras así
Var=var1.highbyte
Var=var1.lowbyte y listo
En código maquina genera unos cuantos ciclos de instrucción.

eso es lo que no me gusta de C, es cierto que tiene mas funciones pero no significa que en codigo maquina se simplifique, en ocaciones termina generando mucho mas codigo XD.

pero aqui donde entra la segunda variable? es decir estas haciendo que una sola variable aparezca dos veces en una mas grande?
es decir, no seria asi?

Var=var1.highbyte
Var=var2.lowbyte

y es necesario hacer esa asignacion por cada modificacion que haga en la var1 y var2 ? o Var cambia automaticamente cada vez que cambien var1 y var2?

Edit: al hacer Var=var1.highbyte no estas guardando solo el byte superior de var1 ?
 
Última edición:
En realidad es así:
Varx.highbyte=var1
Varx.lowbyte=var2

O

Var1=varx.highbyte
Var2=varx.lowbyte

Donde varx es la "unión" y es tipo word y var1,var2 son de tipo byte.

Eso se usa dependiendo lo que se necesite.
 
Última edición:
tambien en C se conoce como tal... es un termino universal de informatica.

bitwise.fw_.png
 
creo que eso seria específicamente para algunos lenguajes, pero en términos universales una PALABRA o WORD es una cadena finita de bits, no específicamente 16 bits
 
yo dije:

es un termino universal de informatica.

limitando ese universo dentro de la informatica...

buscalo en internet para que salgas de dudas. XD

a lo que creo que te estas refiriendo se le conoce como String o cadena de caracteres dentro del universo de la informatica.
 
Última edición:
hahhaha todos los dias se aprende algo :D , por cierto, sigo con una duda que me tiene pensando haha, es posible utilizar una variable de 16 bits como puntero de dos puertos de 8 bits?

mmm o tal vez mi pregunta este mal formulada, y en realidad sea ¿ es posible utilizar un puntero de 16 bits para dos puertos de 8 bits? espero que me entiendan hehe

saludos
 
Última edición:
¿ y si dices que quieres hacer realmente? O pones lo que lleves echo... Yo nunca he necesitado hacer eso por muy rápida que quiera hacer mi aplicación.
Por lo que imagino que te imaginas mi respuesta es no, el pic es solo de 8bits de cualquier forma tendrás mas o menos los mismos ciclos.
 
Última edición:
bueno en realidad no quería hacer una aplicación en especifico, solo quería saber si se podía hacer eso, que si con una variable (o puntero) de 16 bits puedo controlar dos puertos de 8 bits, uno en el nible bajo y otro en el nible alto, como puntero, es decir algo que modifique en ese puntero se refleje directamente en los puertos, por ejemplo que yo tenga conectado 16 leds conectados en el puerto B(nible alto) y el puerto D(nible bajo), y cuando yo guarde el siguiente dato

puntero=1101011010110110

directamente en los puertos se refleje asi:

puertoB=11010110 puertoD=10110110

encendiendose los leds respectivos
 
en basic no se puede, en C si se puede y ya te dijeron como (segun recuerdo)...

a lo mejor lo que no se te aclara, es que de cualquier forma que lo hagas al compilarlo va hacer casi el mismo tiempo porque al compilar tiene que hacerlo si o si con las limitadas instrucciones del PIC, en lo unico que te ayuda hacerlo como quieres es que es mas facil programar.
 
si, bueno en basic sabia q no se podia, pero en C era mi duda, mmmm hablaron sobre la Union, pero creo que eso en sí es para variables, no para registros.

Claro, lo mismo pensaba, que tomaría casi el mismo tiempo, mas que todo queria saberlo por motivos de aprendizaje, son dudas que vinieron a mi cabeza...... aunque pensándolo bien, creo que si habría una diferencia, no en el tiempo... eso esta claro, sino en el espacio ocupado, ya que una variable se guarda en la memoria RAM, pero un puntero apunta directamente a un registro

saludos
 
Última edición:
En el link que te pasé antes, en la tercera opción está el uso de punteros, en vez de trabajar con una variable de 16 bits, se usa una de 64 bits.

Ahora, si querés acceder al registro por medio de un puntero, eso también lo podés hacer, simplemente necesitás averiguar la dirección de ese registro y usar un puntero.
 
gracias por la informacion, creo que pase por alto ese pequeño detalle que me diste, gracias por resolver mis dudas

EDIT: perdon por las molestias, estuve revisando tu codigo cosmefulanito04, mmmmm si queria acceder en realidad a dos registros (PORTB y PORTD) mediante un solo puntero, es posible? por que decis que seria usar una variable de 64 bits? estoy un poco confuso en eso, espero no sea molestia y pueda resolver mis dudas por favor. gracias
 
Última edición:
No, el ejemplo ese era para usar una variable de 64 bits y acceder a ella en forma independiente c/8bits, es decir a los 8 bytes.

El ejemplo sería lo mismo si tu variable fuera de 16 bits y vos tenés dos bytes que querés asignar en esa variable de 16 bits:

PHP:
int main()
{
   uint16_t var_dst=;
   void *ptr_var_dst=&var_dst; //El puntero tomará la dirección en memoria de la variable de 16bits
   
   *(unsigned char*)(ptr_var_dst)=PORTB;     //Byte bajo
   *(unsigned char*)(ptr_var_dst+1)=PORTD; //Byte alto
  
    return 0;
}

Ahora, lo que vos querés hacer es directamente apuntar a los registros, para hacer eso, las direcciones deben ser consecutivas tanto del Puerto B como del D. ¿Son consecutivas?
 
Están ordenados en direcciones consecutivas según las letras que les representan A, B, C, D y E.



bueno en realidad no quería hacer una aplicación en especifico, solo quería saber si se podía hacer eso, que si con una variable (o puntero) de 16 bits puedo controlar dos puertos de 8 bits, uno en el nible bajo y otro en el nible alto, como puntero, es decir algo que modifique en ese puntero se refleje directamente en los puertos, por ejemplo que yo tenga conectado 16 leds conectados en el puerto B(nible alto) y el puerto D(nible bajo), y cuando yo guarde el siguiente dato

puntero=1101011010110110

directamente en los puertos se refleje asi:

puertoB=11010110 puertoD=10110110

encendiendose los leds respectivos


Otra vez se vuelve a confundir Nible por Byte.
Otra cosa es que sólo quiera modificar 4bit de los puertos.
 
Última edición:
Siendo ese el caso, que las direcciones entre el puerto B y D no son consecutivas, no se puede usar directamente un puntero a los registros, hay que usar una variable de 16 bits tal como puse arriba.
 
Atrás
Arriba