89
SREE SASTHA INSTITUTE OF ENGINEERING AND TECHNOLOGY CHEMBARAMBAKKAM - 602 103 DEPARTMENT OF ELECTRONICS AND COMMUNICATION ENGINEERING LAB MANUAL EC 2308 – MICROPROCESSOR AND MICROCONTROLLER LAB V SEMSTER 2010-2011 Under the Management of A.M. Kanniappa Mudaliar & A.M.K. Jambulinga Mudaliar Educational Trust # 122, Gengu Reddy Road, Near Hotel Dasaprakash , Opp. Blue Diamond Hotel, Egmore, Chennai - 600 008. Phone Phone Trust Off. : 28364541 College Off. : 26810122 28364542 26810114

EC2308 Lab Manual

Embed Size (px)

Citation preview

Page 1: EC2308 Lab Manual

SREE SASTHA INSTITUTE OF ENGINEERING AND TECHNOLOGY

CHEMBARAMBAKKAM - 602 103

DEPARTMENT OF ELECTRONICS AND COMMUNICATION ENGINEERING

LAB MANUAL

EC 2308 – MICROPROCESSOR AND MICROCONTROLLER LAB

V SEMSTER 2010-2011

Under the Management of

A.M. Kanniappa Mudaliar & A.M.K. Jambulinga Mudaliar

Educational Trust # 122, Gengu Reddy Road, Near Hotel Dasaprakash ,

Opp. Blue Diamond Hotel, Egmore, Chennai - 600 008.

Phone Phone Trust Off. : 28364541 College Off. : 26810122 28364542 26810114

Page 2: EC2308 Lab Manual

EC 2308 – MICROPROCESSOR AND MICROCONTROLLER LAB DEPT OF ECE

2

LIST OF EXPERIMENTS EC2308 MICROPROCESSOR AND MICROCONTROLLER LAB

1. Programs for 16 bit Arithmetic operations (Using 8086).

2. Programs for Sorting and Searching (Using 8086).

3. Programs for String manipulation operations (Using 8086).

4. Programs for Digital clock and Stop watch (Using 8086).

5. Interfacing ADC and DAC.

6. Parallel Communication between two MP Kits using Mode 1 and Mode 2 of 8255.

7. Interfacing and Programming 8279, 8259, and 8253.

8. Serial Communication between two MP Kits using 8251.

9. Interfacing and Programming of Stepper Motor and DC Motor Speed control.

10. Programming using Arithmetic, Logical and Bit Manipulation instructions of 8051

microcontroller.

11. Programming and verifying Timer, Interrupts and UART operations in 8051

microcontroller.

12. Communication between 8051 Microcontroller kit and PC.

Page 3: EC2308 Lab Manual

EC 2308 – MICROPROCESSOR AND MICROCONTROLLER LAB DEPT OF ECE

3

INDEX

S.No. Name of the Experiment Page No.

8086 PROGRAMS 1. ADDITION & SUBTRACTION 2 2. MULTIPLICATION & DIVISION 7 3. ASCENDING & DESCENDING 12 4. LARGEST & SMALLEST 16 5. COPYING A STRING 19 6. SEARCHING A STRING 22 7. FIND & REPLACE 24

INTERFACING EXPERIMENTS 8. INTERFACING WITH ADC 26 9. INTERFACING WITH DAC 28 10. STEPPER MOTOR INTERFACE 32 11. DC MOTOR INTERFACE 34 12. INTERFACING WITH KEYBOARD/DISPLAY CONTROLLER 37 13. INTERFACING WITH PROGRAMMABLE TIMER 40 14. INTERFACING WITH 8251 44 15. INTERFACING WITH PPI 8255 47 16. INTERFACING WITH INTERRUPT CONTROLLER

8051 PROGRAMS 17. 8 BIT ADDITION 18. 8 BIT SUBTRACTION 19. 8 BIT MULTIPLICATION 20. 8 BIT DIVISION 21. LOGICAL AND BIT MANIPULATION 22. TIMER IN 8051 23. SERIAL COMMUNICATION USING 8051 24. DATA COMMUNICATIONS BETWEEN PC AND 8051 25. DIGITAL CLOCK DISPLAY 26. STOP WATCH

Page 4: EC2308 Lab Manual

EC 2308 – MICROPROCESSOR AND MICROCONTROLLER LAB DEPT OF ECE

4

EXPT NO: 8086 PROGRAMMING DATE:

ADDITION & SUBTRACTION

AIM: To write an Assembly Language Program (ALP) for performing the addition and subtraction operation of two byte numbers. APPARATUS REQUIRED: SL.N

O ITEM SPECIFICATION QUANTITY

1. Microprocessor kit 8086 kit 1 2. Power Supply +5 V dc 1

PROBLEM STATEMENT: Write an ALP in 8086 to add and subtract two byte numbers stored in the memory location 1000H to 1003H and store the result in the memory location 1004H to 1005H.Also provide an instruction in the above program to consider the carry also and store the carry in the memory location 1006H. ALGORITHM: (i) 16-bit addition h) Initialize the MSBs of sum to 0 i) Get the first number. j) Add the second number to the first number. k) If there is any carry, increment MSBs of sum by 1. l) Store LSBs of sum. m) Store MSBs of sum. (ii) 16-bit subtraction f) Initialize the MSBs of difference to 0 g) Get the first number h) Subtract the second number from the first number. i) If there is any borrow, increment MSBs of difference by 1. j) Store LSBs of difference k) Store MSBs of difference.

Page 5: EC2308 Lab Manual

EC 2308 – MICROPROCESSOR AND MICROCONTROLLER LAB DEPT OF ECE

5

FLOWCHART ADDITION SUBTRACTION

START

GET FIRST OPERAND TO A

SUBTRACT SECOND OPERAND

FROM MEMORY

STORE THE DIFFERENCE

STOP

SET UP COUNTER (CARRY)

IS THERE ANY CY

COUNTER = COUNTER + 1

STORE THE CARRY

NO

YES

START

SET UP COUNTER (CY)

GET SECOND OPERAND TO A

A = A + B

STORE THE SUM

IS THERE ANY CARRY

GET FIRST OPERAND

COUNTER = COUNTER + 1

STORE THE CARRY

STOP

YES

NO

Page 6: EC2308 Lab Manual

EC 2308 – MICROPROCESSOR AND MICROCONTROLLER LAB DEPT OF ECE

6

ADDITION PROGRAM COMMENTS

MOV CX, 0000H Initialize counter CX

MOV AX,[1200] Get the first data in AX reg

MOV BX, [1202] Get the second data in BX reg

ADD AX,BX Add the contents of both the regs AX & BX

JNC L1 Check for carry

INC CX If carry exists, increment the CX

L1 : MOV [1206],CX Store the carry

MOV [1204], AX Store the sum

HLT Stop the program

SUBTRACTION

PROGRAM COMMENTS

MOV CX, 0000H Initialize counter CX

MOV AX,[1200] Get the first data in AX reg

MOV BX, [1202] Get the second data in BX reg

SUB AX,BX Subtract the contents of BX from AX

JNC L1 Check for borrow

INC CX If borrow exists, increment the CX

L1 : MOV [1206],CX Store the borrow

MOV [1204], AX Store the difference

HLT Stop the program

Page 7: EC2308 Lab Manual

EC 2308 – MICROPROCESSOR AND MICROCONTROLLER LAB DEPT OF ECE

7

PROGRAM USING TASM (ADDITION): data_here segment firstno dw 0202h ; first No. secondno dw 0202h ; second No. sum dw 2 dup(0) ; store sum here data_here ends code_here segment assume cs:code_here,ds:data_here start: mov ax,data_here ; Initialize data segment mov ds,ax mov ax,firstno ; Get first No. mov dx,0000h ; Initialize dx for carry. add ax,secondno ; Add second to it. jnc go inc dx go: mov sum,ax ; store the sum & carry. mov sum+2,dx int 3 code_here ends end start PROGRAM USING TASM (SUBTRACTION): data_here segment minuend dw 2222h ; Minuend subtrahend dw 1111h ; Subtrahend result dw 2 dup(0) ; Store result here. data_here ends code_here segment assume cs:code_here,ds:data_here start: mov ax,data_here ; Initialize data segment. mov ds,ax mov ax,minuend ; Get minuend & store in Acc. mov dx,subtrahend ; Get subtrahend & store in dx. mov cx,0000h ; Initialize cx for carry cmp ax,dx ; compare minuend & subtrahend if jnc ahead minuend smaller than subtrahend ,

mov bx,dx interchange minuend & subtrahend. mov dx,ax

mov ax,bx mov cx,0001h ; Increment carry by one.

ahead: sub ax,dx ; subtract dx from ax mov result,ax ; store the result & carry.

mov result+2,cx int 3 code_here ends end start

Page 8: EC2308 Lab Manual

EC 2308 – MICROPROCESSOR AND MICROCONTROLLER LAB DEPT OF ECE

8

RESULT:.

ADDITION

MEMORY

DATA

SUBTRACTION

MEMORY

DATA

MANUAL CALCULATION

Thus addition & subtraction of two byte numbers are performed and the result is stored.

Page 9: EC2308 Lab Manual

EC 2308 – MICROPROCESSOR AND MICROCONTROLLER LAB DEPT OF ECE

9

EXPT NO: 8086 PROGRAMMING DATE:

MULTIPLICATION & DIVISION

AIM: To write an Assembly Language Program (ALP) for performing the

multiplication and division operation of 16-bit numbers . APPARATUS REQUIRED: SL.N

O ITEM SPECIFICATION QUANTITY

1. Microprocessor kit 8086 1 2. Power Supply +5 V dc 1

PROBLEM STATEMENT: Write an ALP in 8086 MP to multiply two 16-bit binary numbers and store the result in the memory location. Write instructions for dividing the data and store the result. ALGORITHM: (i) Multiplication of 16-bit numbers: a) Get the multiplier. b) Get the multiplicand c) Initialize the product to 0. d) Product = product + multiplicand e) Decrement the multiplier by 1 f) If multiplicand is not equal to 0, repeat from step (d) otherwise store the

product. (ii) Division of 16-bit numbers. a) Get the dividend b) Get the divisor c) Initialize the quotient to 0. d) Dividend = dividend – divisor e) If the divisor is greater, store the quotient. Go to step g. f) If dividend is greater, quotient = quotient + 1. Repeat from step (d) g) Store the dividend value as remainder.

Page 10: EC2308 Lab Manual

EC 2308 – MICROPROCESSOR AND MICROCONTROLLER LAB DEPT OF ECE

10

FLOWCHART MULTIPLICATION DIVISION

Start

Load Divisor & Dividend

QUOTIENT = 0

DIVIDEND = DIVIDEND - DIVISOR

QUOTIENT = QUOTIENT + 1

IS DIVIDEND < DIVISIOR?

STORE QUOTIENT STORE REMAINDER = DIVIDEND NOW

YES

NO

STOP

YES

Start

Get Multiplier & Multiplicand

REGISTER=00

REGISTER = REGISTER + MULTIPLICAND

MULTIPLIER IS

=0?

NO

STOP

STORE THE RESULT

Multiplier=MULTIPLIER – 1

Page 11: EC2308 Lab Manual

EC 2308 – MICROPROCESSOR AND MICROCONTROLLER LAB DEPT OF ECE

11

MULTIPLICATION PROGRAM COMMENTS

MOV AX,[1200] Get the first data

MOV BX, [1202] Get the second data

MUL BX Multiply both

MOV [1206],AX

Store the lower order product

