Autor Tema: ayuda con puerto y bit en una variable  (Leído 3238 veces)

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

Desconectado dchoc

  • PIC10
  • *
  • Mensajes: 16
ayuda con puerto y bit en una variable
« en: 06 de Junio de 2007, 14:18:09 »
Hola a todos!
tengo problemas para apuntar a una pata del micro con variables

lo que necesito es asignar una pata en una variable, por ejemplo:

salida = portb,1
high salida

pero esto ni otras cosas que probé funcionan.
Como lo resuelvo?
Gracias a todos.

Desconectado xocas

  • Administrador
  • PIC24H
  • *******
  • Mensajes: 2312
Re: ayuda con puerto y bit en una variable
« Respuesta #1 en: 06 de Junio de 2007, 15:21:31 »
hola dchoc

la forma de hacerlo sería: salida VAR portb.1 en lugar de salida = portb.1

y ojo que estas usando una coma donde debería haber un punto portb, (debe ser un punto)

un saludo

Desconectado dchoc

  • PIC10
  • *
  • Mensajes: 16
Re: ayuda con puerto y bit en una variable
« Respuesta #2 en: 07 de Junio de 2007, 13:35:55 »
pero eso es un alias, no una variable.. es solo una utilidad "visual" ..
no se puede decir
if a=1 then
  salida var portb.1
else
  salida var portb.2
endif
high salida

yo tengo una rutina generica, a la cual le entrego los datos, incluida la salida, para no repetir codigo. ejemplo

entro a la rutina asi:

case 1 : a=a1:b=b1:c=c1:salida=1
case 2 : a=a2:b=b2:c=c2:salida=2
case 3: a=a3:b=b3:c=c3:salida=3
end select

rutina:
           if  (a+b) = (b*c) and c > bla bla bla.... then high salida



Desconectado xocas

  • Administrador
  • PIC24H
  • *******
  • Mensajes: 2312
Re: ayuda con puerto y bit en una variable
« Respuesta #3 en: 07 de Junio de 2007, 15:53:15 »
de esta forma creo que tiene que funcionarte (perdona, no estoy seguro de lo que necesitas conseguir...):

salida var bit
salida = 1

if a = 1 then
 portb.1 = salida
else
 portb.0 = salida
endif

un saludo

Desconectado navaismo

  • Jubilado Todopic
  • PIC24H
  • ****
  • Mensajes: 1973
Re: ayuda con puerto y bit en una variable
« Respuesta #4 en: 07 de Junio de 2007, 15:59:45 »
Podrias ser un poco mas claro yo aun no entiendo que es lo que necesitas. en un principio entendi lo mismo que el amigo xocas pero ahora de plano ya me perdi.
"Mi tercer deseo, que otra cosa podría ser, poner un final a todo el sufrimiento, que sólo con mi propia extinción el planeta podrá ser aliviado. Pobre de mí, Si tuviera tres deseos hoy, la elección no sería dificil para mí, Sólo tres deseos serían suficientes, No tendría uso para más."

"He sido un hombre que busca y aun lo sigo siendo, pero ya no busco en las estrellas y en los libros, sino en las enseñanzas de mi sangre."

Desconectado dchoc

  • PIC10
  • *
  • Mensajes: 16
Re: ayuda con puerto y bit en una variable
« Respuesta #5 en: 08 de Junio de 2007, 12:36:13 »
El caso real es complicado, les paso un ejemplo mas didactico:

'Necesito una funcion que ponga un 1 en el bit X del puerto b, X sera la unica entrada a la funcion.

X=7  nro entre 0-7

'----------- aca comienza la funcion


select case X
   case 0: high portb.0
   case 1: high portb.1
   case 2: high portb.2
   case 3: high portb.3
   case 4: high portb.4
   case 5: high portb.6
   case 7: high portb.7
end select
return   

ahora lo tengo funcionando asi y funciona bien, pero me parece que debe haber una forma mas simple para hacerlo.
La funcion real, realiza algunos calculos, con muchas variables, y segun resultado actua con el puerto B, EN UN BIT ESPECIFICO, DEFINIDO EN FORMA EXTERNA A LA FUNCION.
La entrada de la funcion son muchas variables, incluyendo el bit de salida en la puerta B.


Por ejemplo la funcion: {si A=B, entonces portb.C = 1, sino, portb.c = 0} tiene como entradas A,B y C

Defino a,b y c :

A=3:B=3:C=2
---------------FUNCION------
if a=b then
   aca debe poner 1 en el bit C del puerto b
else
   aca debe poner 0 en el bit C del puerto b
endif
return

El tema es no recurrir a un if o case para que compare y decida segun C
La idea es actuar directamente con C.

