Hi,
Even if you are not using interrupts the timer0 rollover (INTCON.2, T0IF) gets set. So you can periodically check if the flag is set. To get proper timeout your main body loop should not execute for more than the timer0 rollover period. Even if it does then you miss a few ticks but still get some dirty timing. So here is how it goes
PRESET is hard coded. In your main routine when you receive a valid signal don't forget to clear (Reset) the timer_counter variable and any pending ticks i.e., INTCON.2Code:OPTION_REG = %11000111 ' SET PRESCALE HERE 256 (Datasheet PAGE 14) ' @4MHz AND PRESCALE TIMER0 ROLLSOVER IN ABOUT 65.5 mS TIME_COUNTER VAR WORD ' MAY BE A BYTE ALSO INTCON = 0 TIME_COUNTER = 0 MAIN_LOOP: ' DO WHATEVER IF INTCON.2 = 1 THEN ' CHECK IF TIMER ROLLED OVER INTCON.2 = 0 ' CLEAR THE HARDWARE FLAG TMR0 = 0 ' CLEAR TIMER0 IF YOU WISH TIME_COUNTER = TIME_COUNTER + 1 ' INCREMENT YOUR COUNTER ENDIF IF TIME_COUNTER > PRESET THEN QUIT_LOOP GOTO MAIN_LOOP QUIT_LOOP: ' TIME OVER DO WHATEVER
Hope this helps



?? Also your pseudo code for the interrupt makes no sense. I thought "


Bookmarks