MOV [1208],DX

Store the higher order product

HLT

Stop the program

DIVISION

PROGRAM COMMENTS

MOV AX,[1200] Get the first data (Dividend)

MOV DX, [1202] Initialize DX register with 0000h

MOV BX, [1204] Get the second data(Divisor)

DIV BX Divide the dividend by divisor

MOV [1206],AX

Store the Quotient

MOV AX,DX

Move the remainder to AX

MOV [1208],AX Store the content of AX to memory location.

HLT

Stop the program

Page 12: EC2308 Lab Manual

EC 2308 – MICROPROCESSOR AND MICROCONTROLLER LAB DEPT OF ECE

12

PROGRAM USING TASM (MULTIPLICATION): data_here segment multiplicand dw 0202h ; Multiplicand multiplier dw 0202h ; Multiplier

product dw 2 dup(0) ; store product here. data_here ends code_here segment

assume cs:code_here,ds:data_here start: mov ax,data_here ; Initialize data segment.

mov ds,ax mov ax,multiplicand ; Get multiplicand

mul multiplier ; multiply multiplier with it. mov product,ax ; Store the result.

mov product+2,dx int 3 code_here ends

end start PROGRAM USING TASM (DIVISION):

data_here segment dividend dw 2222h ; Dividend

divisor dw 1111h ; Divisor result dw 2 dup(0) ; Store result here.

data_here ends code_here segment

assume cs:code_here,ds:data_here start: mov ax,data_here ; Initialize data segment.

mov ds,ax mov ax,dividend ; Get dividend

div divisor ; Divide it by divisor. mov result,ax ; Store result.

mov result+2,dx int 3

code_here ends end start

Page 13: EC2308 Lab Manual

EC 2308 – MICROPROCESSOR AND MICROCONTROLLER LAB DEPT OF ECE

13

RESULT:. MULTIPLICATION

MEMORY

DATA

DIVISON

MEMORY

DATA

MANUAL CALCULATION

Thus multiplication & division of two byte numbers are performed and the result is stored.

Page 14: EC2308 Lab Manual

EC 2308 – MICROPROCESSOR AND MICROCONTROLLER LAB DEPT OF ECE

14

EXPT NO: 8086 PROGRAMMING DATE:

ASCENDING & DESCENDING

AIM:

To write an Assembly Language Program (ALP) to sort a given array in ascending and descending order. APPARATUS REQUIRED: SL.N

O ITEM SPECIFICATION QUANTITY

1. Microprocessor kit 8086 1 2. Power Supply +5 V dc 1

PROBLEM STATEMENT: An array of length 10 is given from the location. Sort it into descending and ascending order and store the result.

ALGORITHM: (i) Sorting in ascending order:

a. Load the array count in two registers C1 and C2. b. Get the first two numbers. c. Compare the numbers and exchange if necessary so that the two numbers are

in ascending order. d. Decrement C2. e. Get the third number from the array and repeat the process until C2 is 0. f. Decrement C1 and repeat the process until C1 is 0.

(ii) Sorting in descending order:

a. Load the array count in two registers C1 and C2. b. Get the first two numbers. c. Compare the numbers and exchange if necessary so that the two numbers are

in descending order. d. Decrement C2. e. Get the third number from the array and repeat the process until C2 is 0. f. Decrement C1 and repeat the process until C1 is 0.

Page 15: EC2308 Lab Manual

EC 2308 – MICROPROCESSOR AND MICROCONTROLLER LAB DEPT OF ECE

15

FLOWCHART ASCENDING ORDER DESCENDING ORDER

NO

START

INITIALIZE POINTER

COUNT = COUNT – 1

IS POINTER POINTER

+ 1

TEMP = POINTER POINTER = POINTER + 1

POINTER + 1 = TEMP

POINTER = POINTER +1 COUNT = COUNT-1

IS

COUNT = 0

IS FLAG

= 0

STOP

YES

YES

NO

NO

YES

START

INITIALIZE POINTER

COUNT = COUNT – 1

IS POINTER POINTER

TEMP = POINTER POINTER = POINTER + 1

POINTER + 1 = TEMP

POINTER = POINTER +1 COUNT = COUNT + 1

IS COUNT

= 0

IS FLAG

= 0

STOP

YES

NO

NO

YES

YES

Page 16: EC2308 Lab Manual

EC 2308 – MICROPROCESSOR AND MICROCONTROLLER LAB DEPT OF ECE

16

ASCENDING

PROGRAM COMMENTS MOV CL,COUNT Get the count in CL L3: MOV DL,COUNT Get the count in DL DEC DL Number of comparisons in DL MOV SI,1200 Initialize memory location L2: MOV AL,[SI] Get the first data in AL INC SI Go to next memory location MOV BL,[SI] Get the second data in BL CMP AL,BL Compare two data’s JC /JNC L1 If AL < BL go to L1 (Ascending/Descending) DEC SI Else, Decrement the memory location MOV [SI],BL Store the smallest data INC SI Get the next data AL MOV [SI],AL Get the next data AL L1: DEC DL Decrement the no of comparisons JNZ L2 Jump to loop2 DEC CL Decrement the count JNZ L3 Jump to L3, if the count is not reached zero HLT Stop

PROGRAM USING TASM(ASCENDING/DESCENDING) Dataseg segment

series db 12h,23h,14h,25h,18h ; datas to be sorted datasegends codeseg segment

assume cs:codeseg,ds:dataseg start: mov ax,dataseg ; initialize data segment.

mov ds,ax mov cl,04h loop2: mov bl,04h

lea si,series ; move the datas to source index loop1: mov al,[si]

inc si cmp al,[si] ; Compare first data with second jc loop data. If second data smaller than mov dl,[si] first one, interchange the datas

mov [si],al dec si

mov [si],dl

Page 17: EC2308 Lab Manual

EC 2308 – MICROPROCESSOR AND MICROCONTROLLER LAB DEPT OF ECE

17

inc si loop: dec bl

jnz loop1 ; Repeat this comparison with other dec cl other datas in series.

jnz loop2 int 3 codeseg ends

end start RESULT:.

ASCENDING

MEMORY

DATA

DESCENDING

MEMORY

DATA

Thus given array of numbers are sorted in ascending & descending order.

Page 18: EC2308 Lab Manual

EC 2308 – MICROPROCESSOR AND MICROCONTROLLER LAB DEPT OF ECE

18

EXPT NO: 8086 PROGRAMMING DATE:

LARGEST& SMALLEST

AIM:

To write an Assembly Language Program (ALP) to find the largest and smallest number in a given array. APPARATUS REQUIRED: SL.NO ITEM SPECIFICATION QUANTITY

1. Microprocessor kit 8086 1 2. Power Supply +5 V dc 1

PROBLEM STATEMENT: An array of length 10 is given from the location. Find the largest and smallest number and store the result. ALGORITHM: (i) Finding largest number:

a. Load the array count in a register C1. b. Get the first two numbers. c. Compare the numbers and exchange if the number is small. d. Get the third number from the array and repeat the process until C1 is 0. (ii) Finding smallest number:

e. Load the array count in a register C1. f. Get the first two numbers. g. Compare the numbers and exchange if the number is large. h. Get the third number from the array and repeat the process until C1 is 0.

Page 19: EC2308 Lab Manual

EC 2308 – MICROPROCESSOR AND MICROCONTROLLER LAB DEPT OF ECE

19

FLOWCHART LARGEST NUMBER IN AN ARRAY SMALLEST NUMBER IN AN ARRAY

MAX = POINTER

IS MAX POINTER?

INITIALIZE COUNT POINTER MAX = 0

PONITER = POINTER + 1

COUNT = COUNT-1

STORE MAXIMUM

IS COUNT = 0?

YES

NO

YES

NO

STOP

START START

INITIALIZE COUNT POINTER MIN = 0

PONITER = POINTER + 1

IS MIN POINTER

MIN = POINTER

COUNT = COUNT-1

IS COUNT = 0?

STORE MINIIMUM

STOP

YES

NO

NO

YES

Page 20: EC2308 Lab Manual

EC 2308 – MICROPROCESSOR AND MICROCONTROLLER LAB DEPT OF ECE

20

LARGEST

PROGRAM COMMENTS

MOV SI,1200H Initialize array size MOV CL,[SI] Initialize the count INC SI Go to next memory location MOV AL,[SI] Move the first data in AL DEC CL Reduce the count L2 : INC SI Move the SI pointer to next data CMP AL,[SI] Compare two data’s JNC L1/JC L1 If AL > [SI] then go to L1 ( Largest/Smallest) MOV AL,[SI] Else move the large number to AL L1 : DEC CL Decrement the count JNZ L2 If count is not zero go to L2 MOV DI,1300H Initialize DI with 1300H MOV [DI],AL store the biggest number in 1300 location HLT Stop RESULT:.

LARGEST

MEMORY

DATA

SMALLEST

MEMORY

DATA

Thus largest and smallest number is found in a given array.

Page 21: EC2308 Lab Manual

EC 2308 – MICROPROCESSOR AND MICROCONTROLLER LAB DEPT OF ECE

21

EXPT NO: 8086 PROGRAMMING DATE: COPYING A STRING

AIM: To move a string of length FF from source to destination. ALGORITHM:

a. Initialize the data segment .(DS) b. Initialize the extra data segment .(ES) c. Initialize the start of string in the DS. (SI) d. Initialize the start of string in the ES. (DI) e. Move the length of the string (FF) in CX register. f. Move the byte from DS TO ES, till CX=0.

FLOWCHART:

NO

START

CX=length of string, DF=0.

Move a byte from source string (DS) to destination string (ES)

Decrement CX

Check for ZF=1

STOP

Initialize DS, ES, SI, DI

Page 22: EC2308 Lab Manual

EC 2308 – MICROPROCESSOR AND MICROCONTROLLER LAB DEPT OF ECE

22

COPYING A STRING PROGRAM COMMENTS

MOV SI,1200H Initialize destination address

MOV DI,1300H Initialize starting address

MOV CX,0006H Initialize array size

CLD Clear direction flag

REP MOVSB Copy the contents of source into destination until

count reaches zero HLT Stop

PROGRAM USING TASM data segment test_mess db 23h,45h,67h,87h ; data to move db 100 dup(?) ; stationary block of data

count equ 04h ; number of data to move new_loc db 4 dup(0) ; data destination data ends code segment assume cs:code,ds:data,es:data start: mov ax,data ; initialize data segment register mov ds,ax mov es,ax ; initialize extra segment register lea si,test_mess ; Point si at source data lea di,new_loc ; Point di at destination data cld ; clear direction flag so pointers auto increment after each data element is moved rep movsb code ends end start

Page 23: EC2308 Lab Manual

EC 2308 – MICROPROCESSOR AND MICROCONTROLLER LAB DEPT OF ECE

23

RESULT:

INPUT

MEMORY

DATA

OUTPUT

MEMORY

DATA

Thus a string of a particular length is moved from source segment to destination segment.

Page 24: EC2308 Lab Manual

EC 2308 – MICROPROCESSOR AND MICROCONTROLLER LAB DEPT OF ECE

24

EXPT NO: 8086 PROGRAMMING DATE:

SEARCHING A STRING AIM: To scan for a given byte in the string and find the relative address of the byte from the starting location of the string. ALGORITHM:

a. Initialize the extra segment .(ES) b. Initialize the start of string in the ES. (DI) c. Move the number of elements in the string in CX register. d. Move the byte to be searched in the AL register. e. Scan for the byte in ES. If the byte is found ZF=0, move the address pointed by ES:DI

