ayuda 16f84a sentencia if

hola que tal tengo una pequeña programacion en pic basic donde hago el registro universal

if porta.0=0 then
if porta.1=0 then es_ss
endif
es_ss:
high portb.0
low portb.0
pause 4000

if porta.0=1then
if porta.1=0 then es_ss
endif
es_ss:
low portb.0
low portb.0
pause 4000
end

es decir que por medio de interrupciones en el ra0 y ra1, por medio de un switch de voltaje me ejecute cada uno de los que corresponden es decir, 00 me hace el primer if, y si es 10 me ejecute la segunda parte, pues no me sale, simplemente lo monto en proteus y corre todo el programa sin importar las interrupciones.

una ayudita
 
La verdad es que no me especialiso mucho en basic, trabajo mas con c pero veo que en esta linea
if porta.0=1then esta todo junto deberia ser
if porta.0=1 then ( no se si es un error de copia)

low portb.0
low portb.0
¿Por que mandas dos?

Saludos
 
Última edición:
Muy mal muy mal esta tu código.
Si en dado caso saltara a es_ss: no te darias opticamente cuenta.
Ya que inmediatamente que mandas RB0 a 1 la siguiente instrucción lo manda a 0
y la pausa no te sirve de nada si esta al final.
Esa pausa ponla de intermedio.
high portb.1
pause 4000
low portb.1
end
Me supongo pegaste dos intentos de tu código ?
Porque tampoco esta permitido dos etiquetas iguales.
Si puedes poner dos low portb.1 que no tiene sentido, con una instrucción basta,
pero dos etiquetas con el mismo nombre no.
Y espero esa parte de tu código sea solo la parte que no te funciona,
por que si es solo eso lo que quieres compilar, tienes que definir los puertos
e inicializarlos para que tomen estados logicos al correr el programa.
 
Última edición:
hola que tal tengo una pequeña programacion en pic basic donde hago el registro universal

if porta.0=0 then
if porta.1=0 then es_ss
endif
es_ss:
high portb.0
low portb.0
pause 4000

if porta.0=1then
if porta.1=0 then es_ss
endif
es_ss:
low portb.0
low portb.0
pause 4000
end

es decir que por medio de interrupciones en el ra0 y ra1, por medio de un switch de voltaje me ejecute cada uno de los que corresponden es decir, 00 me hace el primer if, y si es 10 me ejecute la segunda parte, pues no me sale, simplemente lo monto en proteus y corre todo el programa sin importar las interrupciones.

una ayudita

Hola como te indicaron el lo que te sucede es lógico debido a que debes esperar a que suceda las condiciones en algún lugar y luego en base a que paso actuar algo como:

Espero:
if porta.0=0 then
if porta.1=0 then es_ss
endif
if porta.0=1then
if porta.1=0 then es_sss
endif
goto Espero
es_ss:
high portb.0
low portb.0
pause 4000
goto espero
es_sss:
low portb.0
low portb.0
pause 4000
goto espero
END

los dos IF lo puedes resumir así también:
if porta.0=0 xor porta.1=0 then goto es_ss
y de igual forma el segundo y mil reformas mas o distintas formas e hacer lo mismo con gosub o definiendo símbolos para los pines/puertos, etc.

Saludos.

Ric.
 
if portA.0=0 then
if portA.1=0 THEN es_ss
endif
es_ss:
low portB.0
low portB.1
low portB.2
low portB.3
pause 4000
high portB.0
low portB.1
low portB.2
low portB.3
pause 4000
high portB.0
high portB.1
low portB.2
low portB.3
pause 4000
high portB.0
high portB.1
high portB.2
low portB.3
pause 4000
high portB.0
high portB.1
high portB.2
high portB.3
pause 4000

if portA.0=0 then
if portA.1=1 then ep_ss
endif
ep_ss:
high portB.0
high portB.1
high portB.2
high portB.3
pause 4000
low portB.0
high portB.1
high portB.2
high portB.3
pause 4000
low portB.0
low portB.1
high portB.2
high portB.3
pause 4000
low portB.0
low portB.1
low portB.2
high portB.3
pause 4000
low portB.0
low portB.1
low portB.2
low portB.3
pause 4000
if portA.0=1 then
if portA.1=0 then ep_sp
ep_sp:
endif
high portB.0
high portB.1
high portB.2
high portB.3
pause 4000
low portB.0
low portB.1
low portB.2
low portB.3
pause 4000

if portA.0=1 then
if portA.1=1 then es_sp
endif
es_sp:
low portB.0
low portB.1
low portB.2
low portB.3
pause 4000
low portB.0
low portB.1
low portB.2
high portB.3
pause 4000
low portB.0
low portB.1
high portB.2
high portB.3
pause 4000
low portB.0
high portB.1
high portB.2
high portB.3
pause 4000
high portB.0
high portB.1
high portB.2
high portB.3
pause 4000



