He realizado algunos cambios, ahora con timer0 y timer2, llevo la conversión de pulsos a displays. Eso funciona bien, ahora con el timer1, lo que trato de hacer es generar los pulsos y con int_ext en rb0, preselecciono los pulsos que quiero, es decir, preseleccionar las rpm.
Avanzando el programa poco a poco en proteus, se ve como voy decrementando para aumentar de RPM en la variable psel, pero el generador de pulsos con el timer1 se queda en 1Hz, y no soy capaz de que se incremente..
Uniendo el pin de salida de los pulsos generados con timer1 y el pin que los recoje en timer0, es como hago para pasar a display, pero se podría hacer internamente?
Creo que lo tengo un poco lioso, alguna idea?
Nuevamente, Gracias.
Un saludo.
int numeros[10]={0b01111110,0b00001100,
0b10110110,0b10011110,
0b11001100,0b11011010,
0b11111010,0b00001110,
0b11111110,0b11001110};
unsigned int16 pulsocuenta=0;
unsigned int8 u,d,c,m;
int16 cont=0;
int cont2=0;
int psel=1;
int cont1=1;
#int_TIMER2
void timer2_isr(){
cont++;
if (cont==977){
cont2++;
if (cont2==2){
pulsocuenta=get_timer0();
pulsocuenta=(pulsocuenta)*60;
m= pulsocuenta/1000;
c=(pulsocuenta%1000)/100;
d=((pulsocuenta%1000)%100)/10;
u=((pulsocuenta%1000)%100)%10;
set_timer0(0);
set_timer2(255);
cont2=0;
}
cont=0;
}}
#int_EXT //por cada pulso que recibo en el pin b0, decremento la preselección y aumento rpm
void ext_isr()
{
psel--;
delay_ms(150);
if (psel==0) psel=166;
}
#int_TIMER1 //que cuente hasta la preselección y salga el pulso por pin c0??
void timer1_isr(){
cont1++;
if (cont1==167) cont1=1;
if (cont1==psel)
{
output_toggle(pin_c0);
cont1=1;
set_timer1(64000);
}
}
void main(void){
set_tris_b(0b00000001);
set_tris_c(0x00);
setup_timer_1(T1_INTERNAL|T1_DIV_BY_1);
setup_timer_2(T2_DIV_BY_1,255,1);
setup_timer_0(RTCC_EXT_L_TO_H|RTCC_DIV_2);
enable_interrupts(int_TIMER1);
enable_interrupts(int_TIMER0);
enable_interrupts(int_TIMER2);
enable_interrupts (int_ext);
ext_int_edge(L_TO_H);
enable_interrupts(global);
set_timer1(64000);
set_timer2(255);
set_timer0(0);