0% found this document useful (0 votes)
373 views9 pages

8255 Interfacing Example

The document describes an assembly language program that reads a single analog to digital conversion from an ADC0804 chip connected to an 8088 CPU via an 8255 PPI and displays the resulting 3-digit decimal value on a connected 44780 LCD. The program configures the PPI ports to interface with the ADC and LCD, performs a single ADC conversion to get a result value, splits that value into individual digits, and displays each digit on the LCD.

Uploaded by

Asad Rehan
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
373 views9 pages

8255 Interfacing Example

The document describes an assembly language program that reads a single analog to digital conversion from an ADC0804 chip connected to an 8088 CPU via an 8255 PPI and displays the resulting 3-digit decimal value on a connected 44780 LCD. The program configures the PPI ports to interface with the ADC and LCD, performs a single ADC conversion to get a result value, splits that value into individual digits, and displays each digit on the LCD.

Uploaded by

Asad Rehan
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 9

Problem designed by: Muhammad Usman Rafique (Assistant Professor, ECE Deptt.

)
Course Instructor MSI (CPE342) Page 1 of 9

Implementation of 8088-based I/O system using 8255 PPI


Problem Statement:

An ADC0804 and a 44780 LCD are connected with 8088 CPU through
8255 PPI. PPI is interfaced with CPU at A0H and above. Develop an
8088 CPU assembly language program that reads a single conversion
from ADC and displays it in decimal on LCD in 3-digit format.

Solution:

System design assumptions:

LCD is connected with Group A of PPI. Consult following table for pin
connections.

44780 LCD Pins 8255 Pins

RS PortC.4
̅̅̅̅̅
RW PortC.5
̅̅̅̅
EN PortC.6

D7…D0 PortA.7…PortA.0

ADC is connected with Group B of PPI. Consult following table for pin
connections.

ADC0804 Pins 8255 Pins


̅̅̅
CS PortC.0
̅̅̅̅
RD PortC.1
̅̅̅̅̅
WR PortC.2
̅̅̅̅̅̅̅
INTR PortC.3

D7…D0 PortB.7…PortB.0
Problem designed by: Muhammad Usman Rafique (Assistant Professor, ECE Deptt.)
Course Instructor MSI (CPE342) Page 2 of 9

Program:

START:

;CONFIGURING PPI FOR BASIC I/O MODE

MOV AL, 80H

OUT 0A3H, AL

CALL LCD_CONFIG

;MAIN PROGRAM LOOP

MAIN:

CALL ADC0804

CALL SPLIT

CALL DISPLAY

JMP MAIN

HLT ;HALT IN CASE OF MALFUNCTION

;CONFIGURING LCD. COMMAND BYTE IN BH

LCD_CONFIG:

MOV BH, 38H

CALL LCD_COMM

MOV BH, 01H

CALL LCD_COMM

MOV BH, 0CH

CALL LCD_COMM

MOV BH, 06H

CALL LCD_COMM
Problem designed by: Muhammad Usman Rafique (Assistant Professor, ECE Deptt.)
Course Instructor MSI (CPE342) Page 3 of 9

MOV BH, 80H

CALL LCD_COMM

RET

;SENDING COMMAND TO LCD. BH HOLDS THE COMMAND BYTES

LCD_COMM:

MOV AL, BH

OUT 0A0H, AL

;SETTING EN = 1, RS = 0, RW = 0

MOV AL, 98H ;PORTC LINES ARE INPUT

OUT 0A3H, AL

IN AL, 0A2H ;READ PORTC

AND AL, 0FH ;CLEAR UPPER HALF OF PORTC

OR AL, 0C0H ;BYTE 1100XXXX TO PORTC, EN = 1

MOV BL, AL

MOV AL, 90H ;PORTC LINES ARE OUTPUT

OUT 0A3H, AL

MOV AL, BL

OUT 0A2H, AL ;OUTPUT BYTE TO PORTC

SETTING EN = 0, RS = 0, RW = 0

MOV AL, 98H ;PORTC LINES ARE INPUT