to BX.

NO

START

CX=length of the string, DF=0.

Scan for a particular character specified in AL Register.

Check for ZF=1

STOP

Initialize DS, ES, SI, DI

Move DI to BX

Page 25: EC2308 Lab Manual

EC 2308 – MICROPROCESSOR AND MICROCONTROLLER LAB DEPT OF ECE

25

SEARCHING FOR A CHARACTER IN THE STRING PROGRAM COMMENTS

MOV DI,1300H Initialize destination address

MOV SI, 1400H

Initialize starting address

MOV CX, 0006H Initialize array size

MOV BL,00H

Initialize the relative address

CLD Clear direction flag

MOV AL, 08H Store the string to be searched

LOOP2: NOP

Delay

SCASB Scan until the string is found

JNZ LOOP1

Jump if the string is found

MOV [SI],BL Move the relative address to SI.

INC SI

Increment the memory pointer

LOOP1: INC BL Increment the relative address

LOOP LOOP2

Repeat until the count reaches zero

HLT Stop

RESULT: INPUT

MEMORY

DATA

OUTPUT MEMORY LOCATION DATA

Thus a given byte or word in a string of a particular length in the extra segment(destination) is found .

Page 26: EC2308 Lab Manual

EC 2308 – MICROPROCESSOR AND MICROCONTROLLER LAB DEPT OF ECE

26

EXPT NO: 8086 PROGRAMMING DATE:

FIND AND REPLACE

AIM: To find a character in the string and replace it with another character. ALGORITHM:

a. Initialize the extra segment .(E S) b. Initialize the start of string in the ES. (DI) c. Move the number of elements in the string in CX register. d. Move the byte to be searched in the AL register. e. Store the ASCII code of the character that has to replace the scanned byte in BL

register. f. Scan for the byte in ES. If the byte is not found, ZF≠1 and repeat scanning. g. If the byte is found, ZF=1.Move the content of BL register to ES:DI.

NO YES

¿

START

CX=length of the string in ES, DF=0. DF=0.

Scan for a particular character specified in AL

Check for ZF=1

STOP

Initialize DS, ES, SI, DI

Move the content of BL to ES: DI

Page 27: EC2308 Lab Manual

EC 2308 – MICROPROCESSOR AND MICROCONTROLLER LAB DEPT OF ECE

27

FIND AND REPLACE A CHARACTER IN THE STRING PROGRAM COMMENTS

MOV DI,1300H Initialize starting address

MOV CX, 0006H Initialize array size

CLD Clear direction flag

MOV AL, 08H Store the string to be searched

MOV BH,30H Store the string to be replaced

BACK:SCASB Scan until the string is found

JNZ LOOP1 Is the string found

DEC DI Decrement the destination address

MOV [DI],BL Replace the string

LOOP1:LOOP BACK Continue until count zero.

HLT Stop

RESULT:

INPUT

MEMORY

DATA

OUTPUT

MEMORY

DATA

Thus a given byte or word in a string of a particular length in the extra segment (destination) is found and is replaced with another character.

Page 28: EC2308 Lab Manual

EC 2308 – MICROPROCESSOR AND MICROCONTROLLER LAB DEPT OF ECE

28

EXPT NO: 8086 INTERFACING DATE: INTERFACING ANALOG TO DIGITAL CONVERTER

AIM: To write an assembly language program to convert an analog signal into a digital signal using an ADC interfacing. APPARATUS REQUIRED: SL.NO ITEM SPECIFICATION QUANTITY

1. Microprocessor kit 8086 1 2. Power Supply +5 V dc,+12 V dc 1 3. ADC Interface board - 1

PROBLEM STATEMENT: The program is executed for various values of analog voltage which are set with the help of a potentiometer. The LED display is verified with the digital value that is stored in a memory location. THEORY: An ADC usually has two additional control lines: the SOC input to tell the ADC when to start the conversion and the EOC output to announce when the conversion is complete. The following program initiates the conversion process, checks the EOC pin of ADC 0809 as to whether the conversion is over and then inputs the data to the processor. It also instructs the processor to store the converted digital data at RAM location. ALGORITHM:

(i) Select the channel and latch the address. (ii) Send the start conversion pulse. (iii) Read EOC signal. (iv) If EOC = 1 continue else go to step (iii) (v) Read the digital output. (vi) Store it in a memory location.

FLOW CHART:

START

SELECT THE CHANNEL AND LATCH

SEND THE START CONVERSION PULSE

READ THE DIGITALOUTPUT

STORE THE DIGITAL VALUE IN THE MEMORY LOCATION SPECIFIED

IS EOC = 1?

STOP

NO

YES

Page 29: EC2308 Lab Manual

EC 2308 – MICROPROCESSOR AND MICROCONTROLLER LAB DEPT OF ECE

29

PROGRAM TABLE

PROGRAM COMMENTS

MOV AL,00 Load accumulator with value for ALE high

OUT 0C8H,AL Send through output port

MOV AL,08 Load accumulator with value for ALE low

OUT 0C8H,AL Send through output port

MOV AL,01 Store the value to make SOC high in the accumulator

OUT 0D0H,AL Send through output port

MOV AL,00 Introduce delay MOV AL,00

MOV AL,00

MOV AL,00 Store the value to make SOC low the accumulator

OUT 0D0H,AL Send through output port

L1 : IN AL, 0D8H Read the EOC signal from port & check for end of conversion

AND AL,01

CMP AL,01

JNZ L1 If the conversion is not yet completed, read EOC signal from port again

IN AL,0C0H Read data from port

MOV BX,1100 Initialize the memory location to store data

MOV [BX],AL Store the data

HLT Stop RESULT:

ANALOG

VOLTAGE

DIGITAL DATA ON LED

DISPLAY

HEX CODE IN MEMORY

LOCATION

Thus the ADC was interfaced with 8086 and the given analog inputs were converted

into its digital equivalent.

Page 30: EC2308 Lab Manual

EC 2308 – MICROPROCESSOR AND MICROCONTROLLER LAB DEPT OF ECE

30

EXPT NO: 8086 INTERFACING DATE: INTERFACING DIGITAL – TO – ANALOG CONVERTER

AIM : 1. To write an assembly language program for digital to analog conversion 2. To convert digital inputs into analog outputs & To generate different waveforms

APPARATUS REQUIRED: SL.NO ITEM SPECIFICATION QUANTITY

1. Microprocessor kit 8086 Vi Microsystems 1 2. Power Supply +5 V, dc,+12 V dc 1 3. DAC Interface board - 1

PROBLEM STATEMENT: The program is executed for various digital values and equivalent analog voltages are

measured and also the waveforms are measured at the output ports using CRO. THEORY: Since DAC 0800 is an 8 bit DAC and the output voltage variation is between –5v and +5v. The output voltage varies in steps of 10/256 = 0.04 (approximately). The digital data input and the corresponding output voltages are presented in the table. The basic idea behind the generation of waveforms is the continuous generation of analog output of DAC. With 00 (Hex) as input to DAC2 the analog output is –5v. Similarly with FF H as input, the output is +5v. Outputting digital data 00 and FF at regular intervals, to DAC2, results in a square wave of amplitude 5v.Output digital data from 00 to FF in constant steps of 01 to DAC2. Repeat this sequence again and again. As a result a saw-tooth wave will be generated at DAC2 output. Output digital data from 00 to FF in constant steps of 01 to DAC2. Output digital data from FF to 00 in constant steps of 01 to DAC2. Repeat this sequence again and again. As a result a triangular wave will be generated at DAC2 output. ALGORITHM:

Measurement of analog voltage: (i) Send the digital value of DAC. (ii) Read the corresponding analog value of its output. Waveform generation: Square Waveform: (i) Send low value (00) to the DAC. (ii) Introduce suitable delay. (iii) Send high value to DAC. (iv) Introduce delay. (v) Repeat the above procedure. Saw-tooth waveform: (i) Load low value (00) to accumulator. (ii) Send this value to DAC. (iii) Increment the accumulator. (iv) Repeat step (ii) and (iii) until accumulator value reaches FF. (v) Repeat the above procedure from step 1. Triangular waveform: (i) Load the low value (00) in accumulator. (ii) Send this accumulator content to DAC. (iii) Increment the accumulator. (iv) Repeat step 2 and 3 until the accumulator reaches FF, decrement the

accumulator and send the accumulator contents to DAC. (v) Decrementing and sending the accumulator contents to DAC. (vi) The above procedure is repeated from step (i)

Page 31: EC2308 Lab Manual

EC 2308 – MICROPROCESSOR AND MICROCONTROLLER LAB DEPT OF ECE

31

FLOWCHART: MEASUREMENT OF ANALOG VOLTAGE SQUARE WAVE FORM TRIANGULAR WAVEFORM SAWTOOTH WAVEFORM

START

SEND THE DIGITALVALUE TO ACCUMULATOR

TRANSFER THE ACCUMULATOR CONTENTS TO DAC

READ THE CORRESPONDING ANALOG VALUE

STOP

INTIALISE THE ACCUMULATOR SEND ACC CONTENT TO DAC

LOAD THE ACC WITH MAX VALUE SEND ACC CONTENT

START

DELAY

DELAY

START

INITIALIZE ACCUMULATOR

SEND ACCUMULATOR CONTENT TO DAC

INCREMENT ACCUMULATOR CONTENT

IS ACC FF

YES NO NO

YES

START

INITIALIZE ACCUMULATOR

SEND ACCUMULATOR CONTENT TO DAC

INCREMENT ACCUMULATOR CONTENT

DECREMENT ACCUMULATOR CONTENT

SEND ACCUMULATOR CONTENT TO DAC

IS ACC FF

IS ACC 00

YES NO

Page 32: EC2308 Lab Manual

EC 2308 – MICROPROCESSOR AND MICROCONTROLLER LAB DEPT OF ECE

32

MEASUREMENT OF ANALOG VOLTAGE:

PROGRAM COMMENTS

MOV AL,7FH Load digital value 00 in accumulator OUT C0,AL Send through output port HLT Stop

DIGITAL DATA ANALOG VOLTAGE

PROGRAM TABLE: Square Wave

PROGRAM COMMENTS

L2 : MOV AL,00H Load 00 in accumulator OUT C0,AL Send through output port CALL L1 Give a delay MOV AL,FFH Load FF in accumulator OUT C0,AL Send through output port CALL L1 Give a delay JMP L2 Go to starting location L1 : MOV CX,05FFH Load count value in CX register L3 : LOOP L3 Decrement until it reaches zero RET Return to main program

PROGRAM TABLE: Saw tooth Wave

PROGRAM COMMENTS

L2 : MOV AL,00H Load 00 in accumulator L1 : OUT C0,AL Send through output port INC AL Increment contents of accumulator JNZ L1 Send through output port until it reaches FF JMP L2 Go to starting location

Page 33: EC2308 Lab Manual

EC 2308 – MICROPROCESSOR AND MICROCONTROLLER LAB DEPT OF ECE

33

PROGRAM TABLE: Triangular Wave

PROGRAM COMMENTS

L3 : MOV AL,00H Load 00 in accumulator L1 : OUT C0,AL Send through output port INC AL Increment contents of accumulator JNZ L1 Send through output port until it reaches FF MOV AL,0FFH Load FF in accumulator L2 : OUT C0,AL Send through output port DEC AL Decrement contents of accumulator JNZ L2 Send through output port until it reaches 00 JMP L3 Go to starting location RESULT: WAVEFORM GENERATION:

WAVEFORMS AMPLITUDE TIMEPERIOD

Square Waveform

Saw-tooth waveform

Triangular waveform

MODEL GRAPH: Square Waveform Saw-tooth waveform Triangular waveform Thus the DAC was interfaced with 8085 and different waveforms have been generated.

Page 34: EC2308 Lab Manual

EC 2308 – MICROPROCESSOR AND MICROCONTROLLER LAB DEPT OF ECE

34

EXP.NO: STEPPER MOTOR INTERFACING DATE: AIM: To write an assembly language program in 8086 to rotate the motor at different speeds.

APPARATUS REQUIRED: SL.NO ITEM SPECIFICATION QUANTITY

1. Microprocessor kit 8086 1 2. Power Supply +5 V, dc,+12 V dc 1 3. Stepper Motor Interface board - 1 4. Stepper Motor - 1

PROBLEM STATEMENT:

Write a code for achieving a specific angle of rotation in a given time and particular number of rotations in a specific time.

THEORY:

A motor in which the rotor is able to assume only discrete stationary angular position is a stepper motor. The rotary motion occurs in a stepwise manner from one equilibrium position to the next.Two-phase scheme: Any two adjacent stator windings are energized. There are two magnetic fields active in quadrature and none of the rotor pole faces can be in direct alignment with the stator poles. A partial but symmetric alignment of the rotor poles is of course possible.

ALGORITHM: For running stepper motor clockwise and anticlockwise directions

(i) Get the first data from the lookup table. (ii) Initialize the counter and move data into accumulator. (iii) Drive the stepper motor circuitry and introduce delay (iv) Decrement the counter is not zero repeat from step(iii) (v) Repeat the above procedure both for backward and forward directions.

SWITCHING SEQUENCE OF STEPPER MOTOR: MEMORY LOCATION

A1 A2 B1 B2 HEX CODE

4500 1 0 0 0 09 H 4501 0 1 0 1 05 H 4502 0 1 1 0 06 H 4503 1 0 1 0 0A H

Page 35: EC2308 Lab Manual

EC 2308 – MICROPROCESSOR AND MICROCONTROLLER LAB DEPT OF ECE

35

FLOWCHART:

PROGRAM TABLE PROGRAM COMMENTS START : MOV DI, 1200H Initialize memory location to store the array of

number MOV CX, 0004H Initialize array size LOOP 1 : MOV AL, [DI] Copy the first data in AL OUT 0C0, AL Send it through port address MOV DX, 1010H

Introduce delay L1 : DEC DX JNZ L1 INC DI Go to next memory location LOOP LOOP1 Loop until all the data’s have been sent JMP START Go to start location for continuous rotation 1200 : 09,05,06,0A Array of data’s RESULT: Thus the assembly language program for rotating stepper motor in both clockwise and anticlockwise directions is written and verified.

START

INTIALIZE COUNTER FOR LOOK UP TABLE

GET THE FIRST DATA FROM THE ACCUMULATOR

MOVE DATA INTO THE ACCUMULATOR

DRIVE THE MOTOR CIRCUITARY

DECREMENT COUNTER

GET THE DATA FROM LOOK UP TABLE

IS B = 0?

DELAY

YES

NO

Page 36: EC2308 Lab Manual

EC 2308 – MICROPROCESSOR AND MICROCONTROLLER LAB DEPT OF ECE

36

EXP.NO: DC MOTOR INTERFACING DATE: AIM: To write an assembly language program in 8086 to control the speed of the motor.

APPARATUS REQUIRED: SL.NO ITEM SPECIFICATION QUANTITY

1. Microprocessor kit 8086 1 2. Power Supply +5 V, dc,+12 V dc 1 3. DC Motor Interface board - 1 4. DC Motor - 1

PROBLEM STATEMENT:

Write a code for controlling the speed of the motor and measure the speed.

THEORY: A motor in which the rotor is able to assume only discrete stationary angular position is a stepper motor. The rotary motion occurs in a stepwise manner from one equilibrium position to the next. Two-phase scheme: Any two adjacent stator windings are energized. There are two magnetic fields active in quadrature and none of the rotor pole faces can be in direct alignment with the stator poles. A partial but symmetric alignment of the rotor poles is of course possible. ALGORITHM: FLOWCHART:

Page 37: EC2308 Lab Manual

EC 2308 – MICROPROCESSOR AND MICROCONTROLLER LAB DEPT OF ECE

37

Page 38: EC2308 Lab Manual

EC 2308 – MICROPROCESSOR AND MICROCONTROLLER LAB DEPT OF ECE

38

Page 39: EC2308 Lab Manual

EC 2308 – MICROPROCESSOR AND MICROCONTROLLER LAB DEPT OF ECE

39

EXP.NO: INTERFACING PRGRAMMABLE KEYBOARD AND DISPLAY CONTROLLER- 8279 DATE: AIM : To display the rolling message “HELP US” in the display. APPARATUS REQUIRED: 8086 Microprocessor kit, Power supply, interfacing board. ALGORITHM : Display of rolling message “HELP US”

1. Initialize the counter 2. Set 8279 for 8 digit character display, right entry 3. Set 8279 for clearing the display 4. Write the command to display 5. Load the character into accumulator and display it 6. Introduce the delay 7. Repeat from step 1.

1. Display Mode Setup: Control word-10 H 0 0 0 1 0 0 0 0 0 0 0 D D K K K DD 00- 8Bit character display left entry 01- 16Bit character display left entry 10- 8Bit character display right entry 11- 16Bit character display right entry KKK- Key Board Mode 000-2Key lockout. 2.Clear Display: Control word-DC H 1 1 0 1 1 1 0 0 1 1 0 CD CD CD CF CA

11 A0-3; B0-3 =FF

1-Enables Clear display 0-Contents of RAM will be displayed

1-FIFO Status is cleared

1-Clear all bits (Combined effect of CD)

Page 40: EC2308 Lab Manual

EC 2308 – MICROPROCESSOR AND MICROCONTROLLER LAB DEPT OF ECE

40

3. Write Display: Control word-90H 1 0 0 1 0 0 0 0

1 0 0 AI A A A A

FLOWCHART:

Selects one of the 16 rows of display.

Auto increment = 1, the row address selected will be incremented after each of read and write operation of the display RAM.

SET UP

INITIALIZE THE COUNTER

SET 8279 FOR 8-DIGIT CHARACTER DISPLAY

SET 8279 FOR CLEARING THE DISPLAY

WRITE THE COMMAND TO DISPLAY

LOAD THE CHARACTER INTO ACCUMULATOR AND DISPLAY

DELAY

Page 41: EC2308 Lab Manual

EC 2308 – MICROPROCESSOR AND MICROCONTROLLER LAB DEPT OF ECE

41

PROGRAM TABLE

PROGRAM COMMENTS

START : MOV SI,1200H Initialize array MOV CX,000FH Initialize array size MOV AL,10 Store the control word for display mode OUT C2,AL Send through output port MOV AL,CC Store the control word to clear display OUT C2,AL Send through output port MOV AL,90 Store the control word to write display OUT C2,AL Send through output port L1 : MOV AL,[SI] Get the first data OUT C0,AL Send through output port CALL DELAY Give delay INC SI Go & get next data LOOP L1 Loop until all the data’s have been taken JMP START Go to starting location DELAY : MOV DX,0A0FFH Store 16bit count value LOOP1 : DEC DX Decrement count value JNZ LOOP1 Loop until count values becomes zero RET Return to main program LOOK-UP TABLE: 1200 98 68 7C C8 1204 FF 1C 29 FF RESULT: MEMORY

LOCATION 7-SEGMENT LED FORMAT HEX DATA

d c b a dp e g f 1200H 1 0 0 1 1 0 0 0 98 1201H 0 1 1 0 1 0 0 0 68 1202H 0 1 1 1 1 1 0 0 7C 1203H 1 1 0 0 1 0 0 0 C8 1204H 1 1 1 1 1 1 1 1 FF 1205H 0 0 0 0 1 1 0 0 1C 1206H 0 0 1 0 1 0 0 1 29 1207H 1 1 1 1 1 1 1 1 FF Thus the rolling message “HELP US” is displayed using 8279 interface kit.

Page 42: EC2308 Lab Manual

EC 2308 – MICROPROCESSOR AND MICROCONTROLLER LAB DEPT OF ECE

42

EXP. NO: INTERFACING PROGRAMMABLE TIMER-8253 DATE: AIM : To study different modes of operation of programmable timer 8253 APPARATUS REQUIRED:

SL.NO

ITEM

SPECIFICATION

QUANTITY

1. Microprocessor kit 8086 Vi Microsystems 1 2. Power Supply +5V dc 1 3. 8253 interfacing kit - 1 4. CRO - 1

THEORY: The main features of the timer are, i. Three independent 16-bit counters ii. Input clock from DC to 2 MHz iii. Programmable counter modes iv. Count binary or BCD

The control signals with which the 8253 interfaces with the CPU are CS, RD, WR, A1, A2. The basic operations performed by 8253 are determined by these control signals. It has six different modes of operation, viz, mode 0 to mode 5.

MODE 2 – RATE GENERATOR It is a simple divide - by – N counter. The output will be low for one input clock period. The period from one output pulse to the next equals the number of input counts in the count register. If the count register is reloaded between output pulses, the present period will not be affected, but the subsequent period will reflect the new value.

MODE 3 – SQUARE WAVE GENERATOR It is similar to mode 2, except that the output will remain high until one half for even number count, If the count is odd, the output will be high for (count+1)/2 counts and low for (count-1)/2 counts ALGORITHM: Mode 2- 1. Initialize channel 0 in mode 2 2. Initialize the LSB of the count. 3. Initialize the MSB of the count. 4. Trigger the count 5. Read the corresponding output in CRO.

Page 43: EC2308 Lab Manual

EC 2308 – MICROPROCESSOR AND MICROCONTROLLER LAB DEPT OF ECE

43

Mode 3- 1. Initialize channel 0 in mode 3 2. Initialize the LSB of the count. 3. Initialize the MSB of the count. 4. Trigger the count 5. Read the corresponding output in CRO. PORT ADDRESS : 1. CONTROL REGISTER – 2. COUNTER OF CHANNEL 0 - 3. COUNTER OF CHANNEL 1 - 4. COUNTER OF CHANNEL 2 - 5. O/P PORT OF CHANNEL 0 - 6. O/P PORT OF CHANNEL 1 - 7. O/P PORT OF CHANNEL 2 - CONTROL WORD FORMAT: D7 D6 D5 D4 D3 D2 D1 D0 SC1 SC0 RL1 RL0 M2 M1 M0 BCD

0 0 1 1 0 1 0 0

0 0 1 1 0 1 1 0

SC1 SC0 CHANNEL SELECT RL1 RL0 READ/LOAD

0 0 CHANNEL 0 0 0 LATCH 0 1 CHANNEL 1 0 1 LSB 1 0 CHANNEL 2 1 0 MSB 1 1 ----- 1 1 LSB FIRST, MSB NEXT BCD --0 –BINARY COUNTER 1 --BCD COUNTER M2 M1 M0 MODE

0 0 0 MODE 0 0 0 1 MODE 1 0 1 0 MODE 2 0 1 1 MODE 3 1 0 0 MODE 4 1 0 1 MODE 5

Mode 2 = 34 H

Mode 3 = 36 H

Page 44: EC2308 Lab Manual

EC 2308 – MICROPROCESSOR AND MICROCONTROLLER LAB DEPT OF ECE

44

