Special Function Register Mapepsem.upc.edu/~jesusv/uc8051_web/Timers_0_1_8051.pdf · 8051...

22
8051 MICROCONTROLLER TIMERS 0 & 1 1 Special Function Register Map F8 F0 B E8 E0 ACC D8 D0 PSW C8 C0 B8 IP B0 P3 A8 IE A0 P2 98 SCON SBUF 90 P1 88 TCON TMOD TL0 TL1 TH0 TH1 80 P0 SP DPH DPL PCON Bit Addressable

Transcript of Special Function Register Mapepsem.upc.edu/~jesusv/uc8051_web/Timers_0_1_8051.pdf · 8051...

Page 1: Special Function Register Mapepsem.upc.edu/~jesusv/uc8051_web/Timers_0_1_8051.pdf · 8051 MICROCONTROLLER TIMERS 0 & 1 8 TCON : Counter/Timer Control Register-TF1, TF0 : Overflow

8051 MICROCONTROLLER TIMERS 0 & 1 1

Special Function Register Map

F8

F0 B

E8

E0 ACC

D8

D0 PSW

C8

C0

B8 IP

B0 P3

A8 IE

A0 P2

98 SCON SBUF

90 P1

88 TCON TMOD TL0 TL1 TH0 TH1

80 P0 SP DPH DPL PCON

Bit Addressable

Page 2: Special Function Register Mapepsem.upc.edu/~jesusv/uc8051_web/Timers_0_1_8051.pdf · 8051 MICROCONTROLLER TIMERS 0 & 1 8 TCON : Counter/Timer Control Register-TF1, TF0 : Overflow

8051 MICROCONTROLLER TIMERS 0 & 1 2

Special Function Registers

Interrupt control:

IE : Interrupt Enable.

IP : Interrupt Priority.

TImers:

TMOD : Timer mode.

TCON : Timer control.

TH0 : Timer 0 high byte.

TL0 : Timer 0 low byte.

TH1 : Timer 1 high byte.

TL1 : Timer 1 low byte.

Page 3: Special Function Register Mapepsem.upc.edu/~jesusv/uc8051_web/Timers_0_1_8051.pdf · 8051 MICROCONTROLLER TIMERS 0 & 1 8 TCON : Counter/Timer Control Register-TF1, TF0 : Overflow

8051 MICROCONTROLLER TIMERS 0 & 1 3

Counter / Timers

Two 16-bit Counter/Timers: TIMER0, TIMER1

Up counters, can interrupt on overflow.

Counts:

- CPU cycles (crystal/12). “Timer”.

- External input (max. half CPU rate). “Counter”.

Four Operation Modes.

Page 4: Special Function Register Mapepsem.upc.edu/~jesusv/uc8051_web/Timers_0_1_8051.pdf · 8051 MICROCONTROLLER TIMERS 0 & 1 8 TCON : Counter/Timer Control Register-TF1, TF0 : Overflow

8051 MICROCONTROLLER TIMERS 0 & 1 4

Timer Modes

- Timer Mode 0 :

Emulates 8048 counter/timer (13-bits).

8-bit counter (TL0 or TL1).

5-bit prescaler (TH0 or TH1).

- Timer Mode 1 :

Simple 16-bit counter.

- Timer Mode 2 :

8-bit auto-reload.

Counter in TL0 or TL1.

Reload value in TH0 or TH1.

Provides a periodic flag or interrupt.

Page 5: Special Function Register Mapepsem.upc.edu/~jesusv/uc8051_web/Timers_0_1_8051.pdf · 8051 MICROCONTROLLER TIMERS 0 & 1 8 TCON : Counter/Timer Control Register-TF1, TF0 : Overflow

8051 MICROCONTROLLER TIMERS 0 & 1 5

