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

6.timer Programming

The document discusses programming timers on the 8051 microcontroller in assembly language. It describes the registers used for Timer 0 and Timer 1, including TL0, TH0, TL1 and TH1. It explains the different timer modes that can be set using the TMOD register, including modes 1, 2 and 3. Examples are provided of programming the timers in modes 1 and 2 to generate time delays and output waveforms. Steps are outlined for calculating the values to load into the timer registers depending on the desired time delay.

Uploaded by

Twisha
Copyright
© © All Rights Reserved
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
Download as ppt, pdf, or txt
0% found this document useful (0 votes)
92 views47 pages

6.timer Programming

The document discusses programming timers on the 8051 microcontroller in assembly language. It describes the registers used for Timer 0 and Timer 1, including TL0, TH0, TL1 and TH1. It explains the different timer modes that can be set using the TMOD register, including modes 1, 2 and 3. Examples are provided of programming the timers in modes 1 and 2 to generate time delays and output waveforms. Steps are outlined for calculating the values to load into the timer registers depending on the desired time delay.

Uploaded by

Twisha
Copyright
© © All Rights Reserved
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
Download as ppt, pdf, or txt
Download as ppt, pdf, or txt
You are on page 1/ 47

The 8051 Microcontroller and

Embedded Systems

CHAPTER 9
8051 TIMER
PROGRAMMING IN
ASSEMBLY

1
OBJECTIVES

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

2
SECTION 9.1: PROGRAMMING 8051
TIMERS

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.

3
SECTION 9.1: PROGRAMMING 8051
TIMERS

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

4
SECTION 9.1: PROGRAMMING 8051
TIMERS

Figure 91 Timer 0 Registers

5
SECTION 9.1: PROGRAMMING 8051
TIMERS

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.

6
SECTION 9.1: PROGRAMMING 8051
TIMERS

Figure 92 Timer 1 Registers

7
SECTION 9.1: PROGRAMMING 8051
TIMERS

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)

8
SECTION 9.1: PROGRAMMING 8051
TIMERS

9 Figure 93 TMOD Register


SECTION 9.1: PROGRAMMING 8051
TIMERS

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

10
13-bit Time Mode (mode 0)

To maintain compatibility with its predecessor, the


8048
Generally the 13-bit timer mode is not used in new
development.
When the timer is in 13-bit mode, TLx will count
from 0 to 31. When TLx is incremented from 31, it
will "reset" to 0 and increment THx. Thus,
effectively, only 13 bits of the two timer bytes are
being used: bits 0-4 of TLx and bits 0-7 of THx. This
also means, in essence, the timer can only
contain 8192 values. If you set a 13-bit timer to 0, it
will overflow back to zero 8192 machine cycles
later.
16-bit Time Mode (mode 1)

TLx is incremented from 0 to 255.


When TLx is incremented from
255, it resets to 0 and causes THx
to be incremented by 1. Since
this is a full 16-bit timer, the timer
may contain up to 65536 distinct
values. If you set a 16-bit timer to
0, it will overflow back to 0 after
65,536 machine cycles.
8-bit Time Mode (mode 2)
(Auto Reload)
When a timer is in mode 2, THx
holds the "reload value" and TLx
is the timer itself. Thus, TLx starts
counting up. When TLx reaches
255 and is subsequently
incremented, instead of resetting
to 0 (as in the case of modes 0
and 1), it will be reset to the
value stored in THx.
Example
Machi
ne TH0 Value TL0 Value
Cycle
1 FDh FEh
2 FDh FFh
3 FDh FDh
4 FDh FEh
5 FDh FFh
6 FDh FDh
7 FDh FEh
Split Timer Mode (mode 3)

When Timer 0 is placed in mode 3, it essentially


