#include <18F4550.h>
#FUSES NOWDT,XT,NOPROTECT,BROWNOUT,NOLVP,BROWNOUT,BORV28
#use delay(clock=4000000)
#use rs232(baud=19200,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)
#use fast_io(D)
#ZERO_RAM
#int_TIMER3
char orden;
unsigned int16 CNT;
TIMER3_isr()
{
orden='B'; /* permiso para hallar RPM*/
CNT=get_timer1(); /* cuenta actual del encoder*/
set_timer1(0); /* resetea cuenta del encoder*/
}
void main()
{
int16 RPM;
setup_timer_1(T1_EXTERNAL|T1_DIV_BY_1);
setup_timer_3(T3_INTERNAL|T3_DIV_BY_1);
enable_interrupts(INT_TIMER3);
enable_interrupts(GLOBAL);
SET_TRIS_d(0b11111101);
output_high(PIN_D1); /* PORTD como salida, _D1=0 */
orden='X';
set_timer3(45536); /* 20000 cuentas son 20mseg*/
while (1)
{
if (orden=='B')
{ /* 20mseg cumplidos, hallando RPM*/
set_timer3(45536); /* 20000 cuentas para 20mseg*/
RPM=(int16)(2.9296*CNT);
printf("V%Lu ",RPM);
orden='X';
}
else
{ /* aun no se ha cumplido los 20mseg*/
delay_us(10);
}
}
}
#int_TIMER3void TIMER3_isr(void)