You are on page 1of 43

JAWAHAR LAL NEHRU TECHNOLOGICAL UNIVERSIY

TPC
032
III YEAR B.TECH ECE &EIE –II SEMESTER
(EC 05401)MICROPROCESSORS LAB

I. Microprocessor 8086:

1. Introduction to MASM/TASM.
2. Arithmetic operation – Multi byte Addition and Subtraction, Multiplication
and Division – Signed and unsigned Arithmetic operation, ASCII – arithmetic
operation.
3. Logic operations – Shift and rotate – Converting packed BCD to unpacked
BCD, BCD to ASCII conversion.
4. By using string operation and Instruction prefix: Move Block, Reverse string,
Sorting, Inserting, Deleting, Length of the string, String comparison.
5. DOS/BIOS programming: Reading keyboard (Buffered with and without
echo) – Display characters, Strings.

II. Interfacing:

1. 8259 – Interrupt Controller: Generate an interrupt using 8259 timer.


2. 8279 – Keyboard Display: Write a small program to display a string of
characters.
3. 8255 – PPI: Write ALP to generate sinusoidal wave using PPI.
4. 8251 – USART: Write a program in ALP to establish Communication
between two processors.

III. Microcontroller 8051

1. Reading and Writing on a parallel port.


2. Timer in different modes.
3. Serial communication implementation.
MICROPROCESSORS LAB
YEAR &SEMESTER: III ECE, III EIE, II SEM

I. Microprocessor 8086:

1. Introduction to MASM/TASM.
2. Arithmetic operation – Multi byte Addition and Subtraction, Multiplication
and Division – Signed and unsigned Arithmetic operation, ASCII – arithmetic
operation.
3. Logic operations – Shift and rotate – Converting packed BCD to unpacked
BCD, BCD to ASCII conversion.
4. By using string operation and Instruction prefix: Move Block, Reverse string,
Sorting, Inserting, Deleting, Length of the string, String comparison.
5. DOS/BIOS programming: Reading keyboard (Buffered with and without
echo) – Display characters, Strings.

II. Interfacing:

1. 8259 – Interrupt Controller: Generate an interrupt using 8259 timer.


2. 8279 – Keyboard Display: Write a small program to display a string of
characters.
3. 8255 – PPI: Write ALP to generate sinusoidal wave using PPI.
4. 8251 – USART: Write a program in ALP to establish Communication
between two processors.

III. Microcontroller 8051

1. Reading and Writing on a parallel port.


2. Timer in different modes.
3. Serial communication implementation.

Additional Experiments to be conducted

1. Interfacing of traffic light controller.

2. Interfacing of stepper motor.

3. Interfacing of DAC
EXPT NO.1

INTRODUCTION TO TASM/MASM

ASSEMBLY LEVEL PROGRAMMING:

A PROGRAM CALLED “ASSEMBLER” IS USED TO CONVERT THE


MNEMONICS OF INSTRUCTIONS ALONG WITH THE DATA IN TO THEIR
EQUIVALENT OBJECT CODE MODULES. THESE OBJECT CODE MODULES MAY
FURTHER CONVERTED IN TO EXECUTABLE CODE BY USING LINKER AND
LODER PROGRAMS.

STEPS INVOLVED IN ALP:

1. ENTERING A PROGRAM

2. ASSEMBLING A PROGRAM

3. LINKING A PROGRAM

4. USING DEBUG

ENTERING A PROGRAM:

BEFORE STARTING THE PROCESS, ENSURE THE ALL THE FILES i.e.,
EDITOR, ASSEMBLER, LINKER AND DEBUGGER ARE AVAILABLE IN THE SAME
DIRECTORY IN WHICH YOU ARE WORKING.

C>NE→GET DISPLAY

THEN TYPE THE PROGRAM AND CHECK ANY TYPING MISTAKE AND
SYNTAX ERRORS. BEFORE QUIT THE EDITOR PROGRAM DO NOT FORGET TO
SAVE IT. A NUMBER OF TEXT EDITORS ARE AVAILABLE IN THE MARKET EX:
NORTON EDITOR (NE), TURBO C (FTC), EDLIN etc.

SAVE THE PROGRAM: FILE NAME.ASM

DATA SEGMENT
.
.
DATA ENDS

CODE SEGMENT
START:
.
.
.
CODE ENDS
END START

ASSEMBLING A PROGRAM:
MICROSOFT MACRO ASSEMBLER IS ONE OF THE EASY TO USE AND
POPULAR ASSEMBLERS. ASSEMBLER ACCEPTS THE TEXT ASSEMBLY
LANGUAGE PROGRAM FILE AS INPUT AND PREPARES AN OBJECT FILE. i.e.,
MASM ACCEPTS THE FILE NAMES ONLY WITH THE EXTENSION.ASM.

C: TASM FILE NAME.ASM

