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

Temas similares

27/09/2011 #1


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
27/09/2011 #2


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
28/09/2011 #3
Moderador

Avatar de D@rkbytes

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.
28/09/2011 #4


maxking110 dijo: Ver Mensaje
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.
28/09/2011 #5


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



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
28/09/2011 #6


Pesimo codigo amigo, debes estudiar mas.

Saludos.
28/09/2011 #7


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
29/09/2011 #8
Moderador

Avatar de D@rkbytes

Pues no entiendo como con 2 Bits piensas obtener 5 estados de salida.

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..
Imágenes Adjuntas
Tipo de Archivo: png Comparador 2 Bits.png (4,3 KB (Kilobytes), 2 visitas)
29/09/2011 #9


Darkbytes dijo: Ver Mensaje
Pues no entiendo como con 2 Bits piensas obtener 5 estados de salida.

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..
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
30/09/2011 #10
Moderador

Avatar de D@rkbytes

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
Archivos Adjuntos
Tipo de Archivo: rar TEST.rar (13,1 KB (Kilobytes), 4 visitas)
30/09/2011 #11


looool, muchas gracias men

ahora veo que era utilizando el portb=%0000 lol muchas gracias amigo!
01/10/2011 #12
Moderador

Avatar de D@rkbytes

maxking110 dijo: Ver Mensaje
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
Respuesta
¿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.