1 of 26

8254 Programmable Interval Timer

Dr A Sahu

Dept of Comp Sc & Engg.

IIT Guwahati

2 of 26

Hierarchy of I/O Control Devices

8155

I/O + Timer

8255

I/O

8253/54

Timer

2 Port (A,B),

No Bidirectional

HS mode (C)

4 mode timer

2 Port (A,B)

A is Bidirectional

HS mode (C)

Extra controls

6 mode timer

8259

Interrupt controller

8237

DMA controller

8251

Serial I/O USART controller

3 of 26

Outline

  • Basic Difference of 8155 I/O timer Vs 8254
  • 8254 Brief
  • Architecture of 8254
  • Control register
  • Status register
  • Modes of Counters with example
  • Read-Back modes

​

​

4 of 26

8155: Timer Modes Output

    • 00: Single square wave of wavelength TC/2 (TC/2,TC/2 if TC even; [TC+1/2],[TC-1/2] if TC odd)
    • 01: Square waves of wavelength TC (TC/2,TC/2 if TC even; [TC+1/2],[TC-1/2] if TC odd)
    • 10: Single pulse on the TC'th clock pulse
    • 11: Single pulse on every TC'th clock pulse.

​

CLK

WR

Mode 00

Mode 01

Mode 10

Mode 11

N/2

N/2

N/2

N/2

N/2

N/2

N

N

N

5 of 26

8254: Brief

  • Three independent 16-bit programmable counters (timers).
  • It generates accurate time delays and can be used for
    • Real time clock, an event Ctr, a digital one shot, a square wave gen, complex wave gen.
  • Programmable and work DC to 8 MHz
  • 5 different modes of operation

​

6 of 26

The 8254 PIT

  • The 8254 Programmable Interval-timer is used by the PC system for (1) generating timer-tick interrupts (rate is 18.2 per sec), (2) performing dynamic memory-refresh (reads ram once every 15 microseconds), and (3) generates ‘beeps’ of PC speaker
  • When the speaker-function isn’t needed, the 8254 is available for other purposes

7 of 26

8254 Block Diagram

Data

Bus

Buffer

Read/

Write

Logic

Counter

0

CLK 0

GATE 0

OUT 0

Internal

​

​

Bus

Control Word

Register

Counter

1

CLK 1

GATE 1

OUT 1

Counter

2

CLK 2

GATE 2

OUT 2

D0-D7

RDb

WRb

A0

A1

​

CSb

8 of 26

Control Logic

  • RDb, WRb, CSb
  • A0, A1: Selection of Counter and Control Register
  • Suppose Address is (80H,81H,82H,83H) with interfacing Circuit

A1

A0

Selection

0

0

Counter 0

0

1

Counter 1

1

0

Counter 2

1

1

Control Register

9 of 26

Control Register

D7

D6

D5

D4

D3

D2

D1

D0

SC1

SC2

RW1

RW0

M2

M1

M0

BCD

Select Counter

​

00: Counter 0

01: Counter 1

10: Counter 2

11: Read-Back

Command

Read Write

​

00: Counter latch

Command

01:RW LSByte only

10: RW MSByte

only

11:RW LSByte first

then Msbyte

000 : Mode 0

001 :Mode 1

X10 :Mode 2

X11 :Mode 3

100 :Mode 4

101 : Mode 5

0/1 =

Binary / BCD Mode

10 of 26

Programming Counters

  • Each counter may be programmed with a count of 1 to FFFFH.
    • Minimum count is 1 all modes except 2 and 3 with minimum count of 2.
  •  Each counter has a program control word used to select the way the counter operates.
    • If two bytes are programmed, then the first byte (LSB) stops the count, and the second byte (MSB) starts the counter with the new count.

​

11 of 26

Modes of 8254 Counter

  • Mode 0 : Interrupt on Terminal count
  • Mode 1 : Hardware Retriggerable One Shot
  • Mode 2 : Rate Generator
  • Mode 3 : Square wave generator
  • Mode 4 : Software Triggered Strobe
  • Mode 5 : Hardware Triggered Strobe

​

12 of 26

Mode 0: Interrupt on Terminal Count

  • The output becomes a logic 0 when the control word is written and remains there until N plus the number of programmed counts.

CLK

OUT

Count of 7 loaded

13 of 26