SOURCE FILENAME [.ASM]:

OBJECT FILENAME [FILE.OBJ]:

LIST FILENAME [NUL.LST]:

THE OBJECT FILE IS CREATED WITH THE ENTERED NAME WITH .OBJ
EXTENSION. THE .OBJ FILE CONTAINS THE CODED OBJECT MODULES OF THE
PROGRAM TO BE ASSEMBLED.

THE LISTING FILE IS AUTOMATICALLY GENERATED IN THE ASSEMBLY


PROCESS. THE LISTING FILE CONTAINS THE TOTAL OFFSET MAP OF THE
SOURCE FILE INCLUDING LABELS, OFFSET ADDRESS, OPCODES, AND
MEMORY ALLOTMENT FOR DIFFERENT LABELS.

LINKING A PROGRAM:

THE DOS LINING PROGRAM LINK.EXE THE DIFFERENT OBJECT


MODULES OF A SOURCE PROGRAM AND TO GENERATE AN INTEGRATED
EXECUTABLE CODE OF THE SOURCE PROGRAM. THE INPUT TO THE LINKER IS
THE .OBJ FILE.

C:T LINK FILENAME.OBJ

THE OUTPUT OF THE LINKER OS FILENAME.EXE

USING DEBUG:

DEBUG.COM IS A DOS UTILITY THAT FACILITATES THE DEBUGGING


AND TROUBLE SHOOTING OF AN ASSEMBLY LANGUAGE PROGRAMS. DEBUG IS
USED TO TROUBLESHOOT THE FILES ONLY WITH EXTENSION.EXE.

DEBUG MAY BE USED EITHER TO DEBUG A SOURCE PROGRAM OR TO


OBSERVE THE RESULTS OF EXTENSION OF AN .EXE FILE WITH THE HELP OF
LIST FILE.LST AND DEBUG COMMANDS.

AFTER EXECUTION OF THE PROGRAM, THE OFFSET ADDRESS OF THE


RESULT VARIABLES MAY BE OBSERVED USING THE ‘D’ COMMAND. THE
RESULTS AVAILABLE IN THE REGISTERS MAY BE OBSERVED USING THE ‘R’
COMMAND.
C: DEBUG FILENAME.EXE

PRESS R THEN

T
.
.
.
.
Q

DEBUG COMMANDS:

DEBUG PROVIDES A SET OF COMMANDS THAT LETS YOU PERFORM A


NUMBER OF USEFUL OPERATIONS.

THE COMMANDS THAT CONCERN US AT THIS POINT ARE THE FOLLOWING:

A ASSEMBLE SYMBOLIC INSTRUCTIONS INTO MACHINE CODE

D DISPLAY THE CONTENS OF AN AREA OF MEMORY

E ENTER DATA INTO MEMORY, BEGINNING AT A SPECIFIC


LOCATION

G RUN THE EXECUTABLE PROGRAM IN MEMORY (G MEANS “GO”)

N NAME OF THE PROGRAM

P PROCEED, OR EXECUTE A SET OF RELATED INSTRUCTIONS.

Q QUIT THE DEBUG SESSION.

R DISPLAY THEN CONTENTS OF ONE OR MORE REGISTERS

T TRACES THE EXECUTION OF ONE INSTRUCTION.

U “UNASSEMBLE” (REALLY, DISASSEMBLE) MACHINE CODE INTO


SYMBOLIC CODE

W WRITE A PROGRAME ONTO DISK


EXPT NO: 2

ARITHEMATIC OPERATIONS ON MULTIBYTE UNSIGNED,


SIGNED AND ASCII NUMBERS

ARITHEMATIC OPERATIONS ON MULTIBYTE UNSIGNED NUMBERS:

ADDITION:

DATA SEGMENT
A DB 02H, 20H, 08H, 70H
B DB 03H, 04H, 05H, 06H
SUM DB 5 DUP(0)
COUNT EQU 04
DATA ENDS
CODE SEGMENT
ASSUME CS: CODE, DS: DATA
START: MOV AX, DATA
MOV DS, AX
LEA SI, A+3
LEA DI, B+3
LEA BX, SUM+4
MOV CX, COUNT
CLC
LP: MOV AL, [SI]
ADC AL, [DI]
MOV BYTE PTR [BX],AL
DEC SI
DEC DI
DEC BX
LOOP LP
JNC LP1
MOV BYTE PTR [BX], 01H
LP1: MOV AH, 4CH
INT 21H
CODE ENDS
END START
SUBTRACTION:

DATA SEGMENT
A DB 02H, 20H, 08H, 70H
B DB 03H, 04H, 05H, 06H
SUM DB 5 DUP(0)
COUNT EQU 04
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
START: MOV AX,DATA
MOV DS,AX
LEA SI,A+3
LEA DI,B+3
LEA BX,SUM+4
MOV CX,COUNT
CLC
LP: MOV AL,[SI]
SBB AL,[DI]
MOV BYTE PTR[BX],AL
DEC SI
DEC DI
DEC BX
LOOP LP
JNB LP1
MOV BYTE PTR[BX],01H
LP1: MOV AH,4CH
INT 21H
CODE ENDS
END START
MULTIPLICATION:

DATA SEGMENT
A DB 02H, 20H, 08H, 70H
B DB 03H, 04H, 05H, 06H
SUM DB 8 DUP(0)
COUNT EQU 04
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
START: MOV AX,DATA
MOV DS,AX
LEA SI,A
LEA DI,B
LEA BX,SUM
MOV CX,COUNT
CLC
LP: MOV AL,[SI]
MUL BYTE PTR[DI]
MOV WORD PTR[BX],AX
INC SI
INC DI
INC BX
INC BX
LOOP LP
MOV AH,4CH
INT 21H
CODE ENDS
END START
DIVISION:

DATA SEGMENT
A DW 0282H, 0820H, 0678H, 0790H
B DB 30H, 40H, 50H, 60H
SUM DB 8 DUP(0)
COUNT EQU 04
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
LEA SI,A
LEA DI,B
LEA BX,SUM
MOV CX,COUNT
CLC
LP: MOV AX,[SI]
DIV BYTE PTR[DI]
MOV WORD PTR[BX],AX
INC SI
INC SI
INC DI
INC BX
INC BX
LOOP LP
MOV AH,4CH
INT 21H
CODE ENDS
END START
ARITHEMATIC OPERATIONS ON MULTIBYTE SIGNED NUMBERS

ADDITION:

DATA SEGMENT
A DB 92H, 80H, 88H, 87H
B DB 03H, 04H, 05H, 06H
SUM DB 5 DUP(0)
COUNT EQU 04
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
START: MOV AX,DATA
MOV DS,AX
LEA SI,A+3
LEA DI,B+3
LEA BX,SUM+4
MOV CX,COUNT
CLC
LP: MOV AL,[SI]
ADC AL,[DI]
MOV BYTE PTR[BX],AL
DEC SI
DEC DI
DEC BX
LOOP LP
JNC LP1
MOV BYTE PTR[BX],01H
LP1: MOV AH,4CH
INT 21H
CODE ENDS
END START
SUBSTRACTION:
DATA SEGMENT
A DB 02H, 20H, 08H, 70H
B DB 93H, 84H, 95H, 86H
SUM DB 5 DUP(0)
COUNT EQU 04
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
START: MOV AX,DATA
MOV DS,AX
LEA SI,A+3
LEA DI,B+3
LEA BX,SUM+4
MOV CX,COUNT
CLC
LP: MOV AL,[SI]
SBB AL,[DI]
MOV BYTE PTR[BX],AL
DEC SI
DEC DI
DEC BX
LOOP LP
JNB LP1
MOV BYTE PTR[BX],01H
LP1: MOV AH,4CH
INT 21H
CODE ENDS
END START
MULTIPLICATION:
DATA SEGMENT
A DB 92H, 80H, 88H, 97H
B DB 03H, 04H, 05H, 06H
SUM DB 8 DUP(0)
COUNT EQU 04
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
START: MOV AX,DATA
MOV DS,AX
LEA SI,A
LEA DI,B
LEA BX,SUM
MOV CX,COUNT
CLC
LP: MOV AL,[SI]
IMUL BYTE PTR[DI]
MOV WORD PTR[BX],AX
INC SI
INC DI
INC BX
INC BX
LOOP LP
MOV AH,4CH
INT 21H
CODE ENDS
END START
DIVISION:
DATA SEGMENT
A DW 0282H, 0820H, 0678H, 0790H
B DB 30H, 40H, 50H, 60H
SUM DB 8 DUP(0)
COUNT EQU 04
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
LEA SI,A
LEA DI,B
LEA BX,SUM
MOV CX,COUNT
CLC
LP: MOV AX,[SI]
IDIV BYTE PTR[DI]
MOV WORD PTR[BX],AX
INC SI
INC SI
INC DI
INC BX
INC BX
LOOP LP
MOV AH,4CH
INT 21H
CODE ENDS
END START
ARITHEMATIC OPERATIONS ON MULTIBYTE ASCII NUMBERS

