× Aktuálně z oboru

Vychází Game Ready ovladače pro Far Cry 5 [ clanek/2018040603-vychazi-game-ready-ovladace-pro-far-cry-5/ ]
Celá zprávička [ clanek/2018040603-vychazi-game-ready-ovladace-pro-far-cry-5/ ]

Assembler - 5. lekce

[ http://programujte.com/profil/-1-martin-morawiec/ ]Google [ ?rel=author ]       [ http://programujte.com/profil/118-zdenek-lehocky/ ]Google [ ?rel=author ]       30. 8. 2005       24 051×

• Vnější přerušení
• Neprobrané registry..

Vnější přerušení


Po vnějším ovlivnění určitého bitu portu procesor ihned skončí příkaz a přejde na adresu přerušení (03H a 13H) a po vykonání programu přerušení se příkazem RETI vrátí tam, kde zrovna skončil v hlavním programu, ovšem nejdřív je zapotřebí povolit přerušení, to se nastavuje v osmi bitovém registru IE, významy jednotlivých bitů jsou popsány v závěru lekce.

µprocesor, který my budeme používat má dvě vnější přerušení:
INT0 a INT1 a jsou vyvedené na portu P3 na druhém a třetím bitu.


Ukázka níže vytváří "maják" s osmi LED diodami které jsou připojené na port P2 a rychlost otáčení měníme změnou úrovně na portu P3.2 - zpomalení a P3.3 - zrychlení

Ukázka: ORG 0
RYCHLOST EQU 30H
JMP START
ORG 03H ;ADRESA PRERUSENI P3.2
MOV RYCHLOST,#15 ;PROGRAM PRERUSENI
RETI ;NAVRAT DO HLAVNÍHO PROGRAMU

ORG 13H ;ADRESA PRERUSENI P3.3
MOV RYCHLOST,#5 ;PROGRAM PRERUSENI
RETI ;NAVRAT DO HLAVNÍHO PROGRAMU

START: ;HLAVNI PROGRAM
MOV IE, #10000101 ;POVOLENI PRERUSENI
MOV TMOD,#1 ;NASTAVENI MODU CASOVACE
SETB TR0 ;POVOLENI CASOVACE
MOV RYCHLOST,#5 ;ZAKLADNI RYCHLOST

MOV A, #0FFH

ROTACE: MOV P0, A
RLC A
CALL CAS
JMP ROTACE


CAS: MOV R5, RYCHLOST ;CASOVAC
ZPET: JBC TF0, DAL
SJMP ZPET
DAL: DJNZ R5, ZPET
RET
END


Příklad si opět můžete vyzkoušet v simulátoru As51, abyste nemuseli tak dlouho čekat, dejte středník před CALL ZPOZDENI a už budete vidět, jak akumulátor rotuje. Pokud budete chtít simulovat vnější přerušení, pak jen zmáčknete F5 a najedete na port P3 a přepíšete ho na FB – interup 0, nebo F7 – interup 1, poté se vrátíte k trasování F10-kou, jednou odtrasujete a v programu vám to odskočí na adresu 03H nebo 13H, poté můžete zpět přepsat P3 na FF, aby to po skončení programu přerušení neskočilo zase na přerušení, záleží jak je nastavený TCON.


Neprobrané registry

Pokud chcete mít přehled v nastavení, nebo aktuálního stavu čehokoli v mikroprocesoru, pak čtěte pozorněji. V programu AS51 v hlavním nabídkovém menu v položce VIEW první a druhá položka nás nebude zajímat, protože to slouží k prohlížení externích pamětí, ale další položkou pod názvem REGISTER BANK se dá přepínat banky registru R0 – R7 využívá se to třeba, když v podprogramu využíváte registry, které už používáte někde jinde v programu.

Poslední dvě položky 1st a 2nd Remember obsahují stejné detailní zobrazení jednotlivých registrů v pravém dolním okénku s názvem ZOOM.


IE – Interrup enable
EA Je-li v 1, pak globálně povoluje přerušení
ES Povolení přerušení od sériové linky (23H)
ET1 Povolení přerušení přetečením časovače 1 (1BH)
EX1 Povolení přerušení externím zdrojem přerušení INT1 (13H)
ET0 Povolení přerušení přetečením časovače 0 (0BH)
EX0 Povolení přerušení externím zdrojem přerušení INT0 (03H)

IP - Interrup priority (které přerušení je důležitější)
PX0 Externí 0
PT0 Timer0
PX1 Externí 1
PT1 Timer1
PS Sériový port

PSW
CY Carry flag
AC Auxiliary carry
F0 Flag0 - pro volné použití
RS1 Register bank selector bit1
RS0 Register bank selector bit0
OV Overflow flag
-
P Parity flag. Každá instrukce jej nastaví dle počtu jedniček v A

SCON - Nastavení sériového rozhraní


Registry které nejsou bitově adresovatelné:
(je třeba je naplnit celé jedním bajtem v kuse)

PCON - Power control register
SMOD Po resetu v 0, při nastavení do 1, zvýší přenosovou rychlost sériového portu na dvojnásobek.
GF1 General purpose flag bit - libovolné použití.
GF0 General purpose flag bit - libovolné použití.
PD Power down bit. Nastavením přejde do power down módu, není u neCMOS 51 implementován.
IDL Idle mode bit. Nastavením přejde do power idle módu, není u neCMOS 51 implementován.

TCON - Program status word
TF1 Nahozením do 1 oznámí, že nám přetekl timer1.
TR1 Nahozením do 1 povolíme timer1, shozením do 0 ho zastavíme.
TF0 Nahozením do 1 oznámí, že nám přetekl timer0.
TR0 Nahozením do 1 povolíme timer0, shozením do 0 ho zastavíme.
IE1 External interrupt 1 edge flag. Nastaví se při shození pinu /INT1 do nuly.
IT1 Interrupt 1 type control bit. nastavení, jestli k externímu přerušení dojde
sestupnou hranou nebo nízkou úrovní na pinu /INT1.
IE0 External interrupt 0 edge flag. Nastaví se při shození pinu /INT0 do nuly.

TMOD -(nižší bity jsou od časovače 0)
GATE Je-li v 1, pak běží čítač/časovač jen je-li pin /INT1 ve vysoké úrovni (a je nastaven TR1=1 v TCON), je-li v 0, pak běží jen v závislosti na TR1.
C/T Přepínání mezi čítačem a časovačem. Je-li 0, pak pracuje jako časovač, je-li 1 pak jako čítač.
M1 Výběr módu 1.
M0 Výběr módu 0.


DU :
Vytvořte program, který rozbliká LED na portu P2 a nultém bitu. Rychlost bude 1 sekunda, ta se ovšem bude měnit pomocí vnějšího přerušení v rozsahu 0,5 až 1 sekunda po 0,1s. Tak že jedním přerušením se sníží rychlost o 0,1 a druhým se navýší. Bude zapotřebí zajistit aby rychlost byla pouze v tomto rozsahu. Rychlost bude zobrazována na P2.2-7, tedy pokud rychlost bude 0,7 pak bude v jedničce P2.2-4 a pokud bude rychlost 0,5 pak bude v jedničce pouze P2.2 .

Článek stažen z webu Programujte.com [ http://programujte.com/clanek/2005091101-assembler-5-lekce/ ].