You are on page 1of 34

MICROPROCESSORS&MICROCONTROLLERS

Laboratory(EC353)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-
;memorylocationaddressedbyBX+DI+0002H
;intoAX(16bit)
MOVAH,4CH ;ExittoDOSwithfunctioncall4CHINT
21H

CODEENDS ;Assemblerstopreading
ENDSTART

-5-
ii)Blockmove(withandwithoutoverlapping)

Withoutoverlapping

DATASEGMENT
XDB01H,02H,03H,04H,05H ;InitializeDataSegmentsMemoryLocations
YDB05DUP(0)
DATAENDS
CODESEGMENT
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

Beforeexecution

00
00

00
00
00 Y,DI

05
04

03
02
01 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 DI
xx
xx
05
SI
04
03

02
01 X

DSAfterexecution
02
xx
01
xx
03
05
02
04
01
03

-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 ;Loadthecounter
LEASI,X ;SIpointedtothesourcelocationx
LEADI,Y ;DIpointedtothedestinationlocationy
UP: MOVBL,[SI] ;MovetheSIcontenttoBLregister
MOVAL,[DI] ;MovetheDIcontenttoALregister
MOV[SI],AL ;MoveALregistercontenttocontentofSI
MOV[DI],BL ;MoveBLregistercontenttocontentofDI
INCSI ;UpdateSIandDI
INCDI
DECCX ;Decrementthecountertillitbecomeszero
JNZUP
MOVAH,4CH
INT21H

CODEENDS
ENDSTART

DSBeforeexecutionDSAfterexecution

15

14

13 05

12 04

03

11
02
05
Y,DI 01
04
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 ;FirstnumberloadedintoAX
MOVBX,0H ;ForcarryBXregisteriscleared
ADDAX,NUM+2 ;SecondnumberaddedwithAX
JNCDOWN ;Checkforcarry
INCBX ;IfcarrygeneratedincrementtheBX
DOWN:MOVSUM,AX ;Storingthesumvalue
MOVSUM+2,BX ;Storingthecarryvalue
MOVAH,4CH
INT21H
CODEENDS
ENDSTART

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 ;Move LSB of NUM1 to AX
ADDAX,NUM2 ;Add LSB of NUM2 to AX
MOVSUM,AX ;StoretheLSBinSUM
MOVAX,NUM1+2 ; Move MSB of NUM1 to AX
ADCAX,NUM2+2 ; Add MSB of NUM2 to AX
JNCDOWN ;Checkforcarry
MOVSUM+4,01H ;StorethecarryinSUM+4
DOWN:MOVSUM+2,AX ;StoretheMSBinSUM+2
MOVAH,4CH
INT21H
CODEENDS
ENDSTART

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 ;ClearingCarry
LEASI,NUM ;SIpointedtotheNUM
MOVAX,[SI] ;MoveNUM1toAX
SBBAX,[SI+2] ;MovetheSItoNum2andsubtractwithAX(Takes
;careforbothsmalleraswellaslarger
;Numbersubtraction)
MOVDIF,AX ;Storetheresult
MOVAH,4CH
INT21H
CODEENDS
ENDSTART

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 ;SIpointedtotheLSBofNUM1
LEADI,NUM2 ;DIpointedtotheLSBofNUM2
MOVAX,[SI] ;MovethecontentofSItoAX
MOVBX,[DI] ;MovethecontentofDItoBX
SUBAX,BX ;SubtractfromBXtoAX
MOVDIF,AX ;StoretheLSBresultinDIF
INCSI ;UpdateSItopointtheMSBofNUM1(if
;ADDSI,02instructionitsaffectcarryflag)
INCSI
INCDI ;UpdateDItopointtheMSBofNUM2
INCDI
MOVAX,[SI] ;MovethecontentofSItoAX
MOVBX,[DI] ;MovethecontentofDItoBX
SBBAX,BX ;SubtractwithborrowfromBXtoAX
MOVDIF+2,AX ;StoretheMSBresultinDIF+2
MOVAH,4CH
INT21H
CODEENDS
ENDSTART

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 ;Move the lower bit of Dividend to AX
MOVDX,NUM1+2 ;MovethehigherbitofDividendtoDX
DIVNUM2 ;PerformtheDivisionoperation
MOVQUO,AX ;StorethequotienttoAX
MOVREM,DX ;StoretheremindertoDX
MOVAH,4CH
INT21H
CODEENDS
ENDSTART

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 ;MovethelowerbitofDividendtoAX
MOVDX,NUM1+2 ;MovethehigherbitofDividendtoDX
CWD
IDIVNUM2 ;PerformthesignDivisionoperationusingIDIV
MOVQUO,AX ;StorethequotienttoAX
MOVREM,DX ;StoretheremindertoDX
MOVAH,4CH
INT21H
CODEENDS
ENDSTART

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 ;InitializeBLto8.
MOVCL,1 ;InitializeCLto1.
UP:RORAH,CL ;Performthesinglebitrotateoperation
;withrespecttoright.
JNCDOWN ;IfnocarrygotoDOWNlabel.
INCONE ;Incrementone.
JMPDOWN1 ;Jump to DOWN1.
DOWN:INCZERO ;Increment ZERO.
DOWN1:DECBL ;DecrementtheBL.
JNZUP ;IfnozerogotoUPlabel.

