
Aqui les envio dos codigo casi iguales los cuales no se si estan bien o no ; Empece con uno programita simple a ver si me da pero nada y quiesiera saber que tengo mal, bueno supuestamente segun lo que hace el programa es que leo el puerto por un segundo y si esta en alto durante ese tiempo enciende un led cosa que no hace jajaja!! bueno esto es solo como para empezar porque luego no va ha ser un led sino una salida UART que va hacia un transmisor RF, pero si no me enciende el led pues se podran imaginar lo demas.... bueno el programa lo hice usando supuestamente el timer0y que haga un conteo durante ese tiempo porque tengo que estar segura que durante ese tiempo la señal no bajo a cero y luego subio otra vez ,ademas estoy provando con los CCP en modo de CAPTURE usando los flancos de bajada subida y asi hallar los anchos pulsos pero de eso no tengo sino las inicializaciones y puras ideas en mente es decir no tengo un codigo como tal porque estoy averiguando bien como se usa los ccp.
entonces no se que hacer por doonde me meto no llego a nada por favor todas las ideas seran valiosas para mi GRACIAS!!!
#include <18F4620.h>
#device adc=8
#use delay(clock=4000000)
#fuses NOWDT,WDT128,XT, NOPROTECT, IESO, BROWNOUT, BORV21, NOPUT, NOCPD, STVREN, NODEBUG, LVP, NOWRT, NOWRTD, NOEBTR, NOCPB, NOEBTRB, NOWRTC, NOWRTB, FCMEN, XINST, PBADEN, LPT1OSC, MCLR
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=9)
#define INTS_PER_SECOND 16
BYTE seconds;
BYTE int_count;
#int_RTCC
RTCC_isr()
{
if(--int_count==0)
{
if (input(PIN_A0)==1)
{
output_bit (PIN_B0,1);
delay_us (5);
}
int_count=INTS_PER_SECOND;
}
}
void main()
{
int_count=INTS_PER_SECOND;
set_tris_b (0x00);
setup_adc_ports(NO_ANALOGS|VSS_VDD);
setup_adc(ADC_OFF);
setup_psp(PSP_DISABLED);
setup_spi(FALSE);
setup_wdt(WDT_OFF);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_timer_3(T3_DISABLED|T3_DIV_BY_1);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
set_RTCC(0);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_256|RTCC_8_bit);
enable_interrupts(INT_RTCC);
enable_interrupts(GLOBAL);
}
---------------------------------------------------------------------------------------------------------
Este es parecido pero no igual no se cual esta mejor:
#include <18F4620.h>
#device adc=8
#use delay(clock=4000000)
#fuses NOWDT,WDT128,XT, NOPROTECT, IESO, BROWNOUT, BORV21, NOPUT, NOCPD, STVREN, NODEBUG, LVP, NOWRT, NOWRTD, NOEBTR, NOCPB, NOEBTRB, NOWRTC, NOWRTB, FCMEN, XINST, PBADEN, LPT1OSC, MCLR
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=9)
#define INTS_PER_SECOND 16
BYTE seconds;
BYTE int_count;
#int_RTCC
RTCC_isr()
{
if(--int_count==0)
{
++seconds;
int_count=INTS_PER_SECOND;
}
}
void main()
{
int_count=INTS_PER_SECOND;
setup_adc_ports(NO_ANALOGS|VSS_VDD);
setup_adc(ADC_OFF);
setup_psp(PSP_DISABLED);
setup_spi(FALSE);
setup_wdt(WDT_OFF);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_timer_3(T3_DISABLED|T3_DIV_BY_1);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
set_RTCC(0);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_256|RTCC_8_bit);
enable_interrupts(INT_RTCC);
enable_interrupts(GLOBAL);
set_tris_b (0x00);
do{ // esto supuestamente espera a que el puerto reciba un alto
}while (input(PIN_A0)==1);
if (seconds == 1 && input(PIN_A0)==1)// esto segun yo espera a que el contador llegue a 1seg y
//si todavia esta en uno la entrada prendame el led en el pin 0
//del puerto B
{
output_bit (PIN_B0,1);
}
}