Download as pdf or txt
Download as pdf or txt
You are on page 1of 24

H Bch Khoa TP.

HCM

L Ch Thng

The 8051 Microcontroller


Chapter 4
Timer Operation
L Ch Thng
chithong@hcmut.edu.vn
sites.google.com/site/chithong
Ho Chi Minh City University of Technology
L Ch Thng

Review of 3-bit Up Counter

000
001

111
000
L Ch Thng

Overflow

sites.google.com/site/chithong

H Bch Khoa TP.HCM

L Ch Thng

Timer/Counter
8051 has 2 timers
Timer 0
Timer 1

Each Timer is a 16-bit up counter


Counts from 0000H to FFFFH
FFFFH-to-0000H overflow: overflow flag is set
Timer Clock

L Ch Thng

Timer/Counter
3 Functions
1. Timer is used as time delay generator (interval
timing)
Internal clock source

2. An event counter (event counting)


External clock source
For example :

number of people passing through an entrance


number of wheel rotations
any other event that can be converted to pulses

3. Baud rate generation for serial port


L Ch Thng

sites.google.com/site/chithong

H Bch Khoa TP.HCM

L Ch Thng

Clock Source
Internal clock fCLK = fCrystal / 12
to Timer

External clock

C/T
0
1

Clock
Function
Internal Timer (interval timing, delay)
External Counter (event counting)
L Ch Thng

Timer 1 mode 1 (16 bit)

L Ch Thng

sites.google.com/site/chithong

H Bch Khoa TP.HCM

L Ch Thng

Clock Enable/Disable
Clock Enable/Disable

Gate TRx

INTx

Function

0
1

X
X

Clock Disable  Timer Stops


Clock Enable  Timer Runs

0
1

X
1

Clock Disable  Timer Stops


Clock Enable  Timer Runs

TRx: Bit TR0 or TR1; INTx: pin INT0 or pin INT1


L Ch Thng

Timer Run/Stop
Gate TRx
0
1

0
1
0
1

INTx

Function

X
X
X
1

Clock Disable  Timer Stops


Clock Enable  Timer Runs
Clock Disable  Timer Stops
Clock Enable  Timer Runs

When Gate is cleared (0)


Timer runs when TRx = 1
Timer stops when TRx = 0
When Gate is set (1)
Timer runs when TRx = 1 and signal at pin INTx goes high
Timer stops when TRx = 0 or signal at pin INTx goes low
TRx: Bit TR0 or TR1; INTx: pin INT0 or pin INT1
L Ch Thng

sites.google.com/site/chithong

H Bch Khoa TP.HCM

L Ch Thng

GATE bit: More details


GATE=0
Internal control
The start and stop of the timer are controlled by the software
Ex: SETB TR1 ; Run Timer 1
CLR TR1 ; Stop Timer 1
GATE=1
External control
The hardware way of
starting and stopping
Timer Timer
the timer by software
stops runs
and an external source.
When GATE is set and TRx is set
(SETB TRx), Timer runs only while the INTx pin is high.
L Ch Thng

Applications of Timer
Gate C/T Application
0

Delay

Event counting; Frequency meter

Pulse width meter

L Ch Thng

sites.google.com/site/chithong

10

H Bch Khoa TP.HCM

L Ch Thng

Timer Registers
TH0, TL0 registers
TH1, TL1 registers
TMOD register
TCON register

L Ch Thng

11

Timer 0 and Timer 1 Registers


Timer 0
TH0

TL0

D15 D14 D13 D12 D11 D10 D9 D8

D7 D6 D5 D4 D3 D2 D1 D0

Timer 1
TH1

TL1

D15 D14 D13 D12 D11 D10 D9 D8

D7 D6 D5 D4 D3 D2 D1 D0

L Ch Thng

sites.google.com/site/chithong

12

H Bch Khoa TP.HCM

L Ch Thng

TMOD Register
TMOD: Timer Mode Register
(MSB)
GATE C/T M1 M0 GATE C/T M1
Timer 1
Timer 0

(LSB)
M0

GATE

0:
1:

Timer/counter counts only while TRx bit is set.


Timer/counter counts only while TRx bit is set and
INTx pin is high

C/T

0:
1:

Timer operation (clock : Machine cycle)


