The 8051 Microcontroller: Timer Operation

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

The 8051 Microcontroller

Chapter 4
Timer Operation

Lê Chí Thông
[email protected]
sites.google.com/site/chithong
Ho Chi Minh City University of Technology
Lê Chí Thông 1
Review of 3-bit Up Counter

000001…111000
Lê Chí Thông 2
Overflow
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í Thông 3
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í Thông 4
Clock Source
Internal clock fCLK = fCrystal / 12

to Timer

External clock

C/T Clock Function


0 Internal Timer (interval timing, delay)
1 External Counter (event counting)

Lê Chí Thông 5
Timer 1 mode 1 (16 bit)

Lê Chí Thông 6
Clock Enable/Disable

Clock Enable/Disable

Gate TRx INTx Function


0 X Clock Disable  Timer Stops
0
1 X Clock Enable  Timer Runs
0 X Clock Disable  Timer Stops
1
1 1 Clock Enable  Timer Runs

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


Lê Chí Thông 7
Timer Run/Stop
Gate TRx INTx Function
0 X Clock Disable  Timer Stops
0
1 X Clock Enable  Timer Runs
0 X Clock Disable  Timer Stops
1
1 1 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í Thông 8
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í Thông 9
Applications of Timer

Gate C/T Application

0 Delay
0
1 Event counting; Frequency meter

1 0 Pulse width meter

Lê Chí Thông 10
Timer Registers

• TH0, TL0 registers

• TH1, TL1 registers

• TMOD register

• TCON register

Lê Chí Thông 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í Thông 12
TMOD Register
(MSB) TMOD: Timer Mode Register (LSB)
GATE C/T M1 M0 GATE C/T M1 M0
Timer 1 Timer 0
GATE 0: Timer/counter counts only while TRx bit is set.
1: Timer/counter counts only while TRx bit is set and
INTx pin is high

C/T 0: Timer operation (clock : Machine cycle)


1: Counter operation (clock : Tx input pin)

Lê Chí Thông 13
M1, M0: mode setting bits

M1 M0 Mode Operating mode

0 0 0 13-bit timer mode


8-bit THx + 5-bit TLx (x= 0 or 1)
0 1 1 16-bit timer mode
8-bit THx + 8-bit TLx
1 0 2 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.
1 1 3 Split timer mode

Lê Chí Thông 14
An Example
(MSB) TMOD: Timer Mode Register (LSB)
GATE C/T M1 M0 GATE C/T M1 M0
Timer 1 Timer 0
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í Thông 15
More Examples
(MSB) TMOD: Timer Mode Register (LSB)
GATE C/T M1 M0 GATE C/T M1 M0
Timer 1 Timer 0
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í Thông 16
4 Timer Modes

Mode 0 : 13-bit counter Mode 1 : 16-bit counter


(4048 mode)

Mode 2 : 8-bit auto reload counter


Mode 3 : two 8-bit counter
the other counter will not
Lê Chí Thông output overflow (interrupt)
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) (LSB)
TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0
Timer 1 Timer0 for Interrupt
Lê Chí Thông 18
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) (LSB)
TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0
Timer 1 Timer0 for Interrupt
Lê Chí Thông 19
Delay 100 µs using Timer 1 (12 MHz crystal)
12 MHz Crystal  fCLK = 12MHz/12 = 1MHz
 1 MC = 1/1MHz = 1 μs TMOD  10H
 tDelay = 100 μs = 100 MC
TH1:TL1  -100
 Use Timer 1 to count from -100 to 0
• Timer 1 mode 1, timer operation  Run Timer 1
TMOD = 00010000B or 10H
• Initial count TH1:TL1 = -100 N
Overflow?
-100 = FF9CH (TF1=1?)
 TH1 = FFH and TL1 = 9CH
Y
Clear overflow flag

Stop Timer 1
Lê Chí Thông 20
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
CLR TF1 ; clear overflow flag Run Timer 1
CLR TR1 ; stop Timer 1
Note: N
Overflow?
MOV TL1,#9CH = MOV TL1,#LOW(-100) (TF1=1?)

MOV TH1,0FFH = MOV TH1,#HIGH(-100)


Y
WAIT: JNB TF1, WAIT = JNB TF1,$ Clear overflow flag

Lê Chí Thông Stop Timer 121


Delay 25 µs using Timer 0 (24 MHz crystal)
Your Turn!

Lê Chí Thông 22
Delay 25 µs using Timer 0 (24 MHz crystal)

Lê Chí Thông 23
10-Hz Square Wave
Write a program using Timer 0
Timer 0 mode 1
to create a 10 Hz square wave on P1.0
Initial count = -50,000
f = 10 Hz
T = 100,000 μs Start Timer 0
tH tL
tH = tL = 50,000 μs
T
N
Overflow?
(TF0=1?)

Delay 50,000 μs Y
Clear overflow flag

P1.0  NOT (P1.0)


Stop Timer 0

