You are on page 1of 34

MICROPROCESSORS&MICROCONTROLLERS

Laboratory(EC362)Manual

Preparedby

A.M.V.N.MARUTHI,M.Tech
(Lecturer)

&
Y.SRICHAKRAPANI,M.Tech
(Lecturer)

DEPARTMENTOFECE
BAPATLAENGINEERINGCOLLEGE
BAPATLA

-1-

LISTOFEXPERIMENTS

ExperimentsBasedonALP(8086)
AssemblingandExecutingtheProgram..3

1.ProgramsonDataTransferInstructions.4
2.ProgramsonArithmeticandLogicalInstructions9
3.ProgramsonBranchInstructions17
4.ProgramsonSubroutines.20
5.SortingofanArray22
6.ProgramsonInterrupts(SoftwareandHardware)23
7.8086ProgramsusingDOSandBIOSInterrupts24

ExperimentsBasedonInterfacing&Microcontroller(8051)
8.DACInterfaceWaveformgenerations..26
9.StepperMotorControl.28
10.KeyboardInterface/LCDInterface.29
11.DataTransferbetweentwoPCsusingRS.232CSerialPort
12.ProgramsonDataTransferInstructionsusing8051Microcontroller32
13.ProgramsonArithmeticandLogicalInstructionsusing8051Microcontroller33
14.ApplicationswithMicrocontroller8051..34

-2-

ASSEMBLINGANDEXECUTINGTHEPROGRAM

WritinganALP
AssemblylevelprogramsgenerallyabbreviatedasALParewrittenintexteditorEDIT.
TypeEDITinfrontofthecommandprompttoopenanuntitledtextfile.
EDIT<filename>
Aftertypingtheprogramsavethefilewithappropriatefilenamewithanextension.ASM
Ex:Add.ASM
AssemblinganALP
ToassembleanALPweneededexecutablefilecalledMASM.EXE.Onlyifthisfileisin
currentworkingdirectorywecanassembletheprogram.Thecommandis
MASM<filename.ASM>

Iftheprogramisfreefromallsyntacticalerrors,thiscommandwillgivetheOBJECTfile.In
caseoferrorsitlistoutthenumberoferrors,warningsandkindoferror.
Note:Noobjectfileiscreateduntilallerrorsarerectified.

Linking
AftersuccessfulassemblingoftheprogramwehavetolinkittogetExecutablefile.
Thecommandis
LINK<Filename.OBJ>

Thiscommandresultsin<Filename.exe>whichcanbeexecutedinfrontofthecommand
prompt.

ExecutingtheProgram
Opentheprogramindebuggerbythecommand(noteonlyexefilescanbeopen)bythe
command.

CV<Filename.exe>
Thiswillopentheprogramindebuggerscreenwhereinyoucanviewtheassemblecode
withtheCSandIPvaluesattheleftmostsideandthemachinecode.Registercontent
,memorycontentalsoisviewedusingVIEWoptionofthedebugger.
Executeoptioninthemenuinthemenucanbeusedtoexecutetheprogrameitherin
singlesteps(F8)orburstexecution(F5).

-3-

1. PrograminvolvingDatatransferinstructions

i)Byteandworddatatransferindifferentaddressingmodes

DATASEGMENT
DATA1DB23H
DATA2DW1234H
DATA3DB0HDATA4
DW0H
DATA5DW2345H,6789H
DATAENDS
CODESEGMENT
ASSUMECS:CODE,DS:DATA
START:MOVAX,DATA
;InitializeDStopointtostartofthememory
MOVDS,AX
;setasideforstoringofdata
MOVAL,25X
;copy25Hinto8bitALregister
MOVAX,2345H
;copy2345Hinto16bitAXregister
MOVBX,AX
;copythecontentofAXintoBXregister(16bit)
MOV CL,AL
;copy the contentof AL into CL register
MOV AL,DATA1
;copiesthebyte contents of datasegment

