Hola, me ocurre algo que no debería...
En mi proyecto necesito sacar una señal de reloj de unos 200KHz por el pin C0.
He visto varias opciones para implementarlo con una interrupción, pero tan solo me funciona:
output_bit(PIN_C0,!input(PIN_C0));
Esta no me es válida porque inmediatamente despues de cambiar el estado de C0 necesito saber que hay en C0 y utilizo:
if (input(PIN_C0))
{ ........
Entonces al hacer "input" nose porqué, pone a cero el pin C0, y en vez de generar una señal de reloj genera pulsos de apenas unos nanosegundos.
He probado a utilizar la directiva #bit pero no consigo hacer funcionar mi reloj así, no saca absolutamente nada por el pin C0.
Si alguien sabe que puede pasar...
Este es el código:
#include<18F2550.h>
#fuses HS,NOPROTECT,NOBROWNOUT,NOWDT,NOPUT
#use delay(clock=20000000) //Oscilador a 20MHz
#use fast_io(C)
#bit RC0 = 0x07.0
#INT_RTCC //Funciones de la interrupcion del Timer 0
interrupcionTMR0()
{
output_bit(PIN_C0,!input(PIN_C0)); // Así SI funciona
// output_bit(PIN_C0,!RC0); // Así NO funciona
// RC0 = !RC0; // Así NO funciona
set_rtcc(64285);
}
main()
{
set_tris_c(0x00);
output_c(0x00);
setup_counters (RTCC_INTERNAL, RTCC_DIV_1);
enable_interrupts(GLOBAL);
enable_interrupts(INT_RTCC);
set_rtcc(64285);
while(1);
}Gracias de antemano, un saludo