end

les muestro la imagen del proteus

thump_6973784lol.jpg


ok, haber en mi codigo lo q tiene q hacer espor medio de los 2 switch detectar si es 00, 01,10,11
y hacer cada uno de los procesos correspondientes, pero aqui en el proteus, me hace el programa de corrido sin importar las itnerrupciones
 
mmm sera porq apenas hace 2 dias empece a programar??? no soy dios de la programacion lol

ooooooooooo es q creo ya vi no me han entendido, miren
si yo hago 00 en los switch me tiene q arrojar a los leds, son 2 entradas y 4 salidas!
0000
0001
0011
0111
1111
 
Última edición:
:unsure: Pues no entiendo como con 2 Bits piensas obtener 5 estados de salida. :unsure:

0000
0001
0011
0111
1111

Yo tendria esta logica:
Código:
TEST:
IF PORTA.0=0 AND PORTA.1=0 THEN PORTB=%00
IF PORTA.0=0 AND PORTA.1=1 THEN PORTB=%01
IF PORTA.0=1 AND PORTA.1=0 THEN PORTB=%10
IF PORTA.0=1 AND PORTA.1=1 THEN PORTB=%11
GOTO TEST
END

Que daria igual a:
TEST:
PORTB = PORTA
GOTO TEST
END
Y son solo dos estados de salida.
Pero si se usa la logica de un comparador de 2 Bits la cosa cambia.
Para este caso solo se requiere crear la tabla de verdad correspondiente
y luego determinar las funciones booleanas que producen las salidas requeridas.
Donde A y B son entradas de un Bit
Entonces:
A B A<B A=B A>B
0 0 0 1 0
0 1 1 0 0
1 0 0 0 1
1 1 0 1 0
Pero como quieres jugar con los estados de RA0 y RA1
puedes hacer tus propias combinaciones...
Bueno hay nos sigues contando tus PICaventuras ;)

Saludos tocayo ricbevi no habia notado que andabas de vuelta.. :apreton:
 

Adjuntos

  • Comparador 2 Bits.png
    Comparador 2 Bits.png
    4.3 KB · Visitas: 2
Última edición:
:unsure: Pues no entiendo como con 2 Bits piensas obtener 5 estados de salida. :unsure:

0000
0001
0011
0111
1111

Yo tendria esta logica:
Código:
TEST:
IF PORTA.0=0 AND PORTA.1=0 THEN PORTB=%00
IF PORTA.0=0 AND PORTA.1=1 THEN PORTB=%01
IF PORTA.0=1 AND PORTA.1=0 THEN PORTB=%10
IF PORTA.0=1 AND PORTA.1=1 THEN PORTB=%11
GOTO TEST
END

Que daria igual a:
TEST:
PORTB = PORTA
GOTO TEST
END
Y son solo dos estados de salida.
Pero si se usa la logica de un comparador de 2 Bits la cosa cambia.
Para este caso solo se requiere crear la tabla de verdad correspondiente
y luego determinar las funciones booleanas que producen las salidas requeridas.
Donde A y B son entradas de un Bit
Entonces:
A B A<B A=B A>B
0 0 0 1 0
0 1 1 0 0
1 0 0 0 1
1 1 0 1 0
Pero como quieres jugar con los estados de RA0 y RA1
puedes hacer tus propias combinaciones...
Bueno hay nos sigues contando tus PICaventuras ;)

Saludos tocayo ricbevi no habia notado que andabas de vuelta.. :apreton:

oye haber me quieres decir q atravez de 4 estados diferentes
00
01
10
11

no puedo obtener del primero
0000
0001
0011
0111
1111

del 01

0101
1010
1100
0011

del
10

1111
0000

y por ultimo
1000
1100
1110
1111

eso es lo que quiero mostrar con la programacion solo q los 1 son leds encendidos
 
OK. Ya ves, por eso siempre es mejor detallar una explicación para poder entender.
Ahora hare el código a tu secuencia deseada para que veas que es lo que haria.
Anexo los archivos en PBP de MicroCode y la simulación en ISIS :apreton:
 

Adjuntos

  • TEST.rar
    13.1 KB · Visitas: 4
Última edición:
looool, muchas gracias men

ahora veo que era utilizando el portb=%0000 lol muchas gracias amigo!
Púes si.
Manejando el puerto de modo binario 0 a 7 usando PORTX = %XXXXXXXX
Te ahorras estar con HIGH PORTX.X y LOW PORTX.X o PORTX.X = 0
Tambien lo puedes manejar de forma decimal, pero es mas engorroso.
Hasta pronto :apreton:
 
Última edición:
Atrás
Arriba