Counter operation (clock : Tx input pin)

L Ch Thng

13

M1, M0: mode setting bits


M1 M0 Mode Operating mode
0

13-bit timer mode


8-bit THx + 5-bit TLx (x= 0 or 1)

16-bit timer mode


8-bit THx + 8-bit TLx

8-bit auto-reload mode


8-bit auto reload timer/counter;
THx holds a value which is to be reloaded into
TLx each time it overflows.

Split timer mode


L Ch Thng

sites.google.com/site/chithong

14

H Bch Khoa TP.HCM

L Ch Thng

An Example
TMOD: Timer Mode Register
(MSB)
GATE C/T M1 M0 GATE C/T M1
Timer 1
Timer 0

(LSB)
M0

Find the value for TMOD if we want to program timer 0 in mode 2,


use 8051 XTAL for the clock source, and use instructions to start
and stop the timer.
Solution:
TMOD= 0000 0010 Timer 1 is not used.
Timer 0, mode 2
C/T = 0 to use internal clock source (timer)
GATE = 0 to use internal (software) start and
stop method.
L Ch Thng

15

More Examples
TMOD: Timer Mode Register
(MSB)
GATE C/T M1 M0 GATE C/T M1
Timer 1
Timer 0

(LSB)
M0

Ex:
MOV TMOD,#00000001B ; Timer 0 mode 1, timer operation
MOV TMOD,#20H ; Timer 1 mode 2, timer operation
MOV TMOD,#12H ; Timer 1 mode 1, Timer 0 mode 2, both timer
; operation
MOV TMOD,#00000101B ; Timer 0 mode 1, counter operation
MOV TMOD,#00001001B ; Timer 0 mode 1, external control (GATE=1)

L Ch Thng

sites.google.com/site/chithong

16

H Bch Khoa TP.HCM

L Ch Thng

4 Timer Modes

Mode 0 : 13-bit counter


(4048 mode)

Mode 1 : 16-bit counter

Mode 2 : 8-bit auto reload counter


Mode 3 : two 8-bit counter
the other counter will not
output overflow (interrupt)
L Ch Thng
17

TCON Register (1)


Timer control register: TCON
Upper nibble : timer/counter
Lower nibble : interrupts
TR (run control bit)
TR0 : Timer/counter 0
TR1: Timer/counter 1.
Turn timer/counter on/off.
TR=0: off (stop)
TR=1: on (start)

(MSB)
TF1 TR1
Timer 1

TF0 TR0
Timer0

IE1

L Ch Thng

sites.google.com/site/chithong

IT1 IE0
for Interrupt

(LSB)
IT0
18

H Bch Khoa TP.HCM

L Ch Thng

TCON Register (2)


TF (timer overflow flag)
TF0 : for Timer/counter 0
TF1 : for Timer/counter 1.
Originally, TF=0. When TH-TL roll over to 0000 from
FFFFH (overflow), the TF is set to 1.
If we enable interrupt, TF=1 will trigger ISR.

(MSB)
TF1 TR1
Timer 1

TF0 TR0
Timer0

IE1

IT1 IE0
for Interrupt

(LSB)
IT0

L Ch Thng

19

Delay 100 s using Timer 1 (12 MHz crystal)


12 MHz Crystal  fCLK = 12MHz/12 = 1MHz
 1 MC = 1/1MHz = 1 s
 tDelay = 100 s = 100 MC
 Use Timer 1 to count from -100 to 0
Timer 1 mode 1, timer operation 
TMOD = 00010000B or 10H
Initial count TH1:TL1 = -100
-100 = FF9CH
 TH1 = FFH and TL1 = 9CH

TMOD 10H
TH1:TL1 -100
Run Timer 1
N

Overflow?
(TF1=1?)
Y
Clear overflow flag
Stop Timer 1

L Ch Thng

sites.google.com/site/chithong

20

10

H Bch Khoa TP.HCM

L Ch Thng

Delay 100 s using Timer 1 (12 MHz crystal)