;locationDATA1 into8bit AL
MOVAX,DATA2
;copiesthewordcontentsofdatasegmentmemory
;locationDATA2into16bitAX
MOVDATA3,AL
;copiestheALcontentintothebytecontentsofdata
;segmentmemorylocationDATA3
MOVDATA4,AX
;copiestheAXcontentintothewordcontentsof
;datasegmentmemorylocationDATA4
MOVBX,OFFSETDATA5;The16bitoffsetaddressofDSmemeorylocation
;DATA5iscopiedintoBX
MOVAX,[BX]
;copiesthewordcontentofdatasegment
;memorylocationaddressedbyBXinto
;AX(registerindirectaddressing)
MOVDI,02H
;addresselement
MOVAX,[BX+DI}
;copiesthewordcontentofdatasegment
;memorylocationaddressedbyBX+DIinto
;AX(baseplusindirectaddressing)
MOVAX,[BX+0002H]
;copiesthewordcontentofdatasegment
;memorylocationaddressedbyBX+0002Hinto
;(16bit)
MOVAL,[DI+2]
;registerrelativeaddressing
MOVAX,[BX+DI+0002H];copiesthewordcontentofdatasegment
-4-

MOVAH,4CH
21H

CODEENDS
ENDSTART

;memorylocationaddressedbyBX+DI+0002H
;intoAX(16bit)
;ExittoDOSwithfunctioncall4CHINT

;Assemblerstopreading

-5-

ii)Blockmove(withandwithoutoverlapping)

Withoutoverlapping

DATASEGMENT
XDB01H,02H,03H,04H,05H
YDB05DUP(0)
DATAENDS
CODESEGMENT
ASSUMECS:CODE,DS:DATA
START:MOVAX,DATA
MOVDS,AX
MOVCX,05H
LEASI,X+04
LEADI,X+04+03

;InitializeDataSegmentsMemoryLocations

;InitializeDStopointtostartofthememory
;setasideforstoringofdata
;Loadcounter
;SIpointerpointedtotopofthememoryblock
;03isdisplacementofoverlapping,DIpointedto
;thetopofthedestinationblock

Beforeexecution
00
00
00
00
00
05
04
03
02
01

Y,DI

X,SI

Afterexecution
05
04
03
02
01
05
04
03
02
01

-6-

WithOverlapping

DATASEGMENT
XDB01H,02H,03H,04H,05H;InitializeDataSegmentsMemoryLocations
DATAENDSCODE
SEGMENT
ASSUMECS:CODE,DS:DATA
START:MOVAX,DATA
;InitializeDStopointtostartofthememory
MOVDS,AX
;setasideforstoringofdata
MOVCX,05H
;Loadcounter
LEASI,X+04
;SIpointerpointedtotopofthememoryblock
LEADI,X+04+03
;03isdisplacementofoverlapping,DIpointedto
;thetopofthedestinationblock
UP: MOVBL,[SI]
;MovetheSIcontenttoBLregisterMOV
[DI],BL
;MovetheBLregistertocontentofDI
DECSI
;UpdateSIandDI
DECDI
DECCX
;Decrementthecountertillitbecomeszero
JNZUP
MOVAH,4CH
INT21H
CODEENDS
ENDSTART

DSBeforeexecution

xx
xx

xx
xx
xx
05
04
03
02
01

DI

SI

DSAfterexecution

xx
xx
05
04
03

02
01
03
02
01

-7-

iii)BlockInterchange

DATASEGMENT
XDB01H,02H,03H,04H,05HY
DB
11H,12H,13H,14H,15H
DATAENDS
CODESEGMENT
ASSUMECS:CODE,DS:DATA
START:MOVAX,DATA
MOVDS,AX
MOVCX,05H
LEASI,X
LEADI,Y
UP: MOVBL,[SI]
MOVAL,[DI]
MOV[SI],AL
MOV[DI],BL
INCSI
INCDI
DECCX
JNZUP
MOVAH,4CH
INT21H

;Loadthecounter
;SIpointedtothesourcelocationx
;DIpointedtothedestinationlocationy
;MovetheSIcontenttoBLregister
;MovetheDIcontenttoALregister
;MoveALregistercontenttocontentofSI
;MoveBLregistercontenttocontentofDI
;UpdateSIandDI
;Decrementthecountertillitbecomeszero

CODEENDS
ENDSTART

DSBeforeexecutionDSAfterexecution

15

14
13

05

12

04

11

03
02

05
04

01

Y,DI

15

03

14

02

13

01

12
11

X,SI
-8-

2)PrograminvolvingArithmeticandlogicoperationslikeadditionandsubtractionofmulti
precisionnumbers

i)16BitAddition

DATASEGMENT
NUMDW1234H,0F234H
SUMDW2DUP(0)
DATAENDSCODE
SEGMENT
ASSUMECS:CODE,DS:DATA
START:MOVAX,DATA
MOVDS,AX
MOVAX,NUM
MOVBX,0H
ADDAX,NUM+2
JNCDOWN
INCBX
DOWN:MOVSUM,AX
MOVSUM+2,BX
MOVAH,4CH
INT21H
CODEENDS
ENDSTART

