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!