# PIC mikrokontrolleri >  Daudzbitu summēšanas apakšprogrammas izstrādāšana MCS-51 mikrokontrollerim

## Dimmers

Sveiki! Vai kāds var palīdzēt ar šo uzdevumu?

Dotās komandas ir:

MOV A,Rr    ;(A) <- (Rr) kur r=0...7
MOV Rr, A   ;(Rr) <- (A) kur r=0...7
ADD A,Rr     ;(A) <- (A)+(Rr) kur r=0...7
ADDC A,Rr   ;(A) <- (A)+(C)+(Rr) kur r=0...7
CLR A         ;(A) <- 0

Rezultāts, kuru jāiegūst ir

(A)+(B)=(B)

(R5, R4, R3)+(R1, R2, R6, R7)=(R1, R2, R6, R7). R, kā liekas nav saistīts ar R kā pretestību.

Man nav ne mazākās nojautas, kas man ir jādara un kā.  ::  Mācos elektroniku un kaut arī ar analogo saprotu labi, kad lieta nonāca līdz TTL, KMOP uc. loģiskajām ierīcēm progress apstājās un uz priekšu netieku.

Zinu, ka mikrokontrolleris ir ierīce, kas izpilda vienu noteiktu programmu, taču pati programmēšana ir sveša bilde. Varbūt kāds var iemest linku uz literatūru, kurā vismaz būtu terminu nozīme? (MOV, ADD, A, Rr) vai labākajā gadījumā - izskaidrots mikrokotrolleris, tā iekšas un ieskats elementārā programmēšanā?

Pateicos jau iepriekš.  ::

----------


## next

Vispaar tas nav par uC bet par binaaro aritmeetiku.
Kad lieli skaitlji glabaajas vairaakos baitos tad vispirms summee jaunaakos baitus un peec tam vecaakos.
Baitus summeejot rezultaats regjistru var paarpildiit - tad uzstaadas C bits kuru vajag vecaakos baitus summeejot klaat pieskaitiit.

----------


## abergs

Virziens:
GOOGLE >> mcs 51 assembler

----------


## Powerons

Programmēšanas valoda ko tu raksti saucās assembler 51mam procesoram
Reddz kur komandas nosaukumu atšifrējums
http://www.mikroe.com/chapters/view/...struction-set/

Vispār kam tas vajadzīgs, tādu vēsturi rakt aukšā, Ja vajag skolā, tad viena lieta, bet skolotājs ir pamatīgi nolažojis, ja pirms tam nav nolasījis veselu lekciju kursu par šo tēmu pus gada garumā, gan par bināro matemātiku, par procesora reģistriem un sastāvdaļām, gan par zema līmeņa programmēšanas valodām. Pilnūgs murgs kaut ko tādu uzgrūst pilnīgam iesācējam.

Ja pats gribi ņemties ar mikrokontrolieriem, prieka pēc tad ir daudz vienkāršēki un modernāki varianti. Un modernākas vieglākas programmēšanas valodas.

----------


## next

MOV A,R7
ADD A,R3
MOV R7,A
MOV A,R6
ADDC A,R4
MOV R6,A
MOV A,R2
ADDC A,R5
MOV R2,A
CLR A
ADDC A,R1
MOV R1,A

Es prieksh msc51 nekad neesmu rakstiijis, vai tur nevajag C bitu notiiriit vai pa starpu kur saglabaat - to lai gudraaki ljaudis izlabo.

----------


## Dimmers

@Powerons: Paldies par linku, droši vien šo nakti pavadīšu buroties cauri. Ehh. Jā, vajag skolā. Skolotājs izskrēja cauri 4 powerpoint slaidiem ar bloku diagrammām un nobēra kā no grāmatas daudz gudrus teikumus ar terminiem, ar ko mūžā nebiju saskāries, tad uzdeva praktisko darbu. Un tā visus šos gadus. Daži slaidi un laboratorijas vai praktiskais darbs. Ar analogo elektroniku kaut kā tiku galā. Sākoties loģikas elementiem sākās bremzēšana. Tagad pilnīgs vāks. Uz konsultāciju iet bezjēdzīgi, diemžēl.

@next: kāda nozīme saskaitāmo secībai, sit vai nost, neiebraucu  :: 

Ja kāds labs cilvēks izskaidrotu kā izpildīt man doto a+b=b vienkārši būtu bezgala pateicīgs.  :: 

EDIT

Paldies next! Nepaspēju pat iepostēt kā jau atbilde klāt!  ::

----------


## Dimmers

Tā kā katras komandas darbība ir jāizskaidro, ņēmu un tulkoju katru sev saprotamā valodām kā pats to saprotu pēc Powerona dotā un citiem ar 8051 saistītiem linkiem. Kas man pagaidām ir sanācis:

MOV A;R7 - Pārvieto baitu no reģistra R7 uz akumulatoru tālākai darbībai.
ADD A;R3 - pievieno baitu no reģistra R3 akumulatora esošajai vērtībai. Šajā brīdī tās summējas.
MOV R7;A - Pārvieto jauno vērtību, kas ietver R3 un R7 reģistru summu uz reģistru R7
MOV A;R6 - pārvieto vērtību no reģistra R6 uz akumulatoru tālākai darbībai

Problēmas sākās ar komandu "ADDC A,R4". Nesaprotu, kas tieši ir carry flag (C). Pēc šī - _For example, if the accumulator contains FDH and we add 3 to the contents of the accumulator (ADD A, #3), the accumulator will then contain zero and the carry flag will be set. It is also set if a subtraction causes a borrow into bit 7. In other words, if a number is subtracted from another number smaller than it, the carry flag will be set. For example, if A contains 3DH and R3 contains 4BH, the instruction SUBB A, R3 will result in the carry bit being set (4BH is greater than 3DH)._ saprotu, ka flags tiek uzlikts, ja ir _jāaizņemās_ biti no iepriešējā baita? Bet ja R4 summē ar akumulatorā esošo baitu no R6, ko tur aizņemties?

----------


## next

Viens un tas pats karogs C ir "carry" prieksh saskaitiishanas un "borrow" prieksh atnjemshanas.
Pirmajaa gadiijumaa tas signalizee ka rezultaats lielaaks par 255, otrajaa - ka mazaaks par 0.

PS. Veel gribeetu piebilst ka konkreetu procesoru instrukciju apraksti maz piemeeroti saakuma apmaaciibai.
Jo tos sastaadot tiek uzskatiits ka lasiitaajs procesoru pamatus, binaaro aritmeetiku un Bula algebru jau apguvis.
Pats taas lietas maaciijos kad interneta veel nebija un deriigus linkus ieteikt nevaru.
Ja kam taadi zinaami tad posteejiet.

----------


## Raimonds1

šeit visu saproti?
http://www.doctronics.co.uk/4008.htm

----------