MOVAH,4CH
INT21H

CODEENDS
ENDSTART

Output:Ones04
Zeros04

-18-

iii)Programtofindlargestnumberamongthegivendata

DATASEGMENT ;startofdatasegment
XDW0010H,52H,30H,40H,50H
LARDW?
DATAENDS ;endofdatasegment

CODESEGMENT ;startofcodesegment
ASSUMECS:CODE,DS:DATA
START:MOVAX,DATA ;initializedatasegment
MOVDS,AX
MOVCX,05H ;loadCXregisterwithnumberofdatawords
inX
LEASI,X ;initializeSItopointtothefirstnumber
MOVAX,[SI] ;makeacopyofthenumberpointedbySIin
AX
DECCX ;setcountvalueinCXforcomparison
UP: CMPAX,[SI+2] ;comparetwoadjacentnumbers(oneisin
AXandtheotherispointedbySI+2)
JACONTINUE ;ifcontentsofAXisgreaterthanthenext
numberinarrayretainthecontentsofAX
MOVAX,[SI+2] ;ifnotmakeacopyofthelargernumberin
AX
CONTINUE:ADDSI,2 ;pointtothenextnumber
DECCX ;decrementCXtocheckifallnumbersare
compared
JNZUP ;ifnocontinuetocompare
MOVLAR,AX ;ifyesmakeacopyofAX(largestnumber)
inuserdefinedmemorylocationLAR
MOVAH,4CH ;terminatetheprocess
INT21H
CODEENDS ;endofcodesegment
ENDSTART

-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 ;IFN=1,FACT=1ELSEFACT=N*FACT(N1)
JEEXIT
PUSHAX
DECAX ;N1
CALLFACT ;FACT(N1)
POPAX
MULRES ;N*FACT(N1)
MOVRES,A X ;RES=FACTORIAL
RET
EXIT:
MOVRES,01
RET
FACTENDP

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 ;startofdatasegment
xDW42H,34H,26H,17H,09H
LENEQU05
ASCDDB10DUP(0)
DATAENDS ;endofdatasegment

CODESEGMENT ;startofcodesegment
ASSUMECS:CODE,DS:DATA
START:MOVAX,DATA ;initializedatasegment
MOVDS,AX
MOVBX,LEN1 ;loadBX(counter1) withcount
value(number ofdatawordsinarray1)
MOVCX,BX ;make a copy ofthe countvalueinCX(counter2)
UP1: MOVBX,CX ;loadtheupdatedCXinBX
LEASI,X ;SI pointstothe firstnumberinthearray
UP: MOVAX,[SI] ;make a copy ofthe numberpointedby SI in
AX
MOVDX,[SI+2] ;make a copy ofthe nextnumberinDX
CMPAX,DX ;compare boththe numbers
JBDOWN/JADOWN ;ifAX< DX/AX > DX retainthemasitis
MOV[SI],DX ;ifnotsortthe numbersinascendingorder
MOV[SI+2],AX
DOWN: INCSI ;pointtothenextnumber
INCSI
DECBX ;decrementthecounter1
JNZUP ;comparetillthelargernumberissortedat
theendofthearray
DECCX ;decrementcounter2
JNZUP1 ;comparetillthenumbersaresortedin
ascendingorder
MOVAH,4CH ;terminatetheprocess
INT21H
CODEENDS ;endofcodesegment
ENDSTART

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 ;DOSfunctiontoreadacharacterfromkeyboard;with
echo.[AL=8bitcharacter]
INT21H
MOVINKEY,AL ;ReturnsASCIIvalueofthepressedkey.
MOVBUF,10 ;Loadhowmanycharacterstoenter.
MOVAH,0AH ;Dosfunctiontoreadstringofcharactersfrom
;keyboard.
LEADX,BUF
INT21H
MOVAH,06H ;Dos function to display a
character.MOVDL,'A';Loadthecharactertobedisplayed.
INT21H

MOVAH,09H ;Dosfunctiontoreadstringofcharactersfrom
;keyboard.
LEADX,MES ;DX=offsetaddressofthemessage
INT21H
MOVAH,4CH
INT21H
CODEENDS
ENDSTART

