• Matematické operace (2)
• Bitové nastavení a logické operace
• Programové vybavení (2)
..
koly jsem do teď bral rozsahem 1, 4 a 5, protože jste přesně nevěděli, jak má vypadat úprava, nyní budu již známkovat v celém rozsahu, na konci lekce je popsána úprava.
Matematické operace (2)
ADD a ADDC
Jsou příkazy sčítání akumulátoru s místem v paměti RAM.
Pokud akumulátor přeteče (velikost je FFH), nastaví se příznak Carry a příznak přetečení AC. Příkaz ADDC navíc ještě sčítá k výsledku příkazy Carry a AC.
Ukázka :
ORG 0
MOV A,# 250 ;v acc je 250
ADD A,# 12 ;po vykonání je v acc 6 a nastaví se Carry
ADDC A,# 2 ;přičte se k acc 2 a Carry
A = 250+12 = 256+6 =>=> Carry = 1 + Acc = 6
SUBB
Příkaz pro odečítání od akumulátoru.
Pokud výsledek směřuje do záporných hodnot ukáže nám to Carry.
Ukázka :
ORG 0
MOV A, #6 ;Acc = 6
SUBB A, #12 ;Acc = 6-12 = 0-6 =>=> 256-6 = 250 = 0FAH
ADDC A, #1 ;Acc= 250+1+Carry =>=> 252 = 0FCH
NOP ;prázdná instrukce (nic nedělá, slouží abyste v As51 viděli předešlý krok)
END
Pozn.: Pokud do programu píšete hexa číslo a začíná písmenem je zapotřebí před něj napsat nulu.
Bitové nastavení a logické operace
SETB A CLR
Nastavení bitu do jedničky a do nuly, například nemusíme používat: MOV P1, #00001000B ale SETB P1.3 (místo bitu se počítá zprava a od nuly), u akumulátoru vypadá příkaz takto: SETB Acc.3 , můžeme i uměle nastavovat příznaky: SETB C ; (carry).
ANL - Je logický součin, výsledkem je log. 1, pokud vstupní operandy zaujímají stav log. 1.
Tedy : 1*1=1 1*0=0 0*1=0 0*0=0
ORL - je logický součet, výsledkem je log. 1, pokud alespoň jeden ze vstupních operandů zaujímá stav log. 1
Tedy : 1+1=1 1+0=1 0+1=1 0+0=0
XRL - je výlučný logický součet (komparátor), výsledkem je log. 1, pokud se hodnoty operandů liší
Tedy : 1+1=0 1+0=1 0+1=1 0+0=0
Při těchto operacích se pracuje se všemi osmi místy.
Takže pro příklad:
MOV A, #217 ; 11011001B MOV A, #217 ; 11011001B
MOV R3, #150 ; 10010110B MOV R3, #150 ; 10010110B
ANL A, R3 ; 10010000B ORL A, R3 ; 11011111B
Programové vybavení (2)
V minulém díle jsme si osvojili první program ve vybavení As51, dnes budeme v tomto duchu pokračovat.
Tedy na obrázku pod textem jsou vysvětleny kolonky programu:
Místo v paměti ROM a strojový kód nás nemusí zajímat, ale
Váš program už ano, zde totiž po kompilaci můžete vidět chyby kterých jste se dopustili nebo zde vidíte trasovat program, odhalí chyby například špatně napsaného „JMPs cosi“, nebo pokud se v jumpu odkazujete na adresu, která neexistuje.
Časové registry budeme hodně používat a jejich funkci si popíšeme v příštím díle, jen napovím, že se bude hodně počítat :-).
Sériová linka se, jak už z názvu vyplývá, používá pro komunikaci po seriové lince, my toto bohužel probírat nebudeme pro mou neznalost protokolu, vím jen že slouží hlavně pro přenesení programu z PC do mikroprocesoru.
Vnitřní paměť RAM můžete prohlížet, ale i zapisovat.
Dělá se to tak, že v hlavním menu označíte položku Modify nebo, pokud již trasujete program, zmáčknete klávesu F5, nyní můžete zapisovat nejen do paměti RAM, ale i do všech registrů, pro přeskakování do jiných kolonek se používá klávesa Page Up a Down. V paměti RAM se pak přemísťujete pomocí Ctrl a zase Page Up a Down nebo přímo na místo Shift a F6 a nyní napíšete místo, kde se chcete objevit (v hexa).
Nápověda je velmi dobrá pomůcka když nevíte co by... Podle toho kde se nacházíte vám ukazuje možné klávesové zkratky a jejich vysvětlení.
Zobrazení příznaků speciálních registrů a registry povolení přerušení nás zatím nemusí zajímat, probereme to blíže až v dalších dílech.
Registry aritmetické jednotky – bez nich by se nic nevykonalo, jsou zde registry: Acc – akumulátor (vykonává matematické operace přes jednotku ALU)
PSW – registr příznaků pra Acc
B – pomocný registr u DIV a MUL
SP – jsem nikdy nepoužil, protože jsme to nepotřebovali
PC – Program counter – je čítač který ukazuje na instrukci která má následovat
DPTR – je ukazatel na místo v paměti ROM, budeme používat při čtení hodnot jdoucí za sebou
Porty – jsou komunikačním prostředkem pro mikroprocesor, na ně se napojují periferie, sběrnice a externí paměti.
Úprava:
Je mi celkem jedno jestli budete psát velkým, malým, či smíšeným, záleží jen na tom jak jste zvyklí např. z jiných jazyků, tedy abyste měli nějaký styl, ale teď k tomu co požaduji: i když to v kurzu občas vypadá nezarovnaně, protože nejde používat obyčejný tabulátorový příkaz odsazení, již jsem na to apeloval admina, takže bych byl rád, kdyby mi vyhověl, ale vy se snažte to mít zarovnané a co nejvíce okomentované (komentář se píše za středníkem a prosím bez diakritiky). UKÁZKOVÝ PROGRAM
DU :
Vytvořte program který bude sčítat obsah míst v paměti od adresy 35H po 7FH dokud výsledek nebude 1000, pak se první a poslední sčítaná hodnota logicky sečte a zapíše na port P2 a nakonec se výsledná hodnota zapíše jako 16-ti bitové číslo do paměti 32h a 33h, nemusíte do těchto polí v programu nic vepisovat postačí když si to vyzkoušíte v As51 a do RAM si vepíšete hodnoty uměle. Nejdřív popřemýšlejte co by mohlo nastat a pak program ošetřit proti kolizím. Tento úkol je už trošku složitější, ale pokud umíte matematiku, přečetli jste si kurz celý a máte trochu programátorského ducha, tak si myslím, že to nebude nemožné vytvořit.
Povzbuzení na závěr : „Bude toho víc… tak se těšte :o)“