C podria ser un bit del puerto b, en binario, por ejemplo c=%1,c=%10,c=%100,c=%1000, c=%10000
Pero tampoco se como hacer un OR (bit a bit) entre C y portb, como para poner a "1" el bit indicado en C
y un AND (bit a bit) entre C y portb para poner a 0 el bit C

vuelvo al ejemplo anterior para ser claro, pero no funciona porque AND y OR son operaciones booleanas y no matematicas.
en el manual encontre funciones matematicas AND y OR, pero actuan en un unico bit y no en todo el byte, bit a bit, asi que no se
como implementarlo ni si es posible.

a=3:b=3:c=%100
---------------funcion
if a=b then
   resultado= portb OR C
   portb=resultado
else
   resultado = portb AND C
   portb = resultado
endif
return

   
espero haber sido mas claro con mi consulta. SAludos y gracias a todos!

 

Desconectado dchoc

  • PIC10
  • *
  • Mensajes: 16
Re: ayuda con puerto y bit en una variable
« Respuesta #6 en: 08 de Junio de 2007, 12:45:38 »
UFF... ya me sale humo de la cabeza...
en el ultimo ejemplio del AND y el OR, me confundi, aparte de que no se como implementarlo, logicamente esta mal expresado y con resultado erroneo
portb OR C deberia cambiar solo el estado del bit indicado en C a 1 y dejar intacto los demas, ok.. creo que eso si funciona
portb AND C --> eso esta mal, yo intentaba poner a 0 el bit indicado en C y dejar intacto los demas.

Desconectado jansuini

  • Moderador Local
  • PIC24F
  • *****
  • Mensajes: 566
Re: ayuda con puerto y bit en una variable
« Respuesta #7 en: 08 de Junio de 2007, 15:31:32 »
Hola

Quizas la solucion la tengas por el lado de las instrucciones lookup o lookup2

Fijate en el manual cual se puede adecuar

Saludos
Jorge

Desconectado dchoc

  • PIC10
  • *
  • Mensajes: 16
Re: ayuda con puerto y bit en una variable
« Respuesta #8 en: 08 de Junio de 2007, 16:51:21 »
Gracias jorge. Estuve mirando lookup pero la salida siempre es una variable, y justo el problema que tengo es relacionar un bit de un puerto con una variable.

Pensandolo tranquilo, el puerto es una variable, y necesito apuntar a un bit X de esta variable "puerto" con otra variable que contenga el dato X

ejemplo:
 
1:       PUERTO  =  10000011     estado actual del puerto
2:           VAR_X  =  00010000    apunto al bit 5 con la variable X
3:           1 OR 2  =  10010011    con el OR puedo "encender el pin" y dejar intactos los demas
4: REV 8 VAR_X =  11101111    aca inverti VAR_X para poder hacer luego hacer un AND y "apagar el pin"
5:        3 AND 4  =  10000011   ahora con un AND "puse un 0 en el pin" y volvimos al estado original del puerto.


conclusion: podria funcionar pero no se como hacer un AND entre 2 variables byte   :D :D :D

Saludos!




Desconectado jansuini

  • Moderador Local
  • PIC24F
  • *****
  • Mensajes: 566
Re: ayuda con puerto y bit en una variable
« Respuesta #9 en: 08 de Junio de 2007, 17:27:47 »
Hola por lo que entiendo ,un AND entre 2 byte es:
portb=portb and nuevo_valor

Habría que probarlo

jorge

Desconectado dchoc

  • PIC10
  • *
  • Mensajes: 16
Re: ayuda con puerto y bit en una variable
« Respuesta #10 en: 11 de Junio de 2007, 12:57:58 »
Jorge :

Deberia funcionar pero no funciona.. no actua bit a bit..  hace algo medio tonto, trata al byte como un conjunto de 8 bits todos iguales.

10000001
and
00010000
=
11111111

10000001
and
00000000
=
00000000


Desconectado xocas

  • Administrador
  • PIC24H
  • *******
  • Mensajes: 2312
Re: ayuda con puerto y bit en una variable
« Respuesta #11 en: 11 de Junio de 2007, 15:26:16 »
hola

prueba con esto que extraje del manual:

Bitwise operators act on each bit of a value in boolean fashion. They can be used to isolate bits or add bits into a value. For example,

B0 = B0 & %00000001 ' Isolate bit 0 of B0
B0 = B0 | %00000001 ' Set bit 0 of B0
B0 = B0 ^ %00000001 ' Reverse state of bit 0 of B0

(algo así como 'operadores de bit inteligentes'). aunque no lo he probado diría que es lo que necesitas.

un saludo