Timer Modes (cont'd)

- Timer Mode 3 :

Splits timer 0 into two 8-bit counter/timers.

First counter (TLO) acts like mode 0,

without prescaler.

Second counter (TH0):

Counts CPU cycles.

Uses TR1 (timer 1 run bit) as enable.

Uses TF1 (timer 1 overflow bit) as flag.

Uses Timer 1 interrupt.

Timer 1 (when timer 0 is in mode 3 ):

Counter stopped if in mode 3.

Running in mode 0, 1, or 2.

Has gate (INT1) and external input (T1),

but no flag or interrupt.

May be used as a baud rate generator.

Page 6: Special Function Register Mapepsem.upc.edu/~jesusv/uc8051_web/Timers_0_1_8051.pdf · 8051 MICROCONTROLLER TIMERS 0 & 1 8 TCON : Counter/Timer Control Register-TF1, TF0 : Overflow

8051 MICROCONTROLLER TIMERS 0 & 1 6

Counter/Timer in 16-bit (Mode 1)

The Gate input controls whether the Counter runs while gated by the interrupt signal or not.

Osc. ÷12 Osc.

TL18-bits

TF1 TH18-bits

Interrupt

Control

T1 (Pin)

TR1

Gate

INT1 (Pin)

Page 7: Special Function Register Mapepsem.upc.edu/~jesusv/uc8051_web/Timers_0_1_8051.pdf · 8051 MICROCONTROLLER TIMERS 0 & 1 8 TCON : Counter/Timer Control Register-TF1, TF0 : Overflow

8051 MICROCONTROLLER TIMERS 0 & 1 7

TMOD : Counter/Timer Mode Register

GATE C/T M1 M0 GATE C/T M1 M0

Timer 1 Timer 0

- GATE : Permits INTx pin to enable/disable counter.

- C/T : Set for counter operation, reset for timer operation.

- M1, M0 :

00 : Emulate 8048 counter/timer (13-bits).

01 :16-bit counter/timer.

10 : 8-bit auto-reload mode

11 :Timer 0 = two 8-bit timers.

Timer 1 = Counting disabled. Timing function allowed. (Can be used as Baud Rate generator).

Page 8: Special Function Register Mapepsem.upc.edu/~jesusv/uc8051_web/Timers_0_1_8051.pdf · 8051 MICROCONTROLLER TIMERS 0 & 1 8 TCON : Counter/Timer Control Register-TF1, TF0 : Overflow

8051 MICROCONTROLLER TIMERS 0 & 1 8

TCON : Counter/Timer Control Register

- TF1, TF0 : Overflow flags for Timer 1 and Timer 0.

- TR1, TR0 : Run control bits for Timer 1 and Timer 0. Set to run, reset to hold.

- IE1, IE0 : Edge flag for external interrupts 1 and 0. *

Set by interrupt edge, cleared when interrupt is processed.

- IT1, IT0 : Type bit for external interrupts. *

Set for falling edge interrupts, reset for 0 level interrupts.

* = not related to counter/timer operation.

TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0

Page 9: Special Function Register Mapepsem.upc.edu/~jesusv/uc8051_web/Timers_0_1_8051.pdf · 8051 MICROCONTROLLER TIMERS 0 & 1 8 TCON : Counter/Timer Control Register-TF1, TF0 : Overflow

8051 MICROCONTROLLER TIMERS 0 & 1 9

Interrupt System

- 5 Interrupt Sources (in order of priority):

� External Interrupt 0.

� Timer 0.

� External Interrupt 1.

� Timer 1.

� Serial Port.

- Each interrupt can be enabled separately.

- Each interrupt type has a separate vector address.

- Each interrupt type can be programmed to one of two priority levels.

- External interrupts can be programmed for edge or level sensitivity.

Page 10: Special Function Register Mapepsem.upc.edu/~jesusv/uc8051_web/Timers_0_1_8051.pdf · 8051 MICROCONTROLLER TIMERS 0 & 1 8 TCON : Counter/Timer Control Register-TF1, TF0 : Overflow

8051 MICROCONTROLLER TIMERS 0 & 1 10

IE : Interrupt Enable Register

- EA : Global interrupt enable.

- ES : Serial interface.

- ET1 : Timer 1.

- EX1 : External interrupt 1.

- ET0 : Timer 0.

- EX0 : External interrupt 0.

- 0 = Disabled.

- 1 = Enabled.

EA ---- ---- ES ET1 EX1 ET0 EX0

Page 11: Special Function Register Mapepsem.upc.edu/~jesusv/uc8051_web/Timers_0_1_8051.pdf · 8051 MICROCONTROLLER TIMERS 0 & 1 8 TCON : Counter/Timer Control Register-TF1, TF0 : Overflow

8051 MICROCONTROLLER TIMERS 0 & 1 11

Interrupt Vector Addresses

Source Address

IE0 03H

TF0 0BH

IE1 13H

TF1 1BH

RI&TI 23H

The 8051 starts execution at 0000H after Reset.

Page 12: Special Function Register Mapepsem.upc.edu/~jesusv/uc8051_web/Timers_0_1_8051.pdf · 8051 MICROCONTROLLER TIMERS 0 & 1 8 TCON : Counter/Timer Control Register-TF1, TF0 : Overflow

8051 MICROCONTROLLER TIMERS 0 & 1 12

IP: Interrupt Priority Register

- PS : Serial interface.

- PT1 : Timer 1.

- PX1 : External interrupt 1.

- PT0 : Timer 0.

- PX0 : External interrupt 0.

- 0 = Low priority.

- 1 = High priority.

----- ----- ----- PS PT1 PX1 PT0 PX0

Page 13: Special Function Register Mapepsem.upc.edu/~jesusv/uc8051_web/Timers_0_1_8051.pdf · 8051 MICROCONTROLLER TIMERS 0 & 1 8 TCON : Counter/Timer Control Register-TF1, TF0 : Overflow

8051 MICROCONTROLLER TIMERS 0 & 1 13

80C51 Coding:

Ideas and Examples

Page 14: Special Function Register Mapepsem.upc.edu/~jesusv/uc8051_web/Timers_0_1_8051.pdf · 8051 MICROCONTROLLER TIMERS 0 & 1 8 TCON : Counter/Timer Control Register-TF1, TF0 : Overflow

8051 MICROCONTROLLER TIMERS 0 & 1 14

(1) Reading a Timer "on the Fly"

ReadTimer: MOV ValH,TH0 ;Read initial timer high and low values.

MOV ValL,TL0

MOV A,TH0 ;Read timer high byte again.

CJNE A,ValH,ChkHigh ;Has it changed?

SJMP RTEX ;If not, first sample is OK.

ChkHigh: JB ValL.7,RTEX ;Otherwise, check low byte to see if it

; changed after the original high byte

; sample.

MOV ValH,A ;If it did change, use second high byte

; sample.

RTEX: RET

Page 15: Special Function Register Mapepsem.upc.edu/~jesusv/uc8051_web/Timers_0_1_8051.pdf · 8051 MICROCONTROLLER TIMERS 0 & 1 8 TCON : Counter/Timer Control Register-TF1, TF0 : Overflow

8051 MICROCONTROLLER TIMERS 0 & 1 15

(2) Pulse Width Measurement

start timer

Problem: measure the width of an

input pulse.

?

stop timer

Assumption: use external interrupt 0 for the pulse input. Use timer 0 in gated mode.

Note: to measure pulse low time in this manner, the input must be inverted externally.

Page 16: Special Function Register Mapepsem.upc.edu/~jesusv/uc8051_web/Timers_0_1_8051.pdf · 8051 MICROCONTROLLER TIMERS 0 & 1 8 TCON : Counter/Timer Control Register-TF1, TF0 : Overflow

8051 MICROCONTROLLER TIMERS 0 & 1 16

(2) Pulse Width Measurement

Setup: MOV TMOD,#09h ;Timer 0 gate on, in mode 1.

MOV TCON,#01h ;Set INT0 to edge triggered mode.

MOV TH0,#0 ;Clear timer 0 for measurement.

MOV TL0,#0

SETB TR0 ;Start timer in gated mode.

SETB EX0 ;Enable external interrupt 0.

SETB EA ;Enable global interrupts.

. .

. .

. .

;External interrupt 0 service routine.

ExInt0: CLR TR0 ;Stop timer.

MOV ValH,TH0 ;Save timer value.

MOV ValL,TL0

MOV TH0,#0 ;Clear timer 0 for measurement.

MOV TL0,#0

SETB TR0 ;Restart timer.

RETI

Page 17: Special Function Register Mapepsem.upc.edu/~jesusv/uc8051_web/Timers_0_1_8051.pdf · 8051 MICROCONTROLLER TIMERS 0 & 1 8 TCON : Counter/Timer Control Register-TF1, TF0 : Overflow

8051 MICROCONTROLLER TIMERS 0 & 1 17

(3) Pulse Period Measurement

start timer

Problem: measure the period of

an input pulse.

?

stop timer

Assumption: use external interrupt 0 for

the pulse input.

Note: this method may entail some loss of precision due to the possibility of variable interrupt latency.

Page 18: Special Function Register Mapepsem.upc.edu/~jesusv/uc8051_web/Timers_0_1_8051.pdf · 8051 MICROCONTROLLER TIMERS 0 & 1 8 TCON : Counter/Timer Control Register-TF1, TF0 : Overflow

8051 MICROCONTROLLER TIMERS 0 & 1 18

(3) Pulse Period Measurement

Setup: (same as previous example, but leave timer gate function turned off)

MOV TMOD,#01h ;Timer 0 in mode 1.

;External interrupt 0 service routine.

ExInt0: CPL TR0 ;Complement the timer run flag. This starts

; and stops the timer on alternate interrupts.

JB TR0,INT0EX ;Exit if timer is running.

MOV ValH,TH0 ;Otherwise sample the timer value.

MOV ValL,TL0

MOV TH0,#0 ;Clear timer so another sample can

MOV TL0,#0 ; be taken.

INT0EX: RETI

Page 19: Special Function Register Mapepsem.upc.edu/~jesusv/uc8051_web/Timers_0_1_8051.pdf · 8051 MICROCONTROLLER TIMERS 0 & 1 8 TCON : Counter/Timer Control Register-TF1, TF0 : Overflow

8051 MICROCONTROLLER TIMERS 0 & 1 19

(4) Creating an Output Pulse

Problem: create a pulse of known

duration on a port pin.

stop pulsestart pulse, timer

timer

Note: the precision of pulses generated using this method will vary depending on the interrupt latency of the timer interrupt.

Assumption: use any spare port bit for

the output.

Page 20: Special Function Register Mapepsem.upc.edu/~jesusv/uc8051_web/Timers_0_1_8051.pdf · 8051 MICROCONTROLLER TIMERS 0 & 1 8 TCON : Counter/Timer Control Register-TF1, TF0 : Overflow

8051 MICROCONTROLLER TIMERS 0 & 1 20

(4) Creating an Output Pulse

Setup: MOV TCON,#0h ;Make sure timer is stopped.

MOV TMOD,#01h ;Set timer to mode 1.

MOV TH0,#HiTime ;Load timer with pulse duration. The value is the MOV TL0,#LoTime ; two's complement of the

number of machine ; cycles to use for the pulse width.

SETB TR0 ;Start timer.

SETB P2.0 ;Start pulse (use CLR for a low going pulse).

;Tiimer 0 interrupt routine.

T0INT: CLR P2.0 ;End of pulse (use SETB for a low going pulse).

CLR TR0 ;Stop timer.

RETI

Page 21: Special Function Register Mapepsem.upc.edu/~jesusv/uc8051_web/Timers_0_1_8051.pdf · 8051 MICROCONTROLLER TIMERS 0 & 1 8 TCON : Counter/Timer Control Register-TF1, TF0 : Overflow

8051 MICROCONTROLLER TIMERS 0 & 1 21

(5) Programming a PWM Output

Problem: create a PWM output

on a port pin.

set timerhigh time

set timerlow time

repeat

Note: the precision of pulses generated using this method will vary depending on the interrupt latency of the timer interrupt.

Page 22: Special Function Register Mapepsem.upc.edu/~jesusv/uc8051_web/Timers_0_1_8051.pdf · 8051 MICROCONTROLLER TIMERS 0 & 1 8 TCON : Counter/Timer Control Register-TF1, TF0 : Overflow

8051 MICROCONTROLLER TIMERS 0 & 1 22

(5) Programming a PWM Output

T0INT: CLR TR0 ;Stop timer.

CPL P2.0 ;Toggle output bit.

JB P2.0,SetPWMHigh ;Is current phase high or low?

MOV TH0,PWMLowH ;Set PWM low time.

MOV TL0,PWMLowL

SJMP T0EX

SetPWMHigh: MOV TH0,PWMHighH ;Set PWM high time.

MOV TL0,PWMHighL

T0EX: SETB TR0 ;Restart timer.

RETI

Note: for higher frequency pulses, it may be possible to use thetimer reload feature (mode 2) to obtain more accurate pulse durations.