PIC16F688 - dificuldade na porta C

Olá pessoal, estou iniciando com C e estou fazendo um DIMMER com o PIC16F688, já consegui aprender algo sobre ADC, interrupção por mudança de estado entre outros. Já programai vários PICs mas sempre em assembler, mas esse vai ter muito calculo e achei uma boa oportunidade para aprender um pouco de C.
Usei a interrupção por mudança de estado para gerar o sincronismo com a rede, até aí sem problema, para ir aos poucos e verificar o funcionamento do PIC apenas criei uma rotina para gerar um pulso com um determinado atraso e um determinado comprimento, no código a seguir tem a configuração de uns conversores AD para futuras aplicações:
#include <16F688.h>
#device adc=8
#FUSES NOWDT //No Watch Dog Timer
#FUSES INTRC_IO //Internal RC Osc, no CLKOUT
#FUSES NOBROWNOUT //No brownout reset
#use delay(int=8000000)
#define LED1 PIN_A5
#define DELAY 1
#int_RA
void RA_isr(void)
{
delay_ms(DELAY);
output_high(LED1);
delay_ms(DELAY);
output_low(LED1);
}
void main()
{
setup_adc_ports(sAN4|sAN5|sAN6); // configura ADCs
setup_adc(ADC_CLOCK_DIV_2);
setup_comparator(NC_NC_NC_NC);
enable_interrupts(INT_RA);
enable_interrupts(GLOBAL);
setup_oscillator(OSC_8MHZ);
}
Esse código funciona bem, no osciloscópio da para conferir, a cada mudança de estado do pino RA0 o pino RA5 aguarda o tempo DELAY gera um pulso posítivo de tempo também DELAY e volta a zero.
Só que preciso que a saída seja no pino RC3, aí vem a bagunça, testei vários pinos da porta C e todos apresentam a mesma característica, ou seja, ao invés de gerar um pulso a cada semiciclo positivo ele gera um trem de pulsos com níveis baixos e altos determinados pelo delay, e no semiciclo negativo ele simplesmente não gera nenhum pulso, a unica mudança no código foi:
de #define LED1 PIN_A5
para #define LED1 PIN_C3
alguém pode me dar uma luz?
Usei a interrupção por mudança de estado para gerar o sincronismo com a rede, até aí sem problema, para ir aos poucos e verificar o funcionamento do PIC apenas criei uma rotina para gerar um pulso com um determinado atraso e um determinado comprimento, no código a seguir tem a configuração de uns conversores AD para futuras aplicações:
#include <16F688.h>
#device adc=8
#FUSES NOWDT //No Watch Dog Timer
#FUSES INTRC_IO //Internal RC Osc, no CLKOUT
#FUSES NOBROWNOUT //No brownout reset
#use delay(int=8000000)
#define LED1 PIN_A5
#define DELAY 1
#int_RA
void RA_isr(void)
{
delay_ms(DELAY);
output_high(LED1);
delay_ms(DELAY);
output_low(LED1);
}
void main()
{
setup_adc_ports(sAN4|sAN5|sAN6); // configura ADCs
setup_adc(ADC_CLOCK_DIV_2);
setup_comparator(NC_NC_NC_NC);
enable_interrupts(INT_RA);
enable_interrupts(GLOBAL);
setup_oscillator(OSC_8MHZ);
}
Esse código funciona bem, no osciloscópio da para conferir, a cada mudança de estado do pino RA0 o pino RA5 aguarda o tempo DELAY gera um pulso posítivo de tempo também DELAY e volta a zero.
Só que preciso que a saída seja no pino RC3, aí vem a bagunça, testei vários pinos da porta C e todos apresentam a mesma característica, ou seja, ao invés de gerar um pulso a cada semiciclo positivo ele gera um trem de pulsos com níveis baixos e altos determinados pelo delay, e no semiciclo negativo ele simplesmente não gera nenhum pulso, a unica mudança no código foi:
de #define LED1 PIN_A5
para #define LED1 PIN_C3
alguém pode me dar uma luz?