Professional Documents
Culture Documents
Microprocessors & Microcontrollers Laboratory (EC 362) Manual
Microprocessors & Microcontrollers Laboratory (EC 362) Manual
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
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
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:
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
;cleartimer0overflowflag
CPLP1.0
;toggleportbit
SJMPLOOP
;repeat
END
-34-