Macedo:
Con respecto a tu anterior post, no se si quedó claro el tema del operador not o ! dentro del while.
a este while(!PIR1bits.SSP1IF); debés analizarlo en dos tramos.
primero evaluar la expresión a la derecha del operador !, es decir, PIR1bits.SSP1IF. Luego a ese resultado lo negás con el !.
Pero el operador ! no altera el valor del bit SSP1IF.
Mirá este ejemplo en pseudo código :
unsigned char x; // variable global
interrupción:
{
x=0;
}
void main(void)
{
x=1;
while(!(X==0)); // mientras x sea distinto a 0 se quedará iterando dentro del while.
// El programa primero evalúa el valor de x(que vale 1) con 0, lo que da false. Y al resultado lo niega.
// Eso es lo que toma como condición el while, siendo en definitiva la condición evaluada verdadera.
// pero x sigue teniendo su valor propio no siendo afectado por el operador !, ya que no se hace ninguna
// asignación a x.
// Cuando ocurra la interrupción se le cambiará el valor a la variable x pasando a valer 0, lo que
// hará que al salir de la interrupción x haga cambiar el resultado de la comparación con 0 y
// se resuelva como verdadera (equivalente a 1). Luego es negada por el operador not ! haciéndola falsa
// nuevamente. Entonces allí si saldrá del while.
//
}
Lo que quiero que quede claro en tu ejemplo es que el operador not no altera el valor del bit PIR1bits.SSP1IF .
Ese bit no se verá afectado por el while en si. Dicho valor solo será cambiado al ocurrir la interrupción pasando a valer 1.
No se en que pic estás trabajando. En mi 18f4550 tengo que valdrá 1 cuando suceda una escritura o lectura en el SPP
y 0 mientras no haya ni lectura ni escritura.
SPPIF: Streaming Parallel Port Read/Write Interrupt Flag bit
1 = A read or a write operation has taken place (must be cleared in software)
0 = No read or write has occurred
while(!PIR1bits.SSP1IF); // se quedará iterando en este while mientras no haya lectura ni escritura.
// Cuando se produzca la interrupción sale del while.
PIR1bits.SSP1IF = 0; // luego borra el flag.
Con respecto al siguiente post debés cargar tu texto en rom para que no te ocupe memoria ram:
#pragma romdata
const rom char Palabra_Contador[]="CONTADOR"; // cadena de texto. se agregará el \0 al final
const rom char my_const_array [5] = {'a','b','c','d','e'}; array de caracteres. // no se agrega el \0 al final
#pragma romdata
mirá las páginas 24 y 25 del tutorial de suky. (las del texto no del pdf!)
modificado: (aclaré que las páginas son las del texto y no del pdf!)