-23-
7)PROGRAMTOFINDTHELARGESTNUMBERUSINGDOSDISPLAYINTERRUPTS

DATASEGMENT ;startofdatasegment
XDW0010H,0052H,0030H,0040H,0050H
MESDB10,13,'LARGESTNUMBERAMONGTHESERIESIS$'
DATAENDS ;endofdatasegment
CODESEGMENT ;startofcodesegment
ASSUMECS:CODE,DS:DATA
START:MOVAX,DATA ;initializedatasegment
MOVDS,AX
MOVCX,05H ;loadCXregisterwith
numberofdatawordsinarray
XLEASI,X ;SIpointstostartofdataword
arrayX
MOVAX,[SI] ;makeacopyofthe
firstnumberinAX
DECCX ;initializeCXwithcount
valueforcomparison
UP: CMPAX,[SI+2] ;comparethecontentsofAX
andthenumberpointedbySI+2
JACONTINUE ;ifAXisgreaterthanthenext
numberinarraythenretain
thecontentsofAX
MOVAX,[SI+2] ;elsemakeacopyofthenext
number(largernumber)in
AX
CONTINUE:ADDSI,2 ;pointtonextnumberinarray
DECCX ;decrementCX
JNZUP ;checkifallnumbers
are
comparedifnocontinue
comparison
AAM ;ifyesconvertlargestbinary
numberinAXtounpackedBCD
ADDAX,3030H ;convertunpackedBCDto
unpackedASCIIequivalent
MOVBX,AX ;makeacopyofitinAX
MOVAX,09H ;displaythemessagestoredat
userdefinedmemorylocation
MES
LEADX,MES
INT21H
MOVDL,BH ;displaythelargestnumber
MOV
AH,02HINT
21H
MOVDL,BL
INT21H
MOVAH,4CH ;terminatetheprocess
INT21H
CODEENDS ;endofcodesegment

-24-
ENDSTART
OUTPUT:LARGESTNUMBERAMONGTHESERIESIS0052










































-25-
8)PROGRAMONDACWAVEFORMGENERATIONS:

ALPTOGENERATEARECTANGULARFREQUENCYOF2KHzFREQUENCY

ADDRESS INSTRUCTION OPCODE comment

2900 MOVAL,80 C6C080 movethecontrolwordforportaundermode0


operationintoalregister

2903 OUT26,AL E626 copythecontentsintocrregisterport ofaddress


26h

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 Terminatestheprogram

3800 MOVCX,002AHC7C12A00 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

850B RET C3 Returnstothecallingprocedure

-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 ;checkallthekeysonebyoneinfirstrow
LEASI,ARRAY

-29-
UP: SHRAL,1
JCDISPLAY ;ifkeyfoundjumptothedisplaysubroutine
INCSI
JMPUP
JMPDISPLAY

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

THIRDROW:CALLDELAY
LEASI,ARRAY+10H ;thirdrowkeysfromarray+16(dec)
UP2: SHRAL,1
JCDISPLAY ;ifkeyfoundjumptothedisplaysubroutine
INCSI
JMPUP2
JMPDISPLAY
DISPLAY: MOVDL,[SI]
CMPDL,97 ;24indecimal.8x3rows=24keys
JZEXIT
MOVAH,02H ;displaykeynoinascii
INT21H
JMPREPEAT

DELAY: MOV BX,0FFFFH


L1: 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 ;intialisedatasegment
MOVDS,AX
MOVAL,80H ;initialise8255portbandportcaso/p
MOVDX,CWRDOUT
DX,AL
MOVBH,04 ;BH=noofdigitstobedisplayed
LEASI,TABLE ;SI=startingaddressoflookuptable

NEXTDIGIT:MOVCL,08 ;CL=noofsegments=08
MOVAL,[SI]
NEXTBIT: ROLAL,01
MOVCH,AL ;saveal
MOVDX,PORTB ;onebitissentoutonportb
OUTDX,ALMOV
AL,01
MOVDX,PORTC ;oneclockpulsesentonpc0

OUTDX,ALDEC
AL
MOVDX,PORTC

OUTDX,AL
MOVAL,CH ;getthesevensegmentcodebackinal
DECCL ;sendall8bits,thusonedigitisdisplayed
JNZNEXTBITDEC
BH
INCSI ;displayallthefourdigits
JNZNEXTDIGIT
MOVAH,4CH ;exittodos
INT21H
CODEENDSEND
START

-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 After execution

R0 37H R1 59H
05 05
04 04
03 03
02 02
01 00
05 05
04 04
03 03
02 02
01 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