;FirstnumberloadedintoAX
;ForcarryBXregisteriscleared
;SecondnumberaddedwithAX
;Checkforcarry
;IfcarrygeneratedincrementtheBX
;Storingthesumvalue
;Storingthecarryvalue

INPUT :1234H,F234H
OUTPUT:10468H

-9-

ii)32Bitaddition

DATASEGMENT
NUM1DW0FFFFH,0FFFFH
NUM2DW1111H,1111HSUM
DW4DUP(0)
dATAENDSCODE
SEGMENT
ASSUMECS:CODE,DS:DATA
START:MOVAX,DATA
MOVDS,AX
MOVAX,NUM1
ADDAX,NUM2
MOVSUM,AX
MOVAX,NUM1+2
ADCAX,NUM2+2
JNCDOWN
MOVSUM+4,01H
DOWN:MOVSUM+2,AX
MOVAH,4CH
INT21H
CODEENDS
ENDSTART

;Move LSB of NUM1 to AX


;Add LSB of NUM2 to AX
;StoretheLSBinSUM
; Move MSB of NUM1 to AX
; Add MSB of NUM2 to AX
;Checkforcarry
;StorethecarryinSUM+4
;StoretheMSBinSUM+2

INPUT:0FFFFFFFFH,011111111H
OUTPUT:0111111110H

-10-


iv)16BitSubtraction

DATASEGMENT
NUMDW4567H,2345H
DIFDW1DUP(0)
DATAENDSCODE
SEGMENT
ASSUMECS:CODE,DS:DATA
START:MOVAX,DATA
MOVDS,AX
CLC
LEASI,NUM
MOVAX,[SI]
SBBAX,[SI+2]

MOVDIF,AX
MOVAH,4CH
INT21H
CODEENDS
ENDSTART

;ClearingCarry
;SIpointedtotheNUM
;MoveNUM1toAX
;MovetheSItoNum2andsubtractwithAX(Takes
;careforbothsmalleraswellaslarger
;Numbersubtraction)
;Storetheresult

INPUT:4567H,2345H
OUTPUT:2222

-11-

v)32BitSubtraction

DATASEGMENT
NUM1 DW 2345H,6762H
NUM2 DW 1111H,1111H
DIFDW2DUP(0)
DATAENDSCODE
SEGMENT
ASSUMECS:CODE,DS:DATA
START:MOVAX,DATA
MOVDS,AX
LEASI,NUM1
LEADI,NUM2
MOVAX,[SI]
MOVBX,[DI]
SUBAX,BX
MOVDIF,AX
INCSI
INCSI
INCDI
INCDI
MOVAX,[SI]
MOVBX,[DI]
SBBAX,BX
MOVDIF+2,AX
MOVAH,4CH
INT21H
CODEENDS
ENDSTART

;SIpointedtotheLSBofNUM1
;DIpointedtotheLSBofNUM2
;MovethecontentofSItoAX
;MovethecontentofDItoBX
;SubtractfromBXtoAX
;StoretheLSBresultinDIF
;UpdateSItopointtheMSBofNUM1(if
;ADDSI,02instructionitsaffectcarryflag)
;UpdateDItopointtheMSBofNUM2
;MovethecontentofSItoAX
;MovethecontentofDItoBX
;SubtractwithborrowfromBXtoAX
;StoretheMSBresultinDIF+2

INPUT:23456762,11111111
OUTPUT:12345651

INPUT:11111111,23451234
OUTPUT:EDCBFEDD

-12-

MultiplicationandDivisionofsignedandunsignedHexadecimalnumbers
vi)16Bitmultiplicationforunsignednumbers

DATASEGMENT
NUMDW1234H,1234H
PRODDW2DUP(0)DATA
ENDS
CODESEGMENT
ASSUMECS:CODE,DS:DATA
START:MOVAX,DATA
MOVDS,AX
LEASI,NUM
;SIpointedtotheMultiplicand
MOVAX,[SI]
;MultiplicandhastobeinAXregister
MOVBX,[SI+2]

;SI+2pointedtotheMultiplierandmoveitto
BXMULBX
;Performthemultiplication
MOVPROD,AX
;32bitproductstoredinDXAXregisters
MOVPROD+2,DX
MOVAH,4CH
INT21H
CODEENDSEND
START

INPUT:Multiplicand1234H,
Multiplier 1234H
OUTPUT:DX014B
AX5490

