Ahora si, depende entonces de como asignas el valor. Se me ocurren 2 formas segun sea la aplicacion, doy un ejemplo
int8 valor_nuevo,valor_viejo;
while(1)
{
if (valor_nuevo != valor_viejo)
{
.....
....
...
valor_viejo = valor_nuevo;
}
}
funcion_interrupcion_UART()
{
valor_nuevo = DATO_RECIBIDO_UART;
}
Vamos a suponer que ambas variables comienzan en 0, ocurre una interrupcion y se le asigna un dato a "valor_nuevo"
Entonces cuando vuelva al programa principal van a ser distintos esas 2 varaibles, va a entrar al if y al final de if, guardo en "valor_viejo" el dato que ya paso, entonces cuando se vuelva a preguntar el if
va a ocurrir que ahora son iguales. y no va a ejecutarse mas hasta que no se cargue un nuevo dato.
Deventaja: si pongo un nuevo dato que resulta ser el mismo valor que el anterior no va a detectarse que se cambio
Otro caso:
int8 dato,flag;
while(1)
{
if (flag)
{
.....
....
...
flag =0;
}
}
funcion_interrupcion_UART()
{
dato = DATO_RECIBIDO_UART;
flag = 1;
}
En este caso utilizo la variable flag para determinar si hay un dato nuevo o no, salvando de la "desventaja" (puede no serlo si no necesitas detectar un dato nuevo) del anterior.
Obviamente estos son ejemplos, donde asignas el valor a la variable puede ser cualquier lado, no solo una interrupcion.