[go: up one dir, main page]

0% found this document useful (0 votes)
58 views47 pages

The 8051 Microcontroller: Timer Operation

Here is a program to generate a 10 Hz square wave on P1.0 using Timer 0: MOV TMOD, #00h; Timer 0 mode 1 MOV TL0, #0FAh; Initial count = -50,000 MOV TH0, #0FFh SETB TR0; Start Timer 0 AGAIN: JNB TF0, AGAIN; Wait for overflow CLR TR0; Stop Timer 0 MOV P1.0, #1; Set P1.0 high SJMP WAIT1 WAIT1: JNB TF0, WAIT1 SETB TR0; Restart Timer 0 MOV P1.0, #0

Uploaded by

Hạo Tân Ngô
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
58 views47 pages

The 8051 Microcontroller: Timer Operation

Here is a program to generate a 10 Hz square wave on P1.0 using Timer 0: MOV TMOD, #00h; Timer 0 mode 1 MOV TL0, #0FAh; Initial count = -50,000 MOV TH0, #0FFh SETB TR0; Start Timer 0 AGAIN: JNB TF0, AGAIN; Wait for overflow CLR TR0; Stop Timer 0 MOV P1.0, #1; Set P1.0 high SJMP WAIT1 WAIT1: JNB TF0, WAIT1 SETB TR0; Restart Timer 0 MOV P1.0, #0

Uploaded by

Hạo Tân Ngô
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 47

The 8051 Microcontroller

Chapter 4
Timer Operation

Lê Chí Thông
chithong@hcmut.edu.vn
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
• hsabaghianb@kashanu.ac.jr , Lecture notes

Lê Chí Thông 47

You might also like