PORT PIN ARRANGEMENT DEBOUNCE CIRCUIT CONNECTION

MODE 2 – RATE GENERATOR:

PROGRAM COMMENTS MOV AL, 34H Store the control word in accumulator OUT 0BH Send through output port MOV AL, 0AH Copy lower order count value in accumulator OUT 08H Send through output port MOV AL, 00H Copy higher order count value in accumulator OUT 08H Send through output port HLT Stop

MODE 3 – SQUARE WAVE GENERATOR:

PROGRAM COMMENTS MOV AL, 36H Store the control word in accumulator OUT 0BH Send through output port MOV AL, 0AH Copy lower order count value in accumulator OUT 08H Send through output port MOV AL, 00H Copy higher order count value in accumulator OUT 08H Send through output port HLT Stop

1 CLK 0 2 GATE 0 3 OUT 0 4 CLK 1 5 GATE1 6 OUT 1 7 CLK 2 8 GATE 2 9 OUT 2 10 GND

* * *

Page 45: EC2308 Lab Manual

EC 2308 – MICROPROCESSOR AND MICROCONTROLLER LAB DEPT OF ECE

45

MODEL GRAPH: RATE GENERATOR SQUARE WAVE GENERATOR FLOW CHART

RESULT: Thus an ALP for rate generator and square wave generator are written and executed.

START

INITIALIZE ACCUMULATOR WITH MODE SET WORD

INITIALIZE LSB OF COUNT

STOP

TRIGGER THE COUNT

INITIALIZE MSB OF COUNT

Page 46: EC2308 Lab Manual

EC 2308 – MICROPROCESSOR AND MICROCONTROLLER LAB DEPT OF ECE

46

EXP. NO: INTERFACING USART 8251 DATE: AIM: To study interfacing technique of 8251 (USART) with microprocessor 8086 and write an 8086 ALP to transmit and receive data between two serial ports with RS232 cable. APPARATUS REQUIRED: 8086 kit (2 Nos), RS232 cable. THEORY: The 8251 is used as a peripheral device for serial communication and is programmed by the CPU to operate using virtually any serial data transmission technique. The USART accepts data characters from the CPU in parallel format and then converts them into a continuous serial data stream for transmission. Simultaneously, it can receive serial data streams and convert them into parallel data characters for the CPU. The CPU can read the status of the USART at any time. These include data transmission errors and control signals. The control signals define the complete functional definition of the 8251. Control words should be written into the control register of 8251.These control words are split into two formats: 1) Mode instruction word & 2) Command instruction word. Status word format is used to examine the error during functional operation.

1...transmit enable 1...data terminal ready 1... receive enable 1... send break character 1.... reset error flags (pe,oe,fe) 1..... request to send (rts) 1...... internal reset 1....... enter hunt mode (enable search for sync characters)

1 ransmitter ready 1. receiver ready 1.. transmitter empty 1... parity error (pe) 1.... overrun error (oe) 1..... framing error (fe), async only 1...... sync detect, sync only 1....... data set ready (dsr)

Page 47: EC2308 Lab Manual

EC 2308 – MICROPROCESSOR AND MICROCONTROLLER LAB DEPT OF ECE

47

ALGORITHM: 1. Initialize 8253 and 8251 to check the transmission and reception of a character 2. Initialize8253 to give an output of 150Khz at channel 0 which will give a 9600 baud rate of 8251. 3. The command word and mode word is written to the 8251 to set up for subsequent operations 4. The status word is read from the 8251 on completion of a serial I/O operation, or when the host CPU is checking the status of the device before starting the next I/O operation FLOW CHART:

START

Check TX/RX Ready

Write Data into data register

Is it High

STOP

No

Yes

Page 48: EC2308 Lab Manual

EC 2308 – MICROPROCESSOR AND MICROCONTROLLER LAB DEPT OF ECE

48

PROGRAM: TRANSMITTER END PROGRAM COMMENTS

MOV AL,36 Initialize 8253 in mode 3 square wave generator OUT CE,AL Send through port address MOV AL,10 Initialize AL with lower value of count (clock frequency 150KHz) OUT C8,AL Send through port address MOV AL,00 Initialize AL with higher value of count OUT C8,AL Send through port address MOV AL,4E Set mode for 8251(8bit data, No parity, baud rate factor 16x & 1 stop bit) OUT C2,AL Send through port address MOV AL,37 Set command instruction(enables transmit enable & receive enable bits) OUT C2,AL Send through port address L1:IN AL,C2 Read status word AND AL,04 Check whether transmitter ready JZ L1 If not wait until transmitter becomes ready MOV AL,41 Set the data as 41 OUT C0,AL Send through port address INT 2 Restart the system RECEIVER END

PROGRAM COMMENTS MOV AL,36 Initialize 8253 in mode 3 square wave generator OUT CE,AL Send through port address MOV AL,10 Initialize AL with lower value of count (clock frequency 150KHz) OUT C8,AL Send through port address MOV AL,00 Initialize AL with higher value of count OUT C8,AL Send through port address MOV AL,4E Set mode for 8251(8bit data, No parity, baud rate factor 16x & 1 stop bit) OUT C2,AL Send through port address MOV AL,37 Set command instruction(enables transmit enable & receive enable bits) OUT C2,AL Send through port address L1:IN AL,C2 Read status word AND AL,02 Check whether receiver ready JZ L1 If not wait until receiver becomes ready IN AL,C0 If it is ready, get the data MOV BX,1500 Initialize BX register with memory location to store the data MOV [BX],AL Store the data in the memory location INT 2 Restart the system RESULT: Thus ALP for serial data communication using USART 8251 is written and the equivalent ASCII 41 for character ‘A’ is been transmitted & received.

Page 49: EC2308 Lab Manual

EC 2308 – MICROPROCESSOR AND MICROCONTROLLER LAB DEPT OF ECE

49

EXP. NO: INTERFACING WITH PPI 8255 DATE: AIM: To write ALP by interfacing 8255 with 8086 in mode 0, mode 1 and mode 2 APPARATUS REQUIRED: 8086 kit, 8255 interface kit. ALGORITHM: Mode 0 1. Initialize accumulator to hold control word 2. store control word in control word register 3. Read data port A. 4. Store data from port A in memory 5. Place contents in port B Mode 1 & Mode 2 1. Initialize accumulator to hold control word (for port A) 2. Store control word in control word register 3. Initialize accumulator to hold control word (for port B) 4. Place contents in control word register. 5. Disable all maskable interrupts, enable RST 5.5 6. send interrupt mask for RST 6.5 & 7.5 7. Enable interrupt flag 8. Read data from port A, place contents in port B FLOWCHART Mode 0 Mode 1 & 2

Store control word in control register

Input to be read from port A

Store into accumulator

STOP

START

Output written on port B

Store control word in control register

Disable all interrupts except RST 6.5

START

Input to be read from port A

Store output to port B

STOP

Page 50: EC2308 Lab Manual

EC 2308 – MICROPROCESSOR AND MICROCONTROLLER LAB DEPT OF ECE

50

MODE 0 PROGRAM COMMENTS

MOV AL,90H Set the control word OUT C6,AL Send it to control port IN AL,C0 Get the contents of port A in AL OUT C2,AL Send the contents of port B to port address HLT Stop MODE 1

PROGRAM COMMENTS MOV AL,0B0H Set the control word for mode 1 OUT C6,AL Send it to control port MOV AL,09H Control for BSR mode OUT C6,AL Send it to control port MOV AL,13H Interrupt generation OUT 30,AL MOV AL,0AH Through 8259 OUT 32,AL MOV AL,0FH Using IR2 interrupt(lower order count) OUT 32,AL MOV AL,00H Higher order count OUT 32,AL STI Set trap flag HLT Stop ISR: Subroutine IN AL,C0 Read from Port A OUT C2,AL Send it to Port B HLT Stop MODE 2

PROGRAM COMMENTS MOV AL,0C0H Set the control word for mode 2 OUT C6,AL Send it to control port MOV AL,09H Control for BSR mode OUT C6,AL Send it to control port MOV AL,13H Interrupt generation OUT 30,AL MOV AL,0AH Through 8259 OUT 32,AL

Page 51: EC2308 Lab Manual

EC 2308 – MICROPROCESSOR AND MICROCONTROLLER LAB DEPT OF ECE

51

MOV AL,0FH Using IR2 interrupt(lower order count) OUT 32,AL MOV AL,00H Higher order count OUT 32,AL STI Set trap flag HLT Stop ISR: Subroutine IN AL,C0 Read from Port A OUT C2,AL Send it to Port B HLT Stop BSR mode Bit set/reset, applicable to PC only. One bit is S/R at a time. Control word: D7 D6 D5 D4 D3 D2 D1 D0

0 (0=BSR) X X X B2 B1 B0 S/R (1=S,0=R) Bit select: (Taking Don't care's as 0)

B2 B1 B0 PC bit Control word (Set) Control word (reset)

0 0 0 0 0000 0001 = 01h 0000 0000 = 00h

0 0 1 1 0000 0011 = 03h 0000 0010 = 02h

0 1 0 2 0000 0101 = 05h 0000 0100 = 04h

0 1 1 3 0000 0111 = 07h 0000 0110 = 06h

1 0 0 4 0000 1001 = 09h 0000 1000 = 08h

1 0 1 5 0000 1011 = 0Bh 0000 1010 = 0Ah

1 1 0 6 0000 1101 = 0Dh 0000 1100 = 0Ch

1 1 1 7 0000 1111 = 0Fh 0000 1110 = 0Eh

I/O mode D7 D6 D5 D4 D3 D2 D1 D0

1 (1=I/O) GA mode select PA PCU GB mode select PB PCL

D6, D5: GA mode select: o 00 = mode0 o 01 = mode1 o 1X = mode2

D4(PA), D3(PCU): 1=input 0=output D2: GB mode select: 0=mode0, 1=mode1 D1(PB), D0(PCL): 1=input 0=output

Result: Mode 0 Mode 1 Mode 2

Input Output Input Output Input Output

The programs for interfacing 8255 with 8085 are executed & the output is obtained for modes 0, 1 & 2

Page 52: EC2308 Lab Manual

EC 2308 – MICROPROCESSOR AND MICROCONTROLLER LAB DEPT OF ECE

52

Interfacing 8259 Programmable Interrupt Controller to 8085 p Aim:

To initialize 8259 with the following specifications: 1) ICW4 needed 2) single 8259 3) Interval of 4 4) Edge triggered mode 5) A7 A6 A5 = 0 0 0 6) Interrupt Service Routine address for IR0 = 5000 H 7) 8085 mode 8) Normal EOI 9) Non buffered mode 10) not special fully nested mode 11) mask all Interrupts except IR0 Apparatus Required:

8085p kit, 8259 Interface Board, Regulated Power supply, vxt parallel bus

Theory: The 8259 is a programmable Interrupt Controller that can resolve eight levels of

interrupt priorities in a variety of modes. It can vector an interrupt anywhere in the memory map. It is also capable of masking each interrupt request individually and read the status of pending interrupts, in_service interrupts and masked interrupts. The 8259 can be expanded to 64 priority levels by cascading network.

Initialisation command words (ICW s): Before the normal operation can begin , each 8259 in the system must be initialised using 2 to 4 bytes of ICW s.

Operation command words (OCW s): These are the command words which command the 8259 to operate in various interrupt modes.

Program: MVI A,17 ; Initialize ICW 1 for ICW 4 needed , OUT C0H ; interval of 4 , single , edge triggered mode

