Timeri 8051 MikroE Eng

Embed Size (px)

Citation preview

  • 8/9/2019 Timeri 8051 MikroE Eng

    1/13

    2.6 Counters and Timers

    As you already know, the microcontroller oscillator uses quartz crystal for its operation. As the frequency of this oscillator is precisely defined and very stable, pulses it generates

    are always of the same width, which makes them ideal for time measurement. Such crystals are also used in quartz watches. In order to measure time between two events it is

    sufficient to count up pulses coming from this oscillator. That is exactly what the timer does. If the timer is properly programmed, the value stored in its register will be

    incremented (or decremented) with each coming pulse, i.e. once per each machine cycle. A single machine-cycle instruction lasts for 12 quartz oscillator periods, which means

    that by embedding quartz with oscillator frequency of 12MHz, a number stored in the timer register will be changed million times per second, i.e. each microsecond.

    The 8051 microcontroller has 2 timers/counters called T0 and T1. As their names suggest, their main purpose is to measure time and count external events. Besides, they can be

    used for generating clock pulses to be used in serial communication, so called Baud Rate.

    Timer T0

    As seen in figure below, the timer T0 consists of two registers TH0 and TL0 representing a low and a high byte of one 16-digit binary number.

    Accordingly, if the content of the timer T0 is equal to 0 (T0=0) then both registers it consists of will contain 0. If the timer contains for example number 1000 (decimal), then the

    TH0 register (high byte) will contain the number 3, while the TL0 register (low byte) will contain decimal number 232.

  • 8/9/2019 Timeri 8051 MikroE Eng

    2/13

    Formula used to calculate values in these two registers is very simple:

    TH0 256 + TL0 = T

    Matching the previous example it would be as follows:

    3 256 + 232 = 1000

    Since the timer T0 is virtually 16-bit register, the largest value it can store is 65 535. In case of exceeding this value, the timer will be automatically cleared and counting starts

    from 0. This condition is called an overflow. Two registers TMOD and TCON are closely connected to this timer and control its operation.

    TMOD Register (Timer Mode)

    The TMOD register selects the operational mode of the timers T0 and T1. As seen in figure below, the low 4 bits (bit0 - bit3) refer to the timer 0, while the high 4 bits (bit4 - bit7)

    refer to the timer 1. There are 4 operational modes and each of them is described herein.

  • 8/9/2019 Timeri 8051 MikroE Eng

    3/13

    Bits of this register have the following function:

    GATE1 enables and disables Timer 1 by means of a signal brought to the INT1 pin (P3.3):o 1 - Timer 1 operates only if the INT1 bit is set.o 0 - Timer 1 operates regardless of the logic state of the INT1 bit. C/T1 selects pulses to be counted up by the timer/counter 1:

    o 1 - Timer counts pulses brought to the T1 pin (P3.5).o 0 - Timer counts pulses from internal oscillator. T1M1,T1M0 These two bits select the operational mode of the Timer 1.

    T 1 M 1 T 1 M 0 M O D E D E S C R I P T I O N

    0 0 0 13-bit timer

    0 1 1 16-bit timer

    1 0 2 8-bit auto-reload

    1 1 3 Split mode GATE0 enables and disables Timer 1 using a signal brought to the INT0 pin (P3.2):

    o 1 - Timer 0 operates only if the INT0 bit is set.o 0 - Timer 0 operates regardless of the logic state of the INT0 bit. C/T0 selects pulses to be counted up by the timer/counter 0:

    o 1 - Timer counts pulses brought to the T0 pin (P3.4).o 0 - Timer counts pulses from internal oscillator. T0M1,T0M0 These two bits select the oprtaional mode of the Timer 0.

    T 0 M 1 T 0 M 0 M O D E D E S C R I P T I O N

    0 0 0 13-bit timer

    0 1 1 16-bit timer

    1 0 2 8-bit auto-reload

    1 1 3 Split mode

    Timer 0 in mode 0 (13-bit timer)

  • 8/9/2019 Timeri 8051 MikroE Eng

    4/13

    This is one of the rarities being kept only for the purpose of compatibility with the previuos versions of microcontrollers. This mode configures timer 0 as a 13-bit timer which

    consists of all 8 bits of TH0 and the lower 5 bits of TL0. As a result, the Timer 0 uses only 13 of 16 bits. How does it operate? Each coming pulse causes the lower register bits to

    change their states. After receiving 32 pulses, this register is loaded and automatically cleared, while the higher byte (TH0) is inc remented by 1. This process is repeated until

    registers count up 8192 pulses. After that, both registers are cleared and counting starts from 0.

    Timer 0 in mode 1 (16-bit timer)

    Mode 1 configures timer 0 as a 16-bit timer comprising all the bits of both registers TH0 and TL0. That's why this is one of the most commonly used modes. Timer operates in the

    same way as in mode 0, with difference that the registers count up to 65 536 as allowable by the 16 bits.

  • 8/9/2019 Timeri 8051 MikroE Eng

    5/13

    Timer 0 in mode 2 (Auto-Reload Timer)

    Mode 2 configures timer 0 as an 8-bit timer. Actually, timer 0 uses only one 8 -bit register for counting and never counts from 0, but from an arbitrary value (0 -255) stored in

    another (TH0) register.

    The following example shows the advantages of this mode. Suppose it is necessary to constantly count up 55 pulses generated by the clock.

    If mode 1 or mode 0 is used, It is necessary to write the number 200 to the timer registers and constantly check whether an o verflow has occured, i.e. whether they reached the

    value 255. When it happens, it is necessary to rewrite the number 200 and repeat the whole procedure. The same procedure is automatically performed by the microcontroller if

    set in mode 2. In fact, only the TL0 register operates as a timer, while another (TH0) register stores the value from which the counting starts. When the TL0 register is loaded,

  • 8/9/2019 Timeri 8051 MikroE Eng

    6/13

    instead of being cleared, the contents of TH0 will be reloaded to it. Referring to the previous example, in order to regis ter each 55th pulse, the best solution is to write the number

    200 to the TH0 register and configure the timer to operate in mode 2.

    Timer 0 in Mode 3 (Split Timer)

    Mode 3 configures timer 0 so that registers TL0 and TH0 operate as separate 8 -bit timers. In other words, the 16-bit timer consisting of two registers TH0 and TL0 is split into twoindependent 8-bit timers. This mode is provided for applications requiring an additional 8-bit timer or counter. The TL0 timer turns into timer 0, while the TH0 timer turns into timer

    1. In addition, all the control bits of 16-bit Timer 1 (consisting of the TH1 and TL1 register), now control the 8 -bit Timer 1. Even though the 16-bit Timer 1 can still be configured to

    operate in any of modes (mode 1, 2 or 3), it is no longer possible to disable it as there is no control bit to do it. Thus, its operation is restricted when timer 0 is in mode 3.

  • 8/9/2019 Timeri 8051 MikroE Eng

    7/13

    The only application of this mode is when two timers are used and the 16 -bit Timer 1 the operation of which is out of control is used as a baud rate generator.

    Timer Control (TCON) Register

    TCON register is also one of the registers whose bits are directly in control of timer operation.

    Only 4 bits of this register are used for this p urpose, while rest of them is used for interrupt control to be discussed later.

  • 8/9/2019 Timeri 8051 MikroE Eng

    8/13

    TF1 bit is automatically set on the Timer 1 overflow. TR1 bit enables the Timer 1.

    o 1 - Timer 1 is enabled.o 0 - Timer 1 is disabled. TF0 bit is automatically set on the Timer 0 overflow. TR0 bit enables the timer 0.

    o 1 - Timer 0 is enabled.o 0 - Timer 0 is disabled.How to use the Timer 0 ?

    In order to use timer 0, it is first necessary to select it and configure the mode of its operation. Bits of the TMOD register are in control of it:

  • 8/9/2019 Timeri 8051 MikroE Eng

    9/13

    Referring to figure above, the timer 0 operates in mode 1 and counts pulses generated by internal clock the frequency of which is equal to 1/12 the quartz frequency.

    Turn on the timer:

    The TR0 bit is set and the timer starts operation. If the quartz crystal with frequency of 12MHz is embedded then its contents will be incremented every microsecond. After 65.536

    microseconds, the both registers the timer consists of will be loaded. The microcontroller automatically clears them and the timer keeps on repeating procedure from the

    beginning until the TR0 bit value is logic zero (0).

    How to 'read' a timer?

    Depending on application, it is necessary either to read a number stored in the timer registers or to register the moment they have been cleared.

    - It is extremely simple to read a timer by using only one register configured in mode 2 or 3. It is s ufficient to read its state at any moment. That's all!

    - It is somehow complicated to read a timer configured to operate in mode 2. Suppose the lower byte is read first (TL0), then the higher byte ( TH0). The result is:

    TH0 = 15 TL0 = 255

    Everything seems to be ok, but the current state of the register at the moment of reading was:

  • 8/9/2019 Timeri 8051 MikroE Eng

    10/13

    TH0 = 14 TL0 = 255

    In case of negligence, such an error in counting (255 pulses) may occur for not so obvious but quite logical reason. The lower byte is correctly read (255), but at the moment the

    program counter was about to read th e higher byte TH0, an overflow occurred and the contents of both registers have been changed (TH0: 1415, TL0: 2550). This p roblem

    has a simple solution. The higher byte should be read first, then the lower byte and once again the higher byte. If the number stored in the higher byte is different then this

    sequence should be repeated. It's about a short loop consisting of only 3 instructions in the program.

    There is another solution as well. It is sufficient to simply turn the timer off while reading is going on (the TR0 bit of the TCON register should be cleared), and turn it on again

    after reading is finished.

    Timer 0 Overflow Detection

    Usually, there is no need to constantly read timer registers. It is sufficient to register the moment they are cleared, i.e. when counting starts from 0. This c ondition is called an

    overflow. When it occurrs, the TF0 bit of the TCON register will be automatically set. The state of this bit can be constantly checked from within the program or by enabling an

    interrupt which will stop the main program execution when this bit is set. Suppose it is necessary to provide a program delay of 0.05 seconds ( 50 000 machine cycles), i.e. time

    when the program seems to be stopped:

    First a number to be written to the timer registers should be calculated:

    Then it should be written to the timer registers TH0 and TL0:

  • 8/9/2019 Timeri 8051 MikroE Eng

    11/13

    When enabled, the timer will resume counting from this number. The state of the TF0 bit, i.e. whether it is set, is checked from within the program. It happens at the moment of

    overflow, i.e. after exactly 50.000 machine cycles or 0.05 seconds.

    How to measure pulse duration?

  • 8/9/2019 Timeri 8051 MikroE Eng

    12/13

    Suppose it is necessary to measure the duration of an operation, for example how long a device has been turned on? Look again at the figure illustrating the

    timer and pay attention to the function of the GATE0 bit of the TMOD register. If it is cleared then the state of the P3.2 pin doesn't affect timer operation. If

    GATE0 = 1 the timer will operate until the pin P3.2 is cleared. Accordingly, if this pin is supplied with 5V through some external switch at the moment the device

    is being turned on, the timer will measure duration of its operation, which actually was the objective.

    How to count up pulses?

    Similarly to the previous example, the answer to this question again lies in the TCON register. This time it's about the C/T0 bit. If the bit is cleared the timer counts pulses

    generated by the internal oscillator, i.e. measures the time passed. If the bit is set, the timer input is provided with pulses from the P3.4 pin (T0). Since these pulses are not

    always of the same width, the timer cannot be used for time measurement and is turned into a counter, therefore. The highest frequency that could be measured by such a

    counter is 1/24 frequency of used quartz-crystal.

  • 8/9/2019 Timeri 8051 MikroE Eng

    13/13

    Timer 1

    Timer 1 is identical to timer 0, except for mode 3 which is a hold-count mode. It means that they have the same function, their operation is controlled by the same registers TMOD

    and TCON and both of them can operate in one out of 4 different modes.