TODOPIC
Bienvenido(a),
Visitante
. Por favor,
ingresa
o
regístrate
. ¿Perdiste tu
email de activación
?
1 Hora
1 Día
1 Semana
1 Mes
Siempre
Ingresar con nombre de usuario, contraseña y duración de la sesión
Este tema
Este sub-foro
Todo el foro
Google
Inicio
Ayuda
Buscar
Ingresar
Registrarse
TODOPIC
»
Microcontroladores PIC
»
Lenguaje C para microcontroladores PIC
(Moderadores:
pikman
,
pocher
,
vszener
,
Suky
) »
Simplificar código?
« anterior
próximo »
Imprimir
Páginas: [
1
]
Ir Abajo
Autor
Tema: Simplificar código? (Leído 1458 veces)
0 Usuarios y 1 Visitante están viendo este tema.
iNoXSteeL
PIC12
Mensajes: 75
Simplificar código?
«
en:
26 de Noviembre de 2009, 16:33:28 »
Hola a todos,
trato de hacer un pequeño ejercicio usando las interrupciones RB4-RB7, por lo que me pregunto, que si para hacer algo como el código que muestro estaría bien, o se puede simplificar de alguna otra forma, alguna otra instrucción. Funciona, pero quizá lo veo muy rudimentario con tanto if, alguna idea?
Código: C
#INT_RB
void
interrupciones
(
void
)
{
while
(
!
portb
==
0x00
)
{
if
(
RB4
==
1
&&
RB7
==
0
)
{
RA0
=
1
;
RET
;
RA0
=
0
;
RET
;
}
//INTERMITENCIA IZD CON LUZ TRASERA 0FF
if
(
RB5
==
1
&&
RB7
==
0
)
{
RA1
=
1
;
RET
;
RA1
=
0
;
RET
;
}
//INTERMITENCIA DCH CON LUZ TRASERA OFF
if
(
RB5
==
1
&&
RB7
==
1
&&
RB6
==
0
)
{
RA1
=
1
;
RA3
=
1
;
RET
;
RA1
=
0
;
RA3
=
0
;
RET
;
}
//INTERMITENCIA DCH CON LUZ TRASERA ON
if
(
RB4
==
1
&&
RB7
==
1
&&
RB6
==
0
)
{
RA0
=
1
;
RA3
=
1
;
RET
;
RA0
=
0
;
RA3
=
0
;
RET
;
}
//INTERMITENCIA IZD CON LUZ TRASERA ON
if
(
RB4
==
1
&&
RB7
==
1
&&
RB6
==
1
)
//INTERMITENCIA Y LUZ DE FRENO SIMULTÁNEA
{
RA3
=
1
;
RA2
=
1
;
RA0
=
1
;
RET
;
RA0
=
0
;
RET
;
}
if
(
RB5
==
1
&&
RB7
==
1
&&
RB6
==
1
)
{
RA3
=
1
;
RA2
=
1
;
RA1
=
1
;
RET
;
RA1
=
0
;
RET
;
}
if
(
RB6
==
1
&&
RB7
==
0
)
{
RA2
=
1
;
RA3
=
1
;
}
//LUZ DE FRENO ON Y OFF
if
(
RB6
==
0
)
{
RA2
=
0
;
RA3
=
0
;
}
//APAGA LUZ DE FRENO Y TRASERA
if
(
RB7
==
1
&&
RB6
==
1
)
{
RA3
=
1
;
RA2
=
1
;
}
//LUZ DE FRENO ON Y TRASERA ON SIN PARPADEO
if
(
RB7
==
1
&&
RB6
==
0
&&
RB4
==
0
&&
RB5
==
0
)
{
RA3
=
1
;
RET
;
RA3
=
0
;
RET
;
}
//LUZ TRASERA ON SIN INTERMITENCIA
}
output_b
(
input_b
(
)
)
;
}
Gracias de antemano, un saludo.
En línea
Nocturno
Administrador
DsPIC33
Mensajes: 18286
Re: Simplificar código?
«
Respuesta #1 en:
26 de Noviembre de 2009, 18:52:10 »
Podrías aprovecharte de que los 4 pines que chequeas son contiguos en el PORTB para operar con ellos matemáticamente.
Por ejemplo, esto: if (RB7==1 && RB6==0 && RB4==0 && RB5==0)
es igual que esto: if ((PORTB>>4)==0b1000)
En línea
Visita
MicroPIC
Canal Youtube MicroPIC Proyectos
Twitter @PrMicroPIC
Instagram @proyectosmicropic
Facebook @ProyectosMicroPIC
Telegram @MicroPIC
migsantiago
Colaborador
DsPIC33
Mensajes: 8257
Re: Simplificar código?
«
Respuesta #2 en:
26 de Noviembre de 2009, 19:05:12 »
Y también usando el mismo ejemplo de Manolo podrías eficientarlo usando máscaras...
Código:
[Seleccionar]
if((PORTB & 0xF0) == 0x80)
sentencia;
En línea
iNoXSteeL
PIC12
Mensajes: 75
Re: Simplificar código?
«
Respuesta #3 en:
27 de Noviembre de 2009, 11:07:07 »
Hola,
Nocturno, Migsantiago, gracias por las aclaraciones, ciertamente queda más elegante que de la forma que yo expuse.
Ire probando las diferentes formas en mis rutinas, viendo cual me resulta más o menos fácil.
Un saludo.
En línea
Imprimir
Páginas: [
1
]
Ir Arriba
« anterior
próximo »
TODOPIC
»
Microcontroladores PIC
»
Lenguaje C para microcontroladores PIC
(Moderadores:
pikman
,
pocher
,
vszener
,
Suky
) »
Simplificar código?