MVI A,50 ; Initialize ICW 2 OUT C2H ;

MVI A,00 ; Initialize ICW 4 OUT C2H MVI A,FE ; Initialize OCW 1 , set mask for all except OUT C2H ; IR0 HLT ISR :

MVI A,20 ; Initialize OCW 2 for non specific EOI OUT C0H

MVI A,08 ; addition program MVI B,08 ADD B STA 4500 HLT Procedure:

The program is entered in user RAM locations. On pressing IR0 , the CPU jumps to location 5000H. 8259 will not accept any more interrupt at IR0 since AEOI is not set. After it is set , the CPU goes back to main program after performing service addition subroutine. The result addition can be viewed at 4500H location.

Page 53: EC2308 Lab Manual

EC 2308 – MICROPROCESSOR AND MICROCONTROLLER LAB DEPT OF ECE

53

Exercise: Program the 8259 in special mask mode. (In the special mask mode ,when the mask bit is set in 0CW1, it inhibits further interrupts at that level and enables interrupts from all other levels(lower as well as higher) that are not masked. Thus any interrupts may be selectively enabled by loading the mask register. Result:

1) Thus 8259 was initialized for the required specifications 2) All the LED s except one corresponding to IRO is seen glowing.

3) The result of addition subroutine was verified at memory location 4500H.

Page 54: EC2308 Lab Manual

EC 2308 – MICROPROCESSOR AND MICROCONTROLLER LAB DEPT OF ECE

54

EXPT NO: 8051 PROGRAMMING DATE:

8 BIT ADDITION AIM:

To write a program to add two 8-bit numbers using 8051 microcontroller. ALGORITHM: 1. Clear Program Status Word. 2. Select Register bank by giving proper values to RS1 & RS0 of PSW. 3. Load accumulator A with any desired 8-bit data. 4. Load the register R 0 with the second 8- bit data. 5. Add these two 8-bit numbers. 6. Store the result. 7. Stop the program. FLOW CHART:

START

Clear PSW

Select Register Bank

Load A and R 0 with 8- bit datas

Add A & R 0

Store the sum

STOP

Page 55: EC2308 Lab Manual

EC 2308 – MICROPROCESSOR AND MICROCONTROLLER LAB DEPT OF ECE

55

8 Bit Addition (Immediate Addressing) ADDRESS LABEL MNEMONIC OPERAND HEX

CODE COMMENTS

4100

CLR C C3 Clear CY Flag

4101

MOV A, data1 74,data1 Get the data1 in Accumulator

4103

ADDC A, # data 2 24,data2 Add the data1 with data2

4105

MOV DPTR, # 4500H

90,45,00 Initialize the memory location

4108

MOVX @ DPTR, A F0 Store the result in memory location

4109 L1

SJMP L1 80,FE Stop the program

RESULT:

OUTPUT MEMORY LOCATION

DATA

4500

Thus the 8051 ALP for addition of two 8 bit numbers is executed.

Page 56: EC2308 Lab Manual

EC 2308 – MICROPROCESSOR AND MICROCONTROLLER LAB DEPT OF ECE

56

EXPT NO: 8 BIT SUBTRACTION DATE: AIM: To perform subtraction of two 8 bit data and store the result in memory. ALGORITHM:

a. Clear the carry flag. b. Initialize the register for borrow. c. Get the first operand into the accumulator. d. Subtract the second operand from the accumulator. e. If a borrow results increment the carry register. f. Store the result in memory.

FLOWCHART:

START

CLEAR CARRY FLAG

GET I’ST OPERAND IN ACCR

SUBTRACT THE 2’ND OPERAND FROM ACCR

STORE RESULT IN MEMORY

STOP

IS CF=1

INCREMENT THE BORROW REGISTER

Y

N

Page 57: EC2308 Lab Manual

EC 2308 – MICROPROCESSOR AND MICROCONTROLLER LAB DEPT OF ECE

57

8 Bit Subtraction (Immediate Addressing) ADDRESS LABEL MNEMONIC OPERAND HEX

CODE COMMENTS

4100

CLR C C3 Clear CY flag

4101

MOV A, # data1 74, data1 Store data1 in accumulator

4103

SUBB A, # data2 94,data2 Subtract data2 from data1

4105

MOV DPTR, # 4500 90,45,00 Initialize memory location

4108

MOVX @ DPTR, A F0 Store the difference in memory location

4109 L1

SJMP L1 80,FE Stop

RESULT:

OUTPUT MEMORY LOCATION

DATA

4500

Thus the 8051 ALP for subtraction of two 8 bit numbers is executed.

Page 58: EC2308 Lab Manual

EC 2308 – MICROPROCESSOR AND MICROCONTROLLER LAB DEPT OF ECE

58

EXPT NO: 8051 PROGRAMMING DATE:

8 BIT MULTIPLICATION AIM: To perform multiplication of two 8 bit data and store the result in memory. ALGORITHM:

a. Get the multiplier in the accumulator. b. Get the multiplicand in the B register. c. Multiply A with B. d. Store the product in memory.

FLOWCHART:

START

GET MULTIPLIER IN ACCR

GET MULTIPLICAND IN B REG

MULTIPLY A WITH B

STORE RESULT IN MEMORY

STOP

Page 59: EC2308 Lab Manual

EC 2308 – MICROPROCESSOR AND MICROCONTROLLER LAB DEPT OF ECE

59

8 Bit Multiplication ADDRESS LABEL MNEMONIC OPERAND HEX

CODE COMMENTS

4100

MOV A ,#data1 74, data1 Store data1 in accumulator

4102

MOV B, #data2 75,data2 Store data2 in B reg

4104

MUL A,B F5,F0 Multiply both

4106

MOV DPTR, # 4500H

90,45,00 Initialize memory location

4109

MOVX @ DPTR, A F0 Store lower order result

401A

INC DPTR A3 Go to next memory location

410B

MOV A,B E5,F0 Store higher order result 410D

MOV @ DPTR, A F0

410E STOP

SJMP STOP 80,FE Stop

RESULT:

INPUT OUTPUT MEMORY LOCATION DATA

MEMORY LOCATION DATA

4500

4502

4501

4503

Thus the 8051 ALP for multiplication of two 8 bit numbers is executed.

Page 60: EC2308 Lab Manual

EC 2308 – MICROPROCESSOR AND MICROCONTROLLER LAB DEPT OF ECE

60

EXPT NO: 8051 PROGRAMMING DATE:

8 BIT DIVISION AIM: To perform division of two 8 bit data and store the result in memory. ALGORITHM:

1. Get the Dividend in the accumulator. 2. Get the Divisor in the B register. 3. Divide A by B. 4. Store the Quotient and Remainder in memory.

FLOWCHART:

START

GET DIVIDEND IN ACCR

GET DIVISOR IN B REG

DIVIDE A BY B

STORE QUOTIENT & REMAINDER IN MEMORY

STOP

Page 61: EC2308 Lab Manual

EC 2308 – MICROPROCESSOR AND MICROCONTROLLER LAB DEPT OF ECE

61

8 Bit Division ADDRESS LABEL MNEMONIC OPERAND HEX

CODE COMMENTS

4100

MOV A, # data1 74,data1 Store data1 in accumulator

4102

MOV B, # data2 75,data2 Store data2 in B reg

4104

DIV A,B 84 Divide

4015

MOV DPTR, # 4500H 90,45,00 Initialize memory location

4018

MOVX @ DPTR, A F0 Store remainder

4109

INC DPTR A3 Go to next memory location

410A

MOV A,B E5,F0 Store quotient

410C

MOV @ DPTR, A F0

410D STOP

SJMP STOP 80,FE Stop

RESULT:

INPUT OUTPUT MEMORY LOCATION DATA MEMORY LOCATION DATA 4500 (dividend)

4502 (remainder)

4501 (divisor)

4503 (quotient)

Thus the 8051 ALP for division of two 8 bit numbers is executed.

Page 62: EC2308 Lab Manual

EC 2308 – MICROPROCESSOR AND MICROCONTROLLER LAB DEPT OF ECE

62

EXP. NO: LOGICAL AND BIT MANIPULATION DATE: AIM: To write an ALP to perform logical and bit manipulation operations using 8051 microcontroller. APPARATUS REQUIRED: 8051 microcontroller kit ALGORITHM:

1. Initialize content of accumulator as FFH 2. Set carry flag (cy = 1). 3. AND bit 7 of accumulator with cy and store PSW format. 4. OR bit 6 of PSW and store the PSW format. 5. Set bit 5 of SCON. 6. Clear bit 1 of SCON. 7. Move SCON.1 to carry register. 8. Stop the execution of program.

FLOWCHART:

START

Set CY flag, AND CY with MSB of ACC

Store the PSW format, OR CY with bit 2 IE reg

Clear bit 6 of PSW, Store PSW

Set bit 5 of SCON, clear bit 1 and store SCON

Move bit 1 of SCON to CY and store PSW

STOP

Page 63: EC2308 Lab Manual

EC 2308 – MICROPROCESSOR AND MICROCONTROLLER LAB DEPT OF ECE

63

PROGRAM TABLE

ADDRESS

HEX CODE

LABEL

MNEMONICS

OPERAND

COMMENT

4100 90,45,00 MOV DPTR,#4500 Initialize memory location

4103 74,FF MOV A,#FF Get the data in accumulator

4105 D3 SETB C Set CY bit

4016 82,EF ANL C, ACC.7 Perform AND with 7th bit of accumulator

4018 E5,D0 MOV A,D0H Store the result

410A F0 MOVX @DPTR,A

410B A3 INC DPTR Go to next location

410C 72,AA ORL C, IE.2 OR CY bit with 2nd bit if IE reg

410E C2,D6 CLR PSW.6 Clear 6th bit of PSW

4110 E5,D0 MOV A,DOH Store the result

4112 F0 MOVX @DPTR,A

4113

A3 INC DPTR Go to next location

4114 D2,90 SETB SCON.5 Set 5th of SCON reg 4116

C2,99 CLR SCON.1 Clear 1st bit of SCON reg

4118 E5,98 MOV A,98H Store the result

411A F0 MOVX @DPTR,A

411B A3 INC DPTR Go to next location

411C

A2,99 MOV C,SCON.1 Copy 1st bit of SCON reg to CY flag

411E E5,D0 MOV

A,DOH Store the result 4120

F0 MOVX @DPTR,A

4122 80,FE L2 SJMP L2

Stop

Page 64: EC2308 Lab Manual

EC 2308 – MICROPROCESSOR AND MICROCONTROLLER LAB DEPT OF ECE

64

RESULT:

MEMORY

LOCATION

SPECIAL FUNCTION REGISTER FORMAT BEFORE

EXECUTION

AFTER

EXECUTION

4500H (PSW) CY AC FO RS1 RS0 OV - P 00H 88H

4501H (PSW) CY AC FO RS1 RS0 OV - P 40H 88H

4502H (SCON) SM0 SM1 SM2 REN TB8 RB8 TI RI 0FH 20H

4503H (PSW) CY AC FO RS1 RS0 OV - P FFH 09H

Thus the bit manipulation operation is done in 8051 microcontroller.

Page 65: EC2308 Lab Manual

EC 2308 – MICROPROCESSOR AND MICROCONTROLLER LAB DEPT OF ECE

65

EX.NO PROGRAMS TO VERIFY TIMER, INTERRUPTS & UART

OPERATIONS IN 8031 MICROCONTROLLER

DATE :

a) Program to generate a square wave of frequency --------.

Steps to determine the count:

Let the frequency of square wave to be generated be Fs KHz.

