25
PIC18 Timer Programming Hsiao-Lung Chan Dept Electrical Engineering Chang Gung University, Taiwan [email protected]

PIC18 Timer Programming - cgu.edu.tw

  • Upload
    others

  • View
    9

  • Download
    0

Embed Size (px)

Citation preview

Page 1: PIC18 Timer Programming - cgu.edu.tw

PIC18 Timer Programming

Hsiao-Lung ChanDept Electrical Engineering

Chang Gung University, [email protected]

Page 2: PIC18 Timer Programming - cgu.edu.tw

Objectives

Introduce PIC18 timers

Timer 0, Timer 1, Timer 2, Timer 3

Generate a time delay using a timer

Generate a square wave using a timer

Count external pulses using a timer

Use C as well as assembly in timer programming

2

Page 3: PIC18 Timer Programming - cgu.edu.tw

Functions of PIC18 timer

Generate a time delay (計時器) Use internal clock pulse, Fosc/4

As a counter to count events happening outside the microcontroller (計數器) Use external clock pulse

3

Page 4: PIC18 Timer Programming - cgu.edu.tw

Timer0 16-bit block diagram

4

T0CS

T0SE

Fosc/4

PSAT0PS2:T0PS0

T0CKI pin

TMR0H

TMR0L Set interrupt flag TMR0IF

Sync with internal

clockTMR0 high byte

• Should load TMR0H first, and then TMR0L

Parallel operations with TMR0L read or

write

1/4th of the frequency of the crystal oscillator on the OSC1 and OSC2 pins

external clock pulse

L-to-H or H-to-L edge transition

1

0

(Figure 9-5)

Page 5: PIC18 Timer Programming - cgu.edu.tw

Registers of the timer

5

Timer0

Timer1

Special function registers (SFRs)

Page 6: PIC18 Timer Programming - cgu.edu.tw

Timer0 registers

Timer0 can be used as an 8-bit or 16-bit timer Can be assessed like any SFRs

MOVWF TMR0L MOVFF TMR0H, PORTC

6

(Figure 9-1)

Page 7: PIC18 Timer Programming - cgu.edu.tw

T0CON (Timer0 control) register

Set various timer operation mode

7

(Figure 9-2)

Page 8: PIC18 Timer Programming - cgu.edu.tw

TMR0IF flag bit in INTCON (interrupt control register)

8

TMR0ON

T0CS=0

(Figure 9-3,4)

Page 9: PIC18 Timer Programming - cgu.edu.tw

8-bit mode programming of Timer0

9

T0CS

T0SE

Fosc/4

PSAT0PS2:T0PS0

T0CKI pin

TMR0

Set interrupt flag TMR0IF

Sync with internal

clock

(Figure 9-7)

Page 10: PIC18 Timer Programming - cgu.edu.tw

Examples using Timer 0

Assembly programming

Find frequency of square wave using 16-bit timer (Example 9-7)

Find frequency of square wave using 8-bit timer (Example 9-19)

C programming

Toggle RB5 every 50 ms using 16-bit timer (Example 9-29)

Generate 2-Hz square wave using 8-bit timer (Example 9-30)

10

Page 11: PIC18 Timer Programming - cgu.edu.tw

Timer1

Only support 16-bit mode

11

TMR1CS

Fosc/4

TMR1ON

T0PS1:T0PS0

TMR1H

CCP Special Event TriggerSet interrupt flag TMR1IF on overflow

TMR1L

T1SYNC

T1OSCEN

T1OSO/T1CKI

T1OSI

(Figure 9-9)

Page 12: PIC18 Timer Programming - cgu.edu.tw

T1CON (Timer1 control) register

12

(Figure 9-10)

Page 13: PIC18 Timer Programming - cgu.edu.tw

PIR1 (interrupt control register 1)

13

(Figure 9-11)

Page 14: PIC18 Timer Programming - cgu.edu.tw

Examples using Timer 1

Generate a square wave using assembly (Example 9-21)

Generate a square wave using C (Example 9-33)

14

Page 15: PIC18 Timer Programming - cgu.edu.tw

Counter programming

Using Timer 0 Get pulses from T0CKI (Timer0 clock input): RA4 (PORTA.4)

Set T0CS (Timer0 clock source) in T0CON to 1

Using Timer 1 External clock is fed into T1CKI pin

External clock source option (TMR1CS) is set to 1 Timer1 oscillator enable bit (T1OSCEN) is set to 1

15

Page 16: PIC18 Timer Programming - cgu.edu.tw

Examples for counter programming

Assembly programming

Count pulse using 8-bit Timer 0 (Example 9-26)

Count pulse using 16-bit Timer 1 (Example 9-27)

C programming

Count pulse using 16-bit Timer 0 (Example 9-35)

16

Page 17: PIC18 Timer Programming - cgu.edu.tw

Timer2 block diagram

17

Fosc/4

T2CKPS1:T2CKPS0

Set interrupt flag TMR2IF

TOUTPS3:TOUTPS0

8-bit timer

(Figure 9-12)

Page 18: PIC18 Timer Programming - cgu.edu.tw

T2CON (Timer2 control) register

18

(Figure 9-13)

Page 19: PIC18 Timer Programming - cgu.edu.tw

PIR1 (interrupt control register 1)

19

(Figure 9-14)

Page 20: PIC18 Timer Programming - cgu.edu.tw

Examples using Timer 2

Turn on after a period of time using assembly (Example 9-38)

Generate a time delay using C (Example 9-41)

20

Page 21: PIC18 Timer Programming - cgu.edu.tw

16-bit timer or counter

Timer3 block diagram

21

Fosc/4

T3CKPS1:T3CKPS0

CCP Special TriggerSet interrupt flag TMR3IF on overflow

(Figure 9-17)

Page 22: PIC18 Timer Programming - cgu.edu.tw

T3CON (Timer3 control) register

22

(Figure 9-15)

Page 23: PIC18 Timer Programming - cgu.edu.tw

PIR3 (interrupt control register 3)

23

(Figure 9-16)

Page 24: PIC18 Timer Programming - cgu.edu.tw

Generate a square wave of 50 Hz on the PORTB.5 bit if XTAL = 10 MHz

BCF TRISB, 5MOVLW 0x0 ; Timer3, 16-bit, internal clock, no prescaleMOVWF T3CON

HERE MOVLW 0x9EMOVWF TMR3HMOVLW 0x58MOVWF TMR3LBCF PIR2, TMR3IF ; clear Timer3 interrupt flagCALL DELAYBTG PORTB, RB5BRA HERE

DELAY BSF T3CON, TMR3ON ; start Timer3AGAIN BTFSS PIR2, TMR3IF ; monitor Timer3 interrupt flag

BRA AGAINBCF T3CON, TMR3ON ; stop Timer3RETURN

24

time delay = 25,000 x 0.4 s = 10 msfrequency = 1/(10 ms x 2) = 50 Hz

FFFFH – 9E58H + 1 = 25,000 clocks

(Example 9-43)

Page 25: PIC18 Timer Programming - cgu.edu.tw

Reference

M.A. Mazidi, R.D. Mckinlay, D Causey, PIC Microcontroller and Embedded Systems Using Assembly and C for PIC18, Pearson Education Inc., 2008.

Han-Way Huang, PIC Microcontroller: An Introduction to Software and Hardware Interfacing, Thomson Delmar Learning, 2005.

25