OUT 0A3H, AL
Problem designed by: Muhammad Usman Rafique (Assistant Professor, ECE Deptt.)
Course Instructor MSI (CPE342) Page 4 of 9

IN AL, 0A2H ;READ PORTC

AND AL, 0FH ;CLEAR UPPER HALF OF PORTC

OR AL, 80H ;BYTE 1000XXXX TO PORTC, EN = 0

MOV BL, AL

MOV AL, 90H ;PORTC LINES ARE OUTPUT

OUT 0A3H, AL

MOV AL, BL

OUT 0A2H, AL ;OUTPUT BYTE TO PORTC

RET

;SENDING DATA TO LCD. BH HOLDS THE ASCII OF CHARACTER

LCD_DATA:

MOV AL, BH

OUT 0A0H, AL

;SETTING EN = 1, RS = 1, RW = 0

MOV AL, 98H ;PORTC LINES ARE INPUT

OUT 0A3H, AL

IN AL, 0A2H ;READ PORTC

AND AL, 0FH ;CLEAR UPPER HALF OF PORTC

OR AL, 0D0H ;BYTE 1101XXXX TO PORTC, EN = 1

MOV BL, AL

MOV AL, 90H ;PORTC LINES ARE OUTPUT

OUT 0A3H, AL
Problem designed by: Muhammad Usman Rafique (Assistant Professor, ECE Deptt.)
Course Instructor MSI (CPE342) Page 5 of 9

MOV AL, BL

OUT 0A2H, AL ;OUTPUT BYTE TO PORTC

SETTING EN = 0, RS = 0, RW = 0

MOV AL, 98H ;PORTC LINES ARE INPUT

OUT 0A3H, AL

IN AL, 0A2H ;READ PORTC

AND AL, 0FH ;CLEAR UPPER HALF OF PORTC

OR AL, 90H ;BYTE 1000XXXX TO PORTC, EN = 0

MOV BL, AL

MOV AL, 90H ;PORTC LINES ARE OUTPUT

OUT 0A3H, AL

MOV AL, BL

OUT 0A2H, AL ;OUTPUT BYTE TO PORTC

RET

;ADC CONFIGURATION FOR SINGLE CONVERSION. RESULT IN DH

ADC0804:

;SETTING WR=1, RD=1, CS=0

MOV AL, 93H ;PORTB IS I/P. PORTC IS I/P

OUT 0A3H, AL

IN AL, 0A2H ;READ PORTC

AND AL, 0F8H ;CLEAR LOWER 3 BITS OF PORTC

OR AL, 06H ;SET WR=1, RD=1, CS=0


Problem designed by: Muhammad Usman Rafique (Assistant Professor, ECE Deptt.)
Course Instructor MSI (CPE342) Page 6 of 9

MOV BL, AL ;TEMPORARY COPY OF AL

MOV AL, 92H ;PORTB IS O/P. PORTC IS O/P

OUT 0A3H, AL

MOV AL, BL ;LOAD AL FOR OUTPUT

OUT 0A2H, AL ;WRITE BYET XXXXX110 TO PORTC

;SETTING WR=0, RD=1, CS=0

MOV AL, 93H ;PORTB IS I/P. PORTC IS I/P

OUT 0A3H, AL

IN AL, 0A2H ;READ PORTC

AND AL, 0F8H ;CLEAR LOWER 3 BITS OF PORTC

OR AL, 02H ;SET WR=0, RD=1, CS=0

MOV BL, AL ;TEMPORARY COPY OF AL

MOV AL, 92H ;PORTB IS O/P. PORTC IS O/P

OUT 0A3H, AL

MOV AL, BL ;LOAD AL FOR OUTPUT

OUT 0A2H, AL ;WRITE BYET XXXXX010 TO PORTC

;SETTING WR=1, RD=1, CS=0

MOV AL, 93H ;PORTB IS I/P. PORTC IS I/P

OUT 0A3H, AL

IN AL, 0A2H ;READ PORTC

AND AL, 0F8H ;CLEAR LOWER 3 BITS OF PORTC