MOV TMOD, #00010000B; Timer 1, mode1
MOV TL1, #9CH
; Initial count
TMOD 10H
MOV TH1,#0FFH
; -100 = FF9CH
SETB TR1
; start Timer 1
TH1:TL1 -100
WAIT: JNB TF1, WAIT
; wait for overflow
Run Timer 1
CLR
TF1
; clear overflow flag
CLR
TR1
; stop Timer 1
N
Note:
Overflow?
(TF1=1?)
MOV TL1,#9CH = MOV TL1,#LOW(-100)
MOV TH1,0FFH = MOV TH1,#HIGH(-100)
Y
WAIT: JNB TF1, WAIT = JNB TF1,$
Clear overflow flag
L Ch Thng

Stop Timer 121

Delay 25 s using Timer 0 (24 MHz crystal)


Your Turn!

L Ch Thng

sites.google.com/site/chithong

22

11

H Bch Khoa TP.HCM

L Ch Thng

Delay 25 s using Timer 0 (24 MHz crystal)


MOV
MOV
MOV
SETB
JNB
CLR
CLR

TMOD, #01H
TH0,#HIGH -50
TL0, #LOW -50
TR0
TF0, $
TF0
TR0

; Timer 0, mode 1: 16 bit


; Load high byte
; Load low byte
; start Timer 0
; wait for overflow
; clear Timer 0 overflow flag
; stop Timer 0

L Ch Thng

23

10-Hz Square Wave


Write a program using Timer 0
to create a 10 Hz square wave on P1.0

Timer 0 mode 1
Initial count = -50,000

tH

tL

f = 10 Hz
T = 100,000 s
tH = tL = 50,000 s

Delay 50,000 s

Overflow?
(TF1=1?)
Y
Clear overflow flag

P1.0 NOT (P1.0)

Stop Timer 1

(schematic)

P1.0 NOT (P1.0)


L Ch Thng

sites.google.com/site/chithong

Start Timer 1

24

12

H Bch Khoa TP.HCM

L Ch Thng

10-Hz Square Wave


Write a program using Timer 0 to create a 10 Hz square wave on P1.0
MOV
LOOP: MOV
MOV
SETB
WAIT: JNB
CLR
CLR
CPL
SJMP

TMOD, #01H ; Timer 0, mode 1 (16-bit timer mode)


TH0, #HIGH(-50000); high byte of -50,000
TL0, #LOW(-50000) ; low byte of -50,000
TR0
; start timer
TF0, WAIT
; wait for overflow
TR0
; stop timer
TF0
; clear timer overflow flag
P1.0
; toggle port bit
LOOP
; repeat
Delay 50,000 s

(source)

P1.0 NOT (P1.0)


L Ch Thng

25

10-kHz Square Wave


Write a program using Timer 0 to create a 10 kHz square wave on P1.0

L Ch Thng

sites.google.com/site/chithong

26

13

H Bch Khoa TP.HCM

L Ch Thng

10-kHz Square Wave


Write a program using Timer 0 to create a 10 kHz square wave on P1.0
MOV
LOOP: MOV
MOV
SETB
WAIT: JNB
CLR
CLR
CPL
SJMP

TMOD, #01H ; Timer 0, mode 1 (16-bit timer mode)


TH0, #HIGH(-50); high byte of -50
TL0, #LOW(-50); low byte of -50
TR0
; start timer
TF0, WAIT
; wait for overflow
TR0
; stop timer
TF0
; clear timer overflow flag
P1.0
; toggle port bit
LOOP
; repeat
Delay 50 s

Mode 1: 16-bit timer

P1.0 NOT (P1.0)


L Ch Thng

27

10-kHz Square Wave using Mode 2


Write a program using Timer 0
to create a 10 kHz square wave on P1.0

Timer 0 mode 2
Reload value = -50
Start Timer 1

Mode 2: 8-bit auto-reload timer


N

Delay 50 s

Overflow?
(TF1=1?)
Y
Clear overflow flag

P1.0 NOT (P1.0)

P1.0 NOT (P1.0)


L Ch Thng

sites.google.com/site/chithong

28

14

H Bch Khoa TP.HCM

L Ch Thng

10-kHz Square Wave using Mode 2


Write a program using Timer 0 to create a 10 kHz square wave on P1.0
MOV
MOV
SETB
WAIT: JNB
CLR
CPL
SJMP

TMOD, #02H
TH0, #-50
TR0
TF0, WAIT
TF0
P1.0
WAIT

; Timer 0, mode 2 (8-bit auto-reload)


