pic16f877A el temporizador no funciona

0

Escribí un código en mikroc para pic16f877A en el que he usado un timer0 y timer1. Depuré mi código y encontré que el temporizador 0 no está funcionando pero no puedo entender la razón detrás de eso. Incluso revisé la hoja de datos para OPTION_REG pero no pude resolver el problema por favor ayuda. Soy nuevo en la programación de imágenes. Acabo de cargar la función en la que Timer0 y Timer1 están configurados. UART se usa para verificar si cada línea se está ejecutando y encontré que después de imprimir el valor de TMR1H se detiene.

 int feedback()
 {
 sh = 0;                                 //variable to come out of the while loop after interrupt occured.
 UART1_WRITE_TEXT("inside feedback");
 UART1_Write(13); // newline

 TMR0=193;
 Uart1_Intout_ReturnInt(TMR0);
 UART1_Write(13); // newline

 INTCON=0xA0;
 Uart1_Intout_ReturnInt(INTCON);
 UART1_Write(13); // newline

 TMR1L=0;
 Uart1_Intout_ReturnInt(TMR1L);
 UART1_Write(13); // newline

 TMR1H=0;
 Uart1_Intout_ReturnInt(TMR1H);
 UART1_Write(13); // newline
                                               //here the problem starts
 OPTION_REG.PSA=0;
 OPTION_REG.PS2=0;
 OPTION_REG.PS1=1;
 OPTION_REG.PS0=0;
 OPTION_REG.T0SE=0;
 OPTION_REG.T0CS=0;
 UART1_WRITE_TEXT("timer0 start");     //this msg and following all messages does not show up 
 UART1_Write(13); // newline

 T1CON=0x07;
 UART1_WRITE_TEXT("timer1 start");
 UART1_Write(13); // newline

 sh=1;
 Uart1_Intout_ReturnInt(sh);
 UART1_Write(13); // newline

while(sh==1){
Uart1_Intout_ReturnInt(sh);
UART1_Write(13); // newline

UART1_WRITE_TEXT("inside while loop");
}

UART1_WRITE_TEXT("outside while loop");

TMR1H=TMR1H*1000;
sh=TMR1H+TMR1L;
actualOut=(60*2*sh)/8;
Uart1_Intout_ReturnInt(actualOut);
UART1_Write(13); // newline

return actualOut;
}
void interrupt(){

 T1CON=0x00;
 sh=0;

}

///////////main function/////////////

 void main() {

 UART1_Init(9600);

 pro=0.5,i=0,der=0;
 setPoint=80,sel=1;
 actualOut=20;
 pOut=0,iOut=0,dOut=0;
 out=16;
 error=0,lastError=0;

 ADCON0=0;
 ADCON1=0x0f;
 CMCON = 0x07;
 PORTC=0;
 TRISC = 0b00000001;

  while(1){

 out = pid(actualOut);

 duty=(short)out;
 pwm(duty);

 actualOut = feedback();

  }
  }
    
pregunta dcmotor

1 respuesta

3

No voy a pasar mucho tiempo buscando un código de nivel superior con un poco de compilador entre el sistema y yo. Sin embargo, nunca se está eliminando la condición de interrupción del temporizador 1.

    
respondido por el Olin Lathrop

Lea otras preguntas en las etiquetas