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();
}
}