The 8051 Microcontroller: Timer Operation
The 8051 Microcontroller: Timer Operation
The 8051 Microcontroller: Timer Operation
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
000001…111000
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
Lê Chí Thông 5
Timer 1 mode 1 (16 bit)
Lê Chí Thông 6
Clock Enable/Disable
Clock Enable/Disable
• 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
0 Delay
0
1 Event counting; Frequency meter
Lê Chí Thông 10
Timer Registers
• TMOD register
• TCON register
Lê Chí Thông 11
Timer 0 and Timer 1 Registers
Timer 0
TH0 TL0
Timer 1
TH1 TL1
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
Lê Chí Thông 13
M1, M0: mode setting bits
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
(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?)
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
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
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
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
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
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
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
Lê Chí Thông 47