1. THE 8051 MICROCONTROLLER AND
EMBEDDED SYSTEMS
Prpf:R.Charles SilvesterJoe,
Dept.OfElectronics
St.Joseph’sCollege,Trichy
1
8051 TIMER PROGRAMMING IN ASSEMBLY
2. OBJECTIVES
2
List the timers of the 8051 and their associated
registers
Describe the various modes of the 8051 timers
Program the 8051 timers in Assembly to generate
time delay
3. PROGRAMMING 8051 TIMERS
3
Basic registers of the timer
Timer 0 and Timer 1 are 16 bits wide
each 16-bit timer is accessed as two separate
registers of low byte and high byte.
4. PROGRAMMING 8051 TIMERS
4
Timer 0 registers
low byte register is called TL0 (Timer 0 low byte) and the high byte
register is referred to as TH0 (Timer 0 high byte)
can be accessed like any other register, such as A, B, R0, R1, R2, etc.
"MOV TL0, #4 FH" moves the value 4FH into TL0
"MOV R5, TH0" saves TH0 (high byte of Timer 0) in R5
6. PROGRAMMING 8051 TIMERS
6
Timer 1 registers
also 16 bits
split into two bytes TL1 (Timer 1 low byte) and TH1
(Timer 1 high byte)
accessible in the same way as the registers of Timer
0.
8. PROGRAMMING 8051 TIMERS
8
TMOD (timer mode) register
timers 0 and 1 use TMOD register to set operation modes (only learn
Mode 1 and 2)
8-bit register
lower 4 bits are for Timer 0
upper 4 bits are for Timer 1
lower 2 bits are used to set the timer mode
(only learn Mode 1 and 2)
upper 2 bits to specify the operation
(only learn timer operation)
10. PROGRAMMING 8051 TIMERS
10
Clock source for timer
timer needs a clock pulse to tick
if C/T = 0, the crystal frequency attached to the 8051 is the source of
the clock for the timer
frequency for the timer is always 1/12th the frequency of the crystal
attached to the 8051
XTAL = 11.0592 MHz allows the 8051 system to communicate with the
PC with no errors
In our case, the timer frequency is 1MHz since our crystal frequency is
12MHz
11. PROGRAMMING 8051 TIMERS
11
Mode 1 programming
16-bit timer, values of 0000 to FFFFH
TH and TL are loaded with a 16-bit initial value
timer started by "SETB TR0" for Timer 0 and "SETB TR1" for Timer l
timer count ups until it reaches its limit of FFFFH
rolls over from FFFFH to 0000H
sets TF (timer flag)
when this timer flag is raised, can stop the timer with "CLR TR0" or "CLR
TR1“
after the timer reaches its limit and rolls over, the registers TH and TL
must be reloaded with the original value and TF must be reset to 0
13. PROGRAMMING 8051 TIMERS (for information only)
13
Figure 9–5b Timer 1 with External Input (Mode 1)
14. PROGRAMMING 8051 TIMERS
14
Steps to program in mode 1
Set timer mode 1 or 2
Set TL0 and TH0 (for mode 1 16 bit mode)
Set TH0 only (for mode 2 8 bit auto reload mode)
Run the timer
Monitor the timer flag bit
15. Example
In the following program, we are creating a square wave of 50% duty cycle (with
equal portions high and low) on the P1.5 bit.
Timer 0 is used to generate the time delay
15
16. Example
The following program generates a square wave on pin P 1.5 continuously using Timer 1 for a
time delay. Find the frequency of the square wave if XTAL = 11.0592 MHz. In your calculation
do not include the overhead due to the timer setup instructions in the loop.
16
17. SECTION 9.1: PROGRAMMING 8051 TIMERS
17
Finding values to be loaded into the timer
XTAL = 11.0592 MHz (12MHz)
divide the desired time delay by 1.085s (1s) to get
n
65536 – n = N
convert N to hex yyxx
set TL = xx and TH = yy
18. Example
Assuming XTAL = 11.0592 MHz, write a program to generate a square wave of 50 Hz
frequency on pin P2.3.
18
T = 1/50 Hz = 20 ms
1/2 of it for the high and low portions of the
pulse = 10 ms
10 ms / 1.085 us = 9216
65536 - 9216 = 56320 in decimal = DC00H
TL = 00 and TH = DCH
The calculation for 12MHz crystal uses the same
steps
19. Example (cont)
Assuming XTAL = 11.0592 MHz, write a program to generate a square wave of 50 Hz
frequency on pin P2.3.
19
20. PROGRAMMING 8051 TIMERS
20
Generating a large time delay
size of the time delay depends
crystal frequency
timer's 16-bit register in mode 1
largest time delay is achieved by making both TH
and TL zero
what if that is not enough?
21. PROGRAMMING 8051 TIMERS
21
Using Windows calculator to find TH, TL
Windows scientific calculator can be use to find the TH, TL values
Lets say we would like to find the TH, TL values for a time delay that
uses 35,000 clocks of 1.085s
1. open scientific calculator and select decimal
2. enter 35,000
3. select hex - converts 35,000 to hex 88B8H
4. select +/- to give -35000 decimal (7748H)
5. the lowest two digits (48) of this hex value are for TL and the next two
(77) are for TH
22. Example
Examine the following program and find the time delay in seconds. Exclude the time
delay due to the instructions in the loop.
22
23. PROGRAMMING 8051 TIMERS (for information only)
23
Mode 0
works like mode 1
13-bit timer instead of 16
bit
13-bit counter hold values 0000 to 1FFFH
when the timer reaches its maximum of 1FFFH, it
rolls over to 0000, and TF is set
24. PROGRAMMING 8051 TIMERS
24
Mode 2 programming
8-bit timer, allows values of 00 to FFH
TH is loaded with the 8-bit value
a copy is given to TL
timer is started by ,"SETB TR0" or "SETB TR1“
starts to count up by incrementing the TL register
counts up until it reaches its limit of FFH
when it rolls over from FFH to 00, it sets high TF
TL is reloaded automatically with the value in TH
To repeat, clear TF
mode 2 is an auto-reload mode
25. PROGRAMMING 8051 TIMERS
25
Steps to program in mode 2
1. load TMOD, select mode 2
2. load the TH
3. start timer
4. monitor the timer flag (TF) with "JNB”
5. get out of the loop when TF=1
6. clear TF
7. go back to Step 4 since mode 2 is auto-reload
26. Example
Assuming that XTAL = 11.0592 MHz, find (a) the frequency of the square wave
generated on pin P1.0 and (b) the smallest frequency achievable in this program,
and the TH value to do that.
26
27. PROGRAMMING 8051 TIMERS
27
Assemblers and negative values
can let the assembler calculate the value for TH
and TL which makes the job easier
"MOV TH1, # -100", the assembler will calculate
the -100 = 9CH
"MOV TH1,#high(-10000) "
"MOV TL1,#low(-10000) "
28. COUNTER PROGRAMMING (for information only)
28
C/T bit in TMOD register
used as a timer, the 8051's crystal is used as the
source of the fre
quency
used as a counter, pulse outside the 8051 increments
the TH, TL registers
counter mode, TMOD and TH, TL registers are the
same as for the timer
timer modes are the same as well
29. COUNTER PROGRAMMING (for information only)
29
C/T bit in TMOD register
C/T bit in the TMOD register decides the source of the clock for the timer
C/T = 0, timer gets pulses from crystal
C/T = 1, the timer used as counter and gets pulses from outside the 8051
C/T = 1, the counter counts up as pulses are fed from pins 14 and 15
pins are called T0 (Timer 0 input) and T1 (Timer 1 input)
these two pins belong to port 3
Timer 0, when C/T = 1, pin P3.4 provides the clock pulse and the counter counts
up for each clock pulse coming from that pin
Timer 1, when C/T = 1 each clock pulse coming in from pin P3.5 makes the
counter count up
31. Example 18
Assuming that clock pulses are fed into pin T1, write a program for counter 1 in
mode 2 to count the pulses and display the state of the TL1 count on P2. (for
information only)
P2 is connected to 8 LEDs and input T1 to pulse.
to LEDs
31
37. COUNTER PROGRAMMING
37
TCON register
TR0 and TR1 flags turn on or off the timers
bits are part of a register called TCON (timer control)
upper four bits are used to store the TF and TR bits of both Timer 0
and Timer 1
lower four bits are set aside for controlling the interrupt bits
"SETB TRl" and "CLR TRl“
"SETB TCON. 6" and "CLR TCON. 6“
39. COUNTER PROGRAMMING
39
The case of GATE = 1 in TMOD
GATE = 0, the timer is started with instructions "SETB
TR0" and "SETB TR1“
GATE = 1, the start and stop of the timers are done
externally through pins P3.2 and P3.3
allows us to start or stop the timer externally at any
time via a simple switch