-13-

vii)16Bitmultiplicationforsignednumbers

DATASEGMENT
NUMDW2,1
PRODDW2DUP(0)
DATAENDS
CODESEGMENT
ASSUMECS:CODE,DS:DATA
START:MOVAX,DATA
MOVDS,AX
LEASI,NUM
;SIpointedtotheMultiplicand
MOVAX,[SI]
;MultiplicandhastobeinAXregister
MOVBX,[SI+2]
;SI+2pointedtotheMultiplierandmoveittoBX
IMULBX
;Performthesignmultiplicationusingsign
;Multiplicationoperator(IMUL)
MOVPROD,AX
;32bitproductstoredinDXAXregisters
MOVPROD+2,DX
MOVAH,4CH
INT21H
CODEENDS
ENDSTART

INPUT:Multiplicand2,
Multiplier 1
OUTPUT:DXFFFF
AXFFFE

;Resultisintwocomplementform.

-14-


x)16BitDivisionforUnsignednumbers

DATASEGMENT
NUM1DW4567H,2345H
NUM2DW4111H
QUO DW 2 DUP(0)
REM DW 1 DUP(0)
DATAENDS
CODESEGMENT
ASSUMECS:CODE,DS:DATA
START:MOVAX,DATA
MOVDS,AX
MOVAX,NUM1
MOVDX,NUM1+2
DIVNUM2
MOVQUO,AX
MOVREM,DX
MOVAH,4CH
INT21H
CODEENDS
ENDSTART

;Move the lower bit of Dividend to AX


;MovethehigherbitofDividendtoDX
;PerformtheDivisionoperation
;StorethequotienttoAX
;StoretheremindertoDX

INPUT:Dividend23454567,
Divisor 4111,
0UTPUT:AX8AC5H(quotient);DX
0952H(reminder);

-15-

xi)16BitDivisionforSignednumbers

DATASEGMENT
NUM1DW4567H,2345H
NUM2DW4111H
QUO DW 2 DUP(0)
REM DW 1 DUP(0)
DATAENDS
CODESEGMENT
ASSUMECS:CODE,DS:DATA
START:MOVAX,DATA
MOVDS,AX
MOVAX,NUM1
MOVDX,NUM1+2
CWD
IDIVNUM2
MOVQUO,AX
MOVREM,DX
MOVAH,4CH
INT21H
CODEENDS
ENDSTART

;MovethelowerbitofDividendtoAX
;MovethehigherbitofDividendtoDX
;PerformthesignDivisionoperationusingIDIV
;StorethequotienttoAX
;StoretheremindertoDX

INPUT:Dividend44444444,
Divisor 2222,
0UTPUT:AXFE(quotient);
DXFF(reminder)

;Resultisintwocomplementform.

-16-


3)PROGRAMSONBRANCHINSTRUCTIONS

i)Tofindweatherisevenorodd
DATASEGMENTX
DW27H
MSG1DB19,13,'NUMBERISEVEN$'
MSG2DB10,13,'NUMBERISODD$'
DATAENDS

CODESEGMENT
ASSUMECS:CODE,DS:DATA
START:MOVAX,DATA
MOVDS,AX
MOVAX,X
TESTAX,01H
;TestforEven/Oddnumber.
JNZEXIT
;ifitisEvengotoExitlabel.
MOVBL,2
DIVBL
CMPAH,0H
JNZEXIT
LEADX,MSG1
;DeclareitisEvennumber.
MOVAH,09H
INT21H
JMPLAST
EXIT:LEADX,MSG2
;DeclareitisOddnumber.
MOVAH,09H
INT21H
LAST:MOVAH,4CHINT
21H

CODEENDS
ENDSTART

Result:Output:NumberisODD

-17-

ii)TofindnumberofLogicalonesandzerosinagivendata

DATASEGMENTX
DB0AAHONE
DB?ZERODB
?
DATAENDS

CODESEGMENT
ASSUMECS:CODE,DS:DATA
START:MOVAX,DATA
MOVDS,AX
MOVAH,X
MOVBL,8
MOVCL,1
UP:RORAH,CL
JNCDOWN
INCONE
JMPDOWN1
DOWN:INCZERO
DOWN1:DECBL
JNZUP

;InitializeBLto8.
;InitializeCLto1.
;Performthesinglebitrotateoperation
;withrespecttoright.
;IfnocarrygotoDOWNlabel.
;Incrementone.
;Jump to DOWN1.
;Increment ZERO.
;DecrementtheBL.
;IfnozerogotoUPlabel.