OR AL, 06H ;SET WR=1, RD=1, CS=0


Problem designed by: Muhammad Usman Rafique (Assistant Professor, ECE Deptt.)
Course Instructor MSI (CPE342) Page 7 of 9

MOV BL, AL ;TEMPORARY COPY OF AL

MOV AL, 92H ;PORTB IS O/P. PORTC IS O/P

OUT 0A3H, AL

MOV AL, BL ;LOAD AL FOR OUTPUT

OUT 0A2H, AL ;WRITE BYET XXXXX110 TO PORTC

;WAIT FOR INTR = 0

MOV AL, 93H ;PORTB IS I/P. PORTC IS I/P

OUT 0A3H, AL

WAIT: IN AL, 0A2H ;READ PORTC

AND AL, 08H ;AL = 0000X000. X IS INTR PIN

CMP AL, 00H ;IF INTR = 0?

JNE WAIT

IN AL, 0A1 ;READ PORTB FOR RESULT

MOV DH, AL ;COPY RESULT IN DH

;LEAVE ADC IN DISABLED STATE BY SETTING CS = 1

;SETTING WR=1, RD=1, CS=1

MOV AL, 93H ;PORTB IS I/P. PORTC IS I/P

OUT 0A3H, AL

IN AL, 0A2H ;READ PORTC

AND AL, 0F8H ;CLEAR LOWER 3 BITS OF PORTC

OR AL, 07H ;SET WR=1, RD=1, CS=1


Problem designed by: Muhammad Usman Rafique (Assistant Professor, ECE Deptt.)
Course Instructor MSI (CPE342) Page 8 of 9

MOV BL, AL ;TEMPORARY COPY OF AL

MOV AL, 92H ;PORTB IS O/P. PORTC IS O/P

OUT 0A3H, AL

MOV AL, BL ;LOAD AL FOR OUTPUT

OUT 0A2H, AL ;WRITE BYET XXXXX111 TO PORTC

RET

;EXTRACTING INDIVIDUAL DIGITS X, Y AND Z FROM ADC RESULT


;XYZ DECIMAL. ASSUMING RESULT IS IN DH.

;0TH DIGIT (Z) IN CL, 10TH (Y) IN CH AND 100TH (X) IN DL.

SPLIT:

XOR AX, AX ;CLEAR AX FOR USING DIV

MOV AL, DH ;AX = ADC RESULT

MOV DH, 10 ;DIVISOR IS 10

DIV DH ;PERFORMS AX/DH

MOV CL, AH ;Z IS EXTRACTED, AL = XY

XOR AH, AH ;CLEAR AH. AX = XY

DIV DH ;PERFORMS AX/DH

MOV CH, AH ; Y IS EXTRACTED, AL = X

MOV DL, AL ; Z IS EXTRACTED, DL = X

RET
Problem designed by: Muhammad Usman Rafique (Assistant Professor, ECE Deptt.)
Course Instructor MSI (CPE342) Page 9 of 9

;NOW INDIVIDUAL DIGITS CAN BE DISPLAYED ON LCD.

;DISPLAY MUST BE CALLED AFTER CALLING SPLIT

DISPLAY:

MOV BH, 80H ;CURSOR AT LINE 0, COL 0

CALL LCD_COMM

;DISPLAY 100TH DIGIT (FOUND IN DL)

ADD DL, 48 ;ADD 48 TO GET THE ASCII

MOV BH, DL ;COPY IN BH FOR LCD_DATA CALL

CALL LCD_DATA

;DISPLAY 10TH DIGIT (FOUND IN CH)

ADD CH, 48 ;ADD 48 TO GET THE ASCII

MOV BH, CH ;COPY IN BH FOR LCD_DATA CALL

CALL LCD_DATA

;DISPLAY 0TH DIGIT (FOUND IN CL)

ADD CL, 48 ;ADD 48 TO GET THE ASCII

MOV BH, CH ;COPY IN BH FOR LCD_DATA CALL

CALL LCD_DATA

RET

You might also like