(schematic) P1.0  NOT (P1.0)


Lê Chí Thông 24
10-Hz Square Wave
Write a program using Timer 0 to create a 10 Hz square wave on P1.0

Delay 50,000 μs

(source)
P1.0  NOT (P1.0)
Lê Chí Thông 25
10-kHz Square Wave
Write a program using Timer 0 to create a 10 kHz square wave on P1.0

Lê Chí Thông 26
10-kHz Square Wave
Write a program using Timer 0 to create a 10 kHz square wave on P1.0

Delay 50 μs
Mode 1: 16-bit timer
P1.0  NOT (P1.0)
Lê Chí Thông 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 0
Mode 2: 8-bit auto-reload timer
N
Overflow?
(TF0=1?)
Delay 50 μs
Y
P1.0  NOT (P1.0) Clear overflow flag

P1.0  NOT (P1.0)


Lê Chí Thông 28
10-kHz Square Wave using Mode 2
Write a program using Timer 0 to create a 10 kHz square wave on P1.0

Mode 2: 8-bit auto-reload timer

Lê Chí Thông 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í Thông 30
Buzzer Interface
HUNDRED EQU 100 DELAY: MOV R7,#HUNDRED
COUNT EQU -10000 AGAIN: MOV TH0,#HIGH COUNT
MOV TL0,#LOW COUNT
ORG 0000H SETB TR0
MOV TMOD, #01H JNB TF0,$
LOOP: JNB P1.6, LOOP ;wait for high level CLR TF0
WAIT: JB P1.6, WAIT ;wait for low level CLR TR0
SETB P1.7 DJNZ R7,AGAIN
CALL DELAY RET
CLR P1.7 END
SJMP LOOP

Lê Chí Thông 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í Thông 32
Techniques for Programming Timed Intervals
• 12 MHz operation

Maximum Technique
interval [μs]
≈10 Software tuning

256 8-bit timer with auto-reload

65536 16-bit timer

No limit 16-bit timer plus software loops

Lê Chí Thông 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í Thông 34
Delay 1 s using Timer 1 (12 MHz crystal)
• 1 s delay subroutine: 1 s = 20 x 50 ms
MOV TMOD, #00010000B ; Timer 1, mode1

DELAY1S:
PUSH 07 ; Push R7 to stack
MOV R7,#20 ; 20 loops
LOOP: MOV TL1, #LOW(-50000) ; Initial count = -50000
MOV TH1,#HIGH(-50000) ;
SETB TR1 ; start Timer 1
JNB TF1, $ ; wait for overflow
CLR TF1 ; clear overflow flag
CLR TR1 ; stop Timer 1
DJNZ R7,LOOP
POP 07 ; Pop R7 from stack
RET
Lê Chí Thông 35
Counter Operation
Internal clock fCLK = fCrystal / 12

to Timer

External clock

C/T Clock Function


0 Internal Timer (interval timing, delay)
1 External Counter (event counting)

Lê Chí Thông 36
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 Overflow
external clock flag
input
(P3.4/T0) TH0 TL0 TF0

TF0 goes high


C/T = 1 when FFFF  0
TR0

Lê Chí Thông 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í Thông 38
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í Thông 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í Thông 40
Counter_7segLED
ORG 0000H
MAIN: MOV TMOD,#00000101B BCDTO7SEG:
MOV TH0,#0 MOV DPTR,#TABLE
MOV TL0,#0 MOVC A,@A+DPTR
SETB TR0 RET
LOOP: MOV A,TL0
CJNE A,#10,NEXT TABLE: DB 40h,79h,24h,30h,19h
CLR A DB 12h,02h,78h,00h,10h
MOV TL0,#0
NEXT: ACALL DISPLAY DONE: NOP
SJMP LOOP END

DISPLAY:
ACALL BCDTO7SEG
MOV P1,A
RET

(source)

Lê Chí Thông 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í Thông 42
Frequency Meter_7segLED
ORG 0000H
MAIN: 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)

Lê Chí Thông 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í Thông 44
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 common-
anode 7-segment LED connected to Port 1. (schematic)

Lê Chí Thông 45
Pulse_width_7segLED
ORG 0000H
MOV TMOD,#00001001B DISPLAY:
;Timer 0,16 bit,internal clock,GATE=1 ACALL BCDTO7SEG
MOV TH0,#0 MOV P1,A
MOV TL0,#0 RET
SETB TR0
AGAIN: MOV A,TH0 BCDTO7SEG:
CJNE A,TH0,AGAIN MOV DPTR,#TABLE
MOV B,#4 MOVC A,@A+DPTR
DIV AB RET
;A=Pulse width in us/256/4
;approximate /1000 TABLE: DB 40h,79h,24h,30h,19h
ACALL DISPLAY DB 12h,02h,78h,00h,10h
SJMP AGAIN
DONE: NOP
(source) END

Lê Chí Thông 46
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
[email protected] , Lecture notes

Lê Chí Thông 47

You might also like