MOVAH,4CH
INT21H

CODEENDS
ENDSTART

Output:Ones04
Zeros04

-18-

iii)Programtofindlargestnumberamongthegivendata

DATASEGMENT
XDW0010H,52H,30H,40H,50H
LARDW?
DATAENDS

;startofdatasegment

CODESEGMENT
ASSUMECS:CODE,DS:DATA
START:MOVAX,DATA
MOVDS,AX
MOVCX,05H

;startofcodesegment

;endofdatasegment

LEASI,X
MOVAX,[SI]

UP:

DECCX
CMPAX,[SI+2]
JACONTINUE
MOVAX,[SI+2]

CONTINUE:ADDSI,2
DECCX
JNZUP
MOVLAR,AX
MOVAH,4CH
INT21H
CODEENDS
ENDSTART

;initializedatasegment
;loadCXregisterwithnumberofdatawords
inX
;initializeSItopointtothefirstnumber
;makeacopyofthenumberpointedbySIin
AX
;setcountvalueinCXforcomparison
;comparetwoadjacentnumbers(oneisin
AXandtheotherispointedbySI+2)
;ifcontentsofAXisgreaterthanthenext
numberinarrayretainthecontentsofAX
;ifnotmakeacopyofthelargernumberin
AX
;pointtothenextnumber
;decrementCXtocheckifallnumbersare
compared
;ifnocontinuetocompare
;ifyesmakeacopyofAX(largestnumber)
inuserdefinedmemorylocationLAR
;terminatetheprocess
;endofcodesegment

-19-

4)PROGRAMUSINGSUBROUTINES:
PROGRAMTOFINDFACTORIALOFANUMBERUSINGPROCEDURE
NUMEQU3
MSGDB'FACTORIALOF',NUM+'0','IS:'
ASCRESDB4DUP(?),'H',0DH,0AH,'$'
RESDW?
HEXCODEDB'0123456789ABCDEF'
.CODE
HEX_ASCPROC
MOVDL,10H
MOVAH,0
MOVBX,0
DIVDL

;DIVAL/DLWHEREAL=CHAR&DL=10H
MOVBL,AL

;AL=QUOTIENT
MOVDH,HEXCODE[BX]
MOVBL,AH
;AH=REMAINDER
MOVDL,HEXCODE[BX]
RET
HEX_ASCENDP
FACTPROC
CMPAX,01
JEEXIT
PUSHAX
DECAX
CALLFACT
POPAX
MULRES
MOVRES,A
RET
EXIT:
MOVRES,01
RET
FACTENDP

;IFN=1,FACT=1ELSEFACT=N*FACT(N1)

;N1
;FACT(N1)

;N*FACT(N1)
;RES=FACTORIAL

MAIN:
MOVAX,@DATA
MOVDS,AX
MOVAX,NUM
;AX=N
CALLFACT
MOVAL,BYTEPTRRES+1
;CONVERTMSBOFRESULTTOASCII
CALLHEX_ASC
-20-

MOVASCRES,DH
MOVASCRES+1,DL
MOVAL,BYTEPTRRES;CONVERTLSBOFRESULTTOASCII
CALLHEX_ASC
MOVASCRES+2,DH
MOVASCRES+3,DL
MOVAH,09H
MOVDX,OFFSETMSG;DISPLAYMSG
INT21H
MOVAH,4CH

;EXIT
INT21H
ALIGN16
ENDMAIN
Output:
Factorialofthenumberis06

-21-


5)PROGRAMTOSORTTHEARRAYS
DATASEGMENT
xDW42H,34H,26H,17H,09H
LENEQU05
ASCDDB10DUP(0)
DATAENDS

;startofdatasegment

;endofdatasegment

CODESEGMENT
ASSUMECS:CODE,DS:DATA
START:MOVAX,DATA
MOVDS,AX

MOVBX,LEN1

MOVCX,BX

UP1: MOVBX,CX
LEASI,X

UP: MOVAX,[SI]

MOVDX,[SI+2]

CMPAX,DX

JBDOWN/JADOWN

MOV[SI],DX

MOV[SI+2],AX

DOWN: INCSI
INCSI
DECBX
JNZUP
DECCX
JNZUP1
MOVAH,4CH
INT21H
CODEENDS
ENDSTART

