12 mt06ped007

23
8051 counters/timers N.Bhaskar 12MT06PED007

Transcript of 12 mt06ped007

Page 1: 12 mt06ped007

8051 counters/timers

N.Bhaskar

12MT06PED007

Page 2: 12 mt06ped007

Introduction :

• To generate precise time delay and to count the number of pulses timer / counter plays an important role

Timer operations are basically three types

1.software based approach

2. hardware based approach

3. combined software and hardware approach

SJCET

Page 3: 12 mt06ped007

Software based approachSoftware based approach::

VNIT

start

Set P1.0 to 1

Initialize counter register(CR)

CR←CR-1

is CR=0

CPL P1.0

N

Y

SETB P1.0

Loop: MOV R6,#255

Here: DJNZ R6,Here

CPL P1.0 SJMP Loop

Page 4: 12 mt06ped007

Hard ware based approachHard ware based approach : :

VNIT

Page 5: 12 mt06ped007

Combined S/W and H/W approachCombined S/W and H/W approach :

Registers Used in Timers/Counters:– TH0, TL0, TH1, TL1

– TMOD (Timer mode register)

– TCON (Timer control register)

SJCET

Page 6: 12 mt06ped007

TCON RegisterTCON Register

Timer control register: TCON• Upper nibble for timer control, lower nibble for

interruptsTR (run control bit)• TR0 for Timer 0 control; TR1 for Timer 1 control.• TR is set by programmer to turn timer/counter

on/off.• TR=0: off (stop)• TR=1: on (start)

TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0Timer 1 Timer0 for Interrupt

(MSB) (LSB)

Page 7: 12 mt06ped007

TF (timer overflow flag bit) TF0 is a timer 0 overflow flag bit; TF1 is a

timer 1 overflow flag bit.TF is like a carry. Originally, TF=0. When TH-

TL roll over to 0000 from FFFFH, the TF is set to 1. TF=0 : not reach TF=1: reach

TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0Timer 1 Timer0 for Interrupt

(MSB)

(LSB)

Page 8: 12 mt06ped007

Equivalent Instructions for the Timer Control Equivalent Instructions for the Timer Control Register:Register:

VNIT

Page 9: 12 mt06ped007

TMOD RegisterTMOD RegisterTimer mode register: TMOD• An 8-bit register

• Set the usage mode for two timers • Set lower 4 bits for Timer 0 (Set to 0000

if not used)

• Set upper 4 bits for Timer 1 (Set to 0000 if not used)

• Not bit-addressable

GATE C/T M1 M0 GATE C/T M1 M0Timer 1 Timer 0

(MSB) (LSB)

Page 10: 12 mt06ped007
Page 11: 12 mt06ped007

VNIT

Page 12: 12 mt06ped007
Page 13: 12 mt06ped007

Steps FOR TIMERS OPERATIONSteps FOR TIMERS OPERATION

1. Choose mode 1 timer 0MOV TMOD,#01H

1. Set the initiat value to TH0 and TL0.MOV TH0,#FFH

MOV TL0,#FCH

1. Better to clear the flag to monitor: TF0=0.CLR TF0

1. Start the timer.SETB TR0

Page 14: 12 mt06ped007

5.The 8051 starts to count up by incrementing the TH0-TL0.

TH0-TL0= FFFCH,FFFDH,FFFEH,FFFFH,0000H

Page 15: 12 mt06ped007

6. When TH0-TL0 rolls over from FFFFH to 0000, the 8051 set TF0=1. Now TF0=1

6. Keep monitoring the t imer f lag (TF) to see if i t is raised.AGAIN: JNB TF0, AGAIN

6. Clear TR0 to stop the process.CLR TR0

6. Clear the TF f lag for the next round.CLR TF0

Page 16: 12 mt06ped007

Timer Delay Calculation for XTAL = Timer Delay Calculation for XTAL = 11.0592 MHz11.0592 MHz

(a) in hex• (FFFF – YYXX ) × 1.085 µs • where YYXX are TH, TL initial values

respectively. • Notice that values YYXX are in hex.

(b) in decimal• Convert YYXX values of the TH, TL register to

decimal to get a NNNNN decimal number• then (65536 – NNNNN) × 1.085 µs

Page 17: 12 mt06ped007

• Assume that XTAL = 11.0592 MHz .• And we know desired delay • how to find the values for the TH,TL ?

1. Divide the delay by 1.085 µs and get n. 2. Perform 65536 –n3. Convert the result of Step 2 to hex ( yyxx)4. Set TH = yy and TL = xx.

Page 18: 12 mt06ped007

Example 1:• Assuming XTAL = 11.0592 MHz, • write a program to generate a square wave of 50 Hz

frequency on pin P2.3.

Solution:1. The period of the square wave = 1 / 50 Hz = 20

ms.2. The high or low portion of the square wave = 10

ms.3. 10 ms / 1.085 µs = 9216 4. 65536 – 9216 = 56320 in decimal = DC00H in

hex.5. TL1 = 00H and TH1 = DCH.

Page 19: 12 mt06ped007

MOV TMOD,#10H ;timer 1, mode 1AGAIN: MOV TL1,#00 ;Timer value= DC00H MOV TH1,#0DCH SETB TR1 ;startBACK: JNB TF1,BACK CLR TR1 ;stop CPL P2.3 CLR TF1 ;clear timer flag 1 SJMP AGAIN ;reload timer

Page 20: 12 mt06ped007

Example 2: square wave of 50% duty on P1.5 Timer 0 is used

;each loop is a half clock MOV TMOD,#01 ;Timer 0,mode 1(16-bit)

HERE: MOV TL0,#0F2H ;Timer value = FFF2H

MOV TH0,#0FFH

CPL P1.5

ACALL DELAY

SJMP HERE

50% 50%

whole clock

P1.5

Page 21: 12 mt06ped007

;generate delay using timer 0

DELAY:

SETB TR0 ;start the timer 0

AGAIN:JNB TF0,AGAIN

CLR TR0 ;stop timer 0

CLR TF0 ;clear timer 0 flag

RET

FFF2 FFF3 FFF4 FFFF 0000

TF0 =0 TF0 =0 TF0 =0 TF0 =0 TF0 =1

Page 22: 12 mt06ped007

VNIT

QUERIES

QUERIES

Page 23: 12 mt06ped007

VNIT

THANK YOU

THANK YOU