Experiment-6: Generating Square wave with 8254 PIT


AIM: Write a Program to generate a square wave using 8254.

Write an assembly language program in 8085 microprocessor which generates 1 KHz square waveform by using counter 1 as a binary counter if clock frequency of 8254 is 2 MHz.

Objective:

To understand the mode of operation of 8254

To understnd the calculation of count value

To develop the program for generating a square wave pulse using 8254

Assumption –

Assume the port addresses are 8C01 H, 8C03 H, 8C05 H, 8C07 H for Counter-0, Counter-1, Counter-2, Control Register.

Modes of Operation:

8254 can operate in six mode of operations. These are:

Mode-0: Interrupt on Terminal Count –Mode 0 is typically used for event counting

Mode-1: Hardware Retriggreable One Shot

Mode-2: Rate Generator) –Initially value of OUT is low. When counting is enabled, it becomes high and this process repeats periodically.

Mode-3: Square Wave Generator

Mode-4: Software Triggered Strobe

Mode-5: Hardware Triggered Strobe –OUT will initially be high. Counting is triggered by a rising edge of GATE. When the initial count has expired, OUT will go low for one clock pulse and then go high again

Mode-3 is used for square wave generation. So it is explained in detail.

Mode 3 (Square Wave Generator) – Counting is enabled when GATE = 1 and disabled when GATE = 0. This mode is used to generate square waveform and time period (equal to count) is generated.

Control Word Format:

 

If N is count and is even then ontime of wave = N/2 and offtime = N/2
If N is odd the on time = (N + 1) / 2 and offtime = (N – 1) / 2

D7

D6

D5

D4

D3

D2

D1

D0

SC1

SC0

RL1

RL0

M2

M1

M0

Binary/BCD

0

0

1

1

0

1

1

1

Counter 0

Read/Load

LSB First

MSB in next cycle

Mode 3 : Sq. wave generator

BCD Count

 

For the above problem, 8254 must work in Mode 3 which is the square wave generator. Count for register is given as clock frequency / square wave frequency

count = 2 MHz / 1 KHz
= 2000

decimal to hex:

16 | 2000

16 | 125 -→0

16 | 7 → 13 → C

16 | 0 → 7


2000  =  (07C0) H

Now the data is 16 bit so value of RL1 = 1 and RL0 = 1 in Control Register. As we want to select C2 (Counter 2) the value of SC1 = 0 and SC0 = 1 in Control Register. Value of M2 = 0, M1 = 1 and M2 = 1 for Mode 3 in Control Register. For binary counter value of LSB in CR is 0.

Hence the Control Register (CR) is given by,

D7 D6 D5 D4 D3 D2 D1 D0
1 0 1 1 0 1 1 0

Control Word FORMAT; Counter-1 in Mode-3, and Binary COUNT 

For Counter-0 CW =36h

For Counter-1 CW = 76h

For Counter-2 CW = B6h

Programming the 8254 for Square wave generation

Algorithm Steps:

Step-1: Set CWR address in DX

Step-2: Transfer the CW value (B6 for counter-2 ) at CWR address

Step-3: Set the counter address for counter-2

Step-4: Set the count value in counter 2, with LS Byte first then the MS Byte

Program:

Address

Opcode and Operands

Mnemonic

Comments

1000: 0200

BA 07 8C

MOV DX, 8C07h

; CWR Address

1000:0203

B0 B6

MOV AL, B6H

1000:0205

EE

OUT DX AL

LOAD CWR

1000:0206

BA 05 8C

MOV DX, 8C05H

COUNTER 2 ADDRESS

1000:0209

B0 C0

MOV AL, 0C0H

1000:020B

EE

OUT DX, AL

Load counter-2 LS Byte

1000:020C

B0 07

MOV AL, 07

1000:020E

EE

OUT DX, AL

Load counter-2 MS Byte

1000:020F

EB F8

JMP 0209

LOOP

Before executing the program, you have to provide the clock input to the CLK2 of the 8253(timer-2). This can be done by shorting the jumper (out of the black of two) located below 8253 IC (U-22)

*

*

 

error: Content is protected !!