;startofcodesegment
;initializedatasegment
;loadBX(counter1) withcount
value(number ofdatawordsinarray1)
;make a copy ofthe countvalueinCX(counter2)
;loadtheupdatedCXinBX
;SI pointstothe firstnumberinthearray
;make a copy ofthe numberpointedby SI in
AX
;make a copy ofthe nextnumberinDX
;compare boththe numbers
;ifAX< DX/AX > DX retainthemasitis
;ifnotsortthe numbersinascendingorder
;pointtothenextnumber
;decrementthecounter1
;comparetillthelargernumberissortedat
theendofthearray
;decrementcounter2
;comparetillthenumbersaresortedin
ascendingorder
;terminatetheprocess
;endofcodesegment

OUTPUT:0917263442

-22-

6)PROGRAMTOUSESOFTWAREANDHARDWAREINTERRUPTSFORRECEIVINGAINPUT
FROMKEYBOARDANDDISPLAYITONSCREEN.

DATASEGMENT
INKEYDB?
BUFDB20DUP(0)
MESDB10,13,BAPATLAEINGINEERINGCOLLEGE$'DATAENDS

CODESEGMENT
ASSUMECS:CODE,DS:DATA

START:

MOVAX,DATA
MOVDS,AX
MOVAH,01H
INT21H
MOVINKEY,AL
MOVBUF,10
MOVAH,0AH

;DOSfunctiontoreadacharacterfromkeyboard;with
echo.[AL=8bitcharacter]
;ReturnsASCIIvalueofthepressedkey.
;Loadhowmanycharacterstoenter.
;Dosfunctiontoreadstringofcharactersfrom
;keyboard.

LEADX,BUF
INT21H
MOVAH,06H
;Dos function to display a
character.MOVDL,'A';Loadthecharactertobedisplayed.
INT21H

MOVAH,09H
LEADX,MES
INT21H
MOVAH,4CH
INT21H
CODEENDS
ENDSTART

;Dosfunctiontoreadstringofcharactersfrom
;keyboard.
;DX=offsetaddressofthemessage

-23-

7)PROGRAMTOFINDTHELARGESTNUMBERUSINGDOSDISPLAYINTERRUPTS

DATASEGMENT
;startofdatasegment
XDW0010H,0052H,0030H,0040H,0050H
MESDB10,13,'LARGESTNUMBERAMONGTHESERIESIS$'
DATAENDS
;endofdatasegment
CODESEGMENT
ASSUMECS:CODE,DS:DATA
START:MOVAX,DATA
MOVDS,AX
MOVCX,05H

;startofcodesegment
;initializedatasegment
;loadCXregisterwith
numberofdatawordsinarray
;SIpointstostartofdataword
arrayX

XLEASI,X

MOVAX,[SI]

;makeacopyofthe
firstnumberinAX
;initializeCXwithcount
valueforcomparison

DECCX
UP:

CMPAX,[SI+2]

;comparethecontentsofAX
andthenumberpointedbySI+2
;ifAXisgreaterthanthenext

JACONTINUE

numberinarraythenretain
thecontentsofAX
MOVAX,[SI+2]

;elsemakeacopyofthenext
number(largernumber)in
AX
;pointtonextnumberinarray

;decrementCX
;checkifallnumbers

CONTINUE:ADDSI,2
DECCX
JNZUP
are

comparedifnocontinue
comparison
;ifyesconvertlargestbinary
numberinAXtounpackedBCD
;convertunpackedBCDto
unpackedASCIIequivalent

;makeacopyofitinAX
;displaythemessagestoredat
userdefinedmemorylocation
MES

AAM
ADDAX,3030H
MOVBX,AX
MOVAX,09H
LEADX,MES
INT21H
MOVDL,BH
MOV
AH,02HINT
21H

;displaythelargestnumber

MOVDL,BL
INT21H
MOVAH,4CH
INT21H

;terminatetheprocess

CODEENDS

;endofcodesegment

-24-

ENDSTART

OUTPUT:LARGESTNUMBERAMONGTHESERIESIS0052

-25-

8)PROGRAMONDACWAVEFORMGENERATIONS:
ALPTOGENERATEARECTANGULARFREQUENCYOF2KHzFREQUENCY

ADDRESS

INSTRUCTION OPCODE

comment

2900

MOVAL,80

C6C080

movethecontrolwordforportaundermode0
operationintoalregister

2903
26h

OUT26,AL

E626

copythecontentsintocrregisterport ofaddress

2905

MOVAL,OFFH C6C0FF

copy0intoalregisteri.e.lowsignal.

2908

OUT50,AL

E620

sendthislowsignaltoporta.i.e.address20h