; reload value
; start timer
; wait for overflow
; clear timer overflow flag
; toggle port bit
; repeat

Mode 2: 8-bit auto-reload timer

L Ch Thng

29

Buzzer Interface
A buzzer is connected to P1.7 and a debounced switch is connected
to P1.6. Write a program that reads the logic level provided by the
switch and sounds the buzzer for 1 second for each 1-to-0 transition
detected.

L Ch Thng

sites.google.com/site/chithong

30

15

H Bch Khoa TP.HCM

L Ch Thng

Buzzer Interface
HUNDRED EQU
COUNT EQU

LOOP:
WAIT:

100
-10000

ORG 0000H
MOV TMOD, #01H
JNB P1.6, LOOP ;wait for high level
JB P1.6, WAIT ;wait for low level
SETB P1.7
CALL DELAY
CLR P1.7
SJMP LOOP

DELAY: MOV R7,#HUNDRED


AGAIN: MOV TH0,#HIGH COUNT
MOV TL0,#LOW COUNT
SETB TR0
JNB TF0,$
CLR TF0
CLR TR0
DJNZ R7,AGAIN
RET
END

L Ch Thng

31

Reading a timer On the Fly


When reading the content of counter, is the data correct?
16-bit timer/counter, but 8-bit reading (MOV instruction)
 2 read operations
 A phase error may occur.
Solution
AGAIN:MOV A, TH1
MOV R6, TL1
CJNE A, TH1, AGAIN
MOV R7, A

L Ch Thng

sites.google.com/site/chithong

32

16

H Bch Khoa TP.HCM

L Ch Thng

Techniques for Programming Timed Intervals


12 MHz operation
Maximum
interval [s]

Technique

10

Software tuning

256

8-bit timer with auto-reload

65536
No limit

16-bit timer
16-bit timer plus software loops

L Ch Thng

33

Very Short Intervals


Very short intervals (i.e. high frequencies) can be
programmed without using timers.
LOOP:

SETB P1.0
CLR
P1.0
SJMP LOOP

L Ch Thng

sites.google.com/site/chithong

34

17

H Bch Khoa TP.HCM

L Ch Thng

Delay 1 s using Timer 1 (12 MHz crystal)


1 s delay subroutine: 1 s = 20 x 50 ms
MOV

DELAY1S:
PUSH
MOV
LOOP: MOV
MOV
SETB
JNB
CLR
CLR
DJNZ
POP
RET

TMOD, #00010000B

; Timer 1, mode1

07
R7,#20
TL1, #LOW(-50000)
TH1,#HIGH(-50000)
TR1
TF1, $
TF1
TR1
R7,LOOP
07

; Push R7 to stack
; 20 loops
; Initial count = -50000
;
; start Timer 1
; wait for overflow
; clear overflow flag
; stop Timer 1
; Pop R7 from stack
L Ch Thng

35

Counter Operation
Internal clock fCLK = fCrystal / 12
to Timer

External clock

C/T
0
1

Clock
Function
Internal Timer (interval timing, delay)
External Counter (event counting)
L Ch Thng

sites.google.com/site/chithong

36

18

H Bch Khoa TP.HCM

L Ch Thng

Counter 0 Mode 1
C/T = 1
16-bit counter (TH0 and TL0)
TH0-TL0 is incremented when TR0 is set to 1 and an external
pulse (in T0) occurs.
Timer 0
external clock
input
(P3.4/T0)

C/T = 1

Overflow
flag
TH0

TL0

TF0

TF0 goes high


when FFFF  0

TR0
L Ch Thng

37

Counter_BarLED
A push button is connected to P3.4 (T0). Assume that there is no
contact bounce. Write a program that counts the pulses created by
push button and display on the LED-Bargraph connected to Port 1.
(schematic)

L Ch Thng

sites.google.com/site/chithong

38

19

H Bch Khoa TP.HCM

L Ch Thng

Counter_BarLED
ORG 0000H
MAIN:
MOV TMOD,#00000101B;Timer 0, 16 bit, external clock
;(counter operation)
;Gate=0, C/T=1, M1 M0 = 01
MOV TH0,#0
MOV TL0,#0
SETB TR0
;Start Timer
LOOP: MOV A,TL0
;Read Timer
MOV P1,A
;Display on Bar-LED
SJMP LOOP
END
(source)

