Email: Password: Remember Me | Create Account (Free)

Back to Subject List

Old thread has been locked -- no new posts accepted in this thread
???
05/17/15 11:52
Read: times


 
#190478 - Timer 0 ISR for Switch Debounce
// T0 is set for 10ms interval generation. Used for Switch Debounce
 
void Timer0_ISR(void) interrupt 1 using 0      // Basic 10ms interrupt for the program
{
  static unsigned char debounce_count = 3; 
  TR0     = 0;                                 // Stop T0 timer
  TL0     = (65535UL-18518UL);                 // Load  TMR0 registers (18518 x 0.54us = 10ms)
  TH0     = (65535UL-18518UL) >> 8;
	 
  if ( P1TempState == P1  )
    {
      --debounce_count;                        // If Current State of P1 is same as previous, dec, counter  
      if ( debounce_count < 0)
	{
	  P1FinalState = P1TempState;          // State of P1 has been same for 30ms, so valid.   
	  debounce_count = 3 ; 
	}			
    }
  else
   {
     debounce_count = 3;                       // Currenmt state of P1 not equal to previous. Reset counter.
   }	    			
	
  TR0     = 1;                                 // ISR over. Start T0
	
}	

 


Above is an ISR to debounce switches connected to P1 port of a P89V51RD2. But does not seem to work.
In the code I use it as below :
if ( P1FinalState & 0x01 == 0) ...then do something.

Does not seem to work as above. The T0 init is rather staright forward as below :
void init_timer0(void)                                   
{                            
    TMOD      |= 0x01;                           // TMR0  in 16 bit timer mode to interrupt at 10mS intervals
    TL0       = (65535UL-18518UL);               // First time load of TMR0 registers ( 10000/ 0.54 = 18518 )
    TH0       = (65535UL-18518UL) >> 8;
    ET0       = 1 ;                              // Enable T0 interrupt
    TR0       = 1 ;                              // Start Timer 0
}

 


Anything visibly wrong ??

Raghu

List of 11 messages in thread
TopicAuthorDate
Timer 0 ISR for Switch Debounce            01/01/70 00:00      
   I guess            01/01/70 00:00      
      Yes it is enabled in MAIN. Though not shown !             01/01/70 00:00      
   unsigned < 0            01/01/70 00:00      
      :^)            01/01/70 00:00      
   P1TempState init and update            01/01/70 00:00      
      Sorry about the delay...            01/01/70 00:00      
         the code you mentioned is from a very old thread from 8052.c            01/01/70 00:00      
            Thanks to you and Michael Karas !!             01/01/70 00:00      
               You are welcome!!            01/01/70 00:00      
                  Old Stuff            01/01/70 00:00      

Back to Subject List