Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

09/10/2015 #21

Avatar de Gustavo.gmb

Nuyel dijo: Ver Mensaje
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?

papirrin dijo: Ver Mensaje
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 ?
09/10/2015 #22

Avatar de papirrin

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.
09/10/2015 #23

Avatar de Gustavo.gmb

es necesario que sea word? no podria ser 16 bit?
09/10/2015 #24

Avatar de papirrin

word=16bits, byte=8bits
09/10/2015 #25

Avatar de Gustavo.gmb

ah , lo siento, es que estoy acostumbrado al lenguaje C, donde se pone int16 haha, ok gracias por la respuesta
09/10/2015 #26

Avatar de papirrin

tambien en C se conoce como tal... es un termino universal de informatica.

09/10/2015 #27

Avatar de Gustavo.gmb

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
09/10/2015 #28

Avatar de papirrin

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.
09/10/2015 #29

Avatar de cosmefulanito04

En realidad el word es el tamaño de una variable según la arquitectura, por ej en 32 bits el word es de 32 bits.
09/10/2015 #30

Avatar de papirrin

okis si tienen razon se mes escapo eso de la arquitectura. pero bueno normalmente los pics mas usados son de 8 bits.
09/10/2015 #31

Avatar de Gustavo.gmb

hahhaha todos los dias se aprende algo , 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
09/10/2015 #32

Avatar de papirrin

¿ 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.
09/10/2015 #33

Avatar de Gustavo.gmb

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
09/10/2015 #34

Avatar de papirrin

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.
09/10/2015 #35

Avatar de Gustavo.gmb

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
09/10/2015 #36

Avatar de cosmefulanito04

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.
09/10/2015 #37

Avatar de Gustavo.gmb

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
10/10/2015 #38

Avatar de cosmefulanito04

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:

Código 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?
12/10/2015 #39


Están ordenados en direcciones consecutivas según las letras que les representan A, B, C, D y E.

---------- Actualizado después de 2 minutos ----------

Gustavo.gmb dijo: Ver Mensaje
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.
12/10/2015 #40

Avatar de cosmefulanito04

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.
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.