L Ch Thng

39

Counter_7segLED
A push button is connected to P3.4 (T0). Assume that there is no
contact bounce. Write a program that counts the pulses created by
push button and display on the common-anode 7-segment LED
connected to Port 1. (schematic)

L Ch Thng

sites.google.com/site/chithong

40

20

H Bch Khoa TP.HCM

L Ch Thng

Counter_7segLED
MAIN:

LOOP:

NEXT:

ORG 0000H
MOV TMOD,#00000101B
MOV TH0,#0
MOV TL0,#0
SETB TR0
MOV A,TL0
CJNE A,#10,NEXT
CLR A
MOV TL0,#0
ACALL DISPLAY
SJMP LOOP

BCDTO7SEG:
MOV DPTR,#TABLE
MOVC A,@A+DPTR
RET
TABLE: DB 40h,79h,24h,30h,19h
DB 12h,02h,78h,00h,10h
DONE: NOP
END

DISPLAY:
ACALL BCDTO7SEG
MOV P1,A
RET
(source)
L Ch Thng

41

Frequency Meter_7segLED
A clock source is connected to P3.4 (T0). Write a program that
displays the frequency in KHz on the common-anode 7-segment
LED connected to Port 1. (schematic)

L Ch Thng

sites.google.com/site/chithong

42

21

H Bch Khoa TP.HCM

L Ch Thng

Frequency Meter_7segLED
ORG 0000H
MOV TMOD,#00010101B
DISPLAY:
SETB P3.4 ;make T0 as input
ACALL BCDTO7SEG
AGAIN: MOV TL0,#0
MOV P1,A
MOV TL1,#LOW(-1000)
RET
MOV TH1,#HIGH(-1000)
SETB TR0
BCDTO7SEG:
SETB TR1
MOV DPTR,#TABLE
JNB TF1,$
MOVC A,@A+DPTR
CLR TF1
RET
CLR TR1
CLR TR0
TABLE: DB 40h,79h,24h,30h,19h
MOV A,TL0
DB 12h,02h,78h,00h,10h
ACALL DISPLAY
SJMP AGAIN
DONE: NOP
END
(source)
MAIN:

L Ch Thng

43

GATE=1
GATE=0
Internal control
The start and stop of the timer are controlled by the software
Ex: SETB TR1 ; Run Timer 1
CLR TR1 ; Stop Timer 1
GATE=1
External control
The hardware way of
starting and stopping
Timer Timer
the timer by software
stops runs
and an external source.
When GATE is set and TRx is set
(SETB TRx), Timer runs only while the INTx pin is high.
L Ch Thng

sites.google.com/site/chithong

44

22

H Bch Khoa TP.HCM

L Ch Thng

Pulse_width_7segLED
A pulse source is connected to P3.2 (/INT0). Write a program that
displays the pulse width in ms (approximate) on the commonanode 7-segment LED connected to Port 1. (schematic)

L Ch Thng

45

Pulse_width_7segLED
ORG 0000H
MOV TMOD,#00001001B
;Timer 0,16 bit,internal clock,GATE=1
MOV TH0,#0
MOV TL0,#0
SETB TR0
AGAIN: MOV A,TH0
CJNE A,TH0,AGAIN
MOV B,#4
DIV AB
;A=Pulse width in us/256/4
;approximate /1000
ACALL DISPLAY
SJMP AGAIN

DISPLAY:
ACALL BCDTO7SEG
MOV P1,A
RET
BCDTO7SEG:
MOV DPTR,#TABLE
MOVC A,@A+DPTR
RET
TABLE: DB 40h,79h,24h,30h,19h
DB 12h,02h,78h,00h,10h
DONE: NOP
END

(source)

L Ch Thng

sites.google.com/site/chithong

46

23

H Bch Khoa TP.HCM

L Ch Thng

References
I. Scott MacKenzie , The 8051 Microcontroller, 2nd
Edition, Prentice-Hall, 1995
Kenneth J. Ayala, The 8051 Microcontroller:
Architecture, Programming, and Applications, West
Publishing Company
hsabaghianb@kashanu.ac.jr , Lecture notes

L Ch Thng

sites.google.com/site/chithong

47

24

You might also like