2. INTRODUCTION
• PIC18 FAMILY HAS 2 TO 5 TIMERS DEPENDING ON FAMILY MEMBER
• THEY ARE TIMERS 0,1,2,3 AND 4
• THESE ARE USED TO GENERATE TIME DELAY OR USED AS COUNTERS
TO COUNT EVENTS HAPPENING OUTSIDE THESE MICRO DELAYS
• MANY OF THE PIC18 TIMERS ARE 16 BITS WIDE BECAUSE PIC18 HAS
8-BIT ARCHITECHTURE EACH 16-BIT TIMER IS ACCESSED AS TWO
SEPARATE REGISTERS OF LOW BYTE AND HIGH BYTE
• EACH TIMER ALSO HAS CONTROL REGISTER FOR SETTING MODES OF
OPERATION
3. TIMER AS COUNTER AND DELAY GENERATOR
• EVERY TIMER NEEDS A CLOCK PULSE
• IF IT IS INTERNAL CLOCK SOURCE THEN ONE FORTH OF
FREQUENCY OF CRYSTAL OSCILLATOR ON OSC1 AND OSC2 PINS
IS FED INTO TIMER
• THERFORE IT IS USED FOR TIME DELAY GENERATION AND FOR
THAT REASON IS CALLED A TIMER
• WHEN AN EXTERNAL CLOCK IS CHOSEN WE FEED PULSES
THROUGH ONE OF PIC18’S PINS THIS IS CALLED AS COUNTER
4. TIMER 0 REGISTERS AND PROGRAMMING
• TIMER 0 CAN BE USED AS 8-BIT OR 16-BIT TIMER
• THE 16 BIT TIMER IS ACCESSED AS LOW BYTE AND HIGH BYTE
• THE LOW BYTE TIMER IS CALLED TMR0L AND HIGH BYTE
REGISTER IS REFERRED TO AS TMR0H
• THESE REGISTERS CAN BE ACCESSED LIKE ANY OTHER SPECIAL
FUNCTION REGISTERS
• FOR EXAMPLE “MOVWF TMR0L”
6. T0CON(TIMER0 CONTROL) REGISTER
• EACH TIMER HAS A CONTROL REGISTER TO SET VARIOUS TIMER
OPERATION MODES
• T0CON IS AN 8-BIT REGISTEER USED FOR CONTROL OF TIMER 0
• THE BITS FOR T0CON ARE SHOWN IN NEXT SLIDE
7.
8. T0CS(TIMER0 CLOCK SOURCE)
• THIS BIT IN CONTROL REGISTER IS USED TO DECIDE WHETHER CLOCK
SOURCE IS INTERNAL OR EXTERNAL
• IF T0CS=0 THEN FOSC/4 IS USED AS CLOCK SOURCE WHERE THE
TIMERS ARE USED FOR TIME DELAY GENERATION
• IF T0CS=1 THE CLOCK SOURCE IS EXTERNAL AND COMES FROM
RA4/T0CKI WHICH IS PIN6 ON PIC1818F4580/4520
• WHEN CLOCK SOURCE COMES FROM AN EXTERNAL SOURCE TIMER IS
AN EVEN COUNTER
9. FIND VALUE OF T0CON IF WE WANT TO PROGRAM TIMER0 IN 16-BIT MODE NO
PRE-SCALER USE PIC18’S FOSC/4 CRYSTAL OSCILLATOR FOR CLOCK SOURCE,
INCREMENT ON POSITIVE EDGE
10. FIND VALUE OF T0CON IF WE WANT TO PROGRAM TIMER0 IN 16-BIT MODE NO
PRE-SCALER USE PIC18’S FOSC/4 CRYSTAL OSCILLATOR FOR CLOCK SOURCE,
INCREMENT ON POSITIVE EDGE
T0CON=0000 1000
11. INTCON(INTERRUPT CONTROL REGISTER) CONTAINS TMR01F
FLAG
• TMR01F BIT IS PART OF INTERRUPT CONTROL REGISTER WHEN
TIMER REACHES ITS MAXIMUM VALUE OF ‘FFFF H’ IT ROLLS
OVER TO ‘0000 H’ AND TMR01F IS SET TO 1
13. 16-BIT TIMER PROGRAMMING
FOLLOWING ARE OPERATIONS AND CHARACTERISTICS OF 16-BIT
MODE:
1. IT IS A 16-BIT TIMER THERFORE IT ALLOWS VALUES OF 0000 TO FFFFH TO BE LOADED
INTO TMR0H AND TMR0L
2. AFTER THEY ARE LOADED WITH A 16-BIT INITIAL VALUE, THE TIMER MUST BE
STARTED.THIS IS DONE BY “BSF T0CON,TMR0ON” FOR TIMER0
3. AFTER TIMER IS STARTED IT STARTS TO COUNT UP.IT COUNTS UP UNTIL IT REACHES ITS
LIMIT OF FFFFH.WHEN IT ROLLS OVER FROM FFFFH TO 0000H, IT SETS HIGH A FLAG BIT
CALLED TMR01F.THIS TIMER FLAG CAN BE MONITORED.WHEN THI TIMER FLAG IS RAISED
ONE OPTION WOULD BE TO STOP THE TIMER
4. AFTER TIMER REACHES ITS LIMIT AND ROLLS OVER,IN ORDER TO REPEAT THE PROCESS
TMR0H AND TMR0L MUST BE LOADED WITH ORIGINAL VALUE,AND THE TMR01F FLAG
MUST BE RESET TO 0 FOR NEXT ROUND
14. STEPS TO PROGRAM TIMER0 IN 16-BIT
MODE
TO GENERATE TIME DELAY USING TIMER0 MODE 16 THE FOLLOWING STEPS ARE TAKEN:
• LOAD THE VALUE INTO T0CON REGISTER INDICATING WHICH MODE(8 OR 16 BIT) IS
TO BE USED AND THE SELECTED PRE-SCALER OPTION
• LOAD REGISTER TMR0H FOLLOWED BY TMR0L WITH INITIAL COUNT VALUES
• START TIMER WITH INSTRUCTION “BSF T0CON,TMR0ON”
• KEEP MONITORING TIMER FLAG TO SEE IF IT IS RAISED.GET OUT OF THE LOOP WHEN
TMR01F BECOMES HIGH
• STOP TIMER WITH INSTRUCTION “BCF T0CON,TMR0ON”
• CLEAR THE TMR0F FLAG FOR THE NEXT ROUND
• NOW AGAIN LOAD TMR0H FOLLOWED BY TMR0L WITH INITIAL COUNT VALUES AND
REPEAT THE STEPS
• WE CANNOT LOAD TMR0H FIRST BECAUSE THE VALUE OF TMR0H IS KEPT IN
TEMPORARY REGISTER AND WRITTEN TO TMR0H WHEN TMR0L IS LOADED.THIS WILL
PREVENT ANY ERROR IN COUNTING IF TMR0ON FLAG IS SET HIGH
15. FINDING VALUES TO BE LOADED INTO
TIMER
ASSUMING XTAL=10MHZ AND NO PRESCALER VALUES :
1. DIVIDE THE DESIRED TIME DELAY BY 0.4 𝜇𝑠𝑒𝑐
2. PERFORM 65536-N WHERE N IS DECIMAL VALUE OF WHAT WE
GOT IN STEP 1
3. CONVERT THE RESULT INTO HEX AND LOAD THE HIGHER INTO
HIGHER BITS AND LOWER VALUE INTO LOWER BITS
16. PRESCALER AND GENERATING TIME DELAY
• SIZE OF TIME DELAY DEPENDS ON TWO FACTORS: 1)CRYSTAL FREQUENCY
2)TIMERS 16-BIT REGISTER
BOTH OF THEM CANNOT BE CONTROLLED BY PIC18 PROGRAMMER
• IF THE LARGEST DELAY ACHIEVED BY THE TIMER USING TMR0L AND TMROH IS NOT
ENOUGH THEN WE USE PRESCALER OPTION IN T0CON REGISTER TO INCREASE THE
DELAY Y REDUCING THE PERIOD
• THE PRESCALER OPTION ALLOWS US TO DIVIDE INSTRUCTION CLOCK BY A FACTOR
OF 2 TO 256
• WITH PRESCALER BIT ENABLED WE CAN DIVIDE THE INSTRUCTION CLOCK BY 4
BEFORE IT IS FED INTO TIMER0
• LOWER 3 BITS OF T0CON REGISTER GIVES THE OPTIONS OF THE NUMBERS WE CAN
DIVIDE BY WHERE THE LOWEST NUMBER IS 2 AND HIGHEST NUMBER IS 256
17. 8-BIT MODE PROGRAMMING OF TIMER0
• IN 8-BIT MODE TIMER ALLOWS ONLY VALUES FROM 00 TO FFH
TO BE LOADED INTO TMR0L
• AFTER TIMER IS STARTED IT STARTS TO COUNT UP BY
INCREMENTING TMR0L REGISTER
• IT COUNTS UP UNTIL IT REACHES LIMIT FFH
• WHEN IT ROLLS OVER FROM FFH TO 00H IT SETS HIGH TMR01F
18. STEPS TO PROGRAM 8-BIT MODE OF
TIMER0
1. LOAD T0CON VALUE REGISTER INDICATING 8-BIT MODE IS SELECTED
2. LOAD TMR0L REGISTERS WITH INITIAL COUNT VALUE
3. START THE TIMER
4. KEEP MONITORING TIMER FLAG (TMR01F) TO SEE IF IT IS RAISED.GET OUT OF THE LOOP WHEN
TMR01F BECOMES HIGH
5. STOP TIMER WITH INSTRUCTION “BCF T0CON,TMR0ON”
6. CLEAR TMR01F FLAG FOR NEXT ROUND
7. GO BACK TO STEP2 TO LOAD TMR0L AGAIN
8. WHEN USING THE 8-BIT MODE TMR0L REGISTER IS LOADED AND TMR0H HAS A ZERO VALUE
DURING COUNT UP
19. ASSEMBLERS AND NEGATIVE VALUES
• WHEN TIMER IS IN 8-BIT MODE WE CAN LET ASSEMBLER
CALCULATE VALUE FOR TMR0H
• EXAMPLE: MOVLW, -D’100’
IN THIS INSTRUCTION THE ASSEMBLER WILL CALCULATE -
100=9C AND MAKE WREG =9C IN HEX
20.
21. TIMER1 PROGRAMMING
• IT IS A 16-BIT TIMER AND ITS 16-BIT REGISTER IS SPLIT INTO 2 BYTES TMR1L
AND TMR1H
• TIMER BIT CAN BE PROGRAMMED IN 16-BIT MODE ONLY
• TIMER 1 ALSO HAS TICON(TIMER1 CONTROL) REGISTER IN ADDITION TO
TMR1F(TIMER1 INTERRUPT FLAG)
• TMR1F FLAG BIT GOES HIGH WHEN TMR1H:TMR1L OVERFLOWS FROM FFFFH
TO 0000H
• TIMERQ ALSO HAS PRESCALER OPTIONS BUT IT ONLY SUPPORTS FACTORS OF
1:1,1:2,1:4,1:8
24. COUNTER PROGRAMMING
• TIMERS CAN ALSO BE USED AS COUNTERS TO COUNT EVENTS
HAPPENING OUTSIDE PIC18
• WHEN TIMER IS USED AS COUNTER IT IS A PULSE OUTSIDE PIC18
THAT INCREMENTS TH,TL REGISTERS
• IN COUNTER MODE THE REGISTERS SUCH AS TMR0H,TMR0L
AND T0CON ARE SAME AS FOR THE TIMERS DISCUSSED
PREVIOUSLY
25. T0CS BIT IN T0CON REGISTER
• USED TO COUNT EVENTS OUTSIDE PIC
• INCREMENTS TMR0H AND TMR0L REGISTERS
• T0CS IN T0CON REGISTER DETERMINES CLOCK SOURCE
• IF T0CS = 1, TIMER IS USED AS COUNTER
• COUNTS UP AS PULSES ARE FED FROM PIN RA4 (T0CKI)
• If TMR1CS=1, TIMER1 COUNTS UP AS CLOCK PULSES ARE FED
INTO PIN RC0
26. USING EXTERNAL CRYSTAL
FOR TIMER1 CLOCK
TIMER1 COMES WITH TWO OPTIONS,
1. CLOCK FED INTO T1CKI
T1OSCEN=0
2. CLOCK FROM A CRYSTAL CONNECTED
TO T1OSI-T1OSO (additional)
• T1OSCEN=1
• 32 kHz CRYSTAL IS CONNECTED
• USED FOR SAVING POWER DURING
SLEEP MODE DOESNOT DISABLE
TIMER1 WHILE THE MAIN CRYSTAL
IS SHUT DOWN
EXTERNAL SOURCE
INTERNALSOURCE
27. ACCESSING TIMER REGISTERS IN C
• IN C118 WE CAN ACCESS TIMER REGISTERS SUCH AS
TMR0H,TMR0L AND T0CON DIRECTLY USING PIC18FXXX.H
HEADER FILE
• IN ADDITION TO CRYSTAL FREQUENCY AND PRESCALER FACTOR
THE THIRD FACTOR IN DELAY CALCULATIONS IS C COMPILER
• VARIOUS C COMPILERS GENERATE DIFFERENT HEX CODE SIZES
28. TIMER2 PROGRAMMING
• TIMER2 IS 8-BIT TIMER
• 8-BIT REGISTER OF TIMER2 IS CALLED TMR2
• TIMER2 ALSO HAS 8-BIT REGISTER CALLED PERIOD REGISTER(PR2)
• WE CAN SET A FIXED VALUE TO PR2 AND TIMER2 WILL INCREMENT
FROM 00 TO PR2
• THEN THE EQUAL SIGNAL WILL RAISE TMR21F FLAG AND RESET TMR2
TO 00
• CLOCK SOURCE FOR TIMER 2 IS FOSC/4 WITH OPTIONS OF BOTH
PRESCALER AND POSTSCALER
• IT CANNOT BE USED AS COUNTER AS THERE IS NO EXTERNAL CLOCK
SOURCE FOR TIMER2
31. TIMER3 PROGRAMMING
• TIMER3 IS 16-BIT TIMER THAT CAN BE USED BOTH AS TIMER
AND COUNTER
• ITS 16-BIT REGISTER IS SPLIT INTO TWO BYTES REFERRED TO AS
TMR3L AND TMR3H
• TIMER3 CAN BE PROGRAMMED IN 16-BIT MODE ONLY AND
DOESN’T SUPPORT 8-BIT MODE
• TIMER3 HAS PRESCALER OPTIONS OF 1:1,1:2,1:4 AND 1:8
• TIMER3 FLAG (TMR31F) BIT GOES HIGH WHEN TMR3H:TMR3L
OVERFLOWS FROM FFFF TO 0000H
34. CONCLUSION
• THE PIC18 CAN HAVE UPTO 4 OR MORE TIMERS/COUNTERS
DEPENDING ON FAMILY MEMBERS
• TIMERS: GENERATE TIME DELAYS(USING CRYSTAL)
• COUNTERS: EVENT COUNTER(USING PULSE OUTSIDE)
• TIMERS ARE ACCESSED AS TWO 8-BIT REGISTERS, TMRLx and TMRHx
• CAN BE USED AS 8-BIT OR 16-BIT
• EACH TIMER HAS ITS OWN TIMER CONTROL REGISTER