becomes two separate 8-bit timers. That is to say,
Timer 0 is TL0 and Timer 1 is TH0. Both timers count
from 0 to 255 and overflow back to 0. All the bits
that are related to Timer 1 will now be tied to TH0.
While Timer 0 is in split mode, the real Timer 1 (i.e.
TH1 and TL1) can be put into modes 0, 1 or 2
normally--however, you may not start or stop the
real timer 1 since the bits that do that are now
linked to TH0. The real timer 1, in this case, will be
incremented every machine cycle no matter
what.
SECTION 9.1: PROGRAMMING 8051
TIMERS

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

16
SECTION 9.1: PROGRAMMING 8051
TIMERS (not needed for quiz)

Figure 95a Timer 0 with External Input (Mode 1)


17
SECTION 9.1: PROGRAMMING 8051
TIMERS (for information only)

Figure 95b Timer 1 with External Input (Mode 1)


18
SECTION 9.1: PROGRAMMING 8051
TIMERS

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

19
Example 9-4
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

20
Example 9-9
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.

21
SECTION 9.1: PROGRAMMING 8051
TIMERS

Finding values to be loaded into the timer


XTAL = 11.0592 MHz (12MHz)
divide the desired time delay by 1.085ms (1ms)
to get n
65536 n = N
convert N to hex yyxx
set TL = xx and TH = yy

22
Example 9-12
Assuming XTAL = 11.0592 MHz, write a program to generate a
square wave of 50 Hz frequency on pin P2.3.

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
23
Example 9-12 (cont)
Assuming XTAL = 11.0592 MHz, write a program to generate a
square wave of 50 Hz frequency on pin P2.3.

24
SECTION 9.1: PROGRAMMING 8051
TIMERS

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?

25
SECTION 9.1: PROGRAMMING 8051
TIMERS

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.085ms
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

26
Example 9-13
Examine the following program and find the time delay in seconds.
Exclude the time delay due to the instructions in the loop.

27
SECTION 9.1: PROGRAMMING 8051
TIMERS (for information only)

Mode 0
works like mode 1
13-bit timer instead of 16bit
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

28
SECTION 9.1: PROGRAMMING 8051
TIMERS

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

29
SECTION 9.1: PROGRAMMING 8051
TIMERS

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

30
Example 9-14
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.

31
SECTION 9.1: PROGRAMMING 8051
TIMERS

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) "

32
SECTION 9.2: COUNTER
PROGRAMMING (for information only)

C/T bit in TMOD register


used as a timer, the 8051's crystal is used as
the source of the frequency
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

33
SECTION 9.2: COUNTER
PROGRAMMING (for information only)

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

34
SECTION 9.2: COUNTER
PROGRAMMING

Table 91 Port 3 Pins Used For Timers 0 and 1

35
Example 9-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)

to LEDs

P2 is connected to 8 LEDs and input T1 to pulse.


36
SECTION 9.2: COUNTER
PROGRAMMING

37 Figure 96 Timer 0 with External Input (Mode 2)


SECTION 9.2: COUNTER
PROGRAMMING

Figure 97 Timer 1 with External Input (Mode 2)


38
SECTION 9.2: COUNTER
PROGRAMMING

39
SECTION 9.2: COUNTER
PROGRAMMING

40
SECTION 9.2: COUNTER
PROGRAMMING

41 Table 91 Port 3 Pins Used For Timers 0 and 1


SECTION 9.2: COUNTER
PROGRAMMING

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

42
SECTION 9.2: COUNTER
PROGRAMMING

43 Table 92 Equivalent Instructions for the Timer Control Register (TCON)


SECTION 9.2: COUNTER
PROGRAMMING

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

44
SECTION 9.2: COUNTER
PROGRAMMING

Figure 98 Timer/Counter 0
45
SECTION 9.2: COUNTER
PROGRAMMING

Figure 99 Timer/Counter 1
46
Next

Lecture Problems Textbook Chapter 9


Answer as many questions as you can and
submit via MeL before the end of the lecture.

Proteus Exercise 8
Do as much of the Proteus exercise as you can
and submit via MeL before the end of the lecture.

47

You might also like