And the time period of the square wave be Ts Sec.

Oscillator Frequency = 11.0592MHz.

One machine cycle = 12 clock periods

Time taken to complete one machine cycle=12*(1/11.0592MHz)= 1.085microsec.

Y(dec) = (Ts/2)/(1.085microsec)

Count(dec) = 65536(dec) – Y(dec)

= Count(hexa)

MOV TMOD,#10h ; To select timer1 & mode1 operation

L1: MOV TL1,#LOWERORDER BYTE OF THE COUNT

MOV TH1,#HIGHER ORDER BYTE OF THE COUNT

SETB TR1 ; to start the timer (TCON.6)

BACK: JNB TF1,BACK ; checking the status of timerflag1(TCON.7) for

overflow

CPL Px.x ; get the square wave through any of the portpins

; eg. P1.2 (second bit of Port 1)

CLR TR1 ; stop timer

CLR TF1 ; clear timer flag for the next cycle

SJMP L1

b) Program to transfer a data serially from one kit to another.

Transmitter:

MOV TMOD,#20H ; Mode word to select timer1 & mode 2

MOV TL1,#FDH ; Initialize timer1 with the count

MOV TH1,#FFH

MOV SCON,#50H ; Control word for serial communication to

to select serial mode1

SETB TR1 ; Start timer1

MOV A,#06h

Page 66: EC2308 Lab Manual

EC 2308 – MICROPROCESSOR AND MICROCONTROLLER LAB DEPT OF ECE

66

MOV SBUF,A ; Transfer the byte to be transmitted to serial

Buffer register.

LOOP: JNB TI, LOOP ; checking the status of Transmit interrupt

flag

CLR TI

HERE: SJMP HERE

Receiver:

MOV TMOD,#20H

MOV TL1,#FDH

MOV TH1,#FFH

MOV SCON,#50H

SETB TR1

LOOP: JNB RI,LOOP

MOV A,SBUF

MOV DPTR,#4500H

MOVX @DPTR,A

CLR RI

HERE: SJMP HERE

Page 67: EC2308 Lab Manual

EC 2308 – MICROPROCESSOR AND MICROCONTROLLER LAB DEPT OF ECE

67

SETTING BITS IN AN 8-BIT NUMBER PROBLEM STATEMENT:

Write a program to set specific bits of an 8 bit number.

ALGORITHM:

1. Get an 8-bit number in accumulator. 2. The bit which is to be set is ‘OR’ed by 1. 3. Store the answer at another memory location.

FLOW CHART:

INPUT THE DATA TO (A)

OR (A) WITH AN 8-BIT IMMEDIATE

DATA

STORE THE RESULT IN MEMORY

START

Page 68: EC2308 Lab Manual

EC 2308 – MICROPROCESSOR AND MICROCONTROLLER LAB DEPT OF ECE

68

PROGRAM: ADDRESS OPCODE LABEL MNEMONICS OPERAND COMMENT

4100 74 START: MOV A, #DATA1 Copy to A Register first number 4101 2F

4102 44 ORL A, #DATA2 OR the A register with an immediate data 45h

4103 45

4104 90 MOV DPTR, #4500 Store in Data Pointer the memory address 4105 45

4106 00 4107 F0 MOVX @DPTR, A Store the result in

memory 4108 80 HERE: SJMP HERE Halt here 4109 FE

RESULT:

INPUT OUTPUT DATA1 0010 1111

(2Fh) 4500 0110 1111

(6Fh) -- 6th bit is getting set DATA2 0100 0000

(40h) CONCLUSION:

Thus the setting of bits in an 8-bit number has been done using 8051 C.

STOP

Page 69: EC2308 Lab Manual

EC 2308 – MICROPROCESSOR AND MICROCONTROLLER LAB DEPT OF ECE

69

Page 70: EC2308 Lab Manual

EC 2308 – MICROPROCESSOR AND MICROCONTROLLER LAB DEPT OF ECE

70

MASKING BITS IN AN 8-BIT NUMBER PROBLEM STATEMENT:

Write a program to mask specific bits of an 8 bit number.

ALGORITHM:

1.Get an 8-bit number in accumulator.

2.The bit, which is to be masked, is ANDed by 1.

3.Store the result in memory.

FLOW CHART:

INPUT THE DATA TO (A)

AND (A) WITH AN 8-BIT IMMEDIATE

DATA

STORE THE RESULT IN MEMORY

START

STOP

Page 71: EC2308 Lab Manual

EC 2308 – MICROPROCESSOR AND MICROCONTROLLER LAB DEPT OF ECE

71

PROGRAM: ADDRESS OPCODE LABEL MNEMONICS OPERAND COMMENT

4100 74 START: MOV A, #DATA1 Copy 1st Number to A register 4102 87

4102 54 ANL A, #DATA2 AND A register with 2nd number 4103 7E

4104 90 MOV DPTR, #4500 Copy the memory address to Data Pointer

4105 45 4106 00 4107 F0 MOVX @DPTR, A Store the result in

memory 4108 80 HERE: SJMP HERE Halt here 4109 FE

RESULT:

INPUT OUTPUT DATA1 1000 0111

(87h) 4500 0000 0110 (06h)

-- Bits 0 and 7 are getting masked DATA2 0111 1110 -

7Eh (to mask bits 0 and 7)

CONCLUSION:

Thus the masking of bits in an 8-bit number has been done using 8051 C.

Page 72: EC2308 Lab Manual

EC 2308 – MICROPROCESSOR AND MICROCONTROLLER LAB DEPT OF ECE

72

EX.NO. COMMUNICATION BETWEEN 8051 MICROCONTROLLER

KIT & PC

DATE :

SERIAL COMMUNICATION

8051>H

HELP MENU

D Display data, program, internal, bit memory or registers

E Edit data, program, internal, bit memory or registers

S Single step from specified address, press SP to terminate

G Execute the program till user break

B Set address till where the program is to be executed

C Clear break points

F10 Key followed by 4 key at the PC to upload data to a file (DOS)

T Test the onboard peripherals

: Download a file from PC mem to the SDA-SI-MEL kit (DOS)

A Assembler

Z Disassembler

TEST FOR ONBOARD PERIPHERALS

For SDA SI-MEL kit, following menu is displayed on pressing the option "T"

8051>T

ALS-SDA SI-MEL Kit Test monitor

1. Test internal Data RAM

2. Test external Data Memory (U6)

3. Test external Data memory (U7)

4. 8255 loop test

5. Test 8253

6. Exit

Page 73: EC2308 Lab Manual

EC 2308 – MICROPROCESSOR AND MICROCONTROLLER LAB DEPT OF ECE

73

Select (1-6):

Suppose the user presses the key '1', following message is displayed if the internal data RAM

is OK.

Testing internal data RAM: Pass

After displaying the message, the menu is displayed once again waits for user to enter a key

EDITING MEMORY COMMAND:

8051>E

EDIT (R,B,M,P,D)…D - EXTERNAL DATA RAM

Enter STA address = 0400

0400 = 7F:55 Press 'N' key to go to the next address

0401 = D5:66

0402 = D3:77

0403 = 73:88

0404 = 6F:12

0405 = CB:01

0406 = A7:02 Press 'P' key to go to the previous address

0407 = 6F:03

0408 = 7B:04

0409 = 29:05

040A = 6F:06

040B = 73:07

040C = FF:08

040D = 7D:09 Press 'CR' key to have the same address

040E = 09:90 Press 'ESC' Key to abort the command

Page 74: EC2308 Lab Manual

EC 2308 – MICROPROCESSOR AND MICROCONTROLLER LAB DEPT OF ECE

74

8051>E

EDIT (R,B,M,P,D)…B - BITS

Enter STA address = 00

00 = 0:1

01= 0:1

02 = 0:0

03 = 0:1

03 = 1:

03 = 1:

02 = 0:

8051>E

EDIT (R,B,M,P,D)…R- REGISTERS

ACC = 00:33

PSW = 00:44

DPH = 00:55

DPL = 00:00

DPL = 00:00

8051>E

EDIT (R,B,M,P,D)…-P = PROGRAM CODE

8000 = FF:78

8001 = FF:10

8002 = FF:79

8003 = FF:20

8004 = FF:7A

8005 = FF: 12

8007 = FF : 00

8008 = FF : 03

8009 = FF : 0F

Page 75: EC2308 Lab Manual

EC 2308 – MICROPROCESSOR AND MICROCONTROLLER LAB DEPT OF ECE

75

8051>E

EDIT (R,B,M,P,D)…-M - INTERNAL RAM

0000 = 00 : 12

0001 = 00 : 34

0002 = 00 : 00

DISPLAY COMMAND

8051>D

EDIT (R,B,M,P,D)…-EXTERNAL DATA RAM

Enter STA address = 0400

Enter END address = 040F

0500 55 66 77 88 12 01 02 03 04 05 06 07 08 09 04 D7

SETTING BREAK COMMAND :

8051>B

BR _ NO: R

BR_ADD 0000

ERROR! ONLY A BREAKS ALLOWED

8051>B

BR _ NO: 0

ERROR! BREAK NUMBERS MUST BE BETWEEN 1 & 8

CLEAR BREAK COMMAND:

8051>C

BR_N0:A Clears all the break point set by the user

8051>C

BR_N0:1 Clears the break point number 1

Page 76: EC2308 Lab Manual

EC 2308 – MICROPROCESSOR AND MICROCONTROLLER LAB DEPT OF ECE

76

PROGRAMME EXECUTION COMMAND:

8051>G

PROGRAM EXECUTION

ENTER START ADDRESS = 8000

ACC PSW DPH DPL PCH PCL SP B R0 R1 R2 R3 R3 R4 R5 R6 R7

33 44 55 00 10 34 00 00 00 00 00 00

ASSEMBLE MEMORY COMMAND

8051>A

ENTER START ADDRESS = 8000

DISASSEMBLE MEMORY COMMAND

8051>Z

Page 77: EC2308 Lab Manual

EC 2308 – MICROPROCESSOR AND MICROCONTROLLER LAB DEPT OF ECE

77

EX. NO. PROGRAMS FOR DIGITAL CLOCK AND STOP WATCH (USING

8086)

DATE:

Program that places a message on the screen every 10 seconds, using int 1ah;

CODE SEGMENT

TIMEDELAY:

MOV SP,1000H

MOV DI,10XD

TIME OUT:

MOV AH,00H

INT 1AH

MOV BX,DX

TIMER:

MOV AH, 00H

INT 1AH

SUB DX, BX

CMP DX, 182XD

JC TIMER

MOV AH, 09H

CS MOV DX,MSG

INT 21H

DEC DI

JNZ TIMEOUT

MOV AX,4C00H

INT 21H

MSG:

DB 'TEN MORE SECONDS HAVE PASSED $'

CODE ENDS

Page 78: EC2308 Lab Manual

EC 2308 – MICROPROCESSOR AND MICROCONTROLLER LAB DEPT OF ECE

78

CLOCK displaying Program Problem Statement: To write an 8086 assembly language program to display the Computer’s real-time clock on the screen as in digital clock. Theory: Every PC is equipped with a real-time clock operated by a small battery. Even when the computer is switched off, this clock continues to function to maintain the clock in its CMOS registers. When the PC is on, the Operating System software reads this clock and stores the value in memory. User programs can access this data. The OS software provides facilities for the programmer to read this clock value using Software Interrupts. The IBM PC system BIOS also provides interrupt services to access this real time clock. The BIOS services provide the hours, minutes and seconds in CPU registers as BCD data. Hence they can be converted easily into ASCII value for displaying on screen. Algorithm: Main Program:

1. Initialize data segment to hold the clock data as hours, minutes and seconds 2. Display a message on screen for the user 3. Call the procedure to get the time from PC’s real-time clock using BIOS interrupt 4. Call the procedure to convert the clock data into ASCII and display it on the

screen 5. Check for user key press using BIOS interrupt service 6. If no key is pressed continue updating the clock on screen. 7. If a key is pressed terminate the program

Procedure GetTime:

1. Use Function 02 in Interrupt 1Ah service to read the PC’s real-time clock. This function returns hours in CH, minutes in CL and seconds in DH registers.

2. Divide each of these registers by 10h to separate the BCD digits 3. Convert each separated digit into ASCII by adding 30h with it. 4. Store each digit in the appropriate location in the memory. 5. Return from the procedure

Procedure ShowTime:

1. Use BIOS interrupt 10h function 02h to set video cursor at desired location on the screen

2. Use DOS interrupt 21h function 09h to display the stored clock data from Data segment memory as a string terminated by ‘$’

3. Call a procedure to delay for few milliseconds doing nothing 4. Return from the procedure

Page 79: EC2308 Lab Manual

EC 2308 – MICROPROCESSOR AND MICROCONTROLLER LAB DEPT OF ECE

79

Procedure Delay: 1. Load a value in CX register 2. Do nothing 3. Decrement CX register by one. 4. loop until CX register is zero 5. Return from the procedure

Flow chart:

START

Initialize Data Segment

Display a friendly Message

Call Procedure GetTime

Call Procedure ShowTime

Is there a key pressed?

STOP

No

Yes

Page 80: EC2308 Lab Manual

EC 2308 – MICROPROCESSOR AND MICROCONTROLLER LAB DEPT OF ECE

80

Procedure GetTime: Procedure ShowTime:

Start

Read System Clock

Separate the digits from hours, minutes and seconds

Convert each of these digits into its ASCII equivalent

Return

Start

Position Video Cursor at desired location

Display the clock data stored in memory as a string

Execute a delay loop before going for next update of time

Return

Page 81: EC2308 Lab Manual

EC 2308 – MICROPROCESSOR AND MICROCONTROLLER LAB DEPT OF ECE

81

Assembly Listing: .model small .stack .data message db 0ah, 0dh, "This program displays the time " message1 db 0ah, 0dh, "Press any key to quit...", '$', 0ah, 0dh prompt db "Time :: " hours1 db 0 hours2 db 0 separator1 db ':' minutes1 db 0 minutes2 db 0 separator2 db ':' seconds1 db 0 seconds2 db 0 last db '$' divisor db 10h .code mov ax, @data mov ds, ax ; initialize data segment mov ah, 09h ; display a friendly message lea dx, message int 21h again: call GetTime ; call the procedure to get the time call ShowTime ; show the time mov ah, 01h ; check for user key press int 16h jz again ; if no key pressed do again mov ah, 04ch ; terminate the program int 21h GetTime proc mov ah, 02h ; BIOS function call to read real time clock int 1Ah mov al, ch ; resulting hours value in BCD is to be split div divisor ; into digits add al, 30h ; convert the digits into ASCII values add ah, 30h mov hours1, al ; store them in memory mov hours2, ah xor ax,ax ; clear AX register mov al, cl ; Now convert minutes in the same way and store div divisor add al, 30h add ah, 30h mov minutes1, al mov minutes2, ah

Page 82: EC2308 Lab Manual

EC 2308 – MICROPROCESSOR AND MICROCONTROLLER LAB DEPT OF ECE

82

xor ax,ax ; clear AX register mov al, dh ; convert seconds in the same way and store div divisor add al, 30h add ah, 30h mov seconds1, al mov seconds2, ah ret GetTime endp ShowTime proc mov ah, 02h ; set video cursor mov bh, 0 mov dh, 20d ; row and col position on screen mov dl, 10d int 10h mov ah, 09h ; display the time already stored in memory lea dx, prompt int 21h call delay ret ShowTime endp delay proc push cx mov cx, 0ffffh idleout: nop nop nop nop loop idleout pop cx ret delay endp end Result: The program should function as expected after assembling and linking into an executable .EXE program. It will display a clock on the screen. It will stop when the user presses a key.

Page 83: EC2308 Lab Manual

EC 2308 – MICROPROCESSOR AND MICROCONTROLLER LAB DEPT OF ECE

83

STOP WATCH Display Aim: To display a digital stopwatch on the PC screen allowing the user to start and stop the watch. Apparatus Required: Any Personal Computer running DOS or above OS. MASM software with debugger Theory: Every PC is equipped with BIOS that contains software to initialize the built in Timer IC to produce ticks with a periodicity of 18.2 ticks per every second. This does not rely on the real-time clock usually incorporated in the PC. The BIOS maintains the number of ticks elapsed since midnight or power-on of the machine. BIOS Interrupt 1Ah service provides the number of ticks elapsed at any time. One can use this service repeatedly to check for completion of 18 ticks, which would mean an approximate 1-second time gap. This can be used to update a memory variable to count seconds. After 60 seconds counting, the minute variable can be updated. Thus a stopwatch can be made to operate at the press of a key. Algorithm: Main Program:

1. Initialize Data Segment Register 2. Display a friendly message using DOS Int 21h function 09h 3. Call the procedure to show the watch with zero values 4. Check for user key press using BIOS Int 16h function 01h 5. If no key is pressed go to step 4 6. On key press, call the procedure to start the watch. 7. On return from the procedure terminate the program

Procedure Show_watch:

1. Position the video cursor at the desired location on secreen using BIOS Int 10h function 02h

2. Display the watch data in memory using DOS Int 21h function 09h 3. Return from the procedure

Procedure Start_Watch:

1. Get the current tick value using BIOS Int 1Ah function 00h 2. Store the last two digits of the returned value in DL into BL. This becomes the old

value 3. Get the current tick value using BIOS Int 1Ah function 00h 4. Subtract the old value from the new value 5. Check whether it is 18 (which means 1 second) 6. If it is less than 18, goto step 3 7. If it is equal to 18, then increment LSD of seconds. 8. If LSD is greater than 9, proceed to increment MSD of seconds and make LSD of

seconds equal to 0 9. Upon incrementing MSD of seconds if it is equal to 6, then make MSD equal to 0 and

proceed to update minutes. 10. Increment LSD of minutes.

Page 84: EC2308 Lab Manual

EC 2308 – MICROPROCESSOR AND MICROCONTROLLER LAB DEPT OF ECE

84

11. If LSD of minutes is greater than 9, increment MSD of minutes and make LSD equal to 0

12. If MSD of minutes is equal to 6, then make minutes and seconds equal to 0. 13. Call the procedure to Show the Watch. 14. Check for User key press using BIOS Int 16h function 01h. 15. If there is no key press proceed to step 1 16. If there is a key pressed, check whether that key is ‘q’. 17. If the key pressed is ‘q’, then return from the procedure. 18. Otherwise, go to step 1

Flow Chart: Main Program:

Start

Initialize Data Segment Register

Display a Friendly Message

Is a key Pressed

Call Start_watch

Stop

Call Show_Watch

Yes

No

Page 85: EC2308 Lab Manual

EC 2308 – MICROPROCESSOR AND MICROCONTROLLER LAB DEPT OF ECE

85

Show_watch Procedure: Start_Watch Procedure:

Start

Move Video Cursor to desired location

Display Timer data

Return

Start

Get BIOS Timer Tick count and save it in another register

Get BIOS Timer Tick count and compare it with previous value

Is the difference =18?

Update seconds LSD

A1

No

Yes

B1

Page 86: EC2308 Lab Manual

EC 2308 – MICROPROCESSOR AND MICROCONTROLLER LAB DEPT OF ECE

86

Y

Is Seconds LSD > 9?

A1

Increment Seconds MSD; Seconds LSD = 0

Is Seconds MSD = 6?

Increment Minutes LSD; Seconds MSD = 0

Is Minutes LSD > 9?

Increment Minutes MSD; Minutes LSD = 0

Is Minutes MSD = 6?

Minutes MSD = 0

A2

N

N

N

N

Y

Y

Y

Page 87: EC2308 Lab Manual

EC 2308 – MICROPROCESSOR AND MICROCONTROLLER LAB DEPT OF ECE

87

Assembly Listing: .model small .stack .data message db 0ah, 0dh, "This programs displays a stop watch" message1 db 0ah, 0dh, "Press a key to start and q to stop", '$', 0ah, 0dh prompt db "Timer :: " minutes1 db '0' minutes2 db '0' sep1 db ':' seconds1 db '0' seconds2 db '0' sep2 db '.' last db '$' divisor db 10h

B1

A2

Update respective memory locations

Show Timer

Is Key Pressed

Is the key = ‘q’

Return

Y

Y

N

N

Page 88: EC2308 Lab Manual

EC 2308 – MICROPROCESSOR AND MICROCONTROLLER LAB DEPT OF ECE

88

.code mov ax, @data mov ds, ax ; initialize data segment mov ah, 09h ; display a friendly message lea dx, message int 21h call show_watch ; show the watch again: mov ah, 01h ; check for user key press int 16h jz again ; if no key pressed then wait for user key call start_watch ; then start the watch mov ah, 04ch ; terminate the program int 21h start_watch proc doitagain: mov ah, 00h ; BIOS function call to read timer count int 1Ah ; BIOS Timer interrupt service mov bl, dl ; save current tick value in BL checkagain: mov ah, 00h ; Function to read system clock tick counter int 1Ah ; under BIOS interrupt service sub dl, bl ; find how many ticks have elapsed cmp dl, 18 ; is it equal to 1 second? jb checkagain ; if not, read the counter again mov al, seconds2 ; increment the last digit inc al cmp al, 39h ; check whether it exceeds 9 jbe update_seconds2 ; if not update Seconds2 mov al, 30h ; if so, change seconds2 to 0 mov seconds2, al mov al, seconds1 ; and then increment seconds1 inc al cmp al, 36h ; upon incrementing, is it 6? jb update_seconds1 ; if not update Seconds1 and go ahead mov al, 30h ; if so, change seconds1 to 0 first mov seconds1, al mov al, minutes2 ; then increment minutes2 inc al cmp al, 39h ; is it above 9 jbe update_minutes2 ; if not update this digit and go ahead mov al, 30h ; if so, change this digit to 0 mov minutes2, al ; mov al, minutes1 ; and affect the previous digit inc al ; cmp al, 36h jb update_minutes1 mov al, 0 update_minutes1: mov minutes1, al jmp done update_minutes2: mov minutes2, al

Page 89: EC2308 Lab Manual

EC 2308 – MICROPROCESSOR AND MICROCONTROLLER LAB DEPT OF ECE

89

jmp done update_seconds1: mov seconds1, al jmp done update_seconds2: mov seconds2, al done: call show_watch mov ah, 01h int 16h jnz check_key jmp doitagain check_key: mov ah, 00h int 16h cmp al, 'q' jnz doitagain ret start_watch endp show_watch proc mov dh, 10d ; desired row, col position mov dl, 10d mov ah, 02h ; set video cursor mov bh, 0 ; video page int 10h mov ah, 09h ; display the watch lea dx, prompt int 21h ret show_watch endp end Result: After assembling and linking into executable code, this program will display a timer as 00:00. When any key is pressed, it will start the watch and show the number of seconds and minutes. When the user presses the key ‘q’, the watch will stop and exit.