ASCII ADDITION:
DATA SEGMENT
ASC1 DB ‘568’
ASC2 DB ‘684’
ASCSUM DB ‘0000’
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
START: MOV AX,DATA
MOV DS,AX
CLC
LEA SI,ASC1+2
LEA DI,ASC2+2
LEA BX,ASCSUM+3
MOV CX,03
A20: MOV AH,00
MOV AL,[SI]
ADC AL,[DI]
AAA
MOV [BX],AL
DEC SI
DEC DI
DEC BX
LOOP A20
MOV [BX],AH
LEA BX,ASCSUM+3
MOV CX,04
A30: OR BYTE PTR[BX],30H
DEC BX
LOOP A30
MOV AX,4C00H
INT 21H
CODE ENDS
END START
ASCII SUBSTRACTION:
DATA SEGMENT
ASC1 DB ‘568’
ASC2 DB ‘684’
ASCSUM DB ‘0000’
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
START: MOV AX,DATA
MOV DS,AX
CLC
LEA SI,ASC1+2
LEA DI,ASC2+2
LEA BX,ASCSUM+3
MOV CX,03
A20: MOV AH,00
MOV AL,[SI]
SBB AL,[DI]
AAS
MOV [BX],AL
DEC SI
DEC DI
DEC BX
LOOP A20
JNB LP
MOV [BX],01H
LP: LEA BX,ASCSUM+3
MOV CX,04
A30: OR BYTE PTR[BX],30H
DEC BX
LOOP A30
MOV AX,4C00H
INT 21H
CODE ENDS
END START
ASCII MULTIPLICATION:
DATA SEGMENT
MULCND DB ‘3657’
MULTPLR DB ‘6’
PRODUCT DB 5 DUP(0)
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE. DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV CX,04
LEA SI,MULCND+3
LEA DI,PRODUCT+4
AND MULTPLR,0FH
A20: MOV AL,[SI]
AND AL,0FH
MUL MULTPLR
AAM
ADD AL,[DI]
AAA
MOV [DI],AL
DEC DI
MOV [DI],AH
DEC SI
LOOP A20
LEA BX,PRODUCT+4
MOV CX,05
A30: OR BYTE PTR[BX],30H
DEC BX
LOOP A30
MOV AX,4C00H
INT 21H
CODE ENDS
END START
ASCII DIVISION:
DATA SEGMENT
DIVDND DB ‘3698’
DIVSOR DB ‘4’
QUOTNT DB 4 DUP(0)
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV CX,04
SUB AH,AH
AND DIVSOR 0FH
LEA SI,DIVDND
LEA DI,QUOTNT
A20: MOV AL,[SI]
AND AL,0FH
AAD
DIV DIVSOR
MOV [DI],AL
INC SI
INC DI
LOOP A20
MOV [DI],AH
LEA DI,QUOTNT
MO0V CX,05
LP: OR BYTE PTR[DI],AH
DEC DI
LOOP LP
MOV AH,4CH
INT 21H
CODE ENDS
END START
EXPT.NO.3

LOGIC OPERATIONS – SHIFT AND ROTATE – CONVERTING


PACKED BCD TO UNPACKED BCD – BCD TO ASCII
CONVERSION

PACKED BCD TO UNPACKED BCD:

DATA SEGMENT
BCD DB 35H
UNBCD DB ‘00’
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
LEA SI,BCD
LEA DI,UNBCD
MOV AL,[SI]
MOV AH,00
MOV CL,04
SHL AX,CL
ROL AL,CL
MOV [DI],AH
INC DI
MOV [DI],AL
MOV AH,4CH
INT 21H
CODE ENDS
END START
BCD TO ASCII:
DATA SEGMENT
BCD DB 57H
ASC DB ‘00’
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
LEA SI,BCD
LEA DI,ASC
MOV AL,[SI]
MOV AH,33H
MOV CL,04
ROL AX,CL
ROL AL,CL
MOV [DI],AH
INC DI
MOV [DI],AL
MOV AH,4CH
INT 21H
CODE ENDS
END START
EXPT.NO.4
BY USING THE STRING OPERATION AND INSTRUCTION
PREFIX MOVE BLOCK, REVERSE STRING, SORTING,
INSERTING, DELETING, LENGTH OF THE STRING,STRING
COMPARISION.

LENGTH OF THE STRING:


