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=20 > getting 1ms, 10ms and 100ms... >=20 > 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 t= he 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 count 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 postscaler= , 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 divide by 4 works. So we set it. Now all we have to do is count the remaining 1250 with the other two parts. Next we set the rollover value of the 8 bit main counter. Again we pick the largest value that is less than 256 that goes evenly into 1250. This value is 250 because 1250/250 =3D 5. It should be obvious that the postscaler is 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 count 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 the 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 >=20 > 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 > >> --=20 > >> http://www.piclist.com/techref/piclist PIC/SX FAQ & list archive > >> View/change your membership options at > >> http://mailman.mit.edu/mailman/listinfo/piclist >=20 > --=20 > http://www.piclist.com/techref/piclist PIC/SX FAQ & list archive > View/change your membership options at > http://mailman.mit.edu/mailman/listinfo/piclist --=20 Byron A. Jeff Chair: Department of Computer Science and Information Technology College of Information and Mathematical Sciences Clayton State University http://faculty.clayton.edu/bjeff --=20 http://www.piclist.com/techref/piclist PIC/SX FAQ & list archive View/change your membership options at http://mailman.mit.edu/mailman/listinfo/piclist .