290a

CALL3800

E8F30E

callaproceduretointroducesomedelaysothat

theSignalstayslowforsometime.
290D

MOVAL,00

F600

NowthesignalismadehighandkeptinALregister.

290F

OUT20,AL

E620

SendthishighsignaltoportA.i.e.address20H

2911

CALL8500

E8EC5B

Callingtheproceduretointroducesomedelayso

thatthesignalstayshighforsometime
2914

JMP2905

E9EEFF

Theloopisinfiniteandrectangularwaveis

generatedofRequiredfrequency
2917

HLT

F4

3800

MOVCX,002AHC7C12A00

Terminatestheprogram
MovethenumberintoCXregistersothata

rectangularwaveof2KHzfrequencyisgenerated
3804

NOP

90

Introducessomedelay

3805

NOP

90

Introducessomedelay

3806

LOOP3804

E2FC

Loopexecutesandintroducesdelay

3808

RET

C3

Returnstothecallingprogram

8500

MOVCX,002AHC7C1200

MovesthenumberintoCXregistersothata

rectangularwaveisgenerated

-26-

8504

NOP

90

Introducesadelay

8505

NOP

90

Introducesadelay

8506

NOP

90

Introducesadelay

8507

NOP

90

Introducesadelay

8508

NOP

90

Introducesadelay

8509

LOOP8504

E2F9

Loopexecutesandintroducesdelay

RET

C3

Returnstothecallingprocedure

850B

-27-

9)STEPPERMOTORINTERFACE

DATASEGMENT
PORTA EQU 120H
PORTB EQU 121H
PORTC EQU 122H
CWRDEQU123H
DATAENDS

CODESEGMENT
ASSUMECS:CODE,DS:DATA
START:
MOVAX,DATA
MOVDS,AX
MOVAL,80H
;initialise8255,portaaso/pport
MOVDX,CWRD
OUTDX,AL
MOVDX,PORTA
MOVAL,88H
;loadinitialbitpattern
OUTDX,AL
;outputonporta
UP:
CALLDELAY
ROLAL,01H
;rotatelefttogetexitationsequenceof11,22,44,88
OUTDX,AL
JMPUP
DELAY:
MOVCX,0FFFFH;delaycanbeadjustedtogetdifferentspeeds
UP2:
MOVBX,0FFH
UP1:
DECBX
JNZUP1
DECCX
JNZUP2
RET
MOVAH,4CH
INT21H
CODEENDS
ENDSTART

-28-

10)i)MATRIXKEYBOARDINTERFACING

DATASEGMENT
PORTA EQU 120H
PORTC EQU 122H
CWRDEQU123H
ARRAYDB'0123456789.+*/%ACK=MMMM'
DATAENDS
CODESEGMENT
ASSUMECS:CODE,DS:DATA
START:
MOVAX,DATA
MOVDS,AX
;initialisedatasegment
MOVAL,90H
;initialise8255portaasi/pandportcaso/p
MOVDX,CWRD
OUTDX,AL
REPEAT:
MOVDX,PORTC
;makefirstrowofthekeyboardhighthroughpc0
MOVAL,01
OUTDX,AL
MOVDX,PORTA
INAL,DX
;inputcontentsofportaandcheckifkeyispressed
CMPAL,00
;infirstrow.
JZNEXT
JMPFIRSTROW
NEXT:
MOVDX,PORTC
;ifkeynotfoundinfirstrow,checkifkeyisin
;secondrow
MOVAL,02
OUTDX,AL
MOVDX,PORTAIN
AL,DX
CMPAL,00
JNZSECONDROW
MOVAL,04
;ifkeynotfoundthencheckforkeyclosurein
;thirdrow
MOVDX,PORTC
OUTDX,AL
MOVDX,PORTAIN
AL,DX
CMPAL,00H
JNZTHIRDROW
JMPREPEAT

FIRSTROW:CALLDELAY
LEASI,ARRAY

;checkallthekeysonebyoneinfirstrow

-29-

UP:

SHRAL,1
JCDISPLAY
INCSI
JMPUP
JMPDISPLAY

;ifkeyfoundjumptothedisplaysubroutine

SECONDROW:CALLDELAY
LEASI,ARRAY+08H
UP1:SHRAL,1
JCDISPLAY
INCSI
JMPUP1

;secondrowkeysfromarray+08
;ifkeyfoundjumptothedisplaysubroutine