DATA SEGMENT
STR1 DB “THE KING”,”$”
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV CL,00H
LEA SI,STR1
LOOP1: CMP [SI],24H
JE LABEL1
INC CL
INC SI
JMP LOOP1
LABEL1: MOV AH,4CH
INT 21H
CODE ENDS
END START
MOVE STRING FROM ONE LOCATION TO ANOTHER LOCATION:
DATA SEGMENT
STR1 DB “SACET”
STR2 DB 05 DUP(0)
COUNT EQU 05
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
START: MOV AX,DATA
MOV DS,AX
LEA SI,STR1
LEA DI,STR2
MOV CX,COUNT
CLD
REP MOV SB
MOV AH,4CH
INT 21H
CODE ENDS
END START
STRING COMPARISION:
DATA SEGMENT
NAME1 DB “ASSEMBLERS”
NAME2 DB “ASSEMBLERS”
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV BH,00
CLD
MOV CX,10
LEA SI, NAME1
LEA DI,NAME2
REPE CMPSB
JNE LP1
MOV BH,01
LP: MOV AH,4CH
INT 21H
CODE ENDS
END START
REVERSE STRING:
DATA SEGMENT
STR1 DB “SACET”
SRT2 DB “00000”
COUNT EQU 05
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV SI, OFFSET STR1
MOV DI, OFFSET STR2+4
MOV CX, COUNT
LP: MOV AL,[SI]
MOV [DI],AL
INC SI
DEC DI
LOOP LP
MOV AH,4CH
INT 21H
CODE ENDS
END START
STRING INSERTION:
DATA SEGMENT
STR1 DB “THE”,”$”
STR2 DB “EEE IS BEST”,”$”
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
START: MOV AX,DATA
MOV DS,AX
LEA SI, STR2+7
LEA DI,STR1
MOV CX,04
CLD
LP: MOV AL,[SI]
MOV [SI]+4,AL
INC SI
LOOP LP
LEA SI,STR2+7
MOV CX,03
LP1: MOV AL,[DI]
MOV [SI],AL
INC SI
INC DI
LOOP LP1
MOV BYTE PTR[SI],20H
MOV AH,4CH
INT 21H
CODE ENDS
END START
STRING DELETION:
DATA SEGMENT
STR1 DB “EEE IS THE BEST”,”$”
STR2 DB “000”
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
START: MOV AX,DATA
MOV DS,AX
LEA SI, STR1+7
LEA DI,STR2
MOV CX,03H
CLD
L1: MOV AL,[SI]
MOV [DI],AL
INC SI
INC DI
LOOP LP1
LEA SI,STR1+11
MOV CX,04H
L2: MOV AL,[SI]
MOV [SI]+4,AL
MOV BYTE PTR [SI],20H
INC SI
LOOP L2
MOV AH,4CH
INT 21H
CODE ENDS
END START
EXPT NO: 5

DOS/BIOS PROGRAMMING: TO DISPLAY THE STRING WITH


ECHO AND WITHOUT ECHO

DATA SEGMENT
STR1 DB “ENTER ANY STRING”, “$”
STR2 DB “DO YOU WANT TO CENTRE POSITION”,”$”
PARLIST LABEL BYTE
MAXLEN DB 20
NAMELEN DB ?
NAMEFLD 21 DUP(“$”)
DATA ENDS

CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
XOR AX,AX
MOV AH,09H
LEA DX,STR1 ; display the string1
INT 21H

MOV AH,0AH
LEA DX,PARLIST ; read the string
INT 21H

MOV AX,0600H
MOV BH,30
MOV CX,0000 ;screen settings
MOV DX,384FH
INT 10H

MOV AH,09H
LEA DX,STR2 ; display the string2
INT 10H
MOV AH,01H ; 01 for read with echo,
INT 21H 07 for without echo
CMP AL, ‘Y’
JNZ LP1
MOV AH,02H
MOV BH,00 :page no.1
MOV DH,12 :12th row in page1
MOV DL,40 :40TH column in page1
INT 10H
LP1: MOV AH,09H
LEA DX,NAMEFLD
INT 21H
MOV AH,4CH
CODE ENDS
END START
EXPT NO: 6
8259 -INTERRUPT CONTROLER

; FILENAME : I8259_1.ASM
; PROCESSOR : I8086
; VER. : V1.1

CODE SEGMENT
ASSUME CS: CODE, DS:CODE,ES:CODE,SS:CODE
INTA EQU 007CH
INTA2 EQU INTA+2
LCDC EQU 00H
LCDC_S EQU 02H
LCDD EQU 04H
INT_V EQU 040H*4
INT_V1 EQU 041H*4
STACK EQU 0540H

ORG 1000H

XOR BX,BX
MOV ES,BX
MOV SS,BX
MOV DS,AX
MOV SP,STACK
MOV AX,OFFSET INTR0
MOV BX,INT_V
MOV WORD PTR ES:[BX],AX
XOR AX,AX
MOV WORD PTR ES:[BX+2],A
MOV AX,OFFSET INTR1
MOV BX,INT_V1
MOV WORD PTR ES:[BX],AX
CALL INIT
STI
L2: NOP
JMP L2
ORG 1100H
INTR0: CLI
MOV DX,OFFSET CUSOR1
JMP DISP
INT 03

ORG 1110H
INIT : ICW1
MOV AL, 0010011B
OUT INTA,AL ;ICW2 interrupt vector
MOV AL,40H
OUT INTA2,AL ;ICW4
MOV AL,00000011B
OUT INTA2,AL ;interrupt mask
MOV AL,11000000B
OUT INTA2,AL
RET
ORG 1180H
DISP: CALL LCD
NOP
STI
RET
LCD: CALL ALLCLR
MOV SI,DX
CALL STRING
RET

ORG 1220H
CUSOR1 DB 'INTERRUPT IR0',00H,00H
ORG 1240H
CUSOR2 DB 'INTERRUPT IR1',00H,00H

