Tengo un programa en C y he leído que poniendo #pragma FOSC=INTIO67 al principio se establece que el oscilador principal trabaje a 1MHz en los bits RA6 y RA7. ¿Este 1MHz es fosc o fosc/4? ¿Sería lo mismo que poner al principio del programa #define _XTAL_FREQ 1000000?
Leiste mal, INTIO67 , es Oscilador interno y los pines RA6 y RA7 como I/O (Entradas/salidas), ya que podes tener a RA6 como salida de reloj (salida es FOSC/4) y RA7 como puerto si es que usas el oscilador interno. NADA MAS.
Como ves esto no significa que la frecuencia sea de 1Mhz, esto va a depender del PIC que tengas. Hay algunos PICs, por ejemplo el PIC16F887 que el oscilador interno es de 8Mhz pero el preescaler por default es de 1:2 y por lo tanto tiene un FOSC de 4Mhz. Para cambiar la frecuencia solamente debemos cambiar los bits del registro OSCCON que es el que controla eso.
La frecuencia que hablamos aca es FOSC (como si fuera el valor de un cristal).
Otro ejemplo un PIC18F46K20 tiene oscilador de 16Mhz interno y por default tiene un preescaler que lo baja a 1Mhz. Que obviamente luego podes cambiar.
El #define _XTAL_FREQ es simplemente para que el compilador sepa la velocidad de FOSC, ya que no sabe que cristal o que oscilador vas a ponerle. Ese define se utiliza luego para calcular la cantidad de ciclos necesarias en cada delay. Desconozco que exista algun otro uso del mismo.