THIRDROW:CALLDELAY
LEASI,ARRAY+10H
UP2:
SHRAL,1
JCDISPLAY
INCSI
JMPUP2
JMPDISPLAY
DISPLAY:
MOVDL,[SI]
CMPDL,97
JZEXIT
MOVAH,02H
INT21H
JMPREPEAT

;thirdrowkeysfromarray+16(dec)
;ifkeyfoundjumptothedisplaysubroutine

;24indecimal.8x3rows=24keys
;displaykeynoinascii

DELAY:
L1:

MOV BX,0FFFFH
MOV CX,0FFFH L2:
DECCX
JNZL2
DECBX
JNZL1
RET

EXIT:MOVAH,4CH
INT21H

CODEENDS
ENDSTART

-30-

ii)SEVENSEGMENTDISPLAYINTERFACE

DATASEGMENT
PORTA EQU 120H
PORTB EQU 121H
PORTC EQU 122H
CWRDEQU123H
TABLEDB8CH,0C7H,86H,89HDATA
ENDS

CODESEGMENT
ASSUMECS:CODE,DS:DATA
START:
MOVAX,DATA
MOVDS,AX
MOVAL,80H
MOVDX,CWRDOUT
DX,AL
MOVBH,04
LEASI,TABLE

;intialisedatasegment
;initialise8255portbandportcaso/p

;BH=noofdigitstobedisplayed
;SI=startingaddressoflookuptable

NEXTDIGIT:MOVCL,08
MOVAL,[SI]
NEXTBIT:
ROLAL,01
MOVCH,AL
MOVDX,PORTB
OUTDX,ALMOV
AL,01
MOVDX,PORTC

;CL=noofsegments=08

;saveal
;onebitissentoutonportb

;oneclockpulsesentonpc0

OUTDX,ALDEC
AL
MOVDX,PORTC

OUTDX,AL
MOVAL,CH
DECCL
JNZNEXTBITDEC
BH
INCSI
JNZNEXTDIGIT
MOVAH,4CH
INT21H
CODEENDSEND
START

;getthesevensegmentcodebackinal
;sendall8bits,thusonedigitisdisplayed

;displayallthefourdigits
;exittodos

-31-

12)ProgramsonDataTransferInstructionsfor8051Microcontroller:

Aim:
Writea8051ALPtocopyablockof10bytesfromRAMlocationstartingat37hto

RAMlocationstartingat59h.

Program:

ORG00H
MOVR0,#37h

;sourcepointer

MOVR1,#59h

;destpointer

MOVR2,#10

;counter

L1:MOVA,@R0

MOV@R1,A

INCR0

INCR1

DJNZR2,L1

END

Output:

Before execution
R0 37H
05
04
03
02
01
05
04
03
02
01

After execution
R1 59H
05
04
03
02
00
05
04
03
02
01

-32-

13)ProgramsonArithmeticandLogicalOperations:
a) ADDITIONOFFIRST10NATURALNUMBERS
Aim: Write an 8051 ALP for addition of first 10 natural numbers
Program:
ORG 00H
MOV R0,#0AH
LOOP:ADDC A,R0
DJNZ R0,LOOP
MOV R1,A
END
Output:
R1: 37h

b)ADDITIONOFTWO16BITNUMBERS:

Aim: Write an 8051 ALP for addition of two 16-bit numbers


Program:

MOVA,R7;Movethelowbyteintotheaccumulator
ADDA,R5;Addthesecondlowbytetotheaccumulator
MOVR3,A;Movetheanswertothelowbyteoftheresult
MOVA,R6;Movethehighbyteintotheaccumulator
ADDCA,R4;Addthesecondhighbytetotheaccumulator,pluscarry.
MOVR2,A;Movetheanswertothehighbyteoftheresult
MOVA,#00h;Bydefault,thehighestbytewillbezero.
ADDCA,#00h;Addzero,pluscarryfromstep2.
MOVMOVR1,A;Movetheanswertothehighestbyteoftheresult

Output:
answernowresidesinR1,R2,andR3.RET

-33-

14)Programson8051Applications:
Aim:
Writea8051ALPusingTimer0tocreatea10khzsquarewaveonP1.0
Program:
ORG00H
MOVTMOD,#02H

;8bitautoreloadmode

MOVTH0,#50

;50reloadvalueinTH0

SETBTR0

;starttimer0

LOOP: JNBTF0,LOOP ;waitforoverflow


CLRTF0

;cleartimer0overflowflag

CPLP1.0

;toggleportbit

SJMPLOOP

;repeat

END

-34-

You might also like