LCD instruction
ALLCLR: MOV AH,01H
JMP LNXX
DISPOFF:
MOV AH,08H
JMP LNXX

DISPON: MOV AH,0FH


JMP LNXX

LN11: MOV AH,02H


JMP LNXX

LN21: MOV AH,0C0H

LNXX: CALL BUSY


MOV AL,AH
OUT LCDC,AL
RET
busy flag check
BUSY: IN AL,LCDC_S
AND AL,10000000B
JNZ BUSY
RET

; 1 char. LCD OUT


; AH = out data
CHAROUT:
CALL BUSY
;
MOV AL,AH
OUT LCDD,AL
RET
;
STRING: MOV AH,BYTE PTR ES:[SI]
CMP AH,00H
JE STRING1
; out
CALL BUSY
CALL CHAROUT
INC SI
JMP STRING
STRING1:
RET

TIMER: MOV CX,2


TIMER2: PUSH CX
MOV CX,0
TIMER1: NOP
NOP
NOP
NOP
LOOP TIMER1
POP CX
LOOP TIMER2
RET

CODE ENDS
END
EXPT NO: 7

8279 –KEYBORAD DISPLAY

AIM ;Program to Display Hi-q ELECTRONICS using Encode method.


;007EH Command Port
;007CH Data Port

CODE SEGMENT
ASSUME CS: CODE, DS: CODE, SS: CODE, ES: CODE
ORG 1000H
MOV CX,08H
MOV AL,00H
MOV DX,007EH ; Routine to clear
OUT DX,AL ; all displays
MOV AL,90H
OUT DX,AL
RPT: MOV AL,00H ; 8 8-bit character
MOV DX,007CH ; display Left
OUT DX,AL ; entry, Encoded
LOOP RPT ; scan keyboard
MOV DX,007EH
MOV AL,10H
OUT DX,AL
MOV DX,007FH
MOV AL,90H ; Write to 8279
OUT DX,AL ; display RAM
BCK: MOV SI,1100H ; Routine to
MOV CX,08H ; display Hi-q
BCO: MOV AL,[SI] ; Electronics
MOV DX,007CH
OUT DX,AL
INC SI
CALL DLY ; Provide some
LOOP BCO ; delay
MOV CX,08H
BC1: MOV AL,[SI]
MOV DX,007CH
OUT DX,AL
INC SI
CALL DLY
LOOP BC1
JMP BCK
DLY: PUSH CX
MOV CX,0000H
ZZ: LOOP ZZ
POP CX
RET
;Display lookup table
ORG 1100H
DB 67H,03H,04H,76H
DB 97H,83H,97H,93H
DB 87H,13H,0F3H,073H
DB 03H,93H,0D6H,04H
CODE ENDS
END
EXPT NO: 8
8255 – PPI
AIM: To generate sinusoidal signal using DAC
MOVW AX,0000
MOVW SI,9000
MOVW CX,0000
MOVB AL,80
MOVW DX,0FFE6
OUTB AL,DX
MOVW DX,0FFE2
R1: MOVB AL,[SI]
OUTB DX,AL
MOVW CX,000F
L1: LOOP L1
INCW SI
CMPW SI,903D
JNE R1
MOVW SI,9000
JMP R1
EXPT NO: 8
8255 – PPI
AIM: To interface switch
NOTES:
 THE INTERFACE IS CONNECTED TO J4 TRAINER.
 THE PROGRAM DISPLAYS THE POSITION OF THE SWITCH
 THE PROGRAM VERIFIES THE SWITCH IN OFF POSITION
 THE PROGRAM VERIFIES THE SWITCH IN ON POSITION.
 THE PROGRAM STARTS AT MEMORY LOCATION 0000:4000H

PROGRAM:

MEMORY OPCODES MNEMONIC COMMENT

4000 B8 00 00 MOVW AX,0000 ;Initialisation


4003 BA E6 FF MOVW DX,0FFE6 ;Assigning Portaddress.
4006 B0 92 MOVB AL,92 ;Configuring 8255 Port A As
4008 EE OUTB AL,DX ; I/P & Port C As O/P
4009 B3 00 MOVB BL,00 ;Initialisation Of BL Register.
400B BA E4 FF MOVW DX,0FFE4 ;Assign Port Address
400E B0 01 MOVB AL,01 ;Make Pc0 Scan Line High
4010 EE OUTB AL,DX ;
4011 BA E0 FF MOVW DX,0FFE0 ;Assign Port Addres
4014 EC INB AL,DX ;Check Pa0 For Switch Position
4015 24 01 ANDB AL,01 ;Mask All Extra Bits
(Except LSB)
4017 3C 01 CMPB AL,01 ;Compare Positions Is ON/OFF
4019 75 02 JNE 401D ;If On Replace Register BL
401B B3 01 MOVB BL,01 ;With 01
401D CC INT 03 ;Interrupt.
EXPT. NO: 9

