error de código de contador de frecuencia en pic

-2

A continuación se muestra mi código para contar los impulsos en el pin RC0 de pic16f877A. Apliqué una onda cuadrada en rc0 para contar los pulsos. Utilicé TMR0 como temporizador de 500 ms y TMR1 como contador. pero el problema es que tmr1 no incrementa. ¿Hay algo que me haya perdido en mi código? Utilicé terminal virtual y uart para monitorear los valores de TMR0 y TMR1.

 int check=1,l,t;

función uart

 Uart1_Intout_ReturnInt(unsigned i) {
 char puf[6]; //for max 5 digits and the end-sign
 WordToStr(i, puf); // in "Conversions" library
 UART1_Write_Text(puf);
 return i;
 }

rutina de interrupción

 void interrupt()
 {
  OPTION_REG=0;
  l=TMR1l;
  t=TMR0;
  INTCON=0;
  T1CON=0x00;
  check=0;
  }

función de inicio

  void init(){
  OPTION_REG=0;
  T1CON=0;
  INTCON=0;
  ADCON0=0;
  ADCON1 = 0x06;
  CMCON = 0x07;
  TRISC.RC0 = 1;
  PORTC=0;
  }

función de visualización

   void display(){
   UART1_WRITE_TEXT("TMR0 equal to");
   UART1_Write(13); // newline
   Uart1_Intout_ReturnInt(t);    //print timer0 value
   UART1_Write(13); // newline
   UART1_WRITE_TEXT("TMR1L equal to");
   UART1_Write(13); // newline
   Uart1_Intout_ReturnInt(l);        //print timer1 value
   UART1_Write(13); // newline
  }

función principal

  void main() {
  UART1_Init(9600);

  init();

  TMR0=193;
  TMR1H=0;
  TMR1l=0;
  INTCON=0xA0;
  OPTION_REG.PSA=0;  // timer0 initialized
  OPTION_REG.PS2=0;
  OPTION_REG.PS1=1;
  OPTION_REG.PS0=0;
  OPTION_REG.T0SE=0;
  OPTION_REG.T0CS=0;
  T1CON=0x07;               //timer1 initialized
  TMR1IE_bit = 0;
  TMR1IF_bit = 0;

   while(check==1){
                             //when timer0 overflows interrupt will make check=0 to come out of the while loop
    }
  display();


   }

    
pregunta dcmotor

1 respuesta

-1

Tu programa no tiene la función while, que es infinita. Su programa termina, esta no es una buena solución. El código para INTCON debe ser 0x0C (GIE es de 7 bits, y PEIE es de 6 bits, si contamos desde 0). Creo que aquí habrá más errores. Lo comprobaré más tarde.

    
respondido por el Sławomir Kozok

Lea otras preguntas en las etiquetas