Laboratorinis darbas nr. 1 DUOMENŲ APDOROJIMO PROGRAMŲ SUDARYMAS Darbo tikslas Išmokti sudaryti duomenų mainų programas, išanalizuoti operacijų su bitais ir loginių komandų panaudojimo galimybes, išmokti dirbti su atminties dėklu. Programa 1.5 Užduotis: Modifikuoti 1.1 programą taip, kad į IDA būtų perduoti 1 - 3 bankų turiniai. Sprendimas: Padidinu skaitliuką tris kartus, , ir užkraunu į R0. Pradinis pirmojo banko adresas 08h : MOV PSW,#0 ; parenkamas “0” registrų bankas MOV R0,#24 ; 24->R0, šis reg. bus skaitikliu (trys registrų bankai) MOV DPTR,#4000h ; IDA pradinio adreso nustatymas MOV R1,#08h ; RDA pradinis adreso nustatymas (nuo 1 registrų banko) LOOP: MOV A,@R1 ; (A)0, tai kartoti END Programa 1.6 Užduotis: Sudaryti programą, kuri skaičiuotų loginę funkciją . Sprendimas: Veiksmus atlieku pradedant nuo apskliaustų reiškinių: x1 bit p1.1 ; kintamųjų aprašymas x2 bit p1.2 x3 bit p1.3 x4 bit p1.4 x5 bit p1.5 x6 bit p1.6 y bit p1.0 ; rezultato aprašymas ; Programos pradžia mov psw,0 mov c, x3 ; įvesti x3 anl c, x4 ; x3 .and. x4 orl c, x5 ; (x3 .and. x4) .or. x5 mov f0, c ; rezultato išsaugojimas PSW skiltyje f0 mov c, x1 ; įvesti x1 orl c, x2 ; x1 .and. x2 anl c, f0 ; x1 .and. x2 .or. ((x3 .and. x4) .or. x5) anl c, x6 ; x1 .and. x2 .or. ((x3 .and. x4) .or. x5) .and. x6 mov y, c ; išvesti rezultatą end Programa 1.7 Užduotis: Sudaryti programą, kuri priimtų per prievadą P1 duomenų masyvą iš periferinio įtaiso ir patalpintų į IDA. Programos išeities duomenys ir duomenų apdorojimo algoritmas toks pat, kaip ir 1.3 programoje. mov psw, #0 ; nustatomas "0" registrų bankas mov r1, #5 ; nustatome masyvo dydį mov dptr, #4000h ; adresas kuriuo bus talpinami duomenys loop: mov a, p1 ; baito irašymas į A xrl a, #00001111b ; invertuoti A0 … A3 orl a, #11000000b ; nustatyti A7 ir A6 movx @dptr, a ; talpiname rezultatą į išorinę atmintį inc dptr ; didiname adresą djnz r1, loop ; tęsti, jei ne masyvo pabaiga end Programa 1.8 Užduotis: Perrašyti programą 1.4 taip, kad abu kintamieji – masyvo pradžios adresas ir masyvo pabaigos adresas būtų perduodami paprogramei per steką Sprendimas: Prieš kviečiant paprogramę, papildomai su komanda push, užkraunu masyvo pradžios adresą. Paprogramės pradžioje su komada pop atstatau į DPTR masyvo pradžios adresą. ajmp start ; šokti i programos pradžią, kadangi čia yra paprograme org 30h ; transliuoti paprogramę nuo 30h adreso programų atmintyje Max: orl PSW,#00001000b ; nustatyti pirmą registrų banką pop ACC ; paimti iš steko pirmą baitą mov R2,A ; ir patalpinti R2 pop ACC ; paimti iš steko antrą baitą mov R3,A ; ir patalpinti R3. R2R3 yra grįžimo adresas, todėl ; pasibaigus paprogramei reikės jį atstatyti atgal pop dph ; atstatomas masyvo pradžios pop dpl ; adresas į DPTR pop ACC ; paimti baitą iš steko mov R0,A ; ir patalpinti į R0 pop ACC ; paimti baitą iš steko mov R1,A ; ir patalpinti į R1. R0R1 – masyvo, kuriame ieškomas ; max. skaičius pabaigos adresas mov R6,#00 ; apnulint R6 – čia saugosime ; laikiną maksimumų Loop: movx A,@DPTR ; paimti iš masyvo elementą subb A,R6 ; ir atimti laikiną max. jc Toli ; jei rezultatas teigiamas, elementas ; yra didesnis už laikiną max. movx A,@DPTR ; kadangi mes skaičių sugadinome ; atlikdami atimties operaciją, pasiimame tą patį ; masyvo elementą dar kartą mov R6,A ; ir išsaugome kaip laikiną max. Toli: inc DPTR ; padidiname masyvo adresą vienetu mov A,DPH ; pasiimame vyresnįjį adreso baitą mov B,R0 ; cjne A,B,Loop ; ir palyginame ar dar ne masyvo galas ; t.y. ar vyr. adresas nelygus 03h mov A,DPL ; jei taip, pasiimame jaun. adr. baitą mov B,R1 cjne A,B,Loop ; ir palyginame ar ne paskutinis elem. ; t.y. ar jaun. adresas nelygus 10h mov A,R6 ; jei taip, pasiimti į A gautą max. push ACC ; ir padėti i steką mov A,R3 ; gražinti grįžimo adr., išsaugoti R2R3 push ACC ; atkreipti dėmesį – surašyti reikia mov A,R2 ; atvirkščia tvarka – jaun. baitas push ACC ; pirmas, tada vyr. baitas. anl PSW,#11100111b ; vėl nustatyti nulini reg. bait¹ ret ; grįžti iš paprogrames org 100h ; programą transliuoti nuo 100h adreso start:mov SP,#1Fh ; nustatoma steko rodyklė, nuo kurio ; atminties adr. naudojamas stekas anl PSW,#11100111b ; pasirenkamas nulinis reg. bankas mov DPTR,#0310h ; masyvo pabaigos adresas įrašomas į push DPL ; steką (taip kintamasis push DPH ; perduodama paprogramei) mov DPTR,#0200h ; užkraunamas masyvo pradžios adresas push DPL ; užkrauname į steką masyvo push DPH ; pradžios adresas mov dptr, #0 ; ištrinamas dptr acall Max ; paprogrames iškvietimas pop ACC ; čia sugrįžtama, iš steko pasiimamas end ; gautas rezultatas Išvados Išmokau dirbti su Keil programinę aplinką mikroprocesoriui C51, sudaryti duomenų mainų programas, atlikti operacijas su bitais ir naudotis loginėmis komandomis, išmokau dirbti su atminties dėklu. Laboratorinis darbas nr. 2 PROGRAMAVIMAS C KALBA Darbo tikslas Susipažinti su C kalbos sintaksę ir galimybėmis programuojant mikroprocesorius. Programa 2.5 Užduotis: Parašyti programą C kalboje, kuri surastų maksimalų elementą masyve (elementai yra su ženklu) išorinėje atmintyje. Masyvo dydis – 20 elementų, pradinis adresas 1000h.. #include
Šį darbą sudaro 1016 žodžiai, tikrai rasi tai, ko ieškai!
★ Klientai rekomenduoja
Šį rašto darbą rekomenduoja mūsų klientai. Ką tai reiškia?
Mūsų svetainėje pateikiama dešimtys tūkstančių skirtingų rašto darbų, kuriuos įkėlė daugybė moksleivių ir studentų su skirtingais gabumais. Būtent šis rašto darbas yra patikrintas specialistų ir rekomenduojamas kitų klientų, kurie po atsisiuntimo įvertino šį mokslo darbą teigiamai. Todėl galite būti tikri, kad šis pasirinkimas geriausias!
Norint atsisiųsti šį darbą spausk ☞ Peržiūrėti darbą mygtuką!
Mūsų mokslo darbų bazėje yra daugybė įvairių mokslo darbų, todėl tikrai atrasi sau tinkamą!
Panašūs darbai
Atsisiuntei rašto darbą ir neradai jame reikalingos informacijos? Pakeisime jį kitu nemokamai.
Pirkdamas daugiau nei vieną darbą, nuo sekančių darbų gausi 25% nuolaidą.
Išsirink norimus rašto darbus ir gauk juos akimirksniu po sėkmingo apmokėjimo!