8251-USART
AIM: To establish communication between two processors.

= 007A M51 EQU 007AH


= 0078 V51 EQU 0078H
= 005E M53 EQU 005EH
= 0058 TM0 EQU 0058H

0000 CODE SEGMENT


ASSUME CS:CODE DS:CODE, SS:CODE, ES:CODE

1000 ORG 1000H


1000 B0 36 MOV AL,36H
1002 BA 005E MOV DX,M53
1005 EE OUT DX,AL
1006 BA 0058 MOV DX,TM0
1009 B0 0A MOV AL,0AH
100B EE OUT DX,AL
100C B0 00 MOV AL,00H
100E EE OUT DX,AL
100F BC 0540 MOV SP,0540H
1012 BA 007A MOV DX,M51
1015 EE OUT DX,AL
1016 EE OUT DX,AL
1017 EE OUT DX,AL
1018 EE OUT DX,AL
1019 E8 1049 R CALL DLY
101C B0 40 MOV AL,040H
101E EE OUT DX,AL
101F E8 1049 R CALL DLY
1022 B0 CE MOV AL,0CEH
1024 EE OUT DX,AL
1025 E8 1049 R CALL DLY
1028 B0 27 MOV AL,27H
102A EE OUT DX,AL
102B E8 1049 R CALL DLY
102E BE 2100 MOV SI,2100H
1031 BA 007A STS: MOV DX,M51
1034 EC IN AL,DX
1035 24 81 AND AL,81H
1037 3C 81 CMP AL,81H
1039 75 F6 JNE STS
103B 8A 04 MOV AL,[SI]
103D 46 INC SI
103E 3C 00 CMP AL,00H
1040 74 06 JE OVR
1042 BA 0078 MOV DX,V51
1045 EE OUT DX,AL
1046 EB E9 JMP STS
1048 CC OVR: INT 3
1049 B9 0010 DLY: MOV CX,0010H
104C E2 FE XX: LOOP XX
104E C3 RET

2100 ORG 2100H


2100 0D 0A DB 0DH,0AH

2102 57 45 4C 43 4F 4D DB 'WELCOME TO HiQ


ELECTRONICS 8251/53 STUDY
CARD'
45 20 54 4F 20 48
69 51 20 45 4C 45
43 54 52 4F 4E 49
43 53 20 38 32 35
31 2F 35 33 20 53
54 55 44 59 20 43
41 52 44
212F 0D 00 DB 0DH,00H

2131 CODE ENDS


END
EXPT NO: 10

READING AND WRITING ON PARALLEL PORT

READING DATA:

THEORY: To Read a Pin of a Port on the 8051 requires that a logic 1 first be
written to that Pin . Hence FF should be written to port 1 to read all
the 8 bits.

PROGRAM:

ADDRESS OPCODES MNEMONIC

4100 75 90 FF MOV P1 ,# FF

4103 E5 90 MOV A, P1

4105 90 45 00 MOV DPTR, # 4500

4108 F0 MOVX @ DPTR, A

4109 80 FE HLT: SJMP HLT

WRITING DATA:

THEORY: 8051 has four parallel ports. But, only port 1 is user – free as Port
2 outputs the high byte of the external memory address and port 0
outputs the low byte of the external memory address, time-
multiplexed with the byte being written or read and port 3 pins
have alternate functions.

PROGRAM:

ADDRESS OPCODES MNEMONIC

4100 75 45 MOV A, # 45

4102 F5 90 MOV P1, A

4104 80 FE HLT: SJMP HLT


EXPT. NO: 11

TIMER IN DIFFERENT MODES

AIM: Initialize the timer 0 of 8051 Micro controller in different modes.

MODE 0:

MOV TMOD, # 0000 1000 B ; Select timer 0 in TMOD


SETB TR0 ; Start timer 0
CLR TR0 ; Stop timer 0
HLT: SJMP HLT ; Infinite loop

MODE 1:

MOV SP, # 54H ; Initialize the stack pointer


MOV TMOD, # 0000 0001 B ; Timer 0 in mode 1
SETB ET0 ; Enable timer 0 interrupt
SETB TR0 ; Start timer 0
SETB EA ; Enable all
HLT: SJMP HLT ; Infinite loop
MODE 2:

MOV TMOD, # 0000 0010 B ; Load TMOD for timer 0 in mode 2


MOV TH0, #33 H ; Load TH 0 with preset value to be
reloaded
MOV TL0, #33 H ; Starting count = preset value
SETB TR0 ; Start timer 0
HLT: SJMP HLT ; Infinite loop
EXPT. NO: 12

SERIAL COMMUNICATION IMPLEMENTATION

