Dear Byron, The issue is, I need to use timer0 to achieve Have you seen my code ? How can I use COUNT variable as a delay, put counter on it ? Thanks On 30/06/2013 9:10 AM, Byron Jeff wrote: > On Sun, Jun 30, 2013 at 07:44:05AM +0800, Electronic Consultation wrote: >> I answer the question : >> 1. 16F648A >> 2. 20Mhz >> 3. So far nothing I only need to set the interrupt properly on 1ms, >> I set the timer0 to B2, but not sure on the code for the counter for >> getting 1ms, 10ms and 100ms... >> >> Anyone can help ? > OK this helps a bit. The 16F648A has a Timer 2. This timer can handle the > job of creating an autorollover 1ms tick. You can then use this to create= the > others. > > Timer 2 counts Fosc/4 (the PIC instruction clock). The first task is to > figure out how many counts are required to get 1 ms clock. I do this by > figuring about how much time an instruction clock tick takes, then divide > that into the time length desired. The instruction time is 4/20Mhz which = is > 200 nS. 1mS/200nS is 5000. So it takes 5000 ticks into Timer 2 to get 1mS > out. > > Now Timer 2 is a 8 bit timer, On its face it would seem that the max coun= t > would be 256. But the Timer has both a prescaler, which predivides the > number of counts going into the 8 bit timer by 1,4, or 16, and a postscal= er, which > divides the rollovers of the counter by a value between 1 and 16. > > So we need to set up the timer in 3 parts so that the 3 factors combined = is > 5000. The prescaler is the easiest to do. Pick the largest divisor that > goes evenly into the desired count. We get: > > 5000/16 =3D 312.5 > 5000/4 =3D 1250 > 5000/1 =3D 5000 > > We cannot use the 16 prescale because it does not evenly divide. The divi= de > by 4 works. So we set it. Now all we have to do is count the remaining 12= 50 > with the other two parts. > > Next we set the rollover value of the 8 bit main counter. Again we pick t= he > largest value that is less than 256 that goes evenly into 1250. This valu= e > is 250 because 1250/250 =3D 5. It should be obvious that the postscaler i= s > set to the remaining count of 5. > > The prescaler and postscaler values are set in the T2CON register. The > rollover value is placed in the PR2 register. Once these are set and the > timer is turned on (TMR2ON bit in the T2CON register), the timer will cou= nt > 5000 instruction clock ticks, raise the TMR2IF in the PIR1 register, and > automatically reset the timer for the next cycle. > > At 20 Mhz Timer 2 will not give clean mS values beyond 1 mS. So to get 10 > mS the easiest thing to do is to set up the timer for 1 mS, then count th= e > number of times it rolls over. Once it has rolled over 10 times > (remembering to clear the TMR2IF flag after each count), you know that 10 > mS has elapsed. > > I hope this helps. > > BAJ > >> Thanks in advance >> >> On 29/06/2013 10:41 PM, Byron Jeff wrote: >>> On Sat, Jun 29, 2013 at 06:43:54PM +0800, Electronic Consultation wrote= : >>>> Is my counter will give me the right 10ms ? >>> I think we may want to step back a bit and examine what it is that you = are >>> really trying to get done. Some questions: >>> >>> 1) What chip are you using? >>> 2) What speed are you running the chip? >>> 3) What other activities need to be done by the chip? Also do any of th= ose >>> other activities need to be done while this delay is going on? >>> >>> For virtually any modern PIC, this is best done using one of the hardwa= re >>> timers. It's pretty much set and forget. The timer will independently t= rack >>> elapsed time and raise a flag when it rolls over. You code will only ne= ed >>> to track the flag, and reset it when it rolls over. >>> >>> Just as an aside, this is one of the problems with the absolute tons of >>> material out on the Internet about software timers. Most of this was >>> written years ago when the PIC 16F84 was the hot chip. It only had one = 8 >>> bit hardware timer, so it was a precious and not very useful resource. >>> >>> Modern PICs have between 3 and 5 timers. Timers 2,4,6 in many updated c= hips >>> are designed to autorollover. With this feature not only will they rais= e a >>> flag (or generate an interrupt) at a precise time, but will also >>> automatically start the next precise cycle without software interventio= n. >>> These timers are designed for use with PWM and the CCP. However, they c= an >>> be used standalone in the same manner. >>> >>> But without answers for the questions above, it's tough to know if you = have >>> the resources to use the hardware timers, or if the timing is correct o= n >>> the software timers. >>> >>> BAJ >>> >>>> ;*********************************************************************= * >>>> ; 10ms timer function calls >>>> ;*********************************************************************= * >>>> ;....... 10ms timer counter here..... >>>> timer10ms >>>> movf 0x0A >>>> btfsc STATUS,Z >>>> goto timer10ms >>>> >>>> >>>> ;.................................... >>>> >>>> incf COUNT1, f >>>> movlw .10 ;Compare count to 100 decimal >>>> subwf COUNT1, W ;Store the result back in >>>> btfss STATUS, C ;Is the result 0, skip if no >>>> goto exittimer >>>> clrf COUNT1 >>>> On 29/06/2013 1:45 PM, eCHIP wrote: >>>>> If you need a 100 mS delay with a 4 MHz PICmicro, below is the code. >>>>> >>>>> delay1mS movlw .250 >>>>> movwf temp1 >>>>> clrwdt >>>>> decfsz temp1,f >>>>> goto $-2 >>>>> retlw 00 >>>>> >>>>> >>>>> delay100ms movlw .100 >>>>> movwf temp >>>>> call delay1ms >>>>> decfsz temp,f >>>>> goto $-2 >>>>> retlw 00 >>>>> >>>>> Cheers >>>>> >>>>> Ravi >>>>> >>>>> >>>>>> Hi, when you post to the Piclist you need to put an appropriate topi= c >>>>>> tag in the subject line. This time I have added one to your message.= Bob >>>>>> >>>>>> On Fri, Jun 28, 2013, at 10:04 PM, Electronic Consultation wrote: >>>>>>> Guys, >>>>>>> >>>>>>> Am I creating a right counter for PIC ? >>>>>>> >>>>>>> timer100ms >>>>>>> movlw 0x64 >>>>>>> movwf COUNT1 >>>>>>> decfsz COUNT1 >>>>>>> return >>>>>>> >>>>>>> thanks >>>> -- >>>> http://www.piclist.com/techref/piclist PIC/SX FAQ & list archive >>>> View/change your membership options at >>>> http://mailman.mit.edu/mailman/listinfo/piclist >> -- >> http://www.piclist.com/techref/piclist PIC/SX FAQ & list archive >> View/change your membership options at >> http://mailman.mit.edu/mailman/listinfo/piclist -- http://www.piclist.com/techref/piclist PIC/SX FAQ & list archive View/change your membership options at http://mailman.mit.edu/mailman/listinfo/piclist .