1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796379737983799380038013802380338043805380638073808380938103811381238133814381538163817381838193820382138223823382438253826382738283829383038313832383338343835383638373838383938403841384238433844384538463847384838493850385138523853385438553856385738583859386038613862386338643865386638673868386938703871387238733874387538763877387838793880388138823883388438853886388738883889389038913892389338943895389638973898389939003901390239033904390539063907390839093910391139123913391439153916391739183919392039213922392339243925392639273928392939303931393239333934393539363937393839393940394139423943394439453946394739483949395039513952395339543955395639573958395939603961396239633964396539663967396839693970397139723973397439753976397739783979398039813982398339843985398639873988398939903991399239933994399539963997399839994000400140024003400440054006400740084009401040114012401340144015401640174018401940204021402240234024402540264027402840294030403140324033403440354036403740384039404040414042404340444045404640474048404940504051405240534054405540564057405840594060406140624063406440654066406740684069407040714072407340744075407640774078407940804081408240834084408540864087408840894090409140924093409440954096409740984099410041014102410341044105410641074108410941104111411241134114411541164117411841194120412141224123412441254126412741284129413041314132413341344135413641374138413941404141414241434144414541464147414841494150415141524153415441554156415741584159416041614162416341644165416641674168416941704171417241734174417541764177417841794180418141824183418441854186418741884189419041914192419341944195419641974198419942004201420242034204420542064207420842094210421142124213421442154216421742184219422042214222422342244225422642274228422942304231423242334234423542364237423842394240424142424243424442454246424742484249425042514252425342544255425642574258425942604261426242634264426542664267426842694270427142724273427442754276427742784279428042814282428342844285428642874288428942904291429242934294429542964297429842994300430143024303430443054306430743084309431043114312431343144315431643174318431943204321432243234324432543264327432843294330433143324333433443354336433743384339434043414342434343444345434643474348434943504351435243534354435543564357435843594360436143624363436443654366436743684369437043714372437343744375437643774378437943804381438243834384438543864387438843894390439143924393439443954396439743984399440044014402440344044405440644074408440944104411441244134414441544164417441844194420442144224423442444254426442744284429443044314432443344344435443644374438443944404441444244434444444544464447444844494450445144524453445444554456445744584459446044614462446344644465446644674468446944704471447244734474447544764477447844794480448144824483448444854486448744884489449044914492449344944495449644974498449945004501450245034504450545064507450845094510451145124513451445154516451745184519452045214522452345244525452645274528452945304531453245334534453545364537453845394540454145424543454445454546454745484549455045514552455345544555455645574558455945604561456245634564456545664567456845694570457145724573457445754576457745784579458045814582458345844585458645874588458945904591459245934594459545964597459845994600460146024603460446054606460746084609461046114612461346144615461646174618461946204621462246234624462546264627462846294630463146324633463446354636463746384639464046414642464346444645464646474648464946504651465246534654465546564657465846594660466146624663466446654666466746684669467046714672467346744675467646774678467946804681468246834684468546864687468846894690469146924693469446954696469746984699470047014702470347044705470647074708470947104711471247134714471547164717471847194720472147224723472447254726472747284729473047314732473347344735473647374738473947404741474247434744474547464747474847494750475147524753475447554756475747584759476047614762476347644765476647674768476947704771477247734774477547764777477847794780478147824783478447854786478747884789479047914792479347944795479647974798479948004801480248034804480548064807480848094810481148124813481448154816481748184819482048214822482348244825482648274828482948304831483248334834483548364837483848394840484148424843484448454846484748484849485048514852485348544855485648574858485948604861486248634864486548664867486848694870487148724873487448754876487748784879488048814882488348844885488648874888488948904891489248934894489548964897489848994900490149024903490449054906490749084909491049114912491349144915491649174918491949204921492249234924492549264927492849294930493149324933493449354936493749384939494049414942494349444945494649474948494949504951495249534954495549564957495849594960496149624963496449654966496749684969497049714972497349744975497649774978497949804981498249834984498549864987498849894990499149924993499449954996499749984999500050015002500350045005500650075008500950105011501250135014501550165017501850195020502150225023502450255026502750285029503050315032503350345035503650375038503950405041504250435044504550465047504850495050505150525053505450555056505750585059506050615062506350645065506650675068506950705071507250735074507550765077507850795080508150825083508450855086508750885089509050915092509350945095509650975098509951005101510251035104510551065107510851095110511151125113511451155116511751185119512051215122512351245125512651275128512951305131513251335134513551365137513851395140514151425143514451455146514751485149515051515152515351545155515651575158515951605161516251635164516551665167516851695170517151725173517451755176517751785179518051815182518351845185518651875188518951905191519251935194519551965197519851995200520152025203520452055206520752085209521052115212521352145215521652175218521952205221522252235224522552265227522852295230523152325233523452355236523752385239524052415242524352445245524652475248524952505251525252535254525552565257525852595260526152625263526452655266526752685269527052715272527352745275527652775278527952805281528252835284528552865287528852895290529152925293529452955296529752985299530053015302530353045305530653075308530953105311531253135314531553165317531853195320532153225323532453255326532753285329533053315332533353345335533653375338533953405341534253435344534553465347534853495350535153525353535453555356535753585359536053615362536353645365536653675368536953705371537253735374537553765377537853795380538153825383538453855386538753885389539053915392539353945395539653975398539954005401540254035404540554065407540854095410541154125413541454155416541754185419542054215422542354245425542654275428542954305431543254335434543554365437543854395440544154425443544454455446544754485449545054515452545354545455545654575458545954605461546254635464546554665467546854695470547154725473547454755476547754785479548054815482548354845485548654875488548954905491549254935494549554965497549854995500550155025503550455055506550755085509551055115512551355145515551655175518551955205521552255235524552555265527552855295530553155325533553455355536553755385539554055415542554355445545554655475548554955505551555255535554555555565557555855595560556155625563556455655566556755685569557055715572557355745575557655775578557955805581558255835584558555865587558855895590559155925593559455955596559755985599560056015602560356045605560656075608560956105611561256135614561556165617561856195620562156225623562456255626562756285629563056315632563356345635563656375638563956405641564256435644564556465647564856495650565156525653565456555656565756585659566056615662566356645665566656675668566956705671567256735674567556765677567856795680568156825683568456855686568756885689569056915692569356945695569656975698569957005701570257035704570557065707570857095710571157125713571457155716571757185719572057215722572357245725572657275728572957305731573257335734573557365737573857395740574157425743574457455746574757485749575057515752575357545755575657575758575957605761576257635764576557665767576857695770577157725773577457755776577757785779578057815782578357845785578657875788578957905791579257935794579557965797579857995800580158025803580458055806580758085809581058115812581358145815581658175818581958205821582258235824582558265827582858295830583158325833583458355836583758385839584058415842584358445845584658475848584958505851585258535854585558565857585858595860586158625863586458655866586758685869587058715872587358745875587658775878587958805881588258835884588558865887588858895890589158925893589458955896589758985899590059015902590359045905590659075908590959105911591259135914591559165917591859195920592159225923592459255926592759285929593059315932593359345935593659375938593959405941594259435944594559465947594859495950595159525953595459555956595759585959596059615962596359645965596659675968596959705971597259735974597559765977597859795980598159825983598459855986598759885989599059915992599359945995599659975998599960006001600260036004600560066007600860096010601160126013601460156016601760186019602060216022602360246025602660276028602960306031603260336034603560366037603860396040604160426043604460456046604760486049605060516052605360546055 |
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 8051 CROSS ASSEMBLER
-
-
- USER'S MANUAL
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- MetaLink Corporation
- Chandler, Arizona
-
- MetaLink Corporation
- P.O. BOX 1329
- Chandler, Arizona 85244-1329
- (602) 926-0797
- TELEX: 4998050 MTLNK
- FAX: (602) 926-1198
-
-
-
-
- PURCHASE TERMS AND CONDITIONS
-
-
- Since MetaLink Corporation does business and is located solely in
- the State of Arizona, such orders or agreements and the rights of
- the parties hereunder shall be governed by the laws of the State
- of Arizona.
-
-
- PAYMENTS TERMS:
-
- Unless otherwise agreed upon, the TOTAL UNPAID BALANCE is due and
- payable 30 days following the invoice date.
-
-
- LIMITED WARRANTY: METALINK MAKES NO WARRANTIES OTHER THAN THOSE
- CONTAINED HEREIN AND METALINK EXPRESSLY DISCLAIMS ANY AND ALL
- IMPLIED WARRANTIES, INCLUDING ANY WARRANTY OF FITNESS FOR A
- PARTICULAR PURPOSE OR OF MERCHANTABILITY.
-
-
- The foregoing limited warranty shall not apply unless Buyer has
- paid for in full the MetaLink products. Updates to the MetaLink
- Assembler User's Manual and MetaLink Assembler software are
- available free to Registered Buyer upon request for a one (1) year
- period from the invoice date.
-
-
-
- NOTICE
-
- MetaLink Corp. reserves the right to make improvements in the
- software product described in this manual as well as the manual
- itself at any time and without notice.
-
-
-
-
-
-
-
- DISCLAIMER OF ALL WARRANTIES AND LIABILITY
-
- METALINK CORP. MAKES NO WARRANTIES, EITHER EXPRESSED OR IMPLIED,
- WITH RESPECT TO THIS MANUAL OR WITH RESPECT TO THE SOFTWARE
- DESCRIBED IN THIS MANUAL, ITS QUALITY, PERFORMANCE, MERCHANTABILITY,
- OR FITNESS FOR ANY PARTICULAR PURPOSE. METALINK CORP. SOFTWARE
- IS SOLD OR LICENSED "AS IS". IN NO EVENT SHALL METALINK CORP. BE
- LIABLE FOR INCIDENTAL OR CONSEQUENTIAL DAMAGES RESULTING FROM ANY
- DEFECT IN THE SOFTWARE.
-
-
-
-
-
-
-
-
-
-
-
-
- Copyright (c) 1984, 1985, 1986, 1987, 1988, 1989 by MetaLink Corp.
-
- All rights are reserved. This manual may not, in whole or part,
- be copied, photocopied, reproduced, translated, or reduced to any
- electronic medium or machine readable form without the prior
- agreement and written permission of MetaLink Corp.
-
-
-
-
-
- MS-DOS is a trademark of Microsoft, Inc.
-
- IBMR is a registered trademark of IBM Corp.
-
- IntelR is a registered trademark of Intel Corp.
-
- MetaLink is a trademark of MetaLink Corp.
- T A B L E O F C O N T E N T S
-
- 1. 8051 OVERVIEW............................................1-1
- 1.1. Introduction........................................1-1
- 1.2. 8051 Architecture...................................1-2
- 1.3. Summary of the 8051 Family of Components............1-4
- 1.4. References..........................................1-5
-
- 2. 8051 CROSS ASSEMBLER OVERVIEW............................2-1
- 2.1. Introduction........................................2-1
- 2.2. Symbols.............................................2-1
- 2.3. Labels..............................................2-2
- 2.4. Assembler Controls..................................2-3
- 2.5. Assembler Directives................................2-3
- 2.6. 8051 Instruction Mnemonics..........................2-4
- 2.7. Bit Addressing......................................2-6
- 2.8. ASCII Literals......................................2-6
- 2.9. Comments............................................2-6
- 2.10. The Location Counter...............................2-7
- 2.11. Syntax Summary.....................................2-7
- 2.12. Numbers and Operators..............................2-7
- 2.13. Source File Listing...............................2-10
- 2.14. Object File.......................................2-11
-
- 3. RUNNING THE 8051 CROSS ASSEMBLER.........................3-1
- 3.1. Cross Assembler Files...............................3-1
- 3.2. Minimum System Requirements.........................3-1
- 3.3. Running the Cross Assembler.........................3-1
- 3.4. Example Running the Cross Assembler.................3-3
- 3.5. DOS Hints and Suggestions...........................3-3
- 3.6. References..........................................3-4
-
- 4. 8051 INSTRUCTION SET.....................................4-1
- 4.1. Notation............................................4-1
- 4.2. 8051 Instruction Set Summary........................4-4
- 4.3. Notes..............................................4-14
- 4.4. References.........................................4-14
-
- 5. 8051 CROSS ASSEMBLER DIRECTIVES..........................5-1
- 5.1. Introduction........................................5-1
- 5.2. Symbol Definition Directives........................5-1
- 5.3. Segment Selection Directives........................5-4
- 5.4. Memory Reservation and Storage Directives...........5-5
- 5.5. Miscellaneous Directives............................5-7
- 5.6. Conditional Assembly Directives.....................5-8
-
- 6. 8051 CROSS ASSEMBLER CONTROLS............................6-1
- 6.1. Introduction........................................6-1
- 6.2. Assembler Control Descriptions......................6-1
-
- 7. 8051 CROSS ASSEMBLER MACRO PROCESSOR.....................7-1
- 7.1. Introduction........................................7-1
- 7.2. Macro Definition....................................7-1
- 7.3. Special Macro Operators.............................7-4
- 7.4. Using Macros........................................7-4
- 7.4.1. NESTING MACROS...............................7-4
- 7.4.2. LABELS IN MACROS.............................7-6
-
- 8. 8051 CROSS ASSEMBLER ERROR CODES.........................8-1
- 8.1. Introduction........................................8-1
- 8.2. Explanation of Error Messages.......................8-2
-
-
-
- Appendices
-
- A. SAMPLE PROGRAM AND LISTING...............................A-1
- A.1. Source File.........................................A-1
- A.2. Source File Listing.................................A-4
-
- B. PRE-DEFINED BYTE AND BIT ADDRESSES.......................B-1
- B.1. Pre-defined Byte Addresses..........................B-1
- B.2. Pre-defined Bit Addresses..........................B-11
-
- C. RESERVED SYMBOLS.........................................C-1
-
- D. CROSS ASSEMBLER CHARACTER SET............................D-1
-
- CHAPTER 1
-
-
- 8051 OVERVIEW
-
- 1.1. Introduction
-
- For new users of MetaLink's ASM51 Cross Assembler, please take a
- moment to fill out and return postage-prepaid User Registration
- Card. This card will be found with the system diskette in the
- vinyl jacket at the front of this manual. MetaLink will use this
- information to send out, free of charge, any software updates
- occurring during the warranty period. Respondents will also be
- notified of any new products or product enhancements.
-
- The 8051 series of microcontrollers are highly integrated single
- chip microcomputers with an 8-bit CPU, memory, interrupt
- controller, timers, serial I/O and digital I/O on a single piece
- of silicon. The current members of the 8051 family of components
- include:
-
- 80C152JA/JB/JC/JD, 83C152JA/JC, 80C157
- 80C154, 83C154, 85C154
- 8044, 8344, 8744
- 80C451, 83C451, 87C451
- 80C452, 83C452, 87C452
- 8051, 8031, 8751, 80C51, 80C31, 87C51
- 80512, 80532
- 80515, 80535, 80C535, 80C515
- 80C517, 80C537
- 80C51FA, 83C51FA, 87C51FA, 83C51FB, 87C51FB, 83C51FC, 87C51FC
- 8052, 8032, 8752
- 80C321, 80C521, 87C521, 80C541, 87C541
- 8053, 9761, 8753
- 80C552, 83C552, 87C552
- 80C652, 83C652, 87C652
- 83C654, 87C654
- 83C751, 87C751
- 83C752, 87C752
- 80C851, 83C851
-
- All members of the 8051 series of microcontrollers share a common
- architecture. They all have the same instruction set, addressing
- modes, addressing range and memory spaces. The primary
- differences between different 8051 based products are the amount
- of memory on chip, the amount and types of I/O and peripheral
- functions, and the component's technology (see Table 1-1).
-
- In the brief summary of the 8051 architecture that follows, the
- term 8051 is used to mean collectively all available members of
- the 8051 family. Please refer to reference (1) for a complete
- description of the 8051 architecture and the specifications for
- all the currently available 8051 based products.
-
-
-
- 1-1
-
-
-
- 1.2. 8051 Architecture
-
- The 8051 is an 8-bit machine. Its memory is organized in bytes
- and practically all its instruction deal with byte quantities.
- It uses an Accumulator as the primary register for instruction
- results. Other operands can be accessed using one of the four
- different addressing modes available: register implicit, direct,
- indirect or immediate. Operands reside in one of the five memory
- spaces of the 8051.
-
- The five memory spaces of the 8051 are: Program Memory, External
- Data Memory, Internal Data Memory, Special Function Registers and
- Bit Memory.
-
- The Program Memory space contains all the instructions, immediate
- data and constant tables and strings. It is principally
- addressed by the 16-bit Program Counter (PC), but it can also be
- accessed by a few instructions using the 16-bit Data Pointer
- (DPTR). The maximum size of the Program Memory space is 64K
- bytes. Several 8051 family members integrate on-chip some amount
- of either masked programmed ROM or EPROM as part of this memory
- space (refer to Table 1-1).
-
- The External Data Memory space contains all the variables,
- buffers and data structures that can't fit on-chip. It is
- principally addressed by the 16-bit Data Pointer (DPTR), although
- the first two general purpose register (R0,R1) of the currently
- selected register bank can access a 256-byte bank of External
- Data Memory. The maximum size of the External Data Memory space
- is 64Kbytes. External data memory can only be accessed using
- the indirect addressing mode with the DPTR, R0 or R1.
-
- The Internal Data Memory space is functionally the most important
- data memory space. In it resides up to four banks of general
- purpose registers, the program stack, 128 bits of the 256-bit
- memory, and all the variables and data structures that are
- operated on directly by the program. The maximum size of the
- Internal Data Memory space is 256-bytes. However, different
- 8051 family members integrate different amounts of this memory
- space on chip (see Amnt of RAM in Table 1-1). The register
- implicit, indirect and direct addressing modes can be used in
- different parts of the Internal Data Memory space.
-
- The Special Function Register space contains all the on-chip
- peripheral I/O registers as well as particular registers that
- need program access. These registers include the Stack Pointer,
- the PSW and the Accumulator. The maximum number of Special
- Function Registers (SFRs) is 128, though the actual number on a
- particular 8051 family member depends on the number and type of
- peripheral functions integrated on-chip (see Table 1-1). The
- SFRs all have addresses greater than 127 and overlap the address
- space of the upper 128 bytes of the Internal Data Memory space.
- The two memory spaces are differentiated by addressing mode. The
- SFRs can only be accessed using the Direct addressing mode while
- the upper 128 bytes of the Internal Data Memory (if integrated
- on-chip) can only be accessed using the Indirect addressing mode.
-
-
- 1-2
-
-
-
- The Bit Memory space is used for storing bit variables and flags.
- There are specific instructions in the 8051 that operate only in
- the Bit Memory space. The maximum size of the Bit Memory space
- is 256-bits. 128 of the bits overlap with 16-bytes of the
- Internal Data Memory space and 128 of the bits overlap with 16
- Special Function Registers. Bits can only be accessed using the
- bit instructions and the Direct addressing mode.
-
- The 8051 has a fairly complete set of arithmetic and logical
- instructions. It includes an 8X8 multiply and an 8/8 divide.
- The 8051 is particularly good at processing bits (sometimes
- called Boolean Processing). Using the Carry Flag in the PSW as a
- single bit accumulator, the 8051 can move and do logical
- operations between the Bit Memory space and the Carry Flag. Bits
- in the Bit Memory space can also be used as general purpose flags
- for the test bit and jump instructions.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 1-3
-
-
-
- Except for the MOVE instruction, the 8051 instructions can only
- operate on either the Internal Data Memory space or the Special
- Function Registers. The MOVE instruction operates in all memory
- spaces, including the External Memory space and Program Memory
- space.
-
- Program control instructions include the usual unconditional
- calls and jumps as well as conditional relative jumps based on
- the Carry Flag, the Accumulator's zero state, and the state of
- any bit in the Bit Memory space. Also available is a Compare and
- Jump if Not Equal instruction and a Decrement Counter and Jump if
- Not Zero loop instruction. See Chapter 4 for a description of
- the complete 8051 instruction set.
-
- 1.3. Summary of the 8051 Family of Components
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 1-4
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Table 1-1: 8051 Family of Components
-
-
- 1.4. References
-
- 1. Intel Corp., 8-Bit Embedded Controllers, 1990.
- 2. Siemens Corp., Microcontroller Component 80515, 1985.
- 3. AMD Corp., Eight-Bit 80C51 Embedded Processors, 1990.
- 4. Signetics Corp., Microcontroller Users' Guide, 1989.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 1-5
- CHAPTER 2
-
-
- 8051 CROSS ASSEMBLER OVERVIEW
-
-
- 2.1. Introduction
-
- The 8051 Cross Assembler takes an assembly language source file
- created with a text editor and translates it into a machine
- language object file. This translation process is done in two
- passes over the source file. During the first pass, the Cross
- Assembler builds a symbol table from the symbols and labels used
- in the source file. It's during the second pass that the Cross
- Assembler actually translates the source file into the machine
- language object file. It is also during the second pass that the
- listing is generated.
-
- The following is a discussion of the syntax required by the Cross
- Assembler to generate error free assemblies.
-
-
- 2.2. Symbols
-
- Symbols are alphanumeric representations of numeric constants,
- addresses, macros, etc. The legal character set for symbols is
- the set of letters, both upper and lower case (A..Z,a..z), the
- set of decimal numbers (0..9) and the special characters,
- question mark (?) and underscore (_). To ensure that the Cross
- Assembler can distinguish between a symbol and a number, all
- symbols must start with either a letter or special character (?
- or _). The following are examples of legal symbols:
-
- PI
- Serial_Port_Buffer
- LOC_4096
- ?_?_?
-
- In using a symbol, the Cross Assembler converts all letters to
- upper case. As a result, the Cross Assembler makes no distinction
- between upper and lower case letters. For example, the following
- two symbols would be seen as the same symbol by the Cross
- Assembler:
-
- Serial_Port_Buffer
- SERIAL_PORT_BUFFER
-
- Symbols can be defined only once. Symbols can be up to 255
- characters in length, though only the first 32 are significant.
- Therefore, for symbols to be unique, they must have a unique
- character pattern within the first 32 characters. In the
- following example, the first two symbols would be seen by the
- Cross Assembler as duplicate symbols, while the third and fourth
-
-
- 2-1
-
-
-
- symbols are unique.
-
- BEGINNING_ADDRESS_OF_CONSTANT_TABLE_1
- BEGINNING_ADDRESS_OF_CONSTANT_TABLE_2
-
- CONSTANT_TABLE_1_BEGINNING_ADDRESS
- CONSTANT_TABLE_2_BEGINNING_ADDRESS
-
- There are certain symbols that are reserved and can't be defined
- by the user. These reserved symbols are listed in Appendix C and
- include the assembler directives, the 8051 instruction mnemonics,
- implicit operand symbols, and the following assembly time
- operators that have alphanumeric symbols: EQ, NE, GT, GE, LT, LE,
- HIGH, LOW, MOD, SHR, SHL, NOT,
- AND, OR and XOR.
-
- The reserved implicit operands include the symbols A, AB, C,
- DPTR, PC, R0, R1, R2, R3, R4, R5, R6, R7, AR0, AR1, AR2, AR3,
- AR4, AR5, AR6 and AR7. These symbols are used primarily as
- instruction operands. Except for AB, C, DPTR or PC, these
- symbols can also be used to define other symbols (see EQU
- directive in Chapter 5).
-
- The following are examples of illegal symbols with an explanation
- of why they are illegal:
-
- 1ST_VARIABLE (Symbols can not start with a number.)
- ALPHA# (Illegal character "#" in symbol.)
- MOV (8051 instruction mnemonic)
- LOW (Assembly operator)
- DATA (Assembly directive)
-
-
- 2.3. Labels
-
- Labels are special cases of symbols. Labels are used only before
- statements that have physical addresses associated with them.
- Examples of such statements are assembly language instructions,
- data storage directives (DB and DW), and data reservation
- directives (DS and DBIT). Labels must follow all the rules of
- symbol creation with the additional requirement that they be
- followed by a colon. The following are legal examples of label
- uses:
-
- TABLE_OF_CONTROL_CONSTANTS:
- DB 0,1,2,3,4,5 (Data storage)
- MESSAGE: DB 'HELP' (Data storage)
- VARIABLES: DS 10 (Data reservation)
- BIT_VARIABLES: DBIT 16 (Data reservation)
- START: MOV A,#23 (Assembly language instruction)
-
-
-
-
- 2.4. Assembler Controls
-
-
-
- 2-2
-
-
-
- Assembler controls are used to control where the Cross Assembler
- gets its input source file, where it puts the object file, and
- how it formats the listing file. Table 2-1 summarizes the
- assembler controls available. Refer to Chapter 6 for a detailed
- explanation of the controls.
-
-
-
-
-
-
-
-
-
-
-
-
-
- Table 2-1: Summary of Cross Assembler Controls
-
-
- As can be seen in Table 2-1, all assembler controls are prefaced
- with a dollar sign ($). No spaces or tabs are allowed between the
- dollar sign and the body of the control. Also, only one control
- per line is permitted. However, comments can be on the same line
- as a control. The following are examples of assembler controls:
-
- $TITLE(8051 Program Ver. 1.0)
- $LIST
- $PAGEWIDTH(132)
-
-
- 2.5. Assembler Directives
-
- Assembler directives are used to define symbols, reserve memory
- space, store values in program memory and switch between
- different memory spaces. There are also directives that set the
- location counter for the active segment and identify the end of
- the source file. Table 2-2 summarizes the assembler directives
- available. These directives are fully explained in Chapter 5.
-
-
-
-
-
-
-
-
-
-
-
-
- Table 2-2: Summary of Cross Assembler Directives
-
-
- Only one directive per line is allowed, however comments may be
-
-
- 2-3
-
-
-
- included. The following are examples of assembler directives:
-
- TEN EQU 10
- RESET CODE 0
- ORG 4096
-
-
- 2.6. 8051 Instruction Mnemonics
-
- The standard 8051 Assembly Language Instruction mnemonics plus
- the generic CALL and JMP instructions are recognized by the Cross
- Assembler and are summarized in Table 2-3. See Chapter 4 for the
- operation of the individual instructions.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 2-4
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Table 2-3: 8051 Instructions and Mnemonics
-
- When the Cross Assembler sees a generic CALL or JMP instruction,
- it will try to translate the instruction into its most byte
- efficient form. The Cross Assembler will translate a CALL into
- one of two instructions (ACALL or LCALL) and it will translate a
- generic JMP into one of three instructions (SJMP, AJMP or LJMP).
- The choice of instructions is based on which one is most byte
- efficient. The generic CALL or JMP instructions saves the
- programmer the trouble of determining which form is best.
-
- However, generic CALLs and JMPs do have their limitations. While
- the byte efficiency algorithm works well for previously defined
- locations, when the target location of the CALL or JMP is a forward
- location (a location later on in the program), the assembler has no
- way of determining the best form of the instruction. In this case
- the Cross Assembler simply puts in the long version (LCALL or LJMP)
- of the instruction, which may not be the most byte efficient. NOTE
- that the generic CALLs and JMPs must not be used for the 751/752
- device as LCALL and LJMP are not legal instructions for those
- devices. Instead use ACALL and AJMP explicitly.
-
- For instructions that have operands, the operands must be
- separated from the mnemonic by at least one space or tab. For
- instructions that have multiple operands, each operand must be
- separated from the others by a comma.
-
- Two addressing modes require the operands to be preceded by
- special symbols to designate the addressing mode. The AT sign
- (@) is used to designate the indirect addressing mode. It is
- used primarily with Register 0 and Register 1 (R0, R1), but is
- can also be used with the DPTR in the MOVX and the Accumulator in
- MOVC and JMP @A+DPTR instructions. The POUND sign (#) is used to
- designate an immediate operand. It can be used to preface
- either a number or a symbol representing a number.
-
- A third symbol used with the operands actually specifies an
- operation. The SLASH (/) is used to specify that the contents of
- a particular bit address is to be complemented before the
-
- 2-5
-
-
-
- instruction operation. This is used with the ANL and ORL bit
- instructions.
-
- Only one assembly language instruction is allowed per line.
- Comments are allowed on the same line as an instruction, but only
- after all operands have been specified. The following are
- examples of instruction statements:
-
- START: LJMP INIT
- MOV @R0,Serial_Port_Buffer
- CJNE R0 , #TEN, INC_TEN
- ANL C,/START_FLAG
- CALL GET_BYTE
- RET
-
-
- 2.7. Bit Addressing
-
- The period (.) has special meaning to the Cross Assembler when
- used in a symbol. It is used to explicitly specify a bit in a
- bit-addressable symbol. For example, it you wanted to specify
- the most significant bit in the Accumulator, you could write
- ACC.7, where ACC was previously defined as the Accumulator
- address. The same bit can also be selected using the physical
- address of the byte it's in. For example, the Accumulator's
- physical address is 224. The most significant bit of the
- Accumulator can be selected by specifying 224.7. If the symbol
- ON was defined to be equal to the value 7, you could also specify
- the same bit by either ACC.ON or 224.ON.
-
-
- 2.8. ASCII Literals
-
- Printable characters from the ASCII character set can be used
- directly as an immediate operand, or they can used to define
- symbols or store ASCII bytes in Program Memory. Such use of the
- ASCII character set is called ASCII literals. ASCII literals are
- identified by the apostrophe (') delimiter. The apostrophe
- itself can be used as an ASCII literal. In this case, use two
- apostrophes in a row. Below are examples of using ASCII
- literals.
-
- MOV A,#'m' ;Load A with 06DH (ASCII m)
- QUOTE EQU '''' ;QUOTE defined as 27H (ASCII single quote)
- DB '8051' ;Store in Program Memory
-
-
- 2.9. Comments
-
- Comments are user defined character strings that are not
- processed by the Cross Assembler. A comment begins with a
- semicolon ( ; ) and ends at the carriage return/line feed pair
- that terminates the line. A comment can appear anywhere in a
- line, but it has to be the last field. The following are
- examples of comment lines:
-
-
-
- 2-6
-
-
-
- ; Begin initialization routine here
- $TITLE(8051 Program Vers. 1.0) ;Place version number here
- TEN EQU 10 ;Constant
- ; Comment can begin anywhere in a line
- MOV A,Serial_Port_Buffer ; Get character
-
-
- 2.10. The Location Counter
-
- The Cross Assembler keeps a location counter for each of the five
- segments (code, internal data, external data, indirect internal
- data and bit data). Each location counter is initialized to zero
- and can be modified using Assembler Directives described in
- Chapter 5.
-
- The dollar sign ($) can be used to specify the current value of
- the location counter of the active segment. The following are
- examples of how this can be used:
-
- JNB FLAG,$ ;Jump on self until flag is reset
- CPYRGHT: DB 'Copyright, 1983'
- CPYRGHT_LENGTH
- EQU $-CPYRGHT-1 ;Calculate length of copyright message
-
-
-
- 2.11. Syntax Summary
-
- Since the Cross Assembler essentially translates the source file
- on a line by line basis, certain rules must be followed to ensure
- the translation process is done correctly. First of all, since
- the Cross Assembler's line buffer is 256 characters deep, there
- must always be a carriage return/line feed pair within the first
- 256 columns of the line.
-
- A legal source file line must begin with either a control, a
- symbol, a label, an instruction mnemonic, a directive, a comment
- or it can be null (just the carriage return/line feed pair). Any
- other beginning to a line will be flagged as an error.
-
- While a legal source file line must begin with one of the above
- items, the item doesn't have to begin in the first column of the
- line. It only must be the first field of the line. Any number
- (including zero) of spaces or tabs, up to the maximum line size,
- may precede it.
-
- Comments can be placed anywhere, but they must be the last field
- in any line.
-
-
- 2.12. Numbers and Operators
-
- The Cross Assembler accepts numbers in any one of four radices:
- binary, octal, decimal and hexadecimal. To specify a number in a
- specific radix, the number must use the correct digits for the
- particular radix and immediately following the number with its
-
-
- 2-7
-
-
-
- radix designator. Decimal is the default radix and the use of
- its designator is optional. An hexadecimal number that would
- begin with a letter digit must be preceded by a 0 (zero) to
- distinguish it from a symbol. The internal representation of
- numbers is 16-bits, which limits the maximum number possible.
- Table 2-4 summarizes the radices available.
-
- MAXIMUM LEGAL
- RADIX DESIGNATOR LEGAL DIGITS NUMBER
- ----------- ---------- ------------ -----------------
- Binary B 0,1 1111111111111111B
- Octal O,Q 0,1,2,3,4,5, 177777O
- 6,7 177777Q
- Decimal D,(default) 0,1,2,3,4,5, 65535D
- 6,7,8,9 65535
- Hexadecimal H 0,1,2,3,4,5, 0FFFFH
- 6,7,8,9,A,B,
- C,D,E,F
-
- Table 2-4: Cross Assembler Radices
-
-
- No spaces or tabs are allowed between the number and the radix
- designator. The letter digits and radix designators can be in
- upper or lower case. The following examples list the decimal
- number 2957 in each of the available radices:
-
-
- 101110001101B (Binary)
- 5615o or 5615Q (Octal)
- 2957 or 2957D (Decimal)
- 0B8DH, 0b8dh (Hexadecimal)
-
- When using radices with explicit bit symbols, the radix
- designator follows the byte portion of the address as shown in
- the following examples:
-
- 0E0H.7 Bit seven of hexadecimal address 0E0
- 200Q.ON Bit ON of octal address 200
-
- The Cross Assembler also allows assembly time evaluation of
- arithmetic expressions up to thirty-two levels of embedded
- parentheses. All calculations use integer numbers and are done
- in sixteen bit precision.
-
- OPERATOR SYMBOL OPERATION
- --------------- ------------------------
- + Addition
- Unary positive
- - Subtraction
- Unary negation (2's complement)
- * Multiplication
- / Integer division (no remainder)
- MOD Modulus (remainder of integer division)
- SHR Shift right
- SHL Shift left
-
-
- 2-8
-
-
-
- NOT Logical negation (1's complement)
- AND Logical and
- OR Inclusive or
- XOR Exclusive or
- LOW Low order 8-bits
- HIGH High order 8-bits
- EQ, = Relational equal
- NE, <> Relational not equal
- GT, > Relational greater than
- GE, >= Relational greater than or equal
- LT, < Relational less than
- LE, <= Relational less than or equal
- ( ) Parenthetical statement
-
- Table 2-5: Assembly Time Operations
-
-
- The relational operators test the specified values and return
- either a True or False. False is represented by a zero value,
- True is represented by a non zero value (the True condition
- actually returns a 16-bit value with every bit set; i.e.,
- 0FFFFH). The relational operators are used primarily with the
- Conditional Assembly capability of the Cross Assembler.
-
- Table 2-5 lists the operations available while Table 2-6 lists
- the operations precedence in descending order. Operations with
- higher precedence are done first. Operations with equal
- precedence are evaluated from left to right.
-
- OPERATION PRECEDENCE
- --------- ----------
- (,) HIGHEST
- HIGH,LOW
- *,/,MOD,SHR,SHL
- +,-
- EQ,LT,GT,LE,GE,NE,=,<,>,<=,>=,<>
- NOT
- AND
- OR,XOR LOWEST
-
- Table 2-6: Operators Precedence
-
-
- The following are examples of all the available operations and
- their result:
-
- HIGH(0AADDH) will return a result of 0AAH
- LOW(0AADDH) will return a result of 0DDH
- 7*4 will return a result of 28
- 7/4 will return a result of 1
- 7 MOD 4 will return a result of 3
- 1000B SHR 2 will return a result of 0010B
- 1010B SHL 2 will return a result of 101000B
- 10+5 will return a result of 15
- +72 will return a result of 72
- 25-17 will return a result of 8
-
-
- 2-9
-
-
-
- -1 will return a result of 1111111111111111B
- NOT 1 will return a result of 1111111111111110B
- 7 EQ 4, 7 = 4 will return a result of 0
- 7 LT 4, 7 < 4 will return a result of 0
- 7 GT 4, 7 > 4 will return a result of 0FFFFH
- 7 LE 4, 7 <= 4 will return a result of 0
- 7 GE 4, 7 >= 4 will return a result of 0FFFFH
- 7 NE 4, 7 <> 4 will return a result of 0FFFFH
- 1101B AND 0101B will return a result of 0101B
- 1101B OR 0101B will return a result of 1101B
- 1101B XOR 0101B will return a result of 1000B
-
-
- 2.13. Source File Listing
-
- The source file listing displays the results of the Cross
- Assembler translation. Every line of the listing includes a copy
- of the original source line as well as a line number and the
- Cross Assembler translation.
-
- For example, in translating the following line taken from the
- middle of a source file:
-
- TRANS: MOV R7,#32 ;Set up pointer
-
- the listing will print:
-
- 002F 7920 152 TRANS: MOV R1,#32 ;Set up pointer
-
- The '002F' is the current value of the location counter in
- hexadecimal. The '7920' is the translated instruction, also in
- hexadecimal. The '152' is the decimal line number of the current
- assembly. After the line number is a copy of the source file
- line that was translated.
-
- Another example of a line in the listing file is as follows:
-
- 015B 13 =1 267 +2 RRC A
-
- Here we see two additional fields. The '=1' before the line
- number gives the current nesting of include files. The '+2'
- after the line number gives the current macro nesting. This line
- essentially says that this line comes from a second level nesting
- of a macro that is part of an include file.
-
- Another line format that is used in the listing is that of symbol
- definition. In this case the location counter value and
- translated instruction fields described above are replaced with
- the definition of the symbol. The following are examples of
- this:
-
- 00FF 67 MAX_NUM EQU 255
- REG 68 COUNTER EQU R7
-
- The '00FF' is the hexadecimal value of the symbol MAX_NUM.
- Again, '67'is the decimal line number of the source file and the
-
-
- 2-10
-
-
-
- remainder of the first line is a copy of the source file. In the
- second line above, the 'REG' shows that the symbol COUNTER was
- defined to be a general purpose register.
-
- Optionally, a listing can have a page header that includes the
- name of the file being assembled, title of program, date and page
- number. The header and its fields are controlled by specific
- Assembler Controls (see Chapter 6).
-
- The default case is for a listing to be output as a file on the
- default drive with the same name as the entered source file and
- an extension of .LST. For example, if the source file name was
- PROGRAM.ASM, the listing file would be called PROGRAM.LST. Or if
- the source file was called MODULE1, the listing file would be
- stored as MODULE1.LST. The default can be changed using the
- $NOPRINT and $PRINT() Assembler Controls (see Chapter 6).
-
-
- 2.14. Object File
-
- The 8051 Cross Assembler also creates a machine language object
- file. The format of the object file is standard Intel
- Hexadecimal. This Hexadeciaml file can be used to either program
- EPROMs using standard PROM Programmers for prototyping, or used
- to pattern masked ROMs for production.
-
- The default case is for the object file to be output on the
- default drive with the same name as the first source file and an
- extension of .HEX. For example, if the source file name was
- PROGRAM.ASM, the object file would be called PROGRAM.HEX. Or if
- the source file was called MODULE1, the object file would be
- stored as MODULE1.HEX. The default can be changed using the
- $NOOBJECT and $OBJECT() Assembler Controls (see Chapter 6).
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 2-11
- CHAPTER 3
-
-
- RUNNING THE 8051 CROSS ASSEMBLER ON PC-DOS/MS-DOS SYSTEMS
-
- 3.1. Cross Assembler Files
-
- The floppy disk you receive with this manual is an 8 sector,
- single-sided, double density disk. This distribution disk will
- contain the following files:
-
- ASM51.EXE The Cross Assembler program itself
- MOD152 Source file for the $MOD152 control
- MOD154 Source file for the $MOD154 control
- MOD252 Source file for the $MOD252 control
- MOD44 Source file for the $MOD44 control
- MOD451 Source file for the $MOD451 control
- MOD452 Source file for the $MOD452 control
- MOD51 Source file for the $MOD51 control
- MOD512 Source file for the $MOD512 control
- MOD515 Source file for the $MOD515 control
- MOD517 Source file for the $MOD517 control
- MOD52 Source file for the $MOD52 control
- MOD521 Source file for the $MOD521 control
- MOD552 Source file for the $MOD552 control
- MOD652 Source file for the $MOD652 control
- MOD751 Source file for the $MOD751 control
- MOD752 Source file for the $MOD752 control
- MOD851 Source file for the $MOD851 control
-
- There will also be one or more files with an extension of .ASM.
- These are sample programs. Listings of these programs can be
- found in Appendix A.
-
- DON'T USE THE DISTRIBUTION DISK. MAKE WORKING AND BACKUP COPIES
- FROM THE DISTRIBUTION DISK AND THEN STORE THE DISTRIBUTION DISK
- IN A SAFE PLACE.
-
-
- 3.2. Minimum System Requirements
-
- With DOS 2.0 or later - 96K RAM
- 1 Floppy Disk Drive
-
-
- 3.3. Running the Cross Assembler
-
- Once you've created an 8051 assembly language source text file in
- accordance with the guidelines in Chapter 2, you are now ready to
- run the Cross Assembler. Make sure your system is booted and the
- DOS prompt ( A> ) appears on the screen. Place the disk with the
- 8051 Cross Assembler on it in the drive and simply type (in all
- the following examples, the symbol <CR> is used to show where the
-
-
- 3-1
-
-
-
- ENTER key was hit):
-
- ASM51<CR>
-
-
- If the 8051 Cross Assembler disk was placed in a drive other than
- the default drive, the drive name would have to be typed first.
- For example, if the A drive is the default drive, and the 8051
- Cross Assembler is in the B drive, you would then type:
-
- B:ASM51<CR>
-
- After loading the program from the disk, the program's name, its
- version number and general copyright information will be dis-
- played on the screen. The Cross Assembler then asks for the
- source file name to begin the assembly process.
-
- Source file drive and name [.ASM]:
-
- At this point, if you have only one floppy disk drive and the
- 8051 Cross Assembler and source files are on separate disks,
- remove the disk with the 8051 Cross Assembler on it and replace
- it with your source file disk.
-
- Next, enter the source file name. If no extension is given, the
- Cross Assembler will assume an extension of .ASM. If no drive is
- given, the Cross Assembler will assume the default drive. Since
- in every case where no drive is given, the Cross Assembler
- assumes the default drive, it is generally a good practice to
- change the default drive to the drive with your source files.
-
- An alternative method for entering the source file is in the
- command line. In this case, after typing in ASM51, type in a
- space and the source file name (again if no extension is given,
- source file on the command line:
-
- A>ASM51 B:CONTROL.A51<CR>
-
- After the source file name has been accepted, the Cross Assembler
- will begin the translation process. As it starts the first pass
- of its two pass process, it will print on the screen:
-
- First pass
-
- At the completion of the first pass, and as it starts its second
- pass through the source file, the Cross Assembler will display:
-
- Second pass
-
- When second pass is completed, the translation process is done
- and the Cross Assembler will print the following message:
-
- ASSEMBLY COMPLETE, XX ERRORS FOUND
-
- XX is replaced with the actual number of errors that were found.
- Disk I/O may continue for a while as the Cross Assembler appends
-
-
- 3-2
-
-
-
- the symbol table to the listing file.
-
-
- 3.4. Example Running the Cross Assembler
-
- The following is an example of an actual run. The Cross
- Assembler will take the source file SAMPLE.ASM from Drive A
- (default drive).
-
- Again, the symbol <CR> is used to show where the ENTER key was
- hit.
-
- A>ASM51<CR>
-
-
-
-
- 8 0 5 1 C R O S S A S S E M B L E R
-
-
- Version 1.2
-
- (c) Copyright 1984, 1985, 1986, 1987, 1988, 1989, 1990
-
- MetaLink Corporation
-
-
-
- Source file drive and name [.ASM]: sample<CR>
-
- First pass
-
- Second pass
-
- ASSEMBLY COMPLETE, 0 ERRORS FOUND
-
-
- 3.5. DOS Hints and Suggestions
-
- If you are using DOS 2.0 or later, you may want to use the BREAK
- ON command before you run the Cross Assembler. This will allow
- you to abort (Ctrl-Break) the Cross Assembler at any time.
- Otherwise, you will only be able to abort the Cross Assembler
- after it completes a pass through the source file. If you are
- assembling a large file, this could cause you a several minute
- wait before the Cross Assembler aborts.
-
- The reason for this it that the default condition for DOS to
- recognizes a Ctrl-Break is when the program (in this case the
- Cross Assembler) does keyboard, screen or printer I/O.
- Unfortunately, the assembler does this very rarely (once each
- pass). By using the BREAK ON command, DOS will recognize a Ctrl-
- Break for all I/O, including disk I/O. Since the Cross Assembler
- is constantly doing disk I/O, with BREAK ON you can abort almost
- immediately by hitting the Ctrl-Break keys.
-
-
-
- 3-3
-
-
-
- So much for the good news. However, aborting a program can cause
- some undesirable side-effects. Aborting a program while files
- are open causes DOS to drop some information about the open
- files. This results in disk sectors being allocated when they
- are actually free. Your total available disk storage shrinks.
- You should make the practice of running CHKDSK with the /F switch
- periodically to recover these sectors.
-
- The Cross Assembler run under DOS 2.0 or later supports
- redirection. You can specify the redirection on the command line.
- Use the following form:
-
- ASM51 <infile >outfile
-
- "infile" and "outfile" can be any legal file designator. The
- Cross Assembler will take its input from the "infile" instead of
- the keyboard and will send its output to "outfile" instead of the
- screen.
-
- Note that redirection of input in ASM51 is redundant since the
- assembler is an absolute assembler and has no command line
- options other than the file name argument.
-
- Output redirection is useful for speeding up the assembly
- process. Because assembly-time errors are directed to std_err in
- DOS, an error listing cannot be redirected to a file
-
- To make the .lst file serve as an error-only file, use the Cross
- Assembler Controls $PRINT (create a list file) $NOLIST (turn the
- listing off). Use the Cross Assembler Controls $NOSYMBOLS to
- further compress the error-only listing resulting from the
- manipulation of the list file controls. See Chapter 6 for more
- information. The errors will be listed in the .lst file, as
- usual.
-
- If the control $NOPRINT (see Chapter 6) is active, all error
- messages are send to the screen.
-
-
-
- 3.6. References
-
- 1. IBM Corp., Disk Operating System, Version 1.10, May 1982.
- 2. IBM Corp., Disk Operating System, Version 2.00, January 1983.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 3-4
- CHAPTER 4
-
-
- 8051 INSTRUCTION SET
-
-
- 4.1. Notation
-
- Below is an explanation of the column headings and column
- contents of the 8051 Instruction Set Summary Table that follows
- in this chapter.
-
-
- MNEMONIC
-
- The MNEMONIC column contains the 8051 Instruction Set Mnemonic
- and a brief description of the instruction's operation.
-
-
- OPERATION
-
- The OPERATION column describes the 8051 Instruction Set in unam-
- biguous symbology. Following are the definitions of the symbols
- used in this column.
-
- <n:m> Bits of a register inclusive. For
- example, PC<10:0> means bits 0 through 10
- inclusive of the PC. Bit 0 is always the
- least significant bit.
- + Binary addition
- - Binary 2s complement subtraction
- / Unsigned integer division
- X Unsigned integer multiplication
- ~ Binary complement (1s complement)
- ^ Logical And
- v Inclusive Or
- v Exclusive Or
- > Greater than
- <> Not equal to
- = Equals
- -> Is written into. For example, A + SOper -
- > A means the result of the binary
- addition between A and the Source Operand
- is written into A.
-
- A The 8-bit Accumulator Register.
- AC The Auxiliary Carry Flag in the Program
- Status Word
- CF The Carry Flag in the Program Status Word
- DOper The Destination Operand used in the
- instruction.
- DPTR 16-bit Data Pointer
- Intrupt Active Flag Internal Flag that holds off interrupts
-
-
- 4-1
-
- until the Flag is cleared.
- Jump Relative to PC A Jump that can range between -128 bytes
- and +127 bytes from the PC value of
- the next instruction.
- Paddr A 16-bit Program Memory address
- PC The 8051 Program Counter. This 16-bit
- register points to the byte in the
- Program Memory space that is fetched as
- part of the instruction stream.
- PM(addr) Byte in Program Memory space pointed
- to by addr.
- Remainder Integer remainder of unsigned integer division
- SOper The Source Operand used in the instruction.
- SP 8-bit Stack Pointer
- STACK The Last In First Out data structure that
- is controlled by the 8-bit Stack
- Pointer (SP). Sixteen bit quantities are
- pushed on the stack low byte first.
-
-
- DEST ADDR MODE/SOURCE ADDR MODE
-
- These two columns specify the Destination and Source Addressing
- Modes, respectively, that are available for each instruction.
-
- AB The Accumulator-B Register pair.
- Accumulator Operand resides in the accumulator
- Bit Direct Operand is the state of the bit specified by the
- Bit Memory address.
- Carry Flag Operand is the state of the 1-bit Carry flag in
- the Program Status Word (PSW).
- Data Pointer Operand resides in the 16-bit Data Pointer
- Register.
- Direct Operand is the contents of the specified 8-bit
- Internal Data Memory address from 0
- (00H) to 127 (7FH) or a Special Function Register
- address.
- Indirect Operand is the contents of the address contained
- in the register specified.
- Immediate Operand is the next sequential byte after the
- instruction in Program Memory space
- Prog Direct 16-bit address in Program Memory Space.
- Prog Indir Operand in Program Memory Space is the address
- contained in the register specified.
- Register Operand is the contents of the register specified.
- Stack Operand is on the top of the Stack.
-
-
- ASSEMBLY LANGUAGE FORM
-
- This column contains the correct format of the instructions that
- are recognized by the Cross Assembler.
-
- A Accumulator
- AB Accumulator-B Register pair.
-
- 4-2
-
-
-
- C Carry Flag
- Baddr Bit Memory Direct Address.
- Daddr Internal Data Memory or Special Function Register
- Direct Address.
- data 8-bit constant data.
- data16 16-bit constant data.
- DPTR 16-bit Data Pointer Register.
- PC 16-bit Program Counter.
- Paddr 16-bit Program Memory address
- Ri Indirect Register. R0 or R1 are the only indirect
- registers.
- Roff 8-bit offset for Relative Jump.
- Rn Implicit Register. Each register bank has 8 general
- purpose registers, designated R0, R1, R2, R3,
- R4, R5, R6, R7.
-
-
- HEX OPCODE
-
- This column gives the machine language hexadecimal opcode for
- each 8051 instruction.
-
-
-
- BYT
-
- This column gives the number of bytes in each 8051 instruction.
-
-
- CYC
-
- This column gives the number of cycles of each 8051 instruction.
- The time value of a cycle is defined as 12 divided by the
- oscillator frequency. For example, if running an 8051 family
- component at 12 MHz, each cycle takes 1 microsecond.
-
-
- PSW
-
- This column identifies which condition code flags are affected by
- the operation of the individual instructions. The condition code
- flags available on the 8051 are the Carry Flag, CF, the Auxiliary
- Carry Flag, AC, and the Overflow Flag, OV.
-
- It should be noted that the PSW is both byte and bit directly
- addressable. Should the PSW be the operand of an instruction
- that modifies it, the condition codes could be changed even if
- this column states that the instruction doesn't affect them.
-
- 0 Condition code is cleared
- 1 Condition code is set
- * Condition code is modified by instruction
- - Condition code is not affected by instruction
-
- 4.2. 8051 Instruction Set Summary
-
-
-
- 4-3
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 4-4
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 4-5
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 4-6
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 4-7
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 4-8
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 4-9
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 4-10
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 4-11
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 4-12
-
-
-
- 4.3. Notes
-
-
- 1 There are 8 possible opcodes. Starting with 11H as the
- opcode base, the final opcode is formed by placing bits 8, 9 and
- 10 of the target address in bits 5, 6 and 7 of the opcode. The 8
- possible opcodes in hexadecimal are then: 11, 31, 51, 71, 91, B1,
- D1, F1.
-
- 2 There are 8 possible opcodes. Starting with 01H as
- the opcode base, the final opcode is formed by placing bits 8, 9
- and 10 of the target address in bits 5, 6 and 7 of the opcode.
- The 8 possible opcodes in hexadecimal are then: 01, 21, 41, 61,
- 81, A1, C1, E1.
-
- 3 The Carry Flag is set if the Destination Operand is
- less than the Source Operand. Otherwise the Carry Flag is
- cleared.
-
- 4 The Carry Flag is set if the BCD result in the
- Accumulator is greater than decimal 99.
-
- 5 The Overflow Flag is set if the B Register contains
- zero (flags a divide by zero operation). Otherwise the Overflow
- Flag is cleared.
-
- 6 If any of the condition code flags are specified as
- the operand of this instruction, they will be reset by the
- instruction if they were originally set.
-
- 7 The high byte of the 16-bit product is placed in the
- B Register, the low byte in Accumulator.
-
-
- 4.4. References
-
- 1. Intel Corp., Microcontroller Handbook, 1984.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 4-13
- CHAPTER 5
-
-
- 8051 CROSS ASSEMBLER DIRECTIVES
-
- 5.1. Introduction
-
- The 8051 Cross Assembler Directives are used to define symbols,
- reserve memory space, store values in program memory, select
- various memory spaces, set the current segment's location counter
- and identify the end of the source file.
-
- Only one directive per line is allowed, however comments may be
- included. The remaining part of this chapter details the
- function of each directive.
-
-
- 5.2. Symbol Definition Directives
-
- EQU Directive
-
- The EQUate directive is used to assign a value to a symbol. It
- can also be used to specify user defined names for the implicit
- operand symbols predefined for the Accumulator (i.e., A) and the
- eight General Purpose Registers (i.e., R0 thru R7).
-
- The format for the EQU directive is: symbol, followed by one or
- more spaces or tabs, followed by EQU, followed by one or more
- spaces or tabs, followed by a number, arithmetic expression,
- previously defined symbol (no forward references allowed) or one
- of the allowed implicit operand symbols (e.g., A, R0, R1, R2, R3,
- R4, R5, R6, R7), followed by an optional comment.
-
- Below are examples of using the EQU Directive:
-
- TEN EQU 10 ;Symbol equated to a number
- COUNTER EQU R7 ;User defined symbol for the implicit
- ;operand symbol R7. COUNTER can now
- ;be used wherever it is legal to use
- ;R7. For example the instruction
- ;INC R7 could now be written INC COUNTER.
- ALSO_TEN EQU TEN ;Symbol equated to a previously defined
- ;symbol.
- FIVE EQU TEN/2 ;Symbol equated to an arithmetic exp.
- A_REG EQU A ;User defined symbol for the implicit
- ;operand symbol A.
- ASCII_D EQU 'D' ;Symbol equated to an ASCII literal
-
-
- SET Directive
-
- Similar to the EQU directive, the SET directive is used to assign
- a value or implicit operand to a user defined symbol. The
- difference however, is that with the EQU directive, a symbol can
-
-
- 5-1
-
-
-
- only be defined once. Any attempt to define the symbol again
- will cause the Cross Assembler to flag it as an error. On the
- other hand, with the SET directive, symbols are redefineable.
- There is no limit to the number of times a symbol can be
- redefined with the SET directive.
-
- The format for the SET directive is: symbol, followed by one or
- more spaces or tabs, followed by SET, followed by one or more
- spaces or tabs, followed by a number, arithmetic expression,
- previously defined symbol (no forward references allowed) or one
- of the allowed implicit operand symbols (e.g., A, R0, R1, R2, R3,
- R4, R5, R6, R7), followed by an optional comment.
-
- Below are examples of using the SET Directive:
-
- POINTER SET R0 ;Symbol equated to register 0
- POINTER SET R1 ;POINTER redefined to register 1
-
- COUNTER SET 1 ;Symbol initialized to 1
- COUNTER SET COUNTER+1 ;An incrementing symbol
-
-
- BIT Directive
-
- The BIT Directive assigns an internal bit memory direct address
- to the symbol. If the numeric value of the address is between 0
- and 127 decimal, it is a bit address mapped in the Internal
- Memory Space. If the numeric value of the address is between 128
- and 255, it is an address of a bit located in one of the Special
- Function Registers. Addresses greater than 255 are illegal and
- will be flagged as an error.
-
- The format for the BIT Directive is: symbol, followed by one or
- more spaces or tabs, followed by BIT, followed by one or more
- spaces or tabs, followed by a number, arithmetic expression, or
- previously defined symbol (no forward references allowed),
- followed by an optional comment.
-
- Below are examples of using the BIT Directive:
-
- CF BIT 0D7H ;The single bit Carry Flag in PSW
- OFF_FLAG BIT 6 ;Memory address of single bit flag
- ON_FLAG BIT OFF_FLAG+1 ;Next bit is another flag
-
-
- CODE Directive
-
- The CODE Directive assigns an address located in the Program
- Memory Space to the symbol. The numeric value of the address
- cannot exceed 65535.
-
- The format for the CODE Directive is: symbol, followed by one or
- more spaces or tabs, followed by CODE, followed by one or more
- spaces or tabs, followed by a number, arithmetic expression, or
- previously defined symbol (no forward references allowed),
- followed by an optional comment.
-
-
- 5-2
-
-
-
- Below are examples of using the CODE Directive:
-
- RESET CODE 0
- EXTI0 CODE RESET + (1024/16)
-
-
- DATA Directive
-
- The DATA Directive assigns a directly addressable internal memory
- address to the symbol. If the numeric value of the address is
- between 0 and 127 decimal, it is an address of an Internal Data
- Memory location. If the numeric value of the address is between
- 128 and 255, it is an address of a Special Function Register.
- Addresses greater than 255 are illegal and will be flagged as an
- error.
-
- The format for the DATA Directive is: symbol, followed by one or
- more spaces or tabs, followed by DATA, followed by one or more
- spaces or tabs, followed by a number, arithmetic expression, or
- previously defined symbol (no forward references allowed),
- followed by an optional comment.
-
- Below are examples of using the DATA Directive:
-
- PSW DATA 0D0H ;Defining the Program Status address
- BUFFER DATA 32 ;Internal Data Memory address
- FREE_SPAC DATA BUFFER+16 ;Arithmetic expression.
-
-
- IDATA Directive
-
- The IDATA Directive assigns an indirectly addressable internal
- data memory address to the symbol. The numeric value of the
- address can be between 0 and 255 decimal. Addresses greater than
- 255 are illegal and will be flagged as an error.
-
- The format for the IDATA Directive is: symbol, followed by one or
- more spaces or tabs, followed by IDATA, followed by one or more
- spaces or tabs, followed by a number, arithmetic expression, or
- previously defined symbol (no forward references allowed),
- followed by an optional comment.
-
- Below are examples of using the IDATA Directive:
-
- TOKEN IDATA 60
- BYTE_CNT IDATA TOKEN + 1
- ADDR IDATA TOKEN + 2
-
-
- XDATA Directive
-
- The XDATA Directive assigns an address located in the External
- Data Memory Space to the symbol. The numeric value of the
- address cannot exceed 65535.
-
-
-
- 5-3
-
-
-
- The format for the XDATA Directive is: symbol, followed by one or
- more spaces or tabs, followed by XDATA, followed by one or more
- spaces or tabs, followed by a number, arithmetic expression, or
- previously defined symbol (no forward references allowed),
- followed by an optional comment.
-
- Below are examples of using the XDATA Directive:
-
- USER_BASE XDATA 2048
- HOST_BASE XDATA USER_BASE + 1000H
-
-
- 5.3. Segment Selection Directives
-
- There are five Segment Selection Directives: CSEG, BSEG, DSEG,
- ISEG, XSEG, one for each of the five memory spaces in the 8051
- architecture. The CSEG Directive is used to select the Program
- Memory Space. The BSEG Directive is used to select the Bit
- Memory Space. The DSEG Directive is used to select the directly
- addressable Internal Data Memory Space. The ISEG is used to
- select the indirectly addressable Internal Data Memory Space.
- The XSEG is used to select the External Data Memory Space.
-
- Each segment has its own location counter that is reset to zero
- during the Cross Assembler program initialization. The contents
- of the location counter can be overridden by using the optional
- AT after selecting the segment.
-
- The Program Memory Space, or CSEG, is the default segment and is
- selected when the Cross Assembler is run.
-
- The format of the Segment Selection Directives are: zero or more
- spaces or tabs, followed by the Segment Selection Directive,
- followed by one or more spaces or tabs, followed by the optional
- segment location counter override AT command and value, followed
- by an optional comment.
-
- The value of the AT command can be a number, arithmetic
- expression or previously defined symbol (forward references are
- not allowed). Care should be taken to ensure that the location
- counter does not advance beyond the limit of the selected
- segment.
-
- Below are examples of the Segment Selection Directives:
-
- DSEG ;Select direct data segment using
- ;current location counter value.
- BSEG AT 32 ;Select bit data segment forcing
- ;location counter to 32 decimal.
- XSEG AT (USER_BASE * 5) MOD 16 ;Arithmetic expressions can be
- ;used to specify location.
-
-
- 5.4. Memory Reservation and Storage Directives
-
-
-
- 5-4
-
-
-
- DS Directive
-
- The DS Directive is used to reserve space in the currently
- selected segment in byte units. It can only be used when ISEG,
- DSEG or XSEG are the currently active segments. The location
- counter of the segment is advanced by the value of the directive.
- Care should be taken to ensure that the location counter does not
- advance beyond the limit of the segment.
-
- The format for the DS Directive is: optional label, followed by
- one or more spaces or tabs, followed by DS, followed by one or
- more spaces or tabs, followed by a number, arithmetic expression,
- or previously defined symbol (no forward references allowed),
- followed by an optional comment.
-
- Below is an example of using the DS Directive in the internal
- Data Segment. If, for example, the Data Segment location counter
- contained 48 decimal before the example below, it would contain
- 104 decimal after processing the example.
-
- DSEG ;Select the data segment
- DS 32 ;Label is optional
- SP_BUFFER: DS 16 ;Reserve a buffer for the serial port
- IO_BUFFER: DS 8 ;Reserve a buffer for the I/O
-
-
- DBIT Directive
-
- The DBIT Directive is used to reserve bits within the BIT
- segment. It can only be used when BSEG is the active segment.
- The location counter of the segment is advanced by the value of
- the directive. Care should be taken to ensure that the location
- counter does not advance beyond the limit of the segment.
-
- The format for the DBIT Directive is: optional label, followed by
- one or more spaces or tabs, followed by DBIT, followed by one or
- more spaces or tabs, followed by a number, arithmetic expression,
- or previously defined symbol (no forward references allowed),
- followed by an optional comment.
-
- Below is an example of using the DBIT Directive:
-
- BSEG ;Select the bit segment
- DBIT 16 ;Label is optional
- IO_MAP: DBIT 32 ;Reserve a bit buffer for I/O
-
-
- DB Directive
-
- The DB Directive is used to store byte constants in the Program
- Memory Space. It can only be used when CSEG is the active
- segment.
-
- The format for the DB Directive is: optional label, followed by
- one or more spaces or tabs, followed by DB, followed by one or
- more spaces or tabs, followed by the byte constants that are
-
-
- 5-5
-
-
-
- separated by commas, followed by an optional comment.
-
- The byte constants can be numbers, arithmetic expressions, symbol
- values or ASCII literals. ASCII literals have to be delimited by
- apostrophes ( ' ), but they can be strung together up to the
- length of the line.
-
- Below are examples of using the DB Directive. If an optional
- label is used, its value will point to the first byte constant
- listed.
-
- COPYRGHT_MSG:
- DB '(c) Copyright, 1984' ;ASCII Literal
- RUNTIME_CONSTANTS:
- DB 127,13,54,0,99 ;Table of constants
- DB 17,32,239,163,49 ;Label is optional
- MIXED: DB 2*8,'MPG',2*16,'abc' ;Can mix literals & no.
-
-
- DW Directive
-
- The DW Directive is used to store word constants in the Program
- Memory Space. It can only be used when CSEG is the active
- segment.
-
- The format for the DW Directive is: optional label, followed by
- one or more spaces or tabs, followed by DW, followed by one or
- more spaces or tabs, followed by the word constants that are
- separated by commas, followed by an optional comment.
-
- The word constants can be numbers, arithmetic expressions, symbol
- values or ASCII literals. ASCII literals must be delimited by
- apostrophes ( ' ), but unlike the DB Directive, only a maximum of
- two ASCII characters can be strung together. The first character
- is placed in the high byte of the word and the second character
- is placed in the low byte. If only one character is enclosed by
- the apostrophes, a zero will be placed in the high byte of the
- word.
-
- Below are examples of using the DW Directive. If an optional
- label is used, its value will point to the high byte of the first
- word constant listed.
-
- JUMP_TABLE: DW RESET,START,END ;Table of addresses
- DW TEST,TRUE,FALSE ;Optional label
- RADIX: DW 'H',1000H ;1st byte contains 0
- ;2nd byte contains 48H (H)
- ;3rd byte contains 10H
- ;4th byte contains 0
-
-
- 5.5. Miscellaneous Directives
-
-
- ORG Directive
-
-
-
- 5-6
-
-
- The ORG Directive is used to specify a value for the currently
- active segment's location counter. It cannot be used to select
- segments like the directives above. It can only be used within a
- segment when the location counter needs to be changed. Care
- should be taken to ensure that the location counter does not
- advance beyond the limit of the selected segment.
-
- The format of the ORG Directive is: zero or more spaces or tabs,
- followed by ORG, followed by one or more spaces or tabs, followed
- by a number, arithmetic expression, or previously defined symbol
- (no forward references are allowed), followed by an optional
- comment.
-
- Below are examples of the ORG directive.
-
- ORG 1000H ;Location counter set at 4096 decimal
- ORG RESET ;Previously defined symbol
- ORG BASE + MODULE_NO ;Arithmetic expression
-
-
- USING DIRECTIVE
-
- The USING Directive is used to specify which of the four General
- Purpose Register banks is used in the code that follows the
- directive. It allows the use of the predefined register symbols
- AR0 thru AR7 instead of the register's direct addresses. It
- should be noted that the actual register bank switching must
- still be done in the code. This directive simplifies the direct
- addressing of a specified register bank.
-
- The format of the USING Directive is: zero or more spaces or
- tabs, followed by USING, followed by one or more spaces or tabs,
- followed by a number, arithmetic expression, or previously
- defined symbol (no forward references are allowed), followed by
- an optional comment.
-
- The number, arithmetic expression, or previously defined symbol
- must result in a number between 0 and 3 in order to specify one
- of the four register banks in the 8051.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 5-7
-
-
-
- The following table maps the specified value in the USING
- directive with the direct addresses of the predefined symbols.
-
- Predefined | USING Value |
- Symbol | 0 1 2 3 |
- -----------------------------------------------
- AR0 0 8 16 24
- AR1 1 9 17 25
- AR2 2 10 18 26
- AR3 3 11 19 27
- AR4 4 12 20 28
- AR5 5 13 21 29
- AR6 6 14 22 30
- AR7 7 15 23 31
-
-
- Below are examples of the USING Directive:
-
- USING 0 ;Select addresses for Bank 0
- USING 1+1+1 ;Arithmetic expressions
-
-
- END Directive
-
- The END Directive is used to signal the end of the source program
- to the Cross Assembler. Every source program must have one and
- only one END Directive. A missing END Directive, as well as text
- beyond the occurrence of the END Directive are not allowed and
- will be flagged as errors.
-
- The format of the END Directive is: zero or more spaces or tabs,
- followed by END, followed by an optional comment. All text must
- appear in the source program before the occurrence of the END
- Directive.
-
- Below is an example of the END Directive:
-
- END ;This is the End
-
-
- 5.6. Conditional Assembly Directives
-
- IF, ELSE and ENDIF Directive
-
- The IF, ELSE and ENDIF directives are used to define conditional
- assembly blocks. A conditional assembly block begins with an IF
- statement and must end with the ENDIF directive. In between the
- IF statement and ENDIF directive can be any number of assembly
- language statements, including directives, controls,
- instructions, the ELSE directive and nested IF-ENDIF conditional
- assembly blocks.
-
- The IF statement starts with the keyword IF, followed by one or
- more spaces or tabs, followed by a number, arithmetic expression,
- or previously defined symbol (no forward references are allowed),
- followed by an optional comment. The number, arithmetic
-
-
- 5-8
-
-
-
- expression or symbol is evaluated and if found to be TRUE (non-
- zero), the assembly language statements are translated up to the
- next ELSE or ENDIF directives. If the IF statement was evaluated
- FALSE (zero), the assembly language statements are considered
- null up to the next ELSE or ENDIF directives.
-
- If an optional ELSE appears in the conditional assembly block,
- the assembly language statements following are handled oppositely
- from the assembly language statements following the IF statement.
- In other words, if the IF statement was evaluated TRUE, the
- statements following it are translated, while the statements
- following the ELSE will be handled as if they were null. On the
- other hand, if the IF statement was evaluated FALSE, only the
- assembly language statements following the ELSE directive would
- be translated.
-
- IF-ELSE-ENDIF conditional assembly blocks can be nested up to 255
- levels deep. The following are some examples of conditional
- assembly blocks. This first conditional assembly block simply
- checks the symbol DEBUG. If DEBUG is non-zero, the MOV and CALL
- instructions will be translated by the Cross Assembler.
-
- IF (DEBUG)
- MOV A,#25
- CALL OUTPUT
- ENDIF
-
- The next example used the optional ELSE directive. If
- SMALL_MODEL is zero, only the statements following the ELSE
- directive will be translated.
-
- IF (SMALL_MODEL)
- MOV R0,#BUFFER
- MOV A,@R0
- ELSE
- MOV R0,#EXT_BUFFER
- MOVX A,@R0
- ENDIF
-
- The last example shows nested conditional assembly blocks.
- Conditional assembly blocks can be nested up to 255 levels deep.
- Every level of nesting must have balanced IF-ENDIF statements.
- _
- IF (VERSION > 10) \
- CALL DOUBLE_PRECISION |
- CALL UPDATE_STATUS _ |
- IF (DEBUG) \ |
- CALL DUMP_REGISTERS > Nested |
- ENDIF _/ Block |
- ELSE > Outer Block
- CALL SINGLE_PRECISION |
- CALL UPDATE_STATUS _ |
- IF (DEBUG) \ |
- CALL DUMP_REGISTERS > Nested |
- ENDIF _/ Block |
- ENDIF _/
-
- 5-9
- CHAPTER 6
-
-
- 8051 CROSS ASSEMBLER CONTROLS
-
-
- 6.1. Introduction
-
- Assembler controls are used to control where the Cross Assembler
- gets its input source file, where it stores the object file, how
- it formats and where it outputs the listing.
-
- All Assembler controls are prefaced with a dollar sign, ($). No
- spaces or tabs are allowed between the dollar sign and the body
- of the control. Also, only one control per line is permitted.
- Comments are allowed on the same line as an Assembler control.
-
- There are two types of controls, Primary controls and General
- controls. Primary controls can be invoked only once per
- assembly. If an attempt is made to change a previously invoked
- primary control, the attempt is ignored. For example, if
- $NOPRINT is put on line 1 of the source file and $PRINT is put on
- line 2, the $PRINT control will be ignored and the listing will
- not be output. General controls can be invoked any number of
- times in a source program.
-
- There are two legal forms for each Assembler control, the full
- form and the abbreviated form. The two forms can be used inter-
- changeable in the source program.
-
- Below is a description of each Assembler control. Assembler
- controls with common functionality are grouped together.
-
-
- 6.2. Assembler Control Descriptions
-
-
- $DATE(date)
- Places the ASCII string enclosed by parenthesis in the date
- field of the page header. The ASCII string can be from 0 to 9
- characters long.
- CONTROL: $DATE(date)
- ABBREV: $DA(date)
- TYPE: Primary
- DEFAULT: No date in page header
- EXAMPLES: $DATE(1-JUL-84)
- $DA(7/22/84)
-
-
-
-
-
-
-
-
- 6-1
-
-
-
- $DEBUG(file)
- $NODEBUG
- These controls determine whether or not a MetaLink Absolute
- Object Module format file is created. The MetaLink Absolute
- Object Module format file is used in conjunction with
- MetaLink's MetaICE series of in-circuit-emulators. Among
- other advantages, it provides powerful symbolic debug
- capability in the emulator debug environment. $NODEBUG
- specifies that a MetaLink Absolute Object Module file will not
- be created. $DEBUG specifies that a MetaLink Absolute Object
- Module file will be created. The $DEBUG control allows any
- legal file name to be specified as the MetaLink Absolute
- Object Module filename. If no filename is specified, a
- default name is used. The default name used for the file is
- the source file name root with a .DBG extension. If the
- $DEBUG control is used, both a MetaLink Absolute Object Module
- file and a standard Intel Hexadecimal format object file can
- be generated at the same time. Refer to the $OBJECT control
- description later in this chapter for information on
- controlling the Hexadecimal format object file output.
- CONTROL: $DEBUG(file)
- $NODEBUG
- ABBREV: $DB(file)
- $NODB
- DEFAULT: $NODEBUG
- TYPE: Primary
- EXAMPLES: $DB(A:NEWNAME.ICE)
- $DEBUG
- $NOOBJECT
-
-
- $EJECT
- Places a form feed (ASCII 0CH) in the listing output. The
- $NOPAGING control will override this control.
- CONTROL: $EJECT
- ABBREV: $EJ
- DEFAULT: No form feeds in listing output
- TYPE: General
- EXAMPLES: $EJECT
- $EJ
-
-
- $INCLUDE(file)
- Inserts a file in source program as part of the input source
- program. The file field in this control can be any legal file
- designator. No extension is assumed, so the whole file name
- must be specified. Any number of files can be included in a
- source program. Includes can be nested up to 8 level deep. It
- is important to note that this control inserts files, it does
- not chain or concatenate files.
- CONTROL: $INCLUDE(file)
- ABBREV: $IC(file)
- DEFAULT: No file included in source program
- TYPE: General
- EXAMPLES: $INCLUDE(B:COMMON.EQU
- $IC(TABLES.ASM) ;Uses default drive
-
-
- 6-2
-
-
-
- $LIST
- $NOLIST
- These controls determine whether or not the source program
- listing is output or not. $LIST will allow the source program
- listing to be output. $NOLIST stops the source program
- listing from being output. The $NOPRINT control overrides the
- $LIST control.
- CONTROL: $LIST
- $NOLIST
- ABBREV: $LI
- $NOLI
- DEFAULT: $LIST
- TYPE: General
- EXAMPLES: $NOLIST ;This will cause the included
- $INCLUDE(COMMON.TBL) ;file not to be listed
- $LI ;Listing continues
-
-
- $MOD51
- $MOD52
- $MOD44
- $MOD515
- $MOD512
- $MOD517
- $MOD152
- $MOD451
- $MOD452
- $MOD751
- $MOD752
- $MOD154
- $MOD252
- $MOD521
- $MOD552
- $MOD652
- $MOD851
- $NOMOD
- Recognizes predefined special function register symbols in the
- source program. This saves the user from having to define all
- the registers in the source program. Appendix B lists the
- symbols that are defined by these controls. $NOMOD disables
- the recognizing function. These controls access a files of
- the same name that are included with the MetaLink 8051 CROSS
- ASSEMBLER distribution diskette. When a $MOD control is used
- in a source program, it is important that the $MOD file be
- available to the Cross Assembler. The Cross Assembler first
- looks for the $MOD file on the default drive, if it isn't
- found there, the Cross Assembler looks for it on the A: drive.
- The components supported by each switch are:
- $MOD51: 8051, 8751, 8031, 80C51, 80C31, 87C51, 9761, 8053
- $MOD52: 8052, 8032, 8752
- $MOD44: 8044, 8344, 8744
- $MOD515: 80515, 80535, 80C515, 80C535
- $MOD512: 80512, 80532
- $MOD517: 80C517, 80C537
-
-
- 6-3
-
-
-
- $MOD152: 80C152, 83C152, 80C157
- $MOD451: 80C451. 83C451, 87C451
- $MOD452: 80C452, 83C452, 87C452
- $MOD752: 83C752, 87C752
- $MOD751: 83C751, 87C751
- $MOD154: 83C514, 80C154, 85C154
- $MOD252: 80C252, 83C252, 87C252, 80C51FA, 83C51FA, 87C51FA,
- 83C51FB, 87C51FB
- $MOD521: 80C521, 80C321, 87C521, 80C541, 87C541
- $MOD552: 80C552, 83C552, 87C552
- $MOD652: 80C652, 83C652
- $MOD851: 80C851, 83C851
- CONTROL: $MOD51
- $MOD52
- $MOD44
- $MOD152
- $MOD515
- $MOD512
- $MOD451
- $MOD452
- $MOD751
- $MOD752
- $MOD154
- $MOD252
- $MOD521
- $MOD552
- $MOD652
- $MOD517
- $MOD851
- $NOMOD
-
- ABBREV:
- DEFAULT: $NOMOD
- TYPE: Primary
- EXAMPLES: $MOD51
- $MOD52
- $MOD44
- $MOD515
- $MOD512
- $MOD152
- $MOD451
- $MOD452
- $MOD751
- $MOD752
- $MOD154
- $MOD252
- $MOD521
- $MOD552
- $MOD652
- $MOD517
- $MOD851
- $NOMOD
-
-
- $OBJECT(file)
- $NOOBJECT
-
-
- 6-4
-
-
-
- These controls determine whether or not a standard Intel
- Hexadecimal format object file is created. $NOOBJECT
- specifies that an object file will not be created. $OBJECT
- specifies that an object file will be created. If other than
- the default name is to be used for the object file, the
- $OBJECT control allows any legal file name to be specified as
- the object filename. The default name used for the object
- file is the source file name root with a .HEX extension.
- CONTROL: $OBJECT(file)
- $NOOBJECT
- ABBREV: $OJ(file)
- $NOOJ
- DEFAULT: $OBJECT(source.HEX)
- TYPE: Primary
- EXAMPLES: $OJ(A:NEWNAME.OBJ)
- $NOOBJECT
-
-
- $PAGING
- $NOPAGING
- These controls specify whether or not the output listing will
- be broken into pages or will be output as one continuous
- listing. When the $NOPAGING control is used, the $EJECT and
- $PAGELENGTH controls are ignored. With the $PAGING control, a
- form feed and header line is inserted into the output listing
- whenever an $EJECT control is met, or whenever the number of
- lines output on the current page exceeds the value specified
- by the $PAGELENGTH control. The header line contains source
- file name, title (if $TITLE control was used), date (if $DATE
- control was used) and page number.
- CONTROL: $PAGING
- $NOPAGING
- ABBREV: $PI
- $NOPI
- DEFAULT: $PAGING
- TYPE: Primary
- EXAMPLES: $PAGING
- $NOPI
-
-
-
- $PAGELENGTH(n)
- Sets the maximum number of lines, (n), on a page of the output
- listing. If the maximum is exceeded, a form feed and page
- header is inserted in the output listing. This control allows
- the number of lines per page to be set anywhere between 10 and
- 255. If the number of lines specified is less than 10,
- pagelength will be set to 10. If the number of lines
- specified is greater than 255, pagelength will be set to 255.
-
- The $NOPAGING control will override this control.
- CONTROL: $PAGELENGTH(n)
- ABBREV: $PL(n)
- DEFAULT: $PAGELENGTH(60)
- TYPE: Primary
- EXAMPLES: $PAGELENGTH(48)
-
-
- 6-5
-
-
-
- $PL(58)
-
-
-
- $PAGEWIDTH(n)
- Sets the maximum number of characters, (n), on a line of the
- output listing. This control allows the number of characters
- per line to be set anywhere between 72 and 132. If the number
- specified is less than 72, the pagewidth is set at 72. If the
- number specified is greater than 132, the pagewidth is set at
- 132. If the pagewidth is specified between 72 and 100 and the
- line being output exceeds the pagewidth specification, the
- line is truncated at the specified pagewidth and a carriage
- return/line feed pair is inserted in the listing. If the
- pagewidth is specified to be greater than 100 and the line
- being output exceed the pagewidth specification, a carriage
- return/line feed pair is inserted at the specified pagewidth
- and the line will continue to be listed on the next line
- beginning at column 80.
- CONTROL: $PAGEWIDTH(n)
- ABBREV: $PW(n)
- DEFAULT $PAGEWIDTH(72)
- TYPE: Primary
- EXAMPLES: $PAGEWIDTH(132)
- $PW(80)
-
-
-
- $PRINT(file)
- $NOPRINT
- These controls determine whether or not a listing file is
- created. $NOPRINT specifies that a listing file will not be
- created. $PRINT specifies that an listing file will be
- created. If other than the default name is to be used for the
- listing file, the $PRINT control allows any legal file name to
- be specified as the listing filename. The default name used
- for the listing file is the source file name root with a .LST
- extension.
-
- CONTROL: $PRINT(file)
- $NOPRINT
- ABBREV: $PR
- $NOPR
- DEFAULT: $PRINT(source.LST)
- TYPE: Primary
- EXAMPLES: $PRINT(A:CONTROL.OUT)
- $NOPR
-
-
- $SYMBOLS
- $NOSYMBOLS
- Selects whether or not the symbol table is appended to the
- listing output. $SYMBOLS causes the symbol table to be sorted
- alphabetically by symbol, formatted and output to the listing
- file. Along with the symbol name, its value and type are
- output. Values are output in hexadecimal. Types include NUMB
-
-
- 6-6
-
-
-
- (number), ADDR (address), REG (register symbol) and ACC
- (accumulator symbol). If a symbol was of type ADDR, it
- segment is also output as either C (code), D (data) or X
- (external). Other information listed with the symbols is NOT
- USED (symbol defined but never referenced), UNDEFINED (symbol
- referenced but never defined) and REDEFINEABLE (symbol defined
- using the SET directive). The type and value listed for a
- REDEFINABLE symbol is that of its last definition in the
- source program. $NOSYMBOLS does not output the symbol table.
- CONTROL: $SYMBOLS
- $NOSYMBOLS
- ABBREV: $SB
- $NOSB
- DEFAULT: $SYMBOLS
- TYPE: Primary
- EXAMPLES: $SB
- $NOSYMBOLS
-
-
- $TITLE(string)
- Places the ASCII string enclosed by the parenthesis in the
- title field of the page header. The ASCII string can be from
- 0 to 64 characters long. If the string is greater than 64
- characters or if the width of the page will not support such a
- long title, the title will be truncated. If parentheses are
- part of the string, they must be balanced.
- CONTROL: $TITLE(string)
- ABBREV: $TT(string)
- DEFAULT: No title in page header
- TYPE: Primary
- EXAMPLES: $TITLE(SAMPLE PROGRAM V1.2)
- $TT(METALINK (TM) CROSS ASSEMBLER)
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 6-7
- CHAPTER 7
-
-
- 8051 CROSS ASSEMBLER MACRO PROCESSOR
-
-
- 7.1. Introduction
-
- Macros are useful for code that is used repetitively throughout
- the program. It saves the programmer the time and tedium of
- having to specify the code every time it is used. The code is
- written only once in the macro definition and it can be used
- anywhere in the source program any number of times by simply
- using the macro name.
-
- Sometimes there is confusion between macros and subroutines.
- Subroutines are common routines that are written once by the
- programmer and then accessed by CALLing them. Subroutines are
- usually used for longer and more complex routines where the
- call/return overhead can be tolerated. Macros are commonly used
- for simpler routines or where the speed of in-line code is
- required.
-
-
- 7.2. Macro Definition
-
- Before a macro can be used, it first must be defined. The macro
- definition specifies a template that is inserted into the source
- program whenever the macro name is encountered. Macro
- definitions can not be nested, but once a macro is defined, it
- can be used in other macro definitions. Macros used this way can
- be nested up to nine levels deep.
-
- The macro definition has three parts to it: 1) the macro header
- which specifies the macro name and its parameter list, 2) the
- macro body which is the part that is actually inserted into the
- source program, and 3) the macro terminator.
-
- The macro header has the following form:
-
- name MACRO <parameter list>
-
- The name field contains a unique symbol that it used to identify
- the macro. Whenever that symbol is encountered in the source
- program, the Cross Assembler will automatically insert the macro
- body in the source program at that point. The name must be a
- unique symbol that follows all the rules of symbol formation as
- outlined in Chapter 2.
-
- The MACRO field of the macro header contains the keyword MACRO.
- This is used to notify the Cross Assembler that this is the
- beginning of a macro definition.
-
-
-
- 7-1
-
-
-
- The <parameter list> field of the macro header lists anywhere
- from zero to 16 parameters that are used in the macro body and
- are defined at assembly time. The symbols used in the parameter
- list are only used by the Cross Assembler during the storing of
- the macro definition. As a result, while symbols used in the
- parameter list must be unique symbols that follow all the the
- rules of symbol formation as outlined in Chapter 2, they can be
- reissued in the parameter list of another macro definition
- without conflict. Parameter list items are separated from one
- another by a comma. The following are examples of macro
- definition headers:
-
- MULT_BY_16 MACRO (no parameters)
- DIRECT_ADD MACRO DESTINATION,SOURCE (two parameters)
-
- The macro body contains the template that will replace the macro
- name in the source program. The macro body can contain
- instructions, directives, conditional assembly statements or
- controls. As a matter of fact, the macro body can contain any
- legal Cross Assembler construct as defined in Chapters 2, 4, 5
- and 6.
-
- There are two macro definition terminators: ENDM and EXITM.
- Every macro definition must have an ENDM at the end of its
- definition to notify the Cross Assembler that the macro
- definition is complete. The EXITM terminator is an alternative
- ending of the macro that is useful with conditional assembly
- statements. When a EXITM is encountered in a program, all
- remaining statements (to the ENDM) are ignored.
-
- The following is an example of a macro definition that multiplies
- the Accumulator by 16:
-
- MULT_BY_16 MACRO
- RL A ;* 2
- RL A ;* 4
- RL A ;* 8
- RL A ;* 16
- ENDM
-
- The following is an example of a macro that adds two numbers
- together. This could be used by the programmer to do direct
- memory to memory adds of external variables (create a virtual
- instruction).
-
-
- DIRECT_ADDX MACRO DESTINATION,SOURCE (two parameters)
- MOV R0,#SOURCE
- MOVX A,@R0
- MOV R1,A
- MOV R0,#DESTINATION
- MOVX A,@R0
- ADD A,R1
- MOVX @R0,A
- ENDM
-
-
-
- 7-2
-
-
-
- A final macro definition example shows the use of the EXITM
- macro terminator. If CMOS is non-zero, the MOV and only the MOV
- instruction will be translated by the Cross Assembler.
-
- IDLE MACRO
- IF (CMOS)
- MOV PCON,#IDL
- EXITM
- ENDIF
- JMP $
- ENDM
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 7-3
-
-
- 7.3. Special Macro Operators
-
- There are four special macro operators that are defined below:
-
- % when the PERCENT sign prefaces a symbol in the
- parameter list, the symbol's value is passed to
- the macro's body instead of the symbol itself.
-
- ! when the EXCLAMATION POINT precedes a character,
- that character is handled as a literal and is
- passed to the macro body with the EXCLAMATION
- POINT removed. This is useful when it is
- necessary to pass a delimiter to the macro body.
- For example, in the following parameter list, the
- second parameter passed to the macro body would be
- a COMMA ( , ):
- GENERATE_INST 75,!,,STK_VALUE
-
- & when the AMPERSAND is used in the macro body, the
- symbols on both sides of it are concatenated
- together and the AMPERSAND is removed.
-
- ;; when double SEMI-COLONS are used in a macro
- definition, the comment preceded by the double
- SEMI_COLONS will not be saved and thus will not
- appear in the listing whenever the macro is
- invoked. Using the double SEMI-COLONS lowers the
- memory requirement in storing the macro
- definitions and should be used whenever possible.
-
- Examples of using the above special macro operators follow in the
- "Using Macros" section.
-
-
- 7.4. Using Macros
-
- This section section discusses several situations that arise
- using macros and how to handle them. In general the discussion
- uses examples to get the point across. First the macro
- definition is listed, then the source line program that will
- invoke the macro and finally how the macro was expanded by the
- Cross Assembler.
-
- 7.4.1. NESTING MACROS
-
- The following shows a macro nested to a depth of three.
- Remember, definitions cannot be nested. Macros must be defined
- before they are used in other macro definitions.
-
- ;MACRO DEFINITIONS
-
- GET_EXT_BYTE MACRO EXT_ADDR
- MOV R0,#EXT_ADDR
- MOVX A,@R0
- ENDM
-
-
-
- 7-4
-
-
-
- ADD_EXT_BYTES MACRO EXT_DEST,EXT_SRC
- GET_EXT_BYTE EXT_DEST
- MOV R1,A
- GET_EXT_BYTE EXT_SRC
- ADD A,R1
- ENDM
-
- ADD_DIRECT_BYTES MACRO DESTINATION,SOURCE
- IF (SMALL_MODEL)
- MOV A,SOURCE
- ADD A,DESTINATION
- MOV DESTINATION
- ELSE
- ADD_EXT_BYTES DESTINATION,SOURCE
- MOVX @R0,A
- ENDIF
- ENDM
-
-
- ;USAGE IN PROGRAM
-
- ADD_DIRECT_BYTES 127,128
-
- ;TRANSLATED MACRO
-
-
- 30 +1 ADD_DIRECT_BYTES 127,128
- 31 +1 IF (SMALL_MODEL)
- 32 +1 MOV A,128
- 33 +1 ADD A,127
- 34 +1 MOV 127
- 35 +1 ELSE
- 36 +2 ADD_EXT_BYTES 127,128
- 37 +3 GET_EXT_BYTE 127
- 0100 787F 38 +3 MOV R0,#127
- 0102 E2 39 +3 MOVX A,@R0
- 0103 F9 40 +2 MOV R1,A
- 41 +3 GET_EXT_BYTE 128
- 0104 7880 42 +3 MOV R0,#128
- 0106 E2 43 +3 MOVX A,@R0
- 0107 29 44 +2 ADD A,R1
- 0108 F2 45 +1 MOVX @R0,A
- 46 +1 ENDIF
- 48
-
- Two things should be pointed out from the above example. First,
- the order of the parameter list is important. You must maintain
- the the order of parameters from the macro definition if the
- Cross Assembler is to translate the macro correctly.
-
- Secondly, in order to pass parameters to nested macros, simply
- use the same parameter symbol in the parameter list of the
- definition. For example, the parameter DESTINATION was passed
- properly to the nested macros ADD_EXT_BYTES and GET_EXT_BYTE.
- This occurred because in the macro definition of
- ADD_DIRECT_BYTES, the parameter DESTINATION was specified in the
-
-
- 7-5
-
-
-
- parameter lists of both ADD_EXT_BYTES and GET_EXT_BYTE.
-
-
- 7.4.2. LABELS IN MACROS
-
- You have two choices for specifying labels in a macro body. A
- label can either be passed to the body as a parameter or it can
- be generated within the body. The following example shows both
- ways.
-
-
- ;MACRO DEFINITION
-
- MULTIPLE_SHIFT MACRO LABEL,LABEL_SUFFIX,COUNTER,N
- COUNTER SET COUNTER+1 ;INCREMENT SUFFIX FOR NEXT
- USAGE
-
- LABEL: MOV R0,#N
- SHIFT&LABEL_SUFFIX: RL A
- DJNZ R0,SHIFT&LABEL_SUFFIX
- ENDM
-
-
- ;USAGE IN PROGRAM
-
- MULTIPLE_SHIFT LOOP_SHIFT,%COUNT,COUNT,4
-
-
- ;TRANSLATED MACRO
-
- 15 +1 MULTIPLE_SHIFT LOOP_SHIFT,%COUNT,COUNT,4
- 0006 16 +1 COUNT SET COUNT+1
- 17 +1
- 0100 7804 18 +1 LOOP_SHIFT: MOV R0,#4
- 0102 23 19 +1 SHIFT5: RL A
- 0103 D8FD 20 +1 DJNZ R0,SHIFT5
- 22
-
- Points to note in the above example: 1) the double semi-colon
- caused the comment not to be listed in the translated macro; 2)
- the percent sign caused the value of COUNT (in this case the
- value 5) to be passed to the macro body instead of the symbol;
- and 3) the ampersand allowed two symbols to be concatenated to
- form the label SHIFT5.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 7-6
- CHAPTER 8
-
-
- 8051 CROSS ASSEMBLER ERROR CODES
-
-
- 8.1. Introduction
-
- When the Cross Assembler encounters an error in the source
- program, it will emit an error message in the listing file. If
- the $NOPRINT control has been invoked, the error message will be
- output to the screen.
-
- There are basically two types of errors that are encountered by
- the Cross Assembler, translation errors and I/O errors. I/O
- errors are usually fatal errors. However, whenever an error is
- detected, the Cross Assembler makes every effort possible to
- continue with the assembly.
-
- If it is possible to recover from the error and continue
- assembling, the Cross Assembler will report the error, use a
- default condition and continue on its way. However, when a fatal
- error is encountered, it is impossible for the Cross Assembler to
- proceed. In this case, the Cross Assembler reports the error and
- then aborts the assembly process.
-
- Fatal I/O error messages are displayed on the screen and are of
- the form:
-
- FATAL ERROR opening <filename>
-
- where <filename> would be replaced with the file designator
- initially entered or read from the source program. The cause of
- this error is usually obvious, typically a typographical error or
- the wrong drive specification.
-
- Another fatal I/O error message is:
-
- FATAL ERROR writing to <type> file
-
- where <type> would be replaced with either "listing" or "object".
- The cause of this error is usually either a write protected disk
- or a full disk.
-
- Translation error reports contain at least three lines. The
- first line is the source line in which the error was detected,
- the second line is a pointer to the character, symbol, expression
- or line that caused the error. The final line is the error
- message itself. There may be more than one error message,
- depending on the number of errors in the source line. An example
- of a source line with two errors in it follows:
-
- 0100 2323 26 START: MOV AB,@35
-
-
- 8-1
-
-
- ****----------------------------------------^---^
- ****ERROR #20: Illegal operand
- ****ERROR #20: Illegal operand
-
- The errors are pointed out by the up-arrows ( ^ ). For every up-
- arrow there will be an error message. Errors are ordered left to
- right, so the first error message corresponds to the left-most
- up-arrow and so on. The error message includes an error number
- and an description of the error. The error number can be used as
- an index to the more detailed error explanations that follow in
- this chapter.
-
- After the Cross Assembler has completed its translation process,
- it will print an assembly complete message:
-
- ASSEMBLY COMPLETE, nn ERRORS FOUND
-
- If it was an error free assembly, in place of the "nn" above the
- word "NO" will be output. However, if errors were encountered
- during the assembly process, the "nn" will be replaced with the
- number of errors that were found (up to a maximum of 50). In this
- case, an error summary will follow in the listing file with all
- the errors that were reported during the assembly. An error
- summary looks like the following:
-
- ERROR SUMMARY:
- Line #26, ERROR #20: Illegal operand
- Line #26, ERROR #20: Illegal operand
-
- The same error message that occurred after the source line
- appears again prefaced by the source line number to aid in
- tracking down the error in the source listing.
-
-
- 8.2. Explanation of Error Messages
-
- ERROR #1: Illegal character
- This error occurs when the Cross Assembler encounters a
- character that is not part of its legal character set. The
- Cross Assembler character set can be found in Appendix D.
-
- ERROR #2: Undefined symbol
- This error occurs when the Cross Assembler tries to use a
- symbol that hasn't been defined. The two most common reasons
- for this error are typographical errors and forward
- references.
-
- ERROR #3: Duplicate symbol
- This error occurs when a previously defined symbol or a
- reserved symbol is attempted to be defined again. Refer to
- Appendix C for the reserved words. Also inspect the symbol in
- the symbol table listing. If the symbol doesn't appear there,
- you are using a reserved word. If the symbol does appear, its
- original definition will be listed.
-
- ERROR #4: Illegal digit for radix
- A digit was encountered that is not part of the legal digits
-
-
- 8-2
-
-
-
- for the radix specified. Chapter 2 lists the legal digits for
- each radix available. Often this error occurs because a
- symbol was started with a number instead of a letter, question
- mark, or underscore.
-
- ERROR #5: Number too large
- The number specified, or the returned value of the expression,
- exceeds 16-bit precision. The largest value allowed is
- 65,535.
-
- ERROR #6: Missing END directive
- The source program must end with one and only one END
- directive. The END is placed after all the assembly line
- statements.
-
- ERROR #7: Illegal opcode/directive after label
- The symbol after a label is not an opcode nor a directive that
- allows labels. The only thing permitted on a line after a
- label is an instruction, the DS, DB or DW directives, or a
- comment. If none of these are found, this error will be
- reported.
-
- ERROR #8: Illegal assembly line
- The assembly line doesn't begin with a symbol, label,
- instruction mnemonic, control, directive, comment or null
- line. No attempt is made to translate such a line.
-
- ERROR #9: Text beyond END directive
- The END directive must be the last line of the source program.
- Any text beyond the END line will cause this error. Any such
- text is ignore. Text here is defined as any printable ASCII
- characters.
-
- ERROR #10: Illegal or missing expression
- A number, symbol or arithmetic expression was expected, but it
- was either found to be missing or the Cross Assembler was
- unable to evaluate it properly.
-
- ERROR #11: Illegal or missing expression operator
- An arithmetic operator was expected but it is either missing
- or it is not one of the legal operators specified in Chapter
- 2.
-
- ERROR #12: Unbalanced parentheses
- In evaluating an expression, the parentheses in the expression
- were found not to balance.
-
- ERROR #13: Illegal or missing expression value
- In evaluating an expression, the Cross Assembler expected to
- find either a number or a symbol, but it was either missing or
- illegal.
-
- ERROR #14: Illegal literal expression
- This error occurs when a null ASCII literal string is found.
- A null ASCII literal is nothing more than two apostrophes
- together ( '' ) and is illegal.
-
-
- 8-3
-
-
-
- ERROR #15: Expression stack overflow
- The expression stack has a depth of 32 values. The expression
- being evaluated exceeds this depth. This is a very rare
- error. However, if you ever get it, divide the expression
- into two or more expressions using the EQU directive.
-
- ERROR #16: Division by zero
- The expression being evaluated includes an attempt to divide
- by zero.
-
- ERROR #17: Illegal bit designator
- A bit designator address was specified in the source program
- and it points to an illegal bit address. A bit designator
- contains a byte address, followed by a PERIOD, followed by the
- bit index into the byte address (e.g., ACC.7) as discussed in
- Chapter 2. This error can occur for one of two reasons.
- First, if the number or a symbol that is used to specify the
- byte address part of the bit designator is not a legal bit
- addressable address, ERROR #17 will occur. Second, if the bit
- index into the byte address exceeds the number 7, again ERROR
- #17 will be output.
-
- ERROR #18: Target address exceeds relative address range
- A Program Counter relative jump instruction (e.g., SJMP, JZ,
- JNC, etc.) was decoded with the target address of the jump
- exceeding the maximum possible forward jump of 127 bytes or
- the maximum possible backward jump of 128 bytes.
-
- ERROR #20: Illegal operand
- The operand specified is not a legal operand for the
- instruction. Review the legal operands allowed for the
- instruction.
-
- ERROR #21: Illegal indirect register
- R0 and R1 are the only primary legal indirect register. This
- error occurs when the indirect addressing mode designator (@)
- is not followed by either R0, R1 or symbols that were defined
- to be equivalent to either R0 or R1. This error can also
- occur in the MOVC A,@A+DPTR, MOVC A,@A+PC, MOVX A,@DPTR, MOVX
- @DPTR,A and the JMP @A+DPTR instructions if the operands after
- the indirect addressing mode designator ( @ ) aren't specified
- properly.
-
- ERROR #22: Missing operand delimiter
- A COMMA operand delimiter is missing from the operand fields
- of the instruction.
-
- ERROR #23: Illegal or missing directive
- This error occurs when the Cross Assembler cannot find a legal
- directive. The most common cause of this error is due to
- leaving the COLON off a label. As a result, the following
- opcode mnemonic is attempted to be decoded as a directive.
-
- ERROR #24: Attempting to EQUate a previously SET symbol
- Once a symbol is defined using the SET directive, it cannot be
-
-
- 8-4
-
-
-
- later redefined using the EQU directive.
-
- ERROR #25: Attempting to SET a previously EQUated symbol
- Once a symbol is defined using the EQU directive, it cannot be
- redefined. If you want the symbol to be redefineable, use the
- SET directive.
-
- ERROR #26: Illegal SET/EQU expression
- The expression following the SET or EQU directive is illegal.
- This typically occurs when an attempt is made to define a
- symbol to be equivalent to an implicit register other than A,
- R0, R1, R2, R3, R4, R5, R6 or R7.
-
- ERROR #27: Illegal expression with forward reference
- This error occurs when an expression contains a symbol that
- hasn't been defined yet. Move the symbol definition earlier
- in the source file.
-
- ERROR #28: Address exceeds segment range
- The address specified exceeds 255 and you are in the DSEG,
- BSEG, or ISEG.
-
- ERROR #29: Expecting an EOL or COMMENT
- The Cross Assembler has completed processing a legal assembly
- language line and expected the line to be terminated with
- either a COMMENT or a carriage return/line feed pair.
-
- ERROR #30: Illegal directive with current active segment
- The specified directive is not legal in the active segment.
- This can happen by trying to use the DBIT directive in other
- than the BSEG, or using the DS directive in the BSEG.
-
- ERROR #31: Only two character string allowed
- This error occurs using the DW directive. The maximum ASCII
- literal allowed in a DW specification is a two character
- string.
-
- ERROR #32: Byte definition exceeds 255
- This error occurs using the DB directive. The value specified
- in the DB specification cannot fit into a byte.
-
- ERROR #33: Premature end of string
- An ASCII literal string was not terminated properly with an
- apostrophe.
-
- ERROR #34: Illegal register bank number
- This error occurs when the number specified with the USING
- directive exceed 3. Legal register bank numbers are: 0, 1, 2,
- 3.
-
- ERROR #35: Include file nesting exceeds 8
- The maximum number of nested include files is eight. You will
- get this error if you exceed this limit.
-
- ERROR #36: Illegal or missing argument
- This error occurs when the syntax of a Cross Assembler control
-
-
- 8-5
-
-
-
- requires an argument and it was either incorrectly specified
- or is missing all together.
-
- ERROR #37: Illegal control statement
- The Cross Assembler does not recognize the specified control.
- The legal controls are detailed in Chapter 6.
-
- ERROR #38: Unable to open file
- The Cross Assembler is unable to open the file as specified.
- This is a fatal error which will abort the assembly process.
-
- ERROR #39: Illegal file specification
- The file specification is not a legal file designator. Refer
- to your DOS manual for a description of legal file
- designators. This is a fatal error which will abort the
- assembly process.
-
- ERROR #40: Program synchronization error
- This error occurs when the Cross Assembler is generating the
- object hex file and finds that the code segment location
- counter is not advancing properly. There are two cases where
- this can happen. First, if the source program uses ORG
- directives and they are not placed in ascending order. Second,
- if a generic CALL or JMP is made to a forward reference that
- is actually defined later in the program to be a backward
- reference. For example, the following code sequence will cause
- this error due to the second reason:
-
- BACK_REF: NOP
- CALL FORWARD_REF
- FORWARD_REF EQU BACK_REF
-
- During the first pass, the generic CALL will be replaced with
- a 3-byte LCALL instruction. During the second pass, the
- generic CALL will be replaced with a 2-byte ACALL instruction.
- To prevent this kind of problem, use the generic CALLs and
- JMPs with labeled targets, not EQU or SET defined symbols.
-
- ERROR #41: Insufficient memory
- This error occurs when there isn't enough memory to hold all
- the symbols that have been generated by the source program.
- If you have 96 Kbytes or more of RAM this will be a very rare
- error. Only a massive source program or numerous large macros
- could potentially cause this error. However, if this error
- does occur, your best bet is to either buy more memory or to
- break up your program into smaller pieces and share common
- symbols with a common $INCLUDE file.
-
- ERROR #42: More errors detected, not listed
- The internal error buffer can hold 50 errors. If more than 50
- errors occur, only the first 50 will be reported.
-
- ERROR #43: ENDIF without IF
- The terminator of a conditional assembly block (ENDIF) was
- recognized without seeing a matching IF.
-
-
-
- 8-6
-
-
-
- ERROR #44: Missing ENDIF
- A conditional assembly block was begun with an IF statement,
- but no matching ENDIF was detected.
-
- ERROR #45: Illegal or missing macro name
- The MACRO keyword was recognized, but the symbol that is
- supposed to precede the MACRO keyword was missing, an illegal
- symbol or a duplicate symbol.
-
- ERROR #46: Macro nesting too deep
- Macros can be nested to a depth of 9 levels. Exceeding this
- limit will cause this error.
-
- ERROR #47: Number of parameters doesn't match definition
- In attempting to use a macro, the number of parameters in the
- parameter list does not equal the number of parameters
- specified in the macro definition. They must match.
-
- ERROR #48: Illegal parameter specification
- This error typically occurs when a previously defined symbol
- is used in the parameter list of the macro definition.
-
- ERROR #49: Too many parameters
- The maximum number of parameters in a macro parameter list is
- sixteen. This error occurs when you exceed that limit.
-
- ERROR #50: Line exceeds 255 characters
- The maximum length of a source line is 255 characters. If a
- carriage return/line feed pair is not detected in the first
- 256 characters of a line, this error is reported and the line
- is truncated at 255 characters.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 8-7
- APPENDIX A
-
-
- SAMPLE PROGRAM AND LISTING
-
-
-
- A.1. Source File
-
-
- ;
- ; 8-bit by 8-bit signed multiply--byte signed multiply
- ;
- ; This routine takes the signed byte in multiplicand and
- ; multiplies it by the signed byte in multiplier and places
- ; the signed 16-bit product in product_high and product_low.
- ;
- ; This routine assumes 2s complement representation of signed
- ; numbers. The maximum numbers possible are then -128 and
- ; +127. Multiplying the possible maximum numbers together
- ; easily fits into a 16-bit product, so no overflow test is
- ; done on the answer.
- ;
- ; Registers altered by routine: A, B, PSW.
- ;
- ;
- ; Primary controls
- $MOD51
- $TITLE(BYTE SIGNED MULTIPLY)
- $DATE(JUL-30-84)
- $PAGEWIDTH(132)
- $OBJECT(B:BMULB.OBJ)
- ;
- ;
- ; Variable declarations
- ;
- sign_flag BIT 0F0H ;sign of product
- multiplier DATA 030H ;8-bit multiplier
- multiplicand DATA 031H ;8-bit multiplicand
- product_high DATA 032H ;high byte of 16-bit answer
- product_low DATA 033H ;low byte of answer
- ;
- ;
- ;
- ORG 100H ;arbitrary start
- ;
- byte_signed_multiply:
- CLR sign_flag ;reset sign
- MOV A,multiplier ;put multiplier in accumulator
- JNB ACC.7,positive ;test sign bit of multiplier
- CPL A ;negative--complement and
- INC A ;add 1 to convert to positive
- SETB sign_flag ;and set sign flag
- ;
-
-
- A-1
-
-
-
- positive: MOV B,multiplicand ;put multiplicand in B register
- JNB B.7,multiply ;test sign bit of multiplicand
- XRL B,#0FFh ;negative--complement and
- INC B ;add 1 to convert to positive
- CPL sign_flag ;complement sign flag
- ;
- multiply: MUL AB ;do unsigned multiplication
- ;
- sign_test: JNB sign_flag,byte_signed_exit ;if positive,done
- XRL B,#0FFh ;else have to complement both
- CPL A ;bytes of the product and inc
- ADD A,#1 ;add here because inc doesn't
- JNC byte_signed_exit ;set the carry flag
- INC B ;if add overflowed A, inc the
- ;high byte
- byte_signed_exit:
- MOV product_high,B ;save the answer
- MOV product_low,A
- ;
- RET ;and return
- END
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A-2
-
-
-
- A.2. Source File Listing
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A-3
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A-4
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- A-5
- APPENDIX B
-
- PRE-DEFINED BYTE AND BIT ADDRESSES
-
- The following tables detail the pre-defined byte and bit addresses
- for the 8051/8031 microcontrollers supported by the MetaLink family
- of emulators. Proliferation parts are delimited from the standard
- MCS-51 definitions by asterisk ("*") boxes.
-
- This list covers these microcontrollers:
-
- 8044 8031 8032 8051 8052 8053 80C154 80C321
- 8344 80C31 80C32 8751 8752 8753 83C154 80C521
- 8744 80C51 80C52 85C154 87C521
- 87C51
-
- 80C321 80C51FA(80C252) 80C452 80C152JA/JB/JC/JD 80C851
- 80C541 83C51FA(83C252) 83C452 83C152JA/JC 83C851
- 87C541 87C51FA(87C252) 87C452
-
- 80C451 80C652 80C552 83C751 83C752 80512 80515 80C515 80C517
- 83C451 83C652 83C552 87C751 87C752 80532 80535 80C535 80C537
- 87C451 87C652 87C552
-
- B.1. Pre-defined Byte Addresses
-
- P0 DATA 080H ;PORT 0
- SP DATA 081H ;STACK POINTER
- DPL DATA 082H ;DATA POINTER - LOW BYTE
- DPH DATA 083H ;DATA POINTER - HIGH BYTE
-
- ************************************************************************
- for the 80C321/80C521
- DPL1 DATA 084H ;DATA POINTER LOW 1
- DPH1 DATA 085H ;DATA POINTER HIGH 1
- DPS DATA 086H ;DATA POINTER SELECTION
- ************************************************************************
- ************************************************************************
- for the 83C152/80C152
- GMOD DATA 084H ;GSC MODE
- TFIFO DATA 085H ;GSC TRANSMIT BUFFER
- ************************************************************************
- ************************************************************************
- for the 80C517/80C537
- WDTREL DATA 086H ;WATCHDOG TIMER RELOAD REG
- ************************************************************************
-
- PCON DATA 087H ;POWER CONTROL
- TCON DATA 088H ;TIMER CONTROL
- TMOD DATA 089H ;TIMER MODE
- TL0 DATA 08AH ;TIMER 0 - LOW BYTE
- TL1 DATA 08BH ;TIMER 1 - LOW BYTE
-
- B-1
- ************************************************************************
- for the 83C751/83C752
- RTL DATA 08BH ;TIMER 0 - LOW BYTE RELOAD
- ************************************************************************
-
- TH0 DATA 08CH ;TIMER 0 - HIGH BYTE
- TH1 DATA 08DH ;TIMER 1 - HIGH BYTE
-
- ************************************************************************
- for the 83C751/83C752
- RTH DATA 08DH ;TIMER 0 - HIGH BYTE RELOAD
- ************************************************************************
- ************************************************************************
- for the 83C752
- PWM DATA 08EH ;PULSE WIDTH MODULATION
- ************************************************************************
-
- P1 DATA 090H ;PORT 1
-
- ************************************************************************
- for the 83C152/80C152
- P5 DATA 091H ;PORT 5
- DCON0 DATA 092H ;DMA CONTROL 0
- DCON1 DATA 093H ;DMA CONTROL 1
- BAUD DATA 094H ;GSC BAUD RATE
- ADR0 DATA 095H ;GSC MATCH ADDRESS 0
- ************************************************************************
- ************************************************************************
- for the 80C452/83C452
- DCON0 DATA 092H ;DMA CONTROL 0
- DCON1 DATA 093H ;DMA CONTROL 1
- ************************************************************************
- ************************************************************************
- for the 80C517/80C537
- DPSEL DATA 092H ;DATA POINTER SELECT REGISTER
- ************************************************************************
-
- SCON DATA 098H ;SERIAL PORT CONTROL
- SBUF DATA 099H ;SERIAL PORT BUFFER
-
- ************************************************************************
- for the 83C751/83C752
- I2CON DATA 098H ;I2C CONTROL
- I2DAT DATA 099H ;I2C DATA
- ************************************************************************
- ************************************************************************
- for the 80C517/80C537
- IEN2 DATA 09AH ;INTERRUPT ENABLE REGISTER 2
- S1CON DATA 09BH ;SERIAL PORT CONTROL 1
- S1BUF DATA 09CH ;SERIAL PORT BUFFER 1
- S1REL DATA 09DH ;SERIAL RELOAD REG 1
- ************************************************************************
-
- P2 DATA 0A0H ;PORT 2
- IE DATA 0A8H ;INTERRUPT ENABLE
-
- B-2
- ************************************************************************
- for the 80C51FA/83C51FA(83C252/80C252)
- SADDR DATA 0A9H ;SLAVE INDIVIDUAL ADDRESS
- ************************************************************************
- ************************************************************************
- for the 80515/80535 and 80C517/80C537
- IP0 DATA 0A9H ;INTERRUPT PRIORITY REGISTER 0
- ************************************************************************
- ************************************************************************
- for the 80C321/80C521
- WDS DATA 0A9H ;WATCHDOG SELECTION
- WDK DATA 0AAH ;WATCHDOG KEY
- ************************************************************************
- ************************************************************************
- for the 83C152/80C152
- P6 DATA 0A1H ;PORT 6
- SARL0 DATA 0A2H ;DMA SOURCE ADDR. 0 (LOW)
- SARH0 DATA 0A3H ;DMA SOURCE ADDR. 0 (HIGH)
- IFS DATA 0A4H ;GSC INTERFRAME SPACING
- ADR1 DATA 0A5H ;GSC MATCH ADDRESS 1
- ************************************************************************
- ************************************************************************
- for the 80C452/83C452
- SARL0 DATA 0A2H ;DMA SOURCE ADDR. 0 (LOW)
- SARH0 DATA 0A3H ;DMA SOURCE ADDR. 0 (HIGH)
- ************************************************************************
- ************************************************************************
- for the 80C552/83C552
- CML0 DATA 0A9H ;COMPARE 0 - LOW BYTE
- CML1 DATA 0AAH ;COMPARE 1 - LOW BYTE
- CML2 DATA 0ABH ;COMPARE 2 - LOW BYTE
- CTL0 DATA 0ACH ;CAPTURE 0 - LOW BYTE
- CTL1 DATA 0ADH ;CAPTURE 1 - LOW BYTE
- CTL2 DATA 0AEH ;CAPTURE 2 - LOW BYTE
- CTL3 DATA 0AFH ;CAPTURE 3 - LOW BYTE
- ************************************************************************
-
- P3 DATA 0B0H ;PORT 3
-
- ************************************************************************
- for the 83C152/80C152
- SARL1 DATA 0B2H ;DMA SOURCE ADDR. 1 (LOW)
- SARH1 DATA 0B3H ;DMA SOURCE ADDR. 1 (HIGH)
- SLOTTM DATA 0B4H ;GSC SLOT TIME
- ADR2 DATA 0B5H ;GSC MATCH ADDRESS 2
- ************************************************************************
- ************************************************************************
- for the 80C452/83C452
- SARL1 DATA 0B2H ;DMA SOURCE ADDR. 1 (LOW)
- SARH1 DATA 0B3H ;DMA SOURCE ADDR. 1 (HIGH)
- ************************************************************************
-
- IP DATA 0B8H ;INTERRUPT PRIORITY
-
- ************************************************************************
- for the 80C51FA/83C51FA(83C252/80C252)
- B-3
- SADEN DATA 0B9H ;SLAVE ADDRESS ENABLE
- ************************************************************************
- ************************************************************************
- for the 80515/80535 and 80C517/80C537
- IP1 DATA 0B9H ;INTERRUPT PRIORITY REGISTER 1
- IRCON DATA 0C0H ;INTERRUPT REQUEST CONTROL
- CCEN DATA 0C1H ;COMPARE/CAPTURE ENABLE
- CCL1 DATA 0C2H ;COMPARE/CAPTURE REGISTER 1 - LOW BYTE
- CCH1 DATA 0C3H ;COMPARE/CAPTURE REGISTER 1 - HIGH BYTE
- CCL2 DATA 0C4H ;COMPARE/CAPTURE REGISTER 2 - LOW BYTE
- CCH2 DATA 0C5H ;COMPARE/CAPTURE REGISTER 2 - HIGH BYTE
- CCL3 DATA 0C6H ;COMPARE/CAPTURE REGISTER 3 - LOW BYTE
- CCH3 DATA 0C7H ;COMPARE/CAPTURE REGISTER 3 - HIGH BYTE
- T2CON DATA 0C8H ;TIMER 2 CONTROL
- CRCL DATA 0CAH ;COMPARE/RELOAD/CAPTURE - LOW BYTE
- CRCH DATA 0CBH ;COMPARE/RELOAD/CAPTURE - HIGH BYTE
- TL2 DATA 0CCH ;TIMER 2 - LOW BYTE
- TH2 DATA 0CDH ;TIMER 2 - HIGH BYTE
- ************************************************************************
- ************************************************************************
- for the 80C517/80C537
- CC4EN DATA 0C9H ;COMPARE/CAPTURE 4 ENABLE
- CCL4 DATA 0CEH ;COMPARE/CAPTURE REGISTER 4 - LOW BYTE
- CCH4 DATA 0CFH ;COMPARE/CAPTURE REGISTER 4 - HIGH BYTE
- ************************************************************************
- ************************************************************************
- for the RUPI-44
- STS DATA 0C8H ;SIU STATUS REGISTER
- SMD DATA 0C9H ;SERIAL MODE
- RCB DATA 0CAH ;RECEIVE CONTROL BYTE
- RBL DATA 0CBH ;RECEIVE BUFFER LENGTH
- RBS DATA 0CCH ;RECEIVE BUFFER START
- RFL DATA 0CDH ;RECEIVE FIELD LENGTH
- STAD DATA 0CEH ;STATION ADDRESS
- DMA_CNT DATA 0CFH ;DMA COUNT
- ************************************************************************
- ************************************************************************
- for the 8052/8032, 80C51FA/83C51FA(83C252/80C252), 80C154/83C154
- T2CON DATA 0C8H ;TIMER 2 CONTROL
- ************************************************************************
- ************************************************************************
- for the 80C51FA/83C51FA(83C252/80C252)
- T2MOD DATA 0C9H ;TIMER 2 MODE CONTROL
- ************************************************************************
- ************************************************************************
- for the 8052/8032, 80C51FA/83C51FA(83C252/80C252), 80C154/83C154
- RCAP2L DATA 0CAH ;TIMER 2 CAPTURE REGISTER, LOW BYTE
- RCAP2H DATA 0CBH ;TIMER 2 CAPTURE REGISTER, HIGH BYTE
- TL2 DATA 0CCH ;TIMER 2 - LOW BYTE
- TH2 DATA 0CDH ;TIMER 2 - HIGH BYTE
- ************************************************************************
- B-4
- ************************************************************************
- for the 83C152/80C152
- P4 DATA 0C0H ;PORT 4
- DARL0 DATA 0C2H ;DMA DESTINATION ADDR. 0 (LOW)
- DARH0 DATA 0C3H ;DMA DESTINATION ADDR. 0 (HIGH)
- BKOFF DATA 0C4H ;GSC BACKOFF TIMER
- ADR3 DATA 0C5H ;GSC MATCH ADDRESS 3
- IEN1 DATA 0C8H ;INTERRUPT ENABLE REGISTER 1
- ************************************************************************
- ************************************************************************
- for the 80C452/83C452
- P4 DATA 0C0H ;PORT 4
- DARL0 DATA 0C2H ;DMA DESTINATION ADDR. 0 (LOW)
- DARH0 DATA 0C3H ;DMA DESTINATION ADDR. 0 (HIGH)
- ************************************************************************
- ************************************************************************
- for the 80C451/83C451
- P4 DATA 0C0H ;PORT 4
- P5 DATA 0C8H ;PORT 5
- ************************************************************************
- ************************************************************************
- for the 80512/80532
- IRCON DATA 0C0H ;INTERRUPT REQUEST CONTROL
- ************************************************************************
- ************************************************************************
- for the 80C552/83C552
- P4 DATA 0C0H ;PORT 4
- P5 DATA 0C4H ;PORT 5
- ADCON DATA 0C5H ;A/D CONVERTER CONTROL
- ADCH DATA 0C6H ;A/D CONVERTER HIGH BYTE
- TM2IR DATA 0C8H ;T2 INTERRUPT FLAGS
- CMH0 DATA 0C9H ;COMPARE 0 - HIGH BYTE
- CMH1 DATA 0CAH ;COMPARE 1 - HIGH BYTE
- CMH2 DATA 0CBH ;COMPARE 2 - HIGH BYTE
- CTH0 DATA 0CCH ;CAPTURE 0 - HIGH BYTE
- CTH1 DATA 0CDH ;CAPTURE 1 - HIGH BYTE
- CTH2 DATA 0CEH ;CAPTURE 2 - HIGH BYTE
- CTH3 DATA 0CFH ;CAPTURE 3 - HIGH BYTE
- ************************************************************************
-
- PSW DATA 0D0H ;PROGRAM STATUS WORD
-
- ************************************************************************
- for the RUPI-44
- NSNR DATA 0D8H ;SEND COUNT/RECEIVE COUNT
- SIUST DATA 0D9H ;SIU STATE COUNTER
- TCB DATA 0DAH ;TRANSMIT CONTROL BYTE
- TBL DATA 0DBH ;TRANSMIT BUFFER LENGTH
- TBS DATA 0DCH ;TRANSMIT BUFFER START
- FIFO0 DATA 0DDH ;THREE BYTE FIFO
- FIFO1 DATA 0DEH
- FIFO2 DATA 0DFH
- ************************************************************************
- B-5
- ************************************************************************
- for the 80C51FA/83C51FA(83C252/80C252)
- CCON DATA 0D8H ;CONTROL COUNTER
- CMOD DATA 0D9H ;COUNTER MODE
- CCAPM0 DATA 0DAH ;COMPARE/CAPTURE MODE FOR PCA MODULE 0
- CCAPM1 DATA 0DBH ;COMPARE/CAPTURE MODE FOR PCA MODULE 1
- CCAPM2 DATA 0DCH ;COMPARE/CAPTURE MODE FOR PCA MODULE 2
- CCAPM3 DATA 0DDH ;COMPARE/CAPTURE MODE FOR PCA MODULE 3
- CCAPM4 DATA 0DEH ;COMPARE/CAPTURE MODE FOR PCA MODULE 4
- ************************************************************************
- ************************************************************************
- for the 80515/80535
- ADCON DATA 0D8H ;A/D CONVERTER CONTROL
- ADDAT DATA 0D9H ;A/D CONVERTER DATA
- DAPR DATA 0DAH ;D/A CONVERTER PROGRAM REGISTER
- ************************************************************************
- ************************************************************************
- for the 83C152/80C152
- DARL1 DATA 0D2H ;DMA DESTINATION ADDR. 1 (LOW)
- DARH1 DATA 0D3H ;DMA DESTINATION ADDR. 1 (HIGH)
- TCDCNT DATA 0D4H ;GSC TRANSMIT COLLISION COUNTER
- AMSK0 DATA 0D5H ;GSC ADDRESS MASK 0
- TSTAT DATA 0D8H ;TRANSMIT STATUS (DMA & GSC)
- ************************************************************************
- ************************************************************************
- for the 80C452/83C452
- DARL1 DATA 0D2H ;DMA DESTINATION ADDR. 1 (LOW)
- DARH1 DATA 0D3H ;DMA DESTINATION ADDR. 1 (HIGH)
- ************************************************************************
- ************************************************************************
- for the 80C451/83C451
- P6 DATA 0D8H ;PORT 6
- ************************************************************************
- ************************************************************************
- for the 80512/80532
- ADCON DATA 0D8H ;A/D CONVERTER CONTROL
- ADDAT DATA 0D9H ;A/D CONVERTER DATA
- DAPR DATA 0DAH ;D/A CONVERTER PROGRAM REGISTER
- P6 DATA 0DBH ;PORT 6
- ************************************************************************
- ************************************************************************
- for the 83C751/83C752
- I2CFG DATA 0D8H ;I2C CONFIGURATION
- ************************************************************************
- ************************************************************************
- for the 80C552/83C552 and 80C652/83C652
- S1CON DATA 0D8H ;SERIAL 1 CONTROL
- S1STA DATA 0D9H ;SERIAL 1 STATUS
- S1DAT DATA 0DAH ;SERIAL 1 DATA
- S1ADR DATA 0DBH ;SERIAL 1 SLAVE ADDRESS
- ************************************************************************
- B-6
- ************************************************************************
- for the 80C517/80C537
- CML0 DATA 0D2H ;COMPARE REGISTER 0 - LOW BYTE
- CMH0 DATA 0D3H ;COMPARE REGISTER 0 - HIGH BYTE
- CML1 DATA 0D4H ;COMPARE REGISTER 1 - LOW BYTE
- CMH1 DATA 0D5H ;COMPARE REGISTER 1 - HIGH BYTE
- CML2 DATA 0D6H ;COMPARE REGISTER 2 - LOW BYTE
- CMH2 DATA 0D7H ;COMPARE REGISTER 2 - HIGH BYTE
- ADCON0 DATA 0D8H ;A/D CONVERTER CONTROL 0
- ADDAT DATA 0D9H ;A/D CONVERTER DATA
- DAPR DATA 0DAH ;D/A CONVERTER PROGRAM REGISTER
- P7 DATA 0DBH ;PORT 7
- ADCON1 DATA 0DCH ;A/D CONVERTER CONTROL 1
- P8 DATA 0DDH ;PORT 8
- CTRELL DATA 0DEH ;COM TIMER REL REG - LOW BYTE
- CTRELH DATA 0DFH ;COM TIMER REL REG - HIGH BYTE
- ************************************************************************
-
- ACC DATA 0E0H ;ACCUMULATOR
-
- ************************************************************************
- for the 83C152/80C152
- BCRL0 DATA 0E2H ;DMA BYTE COUNT 0 (LOW)
- BCRH0 DATA 0E3H ;DMA BYTE COUNT 0 (HIGH)
- PRBS DATA 0E4H ;GSC PSEUDO-RANDOM SEQUENCE
- AMSK1 DATA 0E5H ;GSC ADDRESS MASK 1
- RSTAT DATA 0E8H ;RECEIVE STATUS (DMA & GSC)
- ************************************************************************
- ************************************************************************
- for the 80C452/83C452
- BCRL0 DATA 0E2H ;DMA BYTE COUNT 0 (LOW)
- BCRH0 DATA 0E3H ;DMA BYTE COUNT 0 (HIGH)
- HSTAT DATA 0E6H ;HOST STATUS
- HCON DATA 0E7H ;HOST CONTROL
- SLCON DATA 0E8H ;SLAVE CONTROL
- SSTAT DATA 0E9H ;SLAVE STATUS
- IWPR DATA 0EAH ;INPUT WRITE POINTER
- IRPR DATA 0EBH ;INPUT READ POINTER
- CBP DATA 0ECH ;CHANNEL BOUNDARY POINTER
- FIN DATA 0EEH ;FIFO IN
- CIN DATA 0EFH ;COMMAND IN
- ************************************************************************
- ************************************************************************
- for the 80515/80535
- P4 DATA 0E8H ;PORT 4
- ************************************************************************
- ************************************************************************
- for the 80C451/83C451
- CSR DATA 0E8H ;CONTROL STATUS
- ************************************************************************
- ************************************************************************
- for the 80512/80532
- P4 DATA 0E8H ;PORT 4
- ************************************************************************
- B-7
- ************************************************************************
- for the 80C552/83C552
- IEN1 DATA 0E8H ;INTERRUPT ENABLE REGISTER 1
- TM2CON DATA 0EAH ;T2 COUNTER CONTROL
- CTCON DATA 0EBH ;CAPTURE CONTROL
- TML2 DATA 0ECH ;TIMER 2 - LOW BYTE
- TMH2 DATA 0EDH ;TIMER 2 - HIGH BYTE
- STE DATA 0EEH ;SET ENABLE
- RTE DATA 0EFH ;RESET/TOGGLE ENABLE
- ************************************************************************
- ************************************************************************
- for the 80C51FA/83C51FA(83C252/80C252)
- CL DATA 0E9H ;CAPTURE BYTE LOW
- CCAP0L DATA 0EAH ;COMPARE/CAPTURE 0 LOW BYTE
- CCAP1L DATA 0EBH ;COMPARE/CAPTURE 1 LOW BYTE
- CCAP2L DATA 0ECH ;COMPARE/CAPTURE 2 LOW BYTE
- CCAP3L DATA 0EDH ;COMPARE/CAPTURE 3 LOW BYTE
- CCAP4L DATA 0EEH ;COMPARE/CAPTURE 4 LOW BYTE
- ************************************************************************
- ************************************************************************
- for the 80C517/80C537
- CTCON DATA 0E1H ;COM TIMER CONTROL REG
- CML3 DATA 0E2H ;COMPARE REGISTER 3 - LOW BYTE
- CMH3 DATA 0E3H ;COMPARE REGISTER 3 - HIGH BYTE
- CML4 DATA 0E4H ;COMPARE REGISTER 4 - LOW BYTE
- CMH4 DATA 0E5H ;COMPARE REGISTER 4 - HIGH BYTE
- CML5 DATA 0E6H ;COMPARE REGISTER 5 - LOW BYTE
- CMH5 DATA 0E7H ;COMPARE REGISTER 5 - HIGH BYTE
- P4 DATA 0E8H ;PORT 4
- MD0 DATA 0E9H ;MUL/DIV REG 0
- MD1 DATA 0EAH ;MUL/DIV REG 1
- MD2 DATA 0EBH ;MUL/DIV REG 2
- MD3 DATA 0ECH ;MUL/DIV REG 3
- MD4 DATA 0EDH ;MUL/DIV REG 4
- MD5 DATA 0EEH ;MUL/DIV REG 5
- ARCON DATA 0EFH ;ARITHMETIC CONTROL REG
- ************************************************************************
-
- B DATA 0F0H ;MULTIPLICATION REGISTER
-
- ************************************************************************
- for the 80C154/83C154
- IOCON DATA 0F8H ;I/O CONTROL REGISTER
- ************************************************************************
- ************************************************************************
- for the 83C152/80C152
- BCRL1 DATA 0F2H ;DMA BYTE COUNT 1 (LOW)
- BCRH1 DATA 0F3H ;DMA BYTE COUNT 1 (HIGH)
- RFIFO DATA 0F4H ;GSC RECEIVE BUFFER
- MYSLOT DATA 0F5H ;GSC SLOT ADDRESS
- IPN1 DATA 0F8H ;INTERRUPT PRIORITY REGISTER 1
- ************************************************************************
- B-8
- ************************************************************************
- for the 83C851/80C851
- EADRL DATA 0F2H ;EEPROM Address Register - Low Byte
- EADRH DATA 0F3H ;EEPROM Address Register - High Byte
- EDAT DATA 0F4H ;EEPROM Data Register
- ETIM DATA 0F5H ;EEPROM Timer Register
- ECNTRL DATA 0F6H ;EEPROM Control Register
- ************************************************************************
- ************************************************************************
- for the 80C452/83C452
- BCRL1 DATA 0F2H ;DMA BYTE COUNT 1 (LOW)
- BCRH1 DATA 0F3H ;DMA BYTE COUNT 1 (HIGH)
- ITHR DATA 0F6H ;INPUT FIFO THRESHOLD
- OTHR DATA 0F7H ;OUTPUT FIFO THRESHOLD
- IEP DATA 0F8H ;INTERRUPT PRIORITY
- MODE DATA 0F9H ;MODE
- ORPR DATA 0FAH ;OUTPUT READ POINTER
- OWPR DATA 0FBH ;OUTPUT WRITE POINTER
- IMIN DATA 0FCH ;IMMEDIATE COMMAND IN
- IMOUT DATA 0FDH ;IMMEDIATE COMMAND OUT
- FOUT DATA 0FEH ;FIFO OUT
- COUT DATA 0FFH ;COMMAND OUT
- ************************************************************************
- ************************************************************************
- for the 80515/80535
- P5 DATA 0F8H ;PORT 5
- ************************************************************************
- ************************************************************************
- for the 80512/80532
- P5 DATA 0F8H ;PORT 5
- ************************************************************************
- ************************************************************************
- for the 83C751/83C752
- I2STA DATA 0F8H ;I2C STATUS
- ************************************************************************
- ************************************************************************
- for the 80C552/83C552
- IP1 DATA 0F8H ;INTERRUPT PRIORITY REGISTER 1
- PWM0 DATA 0FCH ;PULSE WIDTH REGISTER 0
- PWM1 DATA 0FDH ;PULSE WIDTH REGISTER 1
- PWMP DATA 0FEH ;PRESCALER FREQUENCY CONTROL
- T3 DATA 0FFH ;T3 - WATCHDOG TIMER
- ************************************************************************
- ************************************************************************
- for the 80C517/80C537
- CMEN DATA 0F6H ;COMPARE ENABLE
- CML6 DATA 0F2H ;COMPARE REGISTER 6 - LOW BYTE
- CMH6 DATA 0F3H ;COMPARE REGISTER 6 - HIGH BYTE
- CML7 DATA 0F4H ;COMPARE REGISTER 7 - LOW BYTE
- CMH7 DATA 0F5H ;COMPARE REGISTER 7 - HIGH BYTE
- CMSEL DATA 0F7H ;COMPARE INPUT REGISTER
- P5 DATA 0F8H ;PORT 5
- P6 DATA 0FAH ;PORT 6
- ************************************************************************
- B-9
- ************************************************************************
- for the 80C51FA/83C51FA(83C252/80C252)
- CH DATA 0F9H ;CAPTURE HIGH BYTE
- CCAP0H DATA 0FAH ;COMPARE/CAPTURE 0 HIGH BYTE
- CCAP1H DATA 0FBH ;COMPARE/CAPTURE 1 HIGH BYTE
- CCAP2H DATA 0FCH ;COMPARE/CAPTURE 2 HIGH BYTE
- CCAP3H DATA 0FDH ;COMPARE/CAPTURE 3 HIGH BYTE
- CCAP4H DATA 0FEH ;COMPARE/CAPTURE 4 HIGH BYTE
- ************************************************************************
- ************************************************************************
- for the 83C752
- PWENA DATA 0FEH ;PULSE WIDTH ENABLE
- ************************************************************************
-
-
-
-
- B-10
- B.2. Pre-defined Bit Addresses
-
- ************************************************************************
- for the 83C751/83C752
- SCL BIT 080H ;P0.0 - I2C SERIAL CLOCK
- SDA BIT 081H ;P0.1 - I2C SERIAL DATA
- ************************************************************************
-
- IT0 BIT 088H ;TCON.0 - EXT. INTERRUPT 0 TYPE
- IE0 BIT 089H ;TCON.1 - EXT. INTERRUPT 0 EDGE FLAG
- IT1 BIT 08AH ;TCON.2 - EXT. INTERRUPT 1 TYPE
- IE1 BIT 08BH ;TCON.3 - EXT. INTERRUPT 1 EDGE FLAG
- TR0 BIT 08CH ;TCON.4 - TIMER 0 ON/OFF CONTROL
- TF0 BIT 08DH ;TCON.5 - TIMER 0 OVERFLOW FLAG
- TR1 BIT 08EH ;TCON.6 - TIMER 1 ON/OFF CONTROL
- TF1 BIT 08FH ;TCON.7 - TIMER 1 OVERFLOW FLAG
-
- ************************************************************************
- for the 83C751/83C752
- C/T BIT 08EH ;TCON.6 - COUNTER OR TIMER OPERATION
- GATE BIT 08FH ;TCON.7 - GATE TIMER
- ************************************************************************
- ************************************************************************
- for the 80515/80535
- INT3 BIT 090H ;P1.0 - EXT. INTERRUPT 3/CAPT & COMP 0
- INT4 BIT 091H ;P1.1 - EXT. INTERRUPT 4/CAPT & COMP 1
- INT5 BIT 092H ;P1.2 - EXT. INTERRUPT 5/CAPT & COMP 2
- INT6 BIT 093H ;P1.3 - EXT. INTERRUPT 6/CAPT & COMP 3
- INT2 BIT 094H ;P1.4 - EXT. INTERRUPT 2
- T2EX BIT 095H ;P1.5 - TIMER 2 EXT. RELOAD TRIGGER INP
- CLKOUT BIT 096H ;P1.6 - SYSTEM CLOCK OUTPUT
- T2 BIT 097H ;P1.7 - TIMER 2 INPUT
- ************************************************************************
- ************************************************************************
- for the 83C152/80C152
- GRXD BIT 090H ;P1.0 - GSC RECEIVER DATA INPUT
- GTXD BIT 091H ;P1.1 - GSC TRANSMITTER DATA OUTPUT
- DEN BIT 092H ;P1.2 - DRIVE ENABLE TO ENABLE EXT DRIVE
- TXC BIT 093H ;P1.3 - GSC EXTERNAL TRANSMIT CLOCK INPU
- RXC BIT 094H ;P1.4 - GSC EXTERNAL RECEIVER CLOCK INPU
- ************************************************************************
- ************************************************************************
- for the 83C552/80C552
- CT0I BIT 090H ;P1.0 - CAPTURE/TIMER INPUT 0
- CT1I BIT 091H ;P1.1 - CAPTURE/TIMER INPUT 1
- CT2I BIT 092H ;P1.2 - CAPTURE/TIMER INPUT 2
- CT3I BIT 093H ;P1.3 - CAPTURE/TIMER INPUT 3
- T2 BIT 094H ;P1.4 - T2 EVENT INPUT
- RT2 BIT 095H ;P1.5 - T2 TIMER RESET SIGNAL
- SCL BIT 096H ;P1.6 - SERIAL PORT CLOCK LINE I2C
- SDA BIT 097H ;P1.7 - SERIAL PORT DATA LINE I2C
- ************************************************************************
- B-11
- ************************************************************************
- for the 80C517/80C537
- INT3 BIT 090H ;P1.0 - EXT. INTERRUPT 3/CAPT & COMP 0
- INT4 BIT 091H ;P1.1 - EXT. INTERRUPT 4/CAPT & COMP 1
- INT5 BIT 092H ;P1.2 - EXT. INTERRUPT 5/CAPT & COMP 2
- INT6 BIT 093H ;P1.3 - EXT. INTERRUPT 6/CAPT & COMP 3
- INT2 BIT 094H ;P1.4 - EXT. INTERRUPT 2
- T2EX BIT 095H ;P1.5 - TIMER 2 EXT. RELOAD TRIGGER INPU
- CLKOUT BIT 096H ;P1.6 - SYSTEM CLOCK OUTPUT
- T2 BIT 097H ;P1.7 - TIMER 2 INPUT
- ************************************************************************
- ************************************************************************
- for the 80C452/83C452 and 80C152/83C152
- HLD BIT 095H ;P1.5 - DMA HOLD REQUEST I/O
- HLDA BIT 096H ;P1.6 - DMA HOLD ACKNOWLEDGE OUTPUT
- ************************************************************************
- ************************************************************************
- for the 83C751/83C752
- INT0 BIT 095H ;P1.5 - EXTERNAL INTERRUPT 0 INPUT
- INT1 BIT 096H ;P1.6 - EXTERNAL INTERRUPT 1 INPUT
- T0 BIT 096H ;P1.7 - TIMER 0 COUNT INPUT
- ************************************************************************
-
- RI BIT 098H ;SCON.0 - RECEIVE INTERRUPT FLAG
- TI BIT 099H ;SCON.1 - TRANSMIT INTERRUPT FLAG
- RB8 BIT 09AH ;SCON.2 - RECEIVE BIT 8
- TB8 BIT 09BH ;SCON.3 - TRANSMIT BIT 8
- REN BIT 09CH ;SCON.4 - RECEIVE ENABLE
- SM2 BIT 09DH ;SCON.5 - SERIAL MODE CONTROL BIT 2
- SM1 BIT 09EH ;SCON.6 - SERIAL MODE CONTROL BIT 1
- SM0 BIT 09FH ;SCON.7 - SERIAL MODE CONTROL BIT 0
-
- ************************************************************************
- for the 83C751/83C752
- MASTER BIT(READ) 099H ;I2CON.1 - MASTER
- STP BIT(READ) 09AH ;I2CON.2 - STOP
- STR BIT(READ) 09BH ;I2CON.3 - START
- ARL BIT(READ) 09CH ;I2CON.4 - ARBITRATION LOSS
- DRDY BIT(READ) 09DH ;I2CON.5 - DATA READY
- ATN BIT(READ) 09EH ;I2CON.6 - ATTENTION
- RDAT BIT(READ) 09FH ;I2CON.7 - RECEIVE DATA
- XSTP BIT(WRITE)098H ;I2CON.0 - TRANSMIT STOP
- XSTR BIT(WRITE)099H ;I2CON.1 - TRANSMIT REPEATED START
- CSTP BIT(WRITE)09AH ;I2CON.2 - CLEAR STOP
- CSTR BIT(WRITE)09BH ;I2CON.3 - CLEAR START
- CARL BIT(WRITE)09CH ;I2CON.4 - CLEAR ARBITRATION LOSS
- CDR BIT(WRITE)09DH ;I2CON.5 - CLEAR DATA READY
- IDLE BIT(WRITE)09EH ;I2CON.6 - GO IDLE
- CXA BIT(WRITE)09FH ;I2CON.7 - CLEAR TRANSMIT ACTIVE
- ************************************************************************
-
- EX0 BIT 0A8H ;IE.0 - EXTERNAL INTERRUPT 0 ENABLE
- ET0 BIT 0A9H ;IE.1 - TIMER 0 INTERRUPT ENABLE
- EX1 BIT 0AAH ;IE.2 - EXTERNAL INTERRUPT 1 ENABLE
- ET1 BIT 0ABH ;IE.3 - TIMER 1 INTERRUPT ENABLE
- ES BIT 0ACH ;IE.4 - SERIAL PORT INTERRUPT ENABLE
- B-12
- ************************************************************************
- for the 83C751/83C752
- EI2 BIT 0ACH ;IE.4 - SERIAL PORT INTERRUPT ENABLE
- ************************************************************************
- ************************************************************************
- for the 8052/8032, 80C154/83C154, 80C252(80C51FA), 80515/80535
- ET2 BIT 0ADH ;TIMER 2 INTERRUPT ENABLE
- ************************************************************************
- ************************************************************************
- for the 80C652/83C652
- ES1 BIT 0ADH ;IE.5 - SERIAL PORT 1 INTERRUPT ENABLE
- ************************************************************************
- ************************************************************************
- for the 80C252(80C51FA)
- EC BIT 0AEH ;IE.6 - ENABLE PCA INTERRUPT
- ************************************************************************
- ************************************************************************
- for the 80515/80535
- WDT BIT 0AEH ;IEN0.6 - WATCHDOG TIMER RESET
- ************************************************************************
- ************************************************************************
- for the 83C552/80C552
- ES1 BIT 0ADH ;IEN0.5 - SERIAL PORT 1 INTERRUPT ENABLE
- EAD BIT 0AEH ;IEN0.6 - ENABLE A/D INTERRUPT
- ************************************************************************
- ************************************************************************
- for the 80C517/80C537
- ET2 BIT 0ADH ;IEN0.5 - TIMER 2 INTERRUPT ENABLE
- WDT BIT 0AEH ;IEN0.6 - WATCHDOG TIMER RESET
- ************************************************************************
-
- EA BIT 0AFH ;IE.7 - GLOBAL INTERRUPT ENABLE
- RXD BIT 0B0H ;P3.0 - SERIAL PORT RECEIVE INPUT
- TXD BIT 0B1H ;P3.1 - SERIAL PORT TRANSMIT OUTPUT
- INT0 BIT 0B2H ;P3.2 - EXTERNAL INTERRUPT 0 INPUT
- INT1 BIT 0B3H ;P3.3 - EXTERNAL INTERRUPT 1 INPUT
- T0 BIT 0B4H ;P3.4 - TIMER 0 COUNT INPUT
- T1 BIT 0B5H ;P3.5 - TIMER 1 COUNT INPUT
- WR BIT 0B6H ;P3.6 - WRITE CONTROL FOR EXT. MEMORY
- RD BIT 0B7H ;P3.7 - READ CONTROL FOR EXT. MEMORY
- PX0 BIT 0B8H ;IP.0 - EXTERNAL INTERRUPT 0 PRIORITY
- PT0 BIT 0B9H ;IP.1 - TIMER 0 PRIORITY
- PX1 BIT 0BAH ;IP.2 - EXTERNAL INTERRUPT 1 PRIORITY
- PT1 BIT 0BBH ;IP.3 - TIMER 1 PRIORITY
- PS BIT 0BCH ;IP.4 - SERIAL PORT PRIORITY
-
- ************************************************************************
- for the 80C154/83C154
- PT2 BIT 0BCH ;IP.5 - TIMER 2 PRIORITY
- PCT BIT 0BFH ;IP.7 - INTERRUPT PRIORITY DISABLE
- ************************************************************************
- B-13
- ************************************************************************
- for the 80C652/83C652
- PS1 BIT 0BDH ;IP.5 - SERIAL PORT 1 PRIORITY
- ************************************************************************
- ************************************************************************
- for the 80C51FA/83C51FA(83C252/80C252)
- PT2 BIT 0BDH ;IP.5 - TIMER 2 PRIORITY
- PPC BIT 0BEH ;IP.6 - PCA PRIORITY
- ************************************************************************
- ************************************************************************
- for the 80515/80535 and 80C517/80C537
- EADC BIT 0B8H ;IEN1.0 - A/D CONVERTER INTERRUPT EN
- EX2 BIT 0B9H ;IEN1.1 - EXT. INTERRUPT 2 ENABLE
- EX3 BIT 0BAH ;IEN1.2 - EXT. INT 3/CAPT/COMP INT 0 EN
- EX4 BIT 0BBH ;IEN1.3 - EXT. INT 4/CAPT/COMP INT 1 EN
- EX5 BIT 0BCH ;IEN1.4 - EXT. INT 5/CAPT/COMP INT 2 EN
- EX6 BIT 0BDH ;IEN1.5 - EXT. INT 6/CAPT/COMP INT 3 EN
- SWDT BIT 0BEH ;IEN1.6 - WATCHDOG TIMER START
- EXEN2 BIT 0BFH ;IEN1.7 - T2 EXT. RELOAD INTER START
- IADC BIT 0C0H ;IRCON.0 - A/D CONVERTER INTER REQUEST
- IEX2 BIT 0C1H ;IRCON.1 - EXT. INTERRUPT 2 EDGE FLAG
- IEX3 BIT 0C2H ;IRCON.2 - EXT. INTERRUPT 3 EDGE FLAG
- IEX4 BIT 0C3H ;IRCON.3 - EXT. INTERRUPT 4 EDGE FLAG
- IEX5 BIT 0C4H ;IRCON.4 - EXT. INTERRUPT 5 EDGE FLAG
- IEX6 BIT 0C5H ;IRCON.5 - EXT. INTERRUPT 6 EDGE FLAG
- TF2 BIT 0C6H ;IRCON.6 - TIMER 2 OVERFLOW FLAG
- EXF2 BIT 0C7H ;IRCON.7 - TIMER 2 EXT. RELOAD FLAG
- T2IO BIT 0C8H ;T2CON.0 - TIMER 2 INPUT SELECT BIT 0
- T2I1 BIT 0C9H ;T2CON.1 - TIMER 2 INPUT SELECT BIT 1
- T2CM BIT 0CAH ;T2CON.2 - COMPARE MODE
- T2R0 BIT 0CBH ;T2CON.3 - TIMER 2 RELOAD MODE SEL BIT 0
- T2R1 BIT 0CCH ;T2CON.4 - TIMER 2 RELOAD MODE SEL BIT 1
- I2FR BIT 0CDH ;T2CON.5 - EXT. INT 2 F/R EDGE FLAG
- I3FR BIT 0CEH ;T2CON.6 - EXT. INT 3 F/R EDGE FLAG
- T2PS BIT 0CFH ;T2CON.7 - PRESCALER SELECT BIT
- ************************************************************************
- ************************************************************************
- for the 83C552/80C552
- PS1 BIT 0BDH ;IP0.5 - SIO1
- PAD BIT 0BEH ;IP0.6 - A/D CONVERTER
- CMSR0 BIT 0C0H ;P4.0 - T2 COMPARE AND SET/RESET OUTPUTS
- CMSR1 BIT 0C1H ;P4.1 - T2 COMPARE AND SET/RESET OUTPUTS
- CMSR2 BIT 0C2H ;P4.2 - T2 COMPARE AND SET/RESET OUTPUTS
- CMSR3 BIT 0C3H ;P4.3 - T2 COMPARE AND SET/RESET OUTPUTS
- CMSR4 BIT 0C4H ;P4.4 - T2 COMPARE AND SET/RESET OUTPUTS
- CMSR5 BIT 0C5H ;P4.5 - T2 COMPARE AND SET/RESET OUTPUTS
- CMT0 BIT 0C6H ;P4.6 - T2 COMPARE AND TOGGLE OUTPUTS
- CMT1 BIT 0C7H ;P4.7 - T2 COMPARE AND TOGGLE OUTPUTS
- CTI0 BIT 0C8H ;TM2IR.0 - T2 CAPTURE 0
- CTI1 BIT 0C9H ;TM2IR.1 - T2 CAPTURE 1
- CTI2 BIT 0CAH ;TM2IR.2 - T2 CAPTURE 2
- CTI3 BIT 0CBH ;TM2IR.3 - T2 CAPTURE 3
- CMI0 BIT 0CCH ;TM2IR.4 - T2 COMPARATOR 0
- CMI1 BIT 0CDH ;TM2IR.5 - T2 COMPARATOR 1
- CMI2 BIT 0CEH ;TM2IR.6 - T2 COMPARATOR 2
- T2OV BIT 0CFH ;TM2IR.7 - T2 OVERFLOW
- B-14
- ************************************************************************
- ************************************************************************
- for the RUPI-44
- RBP BIT 0C8H ;STS.0 - RECEIVE BUFFER PROTECT
- AM BIT 0C9H ;STS.1 - AUTO/ADDRESSED MODE SELECT
- OPB BIT 0CAH ;STS.2 - OPTIONAL POLL BIT
- BOV BIT 0CBH ;STS.3 - RECEIVE BUFFER OVERRUN
- SI BIT 0CCH ;STS.4 - SIU INTERRUPT FLAG
- RTS BIT 0CDH ;STS.5 - REQUEST TO SEND
- RBE BIT 0CEH ;STS.6 - RECEIVE BUFFER EMPTY
- TBF BIT 0CFH ;STS.7 - TRANSMIT BUFFER FULL
- ************************************************************************
- ************************************************************************
- for the 8052/8032, 80C154/83C154, 80C51FA/83C51FA(83C252/80C252)
- CAP2 BIT 0C8H ;T2CON.0 - CAPTURE OR RELOAD SELECT
- CNT2 BIT 0C9H ;T2CON.1 - TIMER OR COUNTER SELECT
- TR2 BIT 0CAH ;T2CON.2 - TIMER 2 ON/OFF CONTROL
- EXEN2 BIT 0CBH ;T2CON.3 - TIMER 2 EXTERNAL ENABLE FLAG
- TCLK BIT 0CCH ;T2CON.4 - TRANSMIT CLOCK SELECT
- RCLK BIT 0CDH ;T2CON.5 - RECEIVE CLOCK SELECT
- EXF2 BIT 0CEH ;T2CON.6 - EXTERNAL TRANSITION FLAG
- TF2 BIT 0CFH ;T2CON.7 - TIMER 2 OVERFLOW FLAG
- ************************************************************************
- ************************************************************************
- for the 83C152/80C152
- EGSRV BIT 0C8H ;IEN1.0 - GSC RECEIVE VALID
- EGSRE BIT 0C9H ;IEN1.1 - GSC RECEIVE ERROR
- EDMA0 BIT 0CAH ;IEN1.2 - DMA CHANNEL REQUEST 0
- EGSTV BIT 0CBH ;IEN1.3 - GSC TRANSMIT VALID
- EDMA1 BIT 0CCH ;IEN1.4 - DMA CHANNEL REQUEST 1
- EGSTE BIT 0CDH ;IEN1.5 - GSC TRANSMIT ERROR
- ************************************************************************
- ************************************************************************
- for the 80512/80532
- IADC BIT 0C0H ;IRCON.0 - A/D CONVERTER INTERRUPT REQ
- ************************************************************************
-
- P BIT 0D0H ;PSW.0 - ACCUMULATOR PARITY FLAG
-
- ************************************************************************
- for the 83C552/80C552
- F1 BIT 0D1H ;PSW.1 - FLAG 1
- ************************************************************************
- ************************************************************************
- for the 80512/80532
- F1 BIT 0D1H ;PSW.1 - FLAG 1
- MX0 BIT 0D8H ;ADCON.0 - ANALOG INPUT CH SELECT BIT 0
- MX1 BIT 0D9H ;ADCON.1 - ANALOG INPUT CH SELECT BIT 1
- MX2 BIT 0DAH ;ADCON.2 - ANALOG INPUT CH SELECT BIT 2
- ADM BIT 0DBH ;ADCON.3 - A/D CONVERSION MODE
- BSY BIT 0DCH ;ADCON.4 - BUSY FLAG
- BD BIT 0DFH ;ADCON.7 - BAUD RATE ENABLE
- ************************************************************************
-
- OV BIT 0D2H ;PSW.2 - OVERFLOW FLAG
- RS0 BIT 0D3H ;PSW.3 - REGISTER BANK SELECT 0
- B-15
- RS1 BIT 0D4H ;PSW.4 - REGISTER BANK SELECT 1
- F0 BIT 0D5H ;PSW.5 - FLAG 0
- AC BIT 0D6H ;PSW.6 - AUXILIARY CARRY FLAG
- CY BIT 0D7H ;PSW.7 - CARRY FLAG
-
- ************************************************************************
- for the 80C51FA/83C51FA(83C252/80C252)
- CCF0 BIT 0D8H ;CCON.0 -PCA MODULE 0 INTERRUPT FLAG
- CCF1 BIT 0D9H ;CCON.1 -PCA MODULE 1 INTERRUPT FLAG
- CCF2 BIT 0DAH ;CCON.2 -PCA MODULE 2 INTERRUPT FLAG
- CCF3 BIT 0DBH ;CCON.3 -PCA MODULE 3 INTERRUPT FLAG
- CCF4 BIT 0DCH ;CCON.4 -PCA MODULE 4 INTERRUPT FLAG
- CR BIT 0DEH ;CCON.6 - COUNTER RUN
- CF BIT 0DFH ;PCA COUNTER OVERFLOW FLAG
- ************************************************************************
- ************************************************************************
- for the RUPI-44
- SER BIT 0D8H ;NSNR.0 - RECEIVE SEQUENCE ERROR
- NR0 BIT 0D9H ;NSNR.1 - RECEIVE SEQUENCE COUNTER-BIT 0
- NR1 BIT 0DAH ;NSNR.2 - RECEIVE SEQUENCE COUNTER-BIT 1
- NR2 BIT 0DBH ;NSNR.3 - RECEIVE SEQUENCE COUNTER-BIT 2
- SES BIT 0DCH ;NSNR.4 - SEND SEQUENCE ERROR
- NS0 BIT 0DDH ;NSNR.5 - SEND SEQUENCE COUNTER-BIT 0
- NS1 BIT 0DEH ;NSNR.6 - SEND SEQUENCE COUNTER-BIT 1
- NS2 BIT 0DFH ;NSNR.7 - SEND SEQUENCE COUNTER-BIT 2
- ************************************************************************
- ************************************************************************
- for the 80515/80535
- MX0 BIT 0D8H ;ADCON.0 - ANALOG INPUT CH SELECT BIT 0
- MX1 BIT 0D9H ;ADCON.1 - ANALOG INPUT CH SELECT BIT 1
- MX2 BIT 0DAH ;ADCON.2 - ANALOG INPUT CH SELECT BIT 2
- ADM BIT 0DBH ;ADCON.3 - A/D CONVERSION MODE
- BSY BIT 0DCH ;ADCON.4 - BUSY FLAG
- CLK BIT 0DEH ;ADCON.5 - SYSTEM CLOCK ENABLE
- BD BIT 0DFH ;ADCON.7 - BAUD RATE ENABLE
- ************************************************************************
- ************************************************************************
- for the 80C652/83C652
- CR0 BIT 0D8H ;S1CON.0 - CLOCK RATE 0
- CR1 BIT 0D9H ;S1CON.1 - CLOCK RATE 1
- AA BIT 0DAH ;S1CON.2 - ASSERT ACKNOWLEDGE
- SI BIT 0DBH ;S1CON.3 - SIO1 INTERRUPT BIT
- STO BIT 0DCH ;S1CON.4 - STOP FLAG
- STA BIT 0DDH ;S1CON.5 - START FLAG
- ENS1 BIT 0DEH ;S1CON.6 - ENABLE SIO1
- ************************************************************************
- B-16
- ************************************************************************
- for the 83C152/80C152
- DMA BIT 0D8H ;TSTAT.0 - DMA SELECT
- TEN BIT 0D9H ;TSTAT.1 - TRANSMIT ENABLE
- TFNF BIT 0DAH ;TSTAT.2 - TRANSMIT FIFO NOT FULL
- TDN BIT 0DBH ;TSTAT.3 - TRANSMIT DONE
- TCDT BIT 0DCH ;TSTAT.4 - TRANSMIT COLLISION DETECT
- UR BIT 0DDH ;TSTAT.5 - UNDERRUN
- NOACK BIT 0DEH ;TSTAT.6 - NO ACKNOWLEDGE
- LNI BIT 0DFH ;TSTAT.7 - LINE IDLE
- HBAEN BIT 0E8H ;RSTAT.0 - HARDWARE BASED ACKNOWLEDGE EN
- GREN BIT 0E9H ;RSTAT.1 - RECEIVER ENABLE
- RFNE BIT 0EAH ;RSTAT.2 - RECEIVER FIFO NOT EMPTY
- RDN BIT 0EBH ;RSTAT.3 - RECEIVER DONE
- CRCE BIT 0ECH ;RSTAT.4 - CRC ERROR
- AE BIT 0EDH ;RSTAT.5 - ALIGNMENT ERROR
- RCABT BIT 0EEH ;RSTAT.6 - RCVR COLLISION/ABORT DETECT
- OR BIT 0EFH ;RSTAT.7 - OVERRUN
- PGSRV BIT 0F8H ;IPN1.0 - GSC RECEIVE VALID
- PGSRE BIT 0F9H ;IPN1.1 - GSC RECEIVE ERROR
- PDMA0 BIT 0FAH ;IPN1.2 - DMA CHANNEL REQUEST 0
- PGSTV BIT 0FBH ;IPN1.3 - GSC TRANSMIT VALID
- PDMA1 BIT 0FCH ;IPN1.4 - DMA CHANNEL REQUEST 1
- PGSTE BIT 0FDH ;IPN1.5 - GSC TRANSMIT ERROR
- ************************************************************************
- ************************************************************************
- for the 80C452/83C452
- OFRS BIT 0E8H ;SLCON.0 - OUTPUT FIFO CH REQ SERVICE
- IFRS BIT 0E9H ;SLCON.1 - INPUT FIFO CH REQ SERVICE
- FRZ BIT 0EBH ;SLCON.3 - ENABLE FIFO DMA FREEZE MODE
- ICOI BIT 0ECH ;SLCON.4 - GEN INT WHEN IMMEDIATE COMMAN
- OUT REGISTER IS AVAILABLE
- ICII BIT 0EDH ;SLCON.5 - GEN INT WHEN A COMMAND IS
- WRITTEN TO IMMEDIATE COMMAND IN REG
- OFI BIT 0EEH ;SLCON.6 - ENABLE OUTPUT FIFO INTERRUPT
- IFI BIT 0EFH ;SLCON.7 - ENABLE INPUT FIFO INTERRUPT
- EFIFO BIT 0F8H ;IEP.0 - FIFO SLAVE BUS I/F INT EN
- PDMA1 BIT 0F9H ;IEP.1 - DMA CHANNEL REQUEST 1
- PDMA0 BIT 0FAH ;IEP.2 - DMA CHANNEL REQUEST 0
- EDMA1 BIT 0FBH ;IEP.3 - DMA CHANNEL 1 INTERRUPT ENABLE
- EDMA0 BIT 0FCH ;IEP.4 - DMA CHANNEL 0 INTERRUPT ENABLE
- PFIFO BIT 0FDH ;IEP.5 - FIFO SLAVE BUS I/F INT PRIORITY
- ************************************************************************
- ************************************************************************
- for the 80C451/83C451
- IBF BIT 0E8H ;CSR.0 - INPUT BUFFER FULL
- OBF BIT 0E9H ;CSR.1 - OUTPUT BUFFER FULL
- IDSM BIT 0EAH ;CSR.2 - INPUT DATA STROBE
- OBFC BIT 0EBH ;CSR.3 - OUTPUT BUFFER FLAG CLEAR
- MA0 BIT 0ECH ;CSR.4 - AFLAG MODE SELECT
- MA1 BIT 0EDH ;CSR.5 - AFLAG MODE SELECT
- MB0 BIT 0EEH ;CSR.6 - BFLAG MODE SELECT
- MB1 BIT 0EFH ;CSR.7 - BFLAG MODE SELECT
- ************************************************************************
- ************************************************************************
- B-17
- for the 83C751/83C752
- CTO BIT(READ) 0D8H ;I2CFG.0 - CLOCK TIMING 0
- CT1 BIT(READ) 0D9H ;I2CFG.1 - CLOCK TIMING 1
- T1RUN BIT(READ) 0DCH ;I2CFG.4 - START/STOP TIMER 1
- MASTRQ BIT(READ) 0DEH ;I2CFG.6 - MASTER I2C
- SLAVEN BIT(READ) 0DFH ;I2CFG.7 - SLAVE I2C
- CT0 BIT(WRITE)0D8H ;I2CFG.0 - CLOCK TIMING 0
- CT1 BIT(WRITE)0D9H ;I2CFG.1 - CLOCK TIMING 1
- TIRUN BIT(WRITE)0DCH ;I2CFG.4 - START/STOP TIMER 1
- CLRTI BIT(WRITE)0DDH ;I2CFG.5 - CLEAR TIMER 1 INTERRUPT FLAG
- MASTRQ BIT(WRITE)0DEH ;I2CFG.6 - MASTER I2C
- SLAVEN BIT(WRITE)0DFH ;I2CFG.7 - SLAVE I2C
- RSTP BIT(READ) 0F8H ;I2STA.0 - XMIT STOP CONDITION
- RSTR BIT(READ) 0F9H ;I2STA.1 - XMIT REPEAT STOP COND.
- MAKSTP BIT(READ) 0FAH ;I2STA.2 - STOP CONDITION
- MAKSTR BIT(READ) 0FBH ;I2STA.3 - START CONDITION
- XACTV BIT(READ) 0FCH ;I2STA.4 - XMIT ACTIVE
- XDATA BIT(READ) 0FDH ;I2STA.5 - CONTENT OF XMIT BUFFER
- RIDLE BIT(READ) 0FEH ;I2STA.6 - SLAVE IDLE FLAG
- ************************************************************************
- ************************************************************************
- for the 83C552/80C552
- CR0 BIT 0D8H ;S1CON.0 - CLOCK RATE 0
- CR1 BIT 0D9H ;S1CON.1 - CLOCK RATE 1
- AA BIT 0DAH ;S1CON.2 - ASSERT ACKNOWLEDGE
- SI BIT 0DBH ;S1CON.3 - SERIAL I/O INTERRUPT
- STO BIT 0DCH ;S1CON.4 - STOP FLAG
- STA BIT 0DDH ;S1CON.5 - START FLAG
- ENS1 BIT 0DEH ;S1CON.6 - ENABLE SERIAL I/O
- ECT0 BIT 0E8H ;IEN1.0 - ENABLE T2 CAPTURE 0
- ECT1 BIT 0E9H ;IEN1.1 - ENABLE T2 CAPTURE 1
- ECT2 BIT 0EAH ;IEN1.2 - ENABLE T2 CAPTURE 2
- ECT3 BIT 0EBH ;IEN1.3 - ENABLE T2 CAPTURE 3
- ECM0 BIT 0ECH ;IEN1.4 - ENABLE T2 COMPARATOR 0
- ECM1 BIT 0EDH ;IEN1.5 - ENABLE T2 COMPARATOR 1
- ECM2 BIT 0EEH ;IEN1.6 - ENABLE T2 COMPARATOR 2
- ET2 BIT 0EFH ;IEN1.7 - ENABLE T2 OVERFLOW
- PCT0 BIT 0F8H ;IP1.0 - T2 CAPTURE REGISTER 0
- PCT1 BIT 0F9H ;IP1.1 - T2 CAPTURE REGISTER 1
- PCT2 BIT 0FAH ;IP1.2 - T2 CAPTURE REGISTER 2
- PCT3 BIT 0FBH ;IP1.3 - T2 CAPTURE REGISTER 3
- PCM0 BIT 0FCH ;IP1.4 - T2 COMPARATOR 0
- PCM1 BIT 0FDH ;IP1.5 - T2 COMPARATOR 1
- PCM2 BIT 0FEH ;IP1.6 - T2 COMPARATOR 2
- PT2 BIT 0FFH ;IP1.7 - T2 OVERFLOW
- ************************************************************************
- B-18
- ************************************************************************
- for the 80C517/80C537
- F1 BIT 0D1H ;PSW.1 - FLAG 1
- MX0 BIT 0D8H ;ADCON0.0 - ANALOG INPUT CH SELECT BIT 0
- MX1 BIT 0D9H ;ADCON0.1 - ANALOG INPUT CH SELECT BIT 1
- MX2 BIT 0DAH ;ADCON0.2 - ANALOG INPUT CH SELECT BIT 2
- ADM BIT 0DBH ;ADCON0.3 - A/D CONVERSION MODE
- BSY BIT 0DCH ;ADCON0.4 - BUSY FLAG
- CLK BIT 0DEH ;ADCON0.5 - SYSTEM CLOCK ENABLE
- BD BIT 0DFH ;ADCON0.7 - BAUD RATE ENABLE
- ************************************************************************
- ************************************************************************
- for the 80C154/83C154
- ALF BIT 0F8H ;IOCON.0 - CPU POWER DOWN MODE CONTROL
- P1F BIT 0F9H ;IOCON.1 - PORT 1 HIGH IMPEDANCE
- P2F BIT 0FAH ;IOCON.2 - PORT 2 HIGH IMPEDANCE
- P3F BIT 0FBH ;IOCON.3 - PORT 3 HIGH IMPEDANCE
- IZC BIT 0FCH ;IOCON.4 - 10K TO 100 K OHM SWITCH (P1-3)
- SERR BIT 0FDH ;IOCON.5 - SERIAL PORT RCV ERROR FLAG
- T32 BIT 0FEH ;IOCON.6 - 32 BIT TIMER SWITCH
- WDT BIT 0FFH ;IOCON.7 - WATCHDOG TIMER CONTROL
- *************************************************************************
- B-19
- APPENDIX C
-
-
- RESERVED SYMBOLS
-
-
-
- The following is a list of reserved symbols used by the Cross
- Assembler. These symbols cannot be redefined.
-
-
-
- A AB ACALL ADD
- ADDC AJMP AND ANL
- AR0 AR1 AR2 AR3
- AR4 AR5 AR6 AR7
- BIT BSEG C CALL
- CJNE CLR CODE CPL
- CSEG DA DATA DB
- DBIT DEC DIV DJNZ
- DPTR DS DSEG DW
- END EQ EQU GE
- GT HIGH IDATA INC
- ISEG JB JBC JC
- JMP JNB JNC JNZ
- JZ LCALL LE LJMP
- LOW LT MOD MOV
- MOVC MOVX MUL NE
- NOP NOT OR ORG
- ORL PC POP PUSH
- R0 R1 R2 R3
- R4 R5 R6 R7
- RET RETI RL RLC
- RR RRC SET SETB
- SHL SHR SJMP SUBB
- SWAP USING XCH XCHD
- XDATA XOR XRL XSEG
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- C-1
- APPENDIX D
-
-
- CROSS ASSEMBLER CHARACTER SET
- ---------------------------+----------------+-------------------
- | PRINTABLE | ASCII CODE
- CHARACTER NAME | FORM | HEX | DECIMAL
- ---------------------------+----------------+---------+----------
- Horizontal Tab | | 09 | 9
- Line Feed | | 0A | 10
- Carriage Return | | 0D | 13
- Space | | 20 | 32
- Exclamation Point | ! | 21 | 33
- Pound Sign | # | 23 | 35
- Dollar Sign | $ | 24 | 36
- Percent Sign | % | 25 | 37
- Ampersand | & | 26 | 38
- Apostrophe | ' | 27 | 39
- Left Parenthesis | ( | 28 | 40
- Right Parenthesis | ) | 29 | 41
- Asterisk | * | 2A | 42
- Plus sign | + | 2B | 43
- Comma | , | 2C | 44
- Hyphen | - | 2D | 45
- Period | . | 2E | 46
- Slash | / | 2F | 47
- Number 0 | 0 | 30 | 48
- " 1 | 1 | 31 | 49
- " 2 | 2 | 32 | 50
- " 3 | 3 | 33 | 51
- " 4 | 4 | 34 | 52
- " 5 | 5 | 35 | 53
- " 6 | 6 | 36 | 54
- " 7 | 7 | 37 | 55
- " 8 | 8 | 38 | 56
- " 9 | 9 | 39 | 57
- Colon | : | 3A | 58
- Semi-colon | ; | 3B | 59
- Left Angle Bracket | < | 3C | 60
- Equal Sign | = | 3D | 61
- Right Angle Bracket | > | 3E | 62
- Question Mark | ? | 3F | 63
- At Sign | @ | 40 | 64
- Upper Case A | A | 41 | 65
- " " B | B | 42 | 66
- " " C | C | 43 | 67
- " " D | D | 44 | 68
- " " E | E | 45 | 69
- " " F | F | 46 | 70
- " " G | G | 47 | 71
- " " H | H | 48 | 72
-
-
-
-
- D-1
-
-
-
- ---------------------------+----------------+-------------------
- | PRINTABLE | ASCII CODE
- CHARACTER NAME | FORM | HEX | DECIMAL
- ---------------------------+----------------+---------+----------
- Upper Case I | I | 49 | 73
- " " J | J | 4A | 74
- " " K | K | 4B | 75
- " " L | L | 4C | 76
- " " M | M | 4D | 77
- " " N | N | 4E | 78
- " " O | O | 4F | 79
- " " P | P | 50 | 80
- " " Q | Q | 51 | 81
- " " R | R | 52 | 82
- " " S | S | 53 | 83
- " " T | T | 54 | 84
- " " U | U | 55 | 85
- " " V | V | 56 | 86
- " " W | W | 57 | 87
- " " X | X | 58 | 88
- " " Y | Y | 59 | 89
- " " Z | Z | 5A | 90
- Underscore | _ | 5F | 95
- Lower Case A | a | 61 | 97
- " " B | b | 62 | 98
- " " C | c | 63 | 99
- " " D | d | 64 | 100
- " " E | e | 65 | 101
- " " F | f | 66 | 102
- " " G | g | 67 | 103
- " " H | h | 68 | 104
- " " I | i | 69 | 105
- " " J | j | 6A | 106
- " " K | k | 6B | 107
- " " L | l | 6C | 108
- " " M | m | 6D | 109
- " " N | n | 6E | 110
- " " O | o | 6F | 111
- " " P | p | 70 | 112
- " " Q | q | 71 | 113
- " " R | r | 72 | 114
- " " S | s | 73 | 115
- " " T | t | 74 | 116
- " " U | u | 75 | 117
- " " V | v | 76 | 118
- " " W | w | 77 | 119
- " " X | x | 78 | 120
- " " Y | y | 79 | 121
- " " Z | z | 7A | 122
-
-
-
-
-
-
-
-
-
- D-2
- INDEX
-
- A
- ASCII Literals, 2-6
- Assembler
- Comments, 2-6
- Control Description ($), 6-1
- Controls, 2-3
- Directives, 2-3
- Error codes/messages, 8-1
- Labels, 2-2
- Location Counter, 2-7
- Numbers, 2-7
- Operators, 2-7
- Running it, 3-1
- Symbols, 2-1
- Syntax Summary, 2-7
-
- B
- Bit Addressing, 2-6
-
- C
- Character Set, D-1
- Comments, 2-6
- Control Description ($)
- DATE, 6-1
- DEBUG, 6-2
- EJECT, 6-2
- INCLUDE, 6-2
- LIST, 6-3
- MOD152, 6-3
- MOD154, 6-3
- MOD252, 6-3
- MOD44, 6-3
- MOD451, 6-3
- MOD452, 6-3
- MOD51, 6-3
- MOD512, 6-3
- MOD515, 6-3
- MOD517, 6-3
- MOD52, 6-3
- MOD521, 6-3
- MOD552, 6-3
- MOD652, 6-3
- MOD751, 6-3
- MOD752, 6-3
- MOD851, 6-3
- NODEBUG, 6-2
- NOLIST, 6-3
- NOMOD, 6-3
- NOOBJECT, 6-5
- NOPAGING, 6-5
- NOPRINT, 6-6
- NOSYMBOLS, 6-6
- OBJECT, 6-5
-
-
- 1
-
-
-
- PAGELENGTH, 6-5
- PAGEWIDTH, 6-6
- PAGING, 6-5
- PRINT, 6-6
- SYMBOLS, 6-6
- TITLE, 6-7
- Controls
- Description, 6-1
- Introduction, 2-3, 6-1
-
- D
- Directive
- Assembler, 2-3
- Conditional Assembly, 5-8
- Introduction, 5-1
- Memory Reservation, 5-5
- Miscellaneous, 5-7
- Segment Selection, 5-4
- Storage, 5-5
- Symbol, 5-1
- Directives
- BIT, 5-2
- BSEG, 5-4
- CODE, 5-2
- CSEG, 5-4
- DATA, 5-3
- DB, 5-5
- DBIT, 5-5
- DS, 5-5
- DSEG, 5-4
- DW, 5-6
- ELSE, 5-8
- END, 5-8
- ENDIF, 5-8
- EQU, 5-1
- IDATA, 5-3
- IF, 5-8
- ISEG, 5-4
- ORG, 5-7
- SET, 5-1
- XDATA, 5-3
- XSEG, 5-4
-
- E
- Error Codes
- Explainations, 8-2
- Introduction, 8-1
- Numerical Listing, 8-2
- Executing
- Assembler, 3-1
- Assembler Example, 3-3
-
-
-
-
-
-
-
- 2
-
-
-
- F
- File
- ASM51 Cross Assembler Diskette, 3-1
- Object, 2-11
- Source Listing, 2-10
- Source Listing Sample, A-4
-
- H
- Hardware
- Requirements, 3-1
-
- I
- Instruction
- BYT, 4-3
- CYC, 4-3
- Dest/Source ADDR Mode, 4-2
- HEX Opcode, 4-3
- Language Form, 4-2
- Mnemonics, 2-4, 4-1
- Notation, 4-1
- Operation, 4-1
- PSW, 4-3
- Set, 4-4
- Introduction
- Controls, 6-1
- Cross Assembler, 2-1
- Directives, 5-1
- Error codes/messages, 8-1
- Macro Processor, 7-1
-
- L
- Labels, 2-2
- Location Counter, 2-7
-
- M
- Macro
- Definition, 7-1
- Special Operators, 7-4
- Using, Labels, 7-6
- Using, Nesting, 7-4
- Using them, 7-4
- Macro Processor
- Introduction, 7-1
- Microcontroller
- Architecture MCS-51, 1-2
- Background MCS-51, 1-1
- Supported, 1-4
- Mnemonics
- MCS-51, 2-4
- Notations, 4-1
- Summary, 4-4
-
-
-
-
-
-
-
- 3
-
-
-
- N
- Numbers, 2-7
-
- O
- Operators, 2-7
- Overview
- Cross Assembler, 2-1
- Symbols, 2-1
-
- P
- Program Sample, A-1
-
- R
- Reserved Symbols, 2-2
-
- S
- Sample program, A-1
- Symbols
- Directive Definition, 5-1
- Labels, 2-2
- Overview, 2-1
- Reserved, 2-2
- Reserved list, C-1
- Syntax Summary, 2-7
- System
- DOS hints, 3-3
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 4
|