#include<8051.h>
#include<serial_IO.h>
unsigned char c;
void serial_init() // Initialize UART baud rate to 9600
{
TMOD = 0X20;
TH1 = 0XFD;
TI = 1;
TR1 = 1;
SCON = 0X52;
//PCON =0x80;

}
void main()
{
serial_init();
while(1)
{
c = getchar();
putchar(c);
}
}
EXPT. NO: 13

INTERFACING OF TRAFFIC LIGHT CONTROLLER

AIM: Interface the traffic light controller and control the traffic in
different roads

MOVB AL,80H ;Intialise 8255 in mode0


MOVW DX,0FFE6
OUTB DX,AL  ;All ports as O/P
AGIAN : MOVW SI,2038
NEXTST : MOVB AL,[SI]
MOVW DX,0FFE0
OUTB DX,AL ;output value at port A
INCW SI
ADDB DL,02
MOVB AL[SI]
OUTB DX,AL ;output value at port B
INCW SI
ADDB DL,02
MOVB AL,[SI]
OUTB DX,AL ;output value at port C
INCW SI
CALL DELAY ;Call Delay routine
CMPW SI,2056 ;Check for end of data
JNZ NEXTST
JMP AGAIN

DELAY: MOVW CX,0FFF ;Delay routine


DLY5: PUSH CX
MOVW CX,03FF
DLY10: NOP
LOOP DLY10
POP CX
LOOP DLY5
RET

ORG 2038
2038 88H,83H,F2H ;State1
88H,87H,F2H ;All ambers ON
38H,88H,F4H ;State2
78H,88H,F4H ;All ambers ON
83H,88H,F8H ;State3
87H,88H,F8H ;All ambers ON
88H,38H,F1H ;State4
88H,78H,F1H ;All ambers ON
88H,88H,00H ;State5
44H,44H,00H ;All ambers ON
2056 00H ;Dummy
EXPT. NO: 14

INTERFACING OF STEPPER MOTOR

14.a AIM: To rotate stepper Anti Clockwise direction.

MOVB AL, 80H ; Initialize 8255 in mode0


MOVW DX, 0FFE6
OUTB DX, AL   ; All ports as O/P
MOVB AL, 11 ; Output value to port A
MOVW DX, 0FFE0
R1: OUTB DX, AL
CALL DELAY ; Introduce delay
RORB AL, 01 ; rotate bits in data byte right &repeat
JMP R1

DELAY: MOVW CX, 0800 ;Delay routine


LP : LOOP LP
RET

14.b AIM: To rotate stepper Clockwise direction.

MOVB AL, 80H ; Initialize 8255 in mode0


MOVW DX, 0FFE6
OUTB DX, AL   ; All ports as O/P
MOVB AL, 11 ; Output value to port A
MOVW DX, 0FFE0
R1: OUTB DX, AL
CALL DELAY ; Introduce delay
ROLB AL, 01 ; rotate bits in data byte right &repeat
JMP R1

DELAY: MOVW CX, 0800 ; Delay routine


LP : LOOP LP
RET
EXPT. NO: 15
INTERFACING OF DAC

15.a AIM: To generate triangular wave by interfacing DAC

MOVW AX, 0000 ;Initialize segment registers


MOVW CS, AX
MOVW ES, AX
MOVW DX, 0FFE6 ;Initialize all 8255 ports as O/P
MOVB AL, 80
OUTB DX, AL
RPT1: MOVW CX, 0FF ;Set up count
MOVB AL, 00 ;start from 0
UP: INCB AL ;Increment data for +ve
MOVW DX, 0FFE0 ;going slope and output
OUTB DX, AL ;at port A and port B
MOVW DX, 0FFE2
OUTB DX, AL
LOOP UP
MOVW CX, 0FF ;set up count start from FF
MOVW AX, CX
DOWN: DECB AL ;decrement data for -ve
MOVW DX, 0FFE0 ;going slope and output
OUTB DX, AL ;at port A and port B
MOVW DX, 0FFE2
OUTB DX, AL
LOOP DOWN
JMP RPT1

15.b AIM: To generate square wave by interfacing DAC

MOVW AX, 0000 ;Initialize segment registers


MOVW CS, AX
MOVW ES, AX
MOVW DX, 0FFE6 ;Initialize all 8255 ports as O/P
MOVB AL, 80
OUTB DX, AL
RPT1: MOVB AL, 0FF ; out put FF at ports
MOVW DX, 0FFE0
OUTB DX, AL
MOVW DX, 0FFE2
OUTB DX, AL
MOVW CX,1700 ;Delay
DLY1 LOOP DLY1
MOVB AL, 00 ;output 0 at ports
MOVW DX, 0FFE0
OUTB DX, AL
MOVW DX, 0FFE2
OUTB DX, AL
MOVW CX,1700 ;Delay
DLY2 LOOP DLY2
JMP RPT1 ;Repeat continuosly

You might also like