Začíname STEP BY STEP (krok za krokom).Aby sa z vás stal dobrý programátor mikropočítačových aplikácií v assambleri potrebujete zvládnuť tri veci:
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Postup krokov k vytvoreniu aplikácie (projektu).Vytvorenie mikropočítačového projektu má minimálne dve etapy. Prvá - hardwarová - má za úlohu:
K ďaĺšej práci - softwarovej - potrebujete:
Programové vývojové prostredie pre tvorbu software mikropočítača pozostáva jednak zo zariadení (počítača a napalovačky EPROM) a z niekoľkých vývojových programov, ktoré umožňujú nasledovné práce:
Niektoré vývojové programy integrujú všetky tieto čiastkové programy do jediného vývojového prostredia ktoré sa spúšťa jediným príkazom a všetky tieto čiastkové operácie vykonáva v réžii jednoho programu.
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Píšeme prvé programy. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Každý program najprv musíme napísať v
zdrojovom texte, a tento skompilujeme programom, ktorý nám vytvorí
strojové kódy uložené v binárnom súbore. V našom prípade budeme
používať kompilátor assamblera A51.EXE. Toto je program, ktorý
spracúvava text zdrojového programu napísaného v Assambleri I8051,
I4051 a I2051.
Základné pravidlá pri písaní zdrojového textu:
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Príklad_1: |
Prenosové inštrukcieUskutočňujú prenos operandu z registra do registra A, B, R0,R1,R2,R3,R4,R5,R6,R7, MOV A,#35 ; prenes priamy operand inštrukcie s dekadickou hodnotou 35 do Acc MOV A,R1 ; prenes obsah registra R1 do registra A MOV R1,A ; prenes obsah registra A do registra R1 MOV R1,35 ; prenes obsah bunky 35 do registra R1 MOV A,@R0 ; prenes obsah bunky adresovanej registrom R0 do registra A |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Príklad_2: |
Príklad sériovej komunikácie.Program v prvej fáze inicializuje mód sériovej linky a mód časovača T1 a povolia sa prerušenia sériovej linky. Následne sa vstúpi do uzavretej slučky neustále opakovane vysielajúcej dva znaky. Zdrojový text programu |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Príklad_3: |
Príklad ručného obojsmerného čítača
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Príklad_4: |
UNIVERZÁLNY DYNAMICKÝ RIADENÝ PROCES - Príklad rotácie segmentu na displeji s možnosťou prepínania smeru pomocou dvoch tlačidiel .Program najprv inicializuje prerušenia od vstupov INT0 a INT1. Prerušenie bude vyvolané zmenou stavu týchto vstupov z logickej "1" do logickej "0". Toto zabezpečia dve tlačidlá spínajúce voči zemi. Vyvolané prerušenia nastavia alebo resetujú príznakový bit s adresou 00 v bitovej oblasti RAM pamäti. V hlavnom programe sa následne vyhodnotí stav a podľa neho sa inkrementuje (+1) alebo decrementuje (-1) obsah B registra ktoré slúži ako počítadlo zobrazovanej pozície v Tabuľke ktorej obsah sa zobrazuje na displeji. Po každej zmene sa programovo kontroluje výsledok a upraví tak, aby hodnota v registri B neprekročila hranicu rozsahu kódovej tabuľky ktorá obsahuje kódy zobrazovane na displeji. Rýchlosť rotácie je daná konštantami podprogramu Pauza. Zdrojový text programu 1 Zdrojový text programu 2 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Príklad_5: |
Príklad semaforov 3 cestnej križovatky s
dvomi hlavnými cestami
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Príklad_6: |
Ukažka využitia časovača na generovanie 1s časových intervalovProgram využíva časovač na to, aby po vynulovaní príznaku SEKUNDA po časovom intervale v dĺžke + sekundy nastavil príznak SEKUNDA na logickú jednotku. V programe použitý podprogram DELAY1S v cykle čaká na nastavenie príznaku SEKUNDA. Po jeho objavení podprogram skončí. program využíva pauzu s dĺžkou 1s na prepínanie obsahu P1 portu tak, že 1sek svieti horna polovica a druhú sekundu spodná polovica bitov portu cyklicky donekonečna. Zdrojový text programu |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Príklad_7: |
Využitie časovača pre dvojciferný dekadický čítač 00 až 99 s 1-sek. intervalomProgram využíva časovač na to, aby po 10 milisekundách prepínal displej a zobrazoval striedavo jednu a potom druhu polovicu dvojciferného dekadického údaja. Okrem toho počíta 100 prerušení ktoré zodpovedajú 1 sekunde a po tomto intervale zvýši obsah dekadického čítača o 1. Čítač využíva úpravu obsahu príkazom DA A, nakoľko zobrazované údaje používaju dekoder BCD kódu zobrazujúci iba dekadické cifry. Zdrojový text programu |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Univerzálny ukážkový program. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Tento ukážkový program má za úlohu
spojiť a využiť všetky možnosti mikroprocesora I2051. Program sa
realizuje na školskej skušobnej doske, ktorá má nasledovnú konfiguráciu.
Na doske sú tri tlačidlá dávajúce priamu a negovanú hodnotu. Ďalej
je tu sedem segmentový dvojitý displej riadený - t.j. zapínaný signálom
0 privedený na vstup anoda1 a anoda2. Displej má jedinú zbernicu a podľa
toho ktorá anoda obsahuje hodnotu 0 rozsvieti znak na danej pozícii.
Program robí nasledovnú činnosť. Pri resete vloží do registra B hodnotu 7 (tak sme sa rozhodli) a obsah tohto registra zobrazí ako hexadecimálne číslo na dvojitom displeji. Tlačítkom 1 na doske obsah B registra zvyšujeme o 1 a tlačítkom 2 ho znižujeme. Stav vidíme na displaji. Pri stlačení tlačidlá 3 sa zobrazia tri vodorovné čiary, ktoré po uvolnení tlačidlá zmiznú a obnoví sa pôvodný obsah displeja. Pri zmene obsahu displeja sa obsah B registra zároveň odošle do druhého mikropočítača na identickej doske s úplne identickým programom. Program vykonáva rovnakú činnosť v oboch mikropočítačoch, takže zmeny sa prenášajú navzájom. Program využíva prerušenie od dvoch tlačítiek na vyvolanie obsluhy, ktorá zvyšuje a znižuje B register. Zároveň vyvolá podprogram, ktorý po sériovej linke novú hodnotu odošle do druhého mikropočítača. Príznak odoslania vyyvolá prerušenie, ktoré však program bude ignorovať. Naopak po príchode znaku po sériovej linke obslúži prerušenie príjmu dát po sériovej linke a došlé dáta vloží namiesto starých do registra B. Časovač 1 je využívaný pre nastavenie prenosovej rýchlosti 2400 bodov. Časovač 0 je využívaný na opakované prepínanie displejov tak, aby sa polovičku doby zobrazoval horný "nible" (nible=štvorica bitov reprezentujúca jeden hexadecimálny znak v dátovom slove) B registra v ľavom segmente displeja a druhú polovičku času sa zobrazoval spodný nible B registra v pravom segmente displeji. Tato výmena prebieha tak rýchlo, že ľudské oko zmeny nevníma. Doska má vyvedené signály portu P3 a P1 na konektory ktoré možno drôtmi prepojiť. Takto sme pripojili tlačítko 1 a 2 na dva vstupy externého prerušenia mikroprocesora a stav tychto tlačítiek program vyhodnocuje vyvolaným prerušením. Stav tlačidlá 3 vyhodnocujeme v nekonečnom cykle hlavného programu. Port P1 sme využili na budenie sedemsegmentového displeja a to tak, že anodu riadime z portu P3 - využívame tam piny na ktoré by sme pripájali externý zdroj časových signálov pre časovače - kedže ich nepotrebujeme využívame dva voľné bity portu P3 na riadenie anód. Sériovú linku využívame na úrovni TTL t.j. krátkou trojlinkou obsahujúcou Zem, TxD a RxD zapojenými do kríža TxD jednoho na RxD druhého priamo z výstupov jednoho na druhý mikropočítač navzájom. Po pochopení tohto programu môžete využívať všetky technické vymoženosti mikropočítača v ďaľších aplikáciách bez problémov sami. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Zdrojový text programu | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Prerušovací systém. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Prerušovací systém používa 5 príčin
prerušení:
|
Obsluha prerušenia na adrese:
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Externé prerušenie. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
INT0 INT1 |
Externé vstupy
mikropočítača
INT0 (port P3.2) a INT1
(port P3.3)
vyvolávajú prerušenia z dôvodu prechodu signálu na ich vstupe z neutrálnej
hodnoty "1" na hodnotu "0".
Na funkcii prerušovacieho systému sa podielajú 3 pracovné registre:
|
Poznámka: V programoch môžeme používať rovnako názov registra IE ako aj adresu 0A8H pri použití registra A na nastavenie príznakov. Rovnako sa dajú použiť v bitových inštrukciách symblické názvy IE.0 až IE.7, a taktiež sa dajú použiť aj priamo adresy 0A8H až 0AFH. Všetky spomenuté metódy sú rovnocenné, funkčné a zameniteľné. Tie isté pravidlá platia aj pre použitie IP registra a TCON registra. Poznámka: Register
TCON je určený pre riadenie časovača. Napriek tomu 4 spodné bity sú
využívané externými prerušeniami INT0 a INT1. *) časovač 2 používajú niektoré klony mikropočítačov typu 8051. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Príklad inicializácie prerušeniaProgram obsahuje na adresách 0003h a 0013h obslužné podprogramy pre prerušenia vyvolané uzemnením pinov P3.2 a P3.3 portu P3 ktorým zodpovedá prerušnie INT0 a INT1. Ich úlohou bude zvyšovať a znižovať obsah registra B. Hlavný program začína návestím start: kde sa uskutoční inicializačná časť programu nastavením režimu prerušenia vyvolávaného dobehovou hranou (t.j. z log 1 do log 0) pomocou príznakov IT0 a IT1. V registri IE sa aktivujú príslušné bity EA - generálne povolenie prerušení a bity EX1 pre INT1 a EX0 pre INT0. Posledný príkaz inicializácie nastaví počiatočnú hodnotu B registra = 0. Hlavný program pohračuje v nekonečnom cykle kde neustále odosiela hodnotu B registra na port P1 ktorý signalizuje stav hodnoty pomocou svietiacich LED diód. $mod51 org 0000h ljmp start org 0003h ; INT0 /P3.2 inc B ; B=B+1 reti org 0013h ; INT1 /P3.3 dec B ; B=B-1 reti start: setb IT0 ; nastav režim INT0 reakcie na hranu setb IT1 ; INT1 mov IE,#10000101b ; povoľ prerušenia - bity: EA, EX1 a EX0 mov B,#0; ; Nastav štartovaciu hodnotu počítadla B=0 opakuj: mov P1,B ; Zobraz obsah B na výstupnom porte P1 ljmp opakuj ; Nekonečný cyklus hlavného programu END
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Prerušenie od časovačov. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ČASOVAČ /ČÍTAČ 0 a 1 |
Mikropočítač obsahuje dva nezávislé ČASOVAČE-ČÍTAČE.
Obidva tieto obvody sú v podstate ČÍTAČE, rozdiel je len v tom, z akého
zdroja prichádza budiaci signál. Ak do čítača budú prichádzať v
pravidelných intervaloch signály generované vnútornými hodinami mikropočítača,
potom čítač plní funkciu ČASOVAČa -
jednotlivé impulzy prichádzajú v presných časových odstupoch. Ich počet
vlastne odmeriava čas. Druhý režim využíva vstupné porty T0
(P3.4) a T1 (P3.5)
na ktoré budú prichádzať externé signály. V tomto prípade obvody ČÍTAČA
len spočítajú počet vstupných impulzov t.j. plní funkciu ČÍTAČa.
Na funkciu ČASOVAČA-ČÍTAČA vplývajú
tieto pracovné registre:
|
Poznámka: Príznak
pretečenia časovača sa nastavuje vo chvíli keď sa má v registri ktorý
obsahuje maximálnu hodnotu zvýšiť obsah o 1. Tento údaj už sa nedá
zobraziť a register sa vynuluje s príznakom pretečenia.
Príznak pretečenia ostáva nastavený do chvíle kým sa nespustí obslužný program prerušenia. Potom sa automaticky vynuluje. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Príklad inicializácie prerušeniaProgram obsahuje na adrese 001Bh obslužný program, ktorý bude vyvolaný zakaždým keď časovač T1 obdrží 10000 impulzov. Impulzy prichádzajú s frekvenciou 1MHz, t.j. každú 1 milióntinu sekundy a zvyšujú pred nastavenú zápornú hodnotu pracovnej dvojice registrov TH1 a TL1 vytvárajúcich v móde 1 jeden 16 bitový register. K prerušeniu bude dochádzať teda každých 0.01sekundy. Toto prerušenie bude znižovať premennú POČET o 1 z prednastavenej hodnoty 100. Po dosiahnutí hodnoty 0, ktorá nastane raz za sekundu, signalizuje to príznakovým bitom SEK do ktorej zapíše log 1. Hlavný program obsahuje cyklus, ktorý neustále kontroluje príznak SEK a keď zistí, že je nastavený urobí tri veci: Príznak SEK vynuluje, zvýši počítadlo sekúnd v B registri o 1 a zobrazí jeho obsah na porte P1 , na ktorý sú napojené signálne LED diody. Samotné nastavenie časovacích obvodov sa uskutoční v inicializačnej časti začínajúcej návestím Start: . Tam sa prednastaví hodnota pracovných registrov časovača TH1 a TL1 pomocou konštánt HIp a LOp. Druhá povinná operácia je nastavenie režimu časovača v pracovnom registri TMOD, tretia povinná operácia je povolenie prerušení v registri IE - konkrétne bity EA a ET1. Poslednou, štvrtou, povinnou operáciou je nastavenie príznaku Tr1 v registri TCON, ktorý spustí činnosť časovača (tým, že povolí prechod impulzov z generátora 1MHz). $mod51 POCET DATA 30h HIp EQU HIGH(-10000) ; prepinanie displeja 0.01 sek LOp EQU LOW (-10000) ; prepi MAX EQU 100 ; 0.01 x 100 = 1 sekunda KOR EQU 11 ; Korekcia času obsluhy časovača SEK BIT 00 ; Príznak naplnenia času sekundy org 0000h ljmp Start ; OBSLUHA PRERUŠENIA ČASOVAČA T1 ; ale aj POCITADLO IMPULZOV 0.01 sek koli meraniu sekundy org 001Bh ; Timer 1 clr Tr1 ; stop časovača djnz POCET,Pok ; ak bude POCET=0 prešla 1 sek setb SEK ; signalizuj sekundu mov POCET,#MAX ; natav počítadlo 0,01s do 1 s na 100 Pok: mov TH1,#HIp ; obnov časovač na interval 0.01 sek mov TL1,#LOp+KOR ; KOREKCIA merania sekundy kôli obsluhe T1 setb Tr1 ; štart časovača reti org 0100h Start: mov TH1,#HIp ; čas prepínania znakov displeja 0.01sek mov TL1,#LOp ; mov TMOD,#00010001b ; režimy T0 a T1 mod1 mov IE,#10001000b ; povoľ prerušenia T1 mov POCET,#MAX ; počítadlo prerušení 0.01sek (100 =>1 sek) clr SEK ; vynuľuj príznak sekundy mov B,#00h ; v B nuluj čítač sekúnd setb Tr1 ; spust časovač T1 Opakuj: jbc SEK, ZOBRAZ ; ak SEK=1 daj SEK=0, zvýš B a ZOBRAZ jmp Opakuj ; ešte nie je sekunda ZOBRAZ: inc B ; zvýš čítač sekúnd v B registri mov P1,B ; Zobraz údaj LED diódami na porte P1 ljmp Opakuj END |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Prerušenie od sériovej linky. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
UART- Sériová linka |
Sériovú komunikáciu zabezpečuje plno duplexný kanál integrovaný
na čipe mikropočítača 8051, ktorý je schopný zabezpečiť súčasné
prijímanie aj odosielanie dát. Minimálny počet vodičov, ktorý je
potrebný, sú 3 (RxD, TxD a zem). Prijímané dáta sú spracúvavané posuvným prijímacím registrom z ktorého sa dáta po prijatí 8. bitu prekopírujú do vyrovnávacieho registra. Prijímací register môže prijímať ďaľší znak. Pri čítaní z adresy, ktorá zodpovedá registru SBUF, sa údaje prečítajú z vyrovnávacieho registra. Zápisom na adresu SBUF sa naplňuje vysielací register. Oba registre sú mapované cez register SBUF umiestnený v oblasti registrov špeciálných funkcií (SFR) v internej RAM pamäti. Strata dát z dôvodu neskorého odobratia prijatých dát nie je indikovaná, taktiež nie je indikovaná chyba rámca a parity alebo indikácia prerušenia, ktoré sú zvyčajne indikované u špeciálnych obvodov. Sériovú komunikácia vyvoláva prerušenia z dôvodu ukončenia odosielania dát ale aj z dôvodu ukončenia prijímania dát. Sériový vstup a výstup je na úrovni signálov TTL (log 1 = 5V, log 0 = 0V). Bežný počítač typu IBM PC pracuje s úrovňou sériového signálu V.24 - europsky štandard CCITT ( resp. RS 232C - americký štandard) a preto potrebujeme prispôsobovacie obvody typu MAX 232 resp. MAX 233. Norma RS 232C transformuje log 0 na úroveň +5 až +15V a log 1 na -5 až -15V. Asynchrónny sériový signál má zvyčajne priebeh začínajúci 1 štart bitom (log. 0) 8 resp. 9 dátovými bitmi (9. je zvyčajne paritný) a 1 alebo 2 stop bitmi (log. 1). Po odoslaní resp. prijatí 8. bitu prenášaného 1 byte dát, sériová linka vyvolá prerušenie, ktorého obsluha zabezpečuje spracovanie prijatého resp. odosielaného 1 byte dát. Prerušenia nastavujú registre IE a IP viď. tabuľky. Sériový kanál môže pracovať v 4 režimoch v závislosti na nastavení registrov SCON a PCON .
MOD 0 Synchrónny režim, pracuje na frekvencii fosc / 12 (fosc je udávaný na krištáli oscilátora), prenáša sa 8 bitov. Dáta sú prenášané na spoločnom vedení RxD (P3.0) a synchronizácia je na spoločnom vedení TxD (P3.1). Prvý datový bit sa prenáša D0 a postupne až po D7. MOD 1 Asynchrónny režim - 8 bitový UART - pracujúci na premennej frekvencii udávanej časovačom T1 nastavenom v MODE 2 (Pozn.: môže aj v MODE 1). Vysielanie je na signálnych vodičoch TxD (P3.1) a príjem na RxD (P3.0). Bity sa prenášajú na 10 intervaloch T (f=1/T, kde f je prenosová rýchlosť udávaná v Baudoch.). Štruktúra signálu je: 1 štart bit, 8 datových bitov a 1 stop bit. Prenos dát začína D0 a končí D7. Pri príjme sa STOP BIT ukladá do RB8 príjmového bitu v SCON. Frekvenciu t.j. prenosovú rýchlosť zdvojnásobuje nastavený bit (=1) v SMOD v registri PCON. Presná frekvencia je daná hodnotou v registri TH1 časovača T1 (MOD 2 časovača) Prenosová rýchlosť = 1/T= (1+SMOD) /32 * fosc/( 12*[ 256- (TH1)] ).
MOD 2
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Príklad inicializácie prerušeniaProgram obsahuje na adresách 0023h obslužný podprogram pre prerušenia vyvolané príznakmi TI a RI v registri SCON, z ktorých TI signalizuje ukončenie odosielania bajtu v registri SBUF, a druhý ukončenie príjmu do registra SBUF. Hlavný program začína návestím start: kde sa uskutoční inicializačná časť programu nastavením registra SCON - mod1 sériovej linky t.j. 8 bitový UART s nastavením prenosovej rýchlosti pomocou časovača T1 a nastavením príznaku REN - povolenia príjmu sériovou linkou. Register TMOD nastavuje režim časovača T1 na mod2 t.j. s automaticky obnovovaním prednastavenej hodnoty v registri TL1 hodnotou v TH1, ktorú nastavíme pri frekvencii oscilátora 12MHz na hodnotu 0F3h aby sme dosiahli prenosovú rýchlosť 2400 baudov. V registri TCON povolíme časovač T1 bitom TR1 , aby sa spustil a nakoniec v registri IE sa aktivujú príslušné bity EA - generálne povolenie prerušení a bit ES. Posledný príkaz inicializácie nastaví príznak fFreeSBUF na log 1. ktorá bude v hlavnom programe blokovať vysielanie ďalšieho bajtu ak ešte nebol ukončený predošlý prenos. Vo vzorovom programe sú odosielané dve hodnoty do mikropočítača ktorý obsahuje ten istý program. Obsluha prerušenia realizuje príznak TI - signalizujúci že odosielanie sa zrealizovalo nastavením príznaku fFreeSBUF, a realizuje príznak RI vypísaním obsahu SBUF s došlým znakom na port P1 ktorý signalizuje stav hodnoty pomocou svietiacich LED diód. $mod51 fFreeSBUF BIT 01h ; bit. príznak blokuje SBUF počas odosielania (=0) ORG 0000h ljmp start ORG 0023h ; OBSLUHA SÉRIOVEJ LINKY PRÍJEM/VYSIELANIE /TI, RI/ jbc TI,DoSBUFfree ; TI=1? ak ÁNO skoč a zároveň nuluj príznak (clr TI) mov P1,SBUF ; NIE lebo RI=1 prečítaj došlý znak a ZOBRAZ na P1 clr RI ; nuluj príznak RI príčiny prerušenia reti DoSBUFfree:setb fFreeSBUF ; Uvolni blokáciu SBUF na vysielanie reti ORG 0100h start: mov scon,#01010000b ; mod1 sériovej linky , povolenie REN na príjem dát mov tmod,#00100000b ; mod2 T1, gate=0, C/T*=T mov th1,#0F3h ; baud rate 2400 mov tcon,#01000000b ; start T1 mov ie,#10010000b ; povolíme prerušenia sériovej linky setb fFreeSBUF ; Uvolni blokáciu SBUF na vysielanie ; nekonečný cyklus hlavného programu opakuj: mov B,#01010101b ; odosielaný znak 1. call PosliZnak ; odošli znak call Pockaj ; chvilku zobrazujeme mov B,#10101010b ; odosielaný znak 2. call PosliZnak ; odošli znak 2 call Pockaj ; chvilku zobrazujeme ljmp opakuj ; pokracuj PosliZnak: ; ODOŠLI ZNAK V B REGISTRI SÉRIOVOU LINKOU W1: jbc fFreeSBUF, Posli1 ; Ak je SBUF volný okamžite Pošli (fFreeSBUF=0) sjmp W1 ; INAK - Čakaj! a testuj či je SBUF voľný Posli1: mov SBUF,B ; odosielaný znak v SBUF automaticky odíde ret ; návrat ;(Pozn.: fFreeSBUF=1 vykoná až prerušenie po TI) Pockaj: mov R4,#01h ; pauza cca 1 sek. OP3: mov R3,#0FFh OP2: mov R2,#0FFh OP1: djnz R2,OP1 djnz R3,OP2 djnz R4,OP3 ret END
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Schéma nastavovacích pracovných registrov
TMOD, TCON, SCON, IE, IP,
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
.. |
Author Ing. JANOUŠEK Jaroslav.
Copyright © 2003 ManINFO. All rights reserved.
Revised: marca 20, 2009
.