Mode 1: Hardware Retriggerable One Shot

  • The G input triggers the counter to output a 0 pulse for `count' clocks.
  • Counter reloaded if G is pulsed again.

​

CLK

GATE

OUT

Triggered with count of 5

14 of 26

Mode 2: Rate Generator

  • Counter generates a series of pulses 1 clock pulse wide.
  • The separation between pulses is determined by the count.
  • The cycle is repeated until reprogrammed or G pin set to 0.

​

CLK

OUT

Count of 5 loaded

15 of 26

Write instruction to generate pulse every 50mcroS from Ctr0

  • Control word = 14H
    • D7D6=00 Select ctr 0
    • D5D4=01 load 8 bit count
    • D3D2D1=010 mode 2
    • D0=0 Binary
  • Count = 50x10-6/0.5x10-6=64H

PULSE: MVI A 14H ; Control word

OUT CTRAdd 83H

MVI A,64H ;Count value

OUT 80H ; load counter 0 with low

order byte

HALT

16 of 26

Mode 3: Square wave generator

  • Generates a continuous square-wave with G set to 1.
  • If count is even, 50% duty cycle otherwise OUT is high 1 cycle longer

​

CLK

OUT

Count of 6 loaded

17 of 26

Write instruction for 1KhZ square wave at Ctr 1

  • Control word = 76H

​

​

​

  • Count= 1x10-3/0.5x10-6=2000=07D0H
  • Instructions

MVI A,76H ; load Control word for Ctr 1 mode 3

OUT 83H ; write to Ctrl reg

MVI A, D0H; lower order byte cnt

OUT 81H

MVI A,07H ; higher order byte

OUT 81H

HLT

D7

D6

D5

D4

D3

D2

D1

D0

SC1

SC2

RW1

RW0

M2

M1

M0

BCD

01

Load 16 bit (11)

011 (mode 3)

0

18 of 26

Mode 4: Software Triggered Strobe

  • Software triggered one-shot (G must be 1).
  • OUT goes initially High, it goes low for one clock at the end of count
  • The count must be reloaded for subsequent output

CLK

OUT

Triggered with count of 8

19 of 26

Mode 5: Hardware Triggered Strobe

  • Hardware triggered is one-shot
  • It is triggered by rising edge at the Gate
  • Initially the OUT is low and Gate triggered from low to high the count begins
  • OUT goes low for one clock periood

H/W trigger with count of 8

CLK

OUT

20 of 26

Gate Setting of Counter

Modes

Low or

Going Low

Rising

High

Mode 0

Disable Counting

-

Enable

Counting

Mode 1

-----

1. Initiate Counting

2. Reset O/P after next Clock

---

​

  1. Disable counting
  2. Set O/P immediately high
  1. Reloads Counter
  2. Initiate Counting

Enable

Counting

​

​

  1. Disable counting
  2. Set O/P immediately high

Initiates Counting

Enable

Counting

​

​

Disable Counting

​

Enable

Counting

​

​

​

Initiates Counting

​

21 of 26

Read-Back Command

  • This allow user to read the count and status of the counter
  • Command Written in control register and count of the specified counter can be latched

​

​

​

  • Control word 11 01 011 0 (D6H) in control word will latch the count of CNT0 & CNT1

D7

D6

D5

D4

D3

D2

D1

D0

SC1

SC2

COUNTb

STATUSb

CNT2

CNT1

CNT0

0

11: Read-Back Command

If (D5=0) count is lateched

D3=1 select counter 2

D2=1 select counter 1

D1=1 select counter 0

​

22 of 26

Read-Back Command

  • Status can be read if STATUSb bit D4 =0
  • D7=1 : Outpin is 1, 0 Outpin is 0
  • D6=1: Null count, D6: 0= Count available for reading
  • D5-D0:Counter Programmed mode

D7

D6

D5

D4

D3

D2

D1

D0

OUTPUT

NULL COUNT

RW1

RW0

M2

M1

M0

BCD

23 of 26

Write a SR to generate an interrupt every 1 Second

  • Assume Clock Freq=2MhZ
  • Count is too large
  • Counter 1 load with 50,000 to generate 25ms
    • CNTLOAD=50,00010=C350H
  • Counter 2 load with 40 to generate 25msX40=-1S pulse (CNTLOAD=4010=28H)
  • Counter1 input is to counter 2
  • Both Counter 1 & Counter 2 in Mode 2

24 of 26

Control word

  • Counter 1 (74H)

​

​

  • Counter 2 (94H)

D7

D6

D5

D4

D3

D2

D1

D0

SC1

SC2

RW1

RW0

M2

M1

M0

BCD

01

Load 16 bit (11)

010 (mode 2)

0

D7

D6

D5

D4

D3

D2

D1

D0

SC1

SC2

RW1

RW0

M2

M1

M0

BCD

10

Load 8 bit (01)

010 (mode 2)

0

25 of 26

Instruction to set up 1s interrupt

MVI A , 74H ; Mode for 1st CTR

OUT 83H ;Write in control register

MVI A,94H ; Mode for 2nd CTR

OUT 83H ; Write to control register

MVI A,50 ; low byte of CTR1=C350

OUT 81H ; load to CTR1 low byte

MVI A,C3 ; high byte of CTR1=C350

OUT 81H ; load to CTR1 high byte

MVI A,28H ; Count for Counter 2

OUT 82H ; Load Counter 2

RET

26 of 26

Thanks