Hola amigos, estoy configurando al Timer1 como contador externo asíncrono y al Timer3 como temporizador interno, cada 20 000 cuentas del timer3 entra en interrupción y coje el valor actual del timer1 y lo resetea, luego sale y se halla con una fórmula las RPM de un motor que se envían al uart.
El problema es que cuando lo pruebo en el hiperterminal no me aparece nada, parece que no entra en interrupción, estoy suponiendo que el timer 1 y 3 son de 16bits. Me sale esta advertencia al compilar:
Warning 208 Line12[1,11]: Function not void and does not return a value TIMER3_isr
El pin 15 (T13CKI) lo tengo por el momento al aire, por este pin se mete los pulsos asíncronos?
#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);
}
}
}
Agradesco las ayudas, gracias.