<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>uC51 &#187; Asembler</title>
	<atom:link href="http://www.uc51.pl/category/asembler/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.uc51.pl</link>
	<description>mikrokontrolery atmel at89c51 &#124; programowanie &#124; asembler &#124; c &#124; elektronika</description>
	<lastBuildDate>Wed, 24 Feb 2010 10:42:36 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Procedury obsługi przerwań (część 3 z 3)</title>
		<link>http://www.uc51.pl/2010/02/24/procedury-obslugi-przerwan-czesc-3-z-3/</link>
		<comments>http://www.uc51.pl/2010/02/24/procedury-obslugi-przerwan-czesc-3-z-3/#comments</comments>
		<pubDate>Wed, 24 Feb 2010 10:40:32 +0000</pubDate>
		<dc:creator>Paweł</dc:creator>
				<category><![CDATA[Asembler]]></category>
		<category><![CDATA[Mikrokontrolery]]></category>
		<category><![CDATA[przerwania]]></category>
		<category><![CDATA[przerwanie]]></category>
		<category><![CDATA[reti]]></category>

		<guid isPermaLink="false">http://www.uc51.pl/?p=64</guid>
		<description><![CDATA[Czym są procedury obsługi przerwań w mikrokontrolerach Atmel uC51 i jak się je tworzy.]]></description>
			<content:encoded><![CDATA[<p>Dzisiaj bez demota :)</p>
<p>Kiedy mikrokontroler otrzyma sygnał przerwania, natychmiast przestaje wykonywać swój program i automatycznie wykonuje skok LCALL do procedury obsługi przerwania. Jest to zwykły skok pod odpowiedni adres:</p>
<p>INT0 - 0003h<br />
T0 - 000Bh<br />
INT1 - 0013h<br />
T1 - 001Bh<br />
Port Szeregowy - 0023h<br />
T2 - 002Bh</p>
<p>Pod tym adresem należy umieścić procedurę, która zostanie wykonana gdy nastąpi przerwanie. Procedura powinna zakończyć się instrukcją RETI (<em>return from interrupt</em>). Kiedy mikrokontroler ją napotka, zakończy obsługę przerwania i wróci do wykonywania programu w miejscu, w którym przerwał.</p>
<h3>Rozpoczęcie programu po wektorach przerwań</h3>
<p>Przestrzeń dla procedur obsługi przerwań znajduje się na samym początku pamięci programu. Aby wykorzystać przestrzeń, pod którą mikrokontroler wykonuje skok podczas przerwania, musimy przesunąć resztę programu poza nią. Polega to na tym, że pod adresem 0000h umieszczamy skok pod adres położony poza używanymi przez nas wektorami przerwań. Mamy na to pierwsze 3 bajty pamięci programu, więc na pewno się zmieścimy:</p>
<p>ORG 0000h<br />
JMP START</p>
<p>ORG 000Bh<br />
... procedura obsługi przerwania ...<br />
RETI</p>
<p>START:<br />
... nasz program ...</p>
<h3>8 bajtów to mało miejsca</h3>
<p>Adresy, od których zaczynają się procedury obsługi przerwania, są oddalone od siebie o 8 bajtów. To nie oznacza, że mamy tylko 8 bajtów na naszą procedurę obsługi. Procedura może znajdować się gdzie indziej, ważne tylko, by na jej końcu znalazła się instrukcja powrotu z przerwania RETI.</p>
<p>Zmodyfikujmy nasz niby-program, który był powyżej:</p>
<p>ORG 0000h<br />
JMP START</p>
<p>ORG 000Bh<br />
JMP PRZER_T0</p>
<p>ORG 0013h<br />
JMP PRZER_INT1</p>
<p>START:<br />
... nasz program ...</p>
<p>PRZER_T0:<br />
... obsługa przerwania T0 ...<br />
RETI</p>
<p>PRZER_INT1:<br />
... obsługa przerwania INT1 ...<br />
RETI</p>
<p>Dzięki takiemu zabiegowi mamy do dyspozycji na nasze przerwania prawie całą dostępną pamięć programu w naszym układzie.</p>
<h3>Co powinno się znaleźć w procedurze obsługi przerwania</h3>
<p>Procedura obsługi przerwania to dowolny, zwykły program, który wykonuje wymagane przez nas czynności.</p>
<p>W zasadzie nie ma żadnych wytycznych co do tego, co powinno się w nim znajdować. Możemy na przykład umieścić w procedurze obsługi przerwania T0 instrukcję, która zapali lub zgasi nam diodę LED. Przy porcie szeregowym przerwanie służy do pobierania lub wysyłania danych (o tym innym razem).</p>
<p>Nawet instrukcja RETI nie jest konieczna, ale tylko w sytuacji, gdy po otrzymaniu przerwania nie chcemy z niego wrócić do dawnego programu.</p>
<h3>Koniec części trzeciej</h3>
<p>OK, seria zakończona (choć oczywiście nie wszystkie tematy w niej poruszyłem). Dlatego zapraszam do zadawania pytań w komentarzach. Jeśli pytań zbierze się dużo, napiszę jeszcze jeden tekst, w którym na nie odpowiem.<strong>Podobne wpisy:</strong>
<ul class="similar-posts">
<li><a href="http://www.uc51.pl/2010/02/08/co-to-sa-przerwania-czesc-1-z-3/" rel="bookmark" title="8 lutego 2010">Co to są przerwania (część 1 z 3)</a></li>
<li><a href="http://www.uc51.pl/2010/02/12/konfiguracja-systemu-przerwan-rejestr-specjalny-ie-czesc-2-z-3/" rel="bookmark" title="12 lutego 2010">Konfiguracja systemu przerwań &#8211; rejestr specjalny IE (część 2 z 3)</a></li>
</ul>
<p><!-- Similar Posts took 12.522 ms --></p>


<!-- Begin SexyBookmarks Menu Code -->
<div class="sexy-bookmarks sexy-bookmarks-expand">
<ul class="socials">
		<li class="sexy-facebook">
			<a href="http://www.facebook.com/share.php?v=4&amp;src=bm&amp;u=http://www.uc51.pl/2010/02/24/procedury-obslugi-przerwan-czesc-3-z-3/&amp;t=Procedury+obs%C5%82ugi+przerwa%C5%84+%28cz%C4%99%C5%9B%C4%87+3+z+3%29" rel="nofollow" class="external" title="Share this on Facebook">Share this on Facebook</a>
		</li>
		<li class="sexy-mail">
			<a href="mailto:?subject=%22Procedury%20obs%C5%82ugi%20przerwa%C5%84%20%28cz%C4%99%C5%9B%C4%87%203%20z%203%29%22&amp;body=I+thought+this+article+might+interest+you.%0A%0A%22Dzisiaj%20bez%20demota%20%3A%29%0D%0A%0D%0AKiedy%20mikrokontroler%20otrzyma%20sygna%C5%82%20przerwania%2C%20natychmiast%20przestaje%20wykonywa%C4%87%20sw%C3%B3j%20program%20i%20automatycznie%20wykonuje%20skok%20LCALL%20do%20procedury%20obs%C5%82ugi%20przerwania.%20Jest%20to%20zwyk%C5%82y%20skok%20pod%20odpowiedni%20adres%3A%0D%0A%0D%0AINT0%20-%200003h%0D%0AT0%20-%20000Bh%0D%0AINT1%20-%200013h%0D%0AT1%20-%20001Bh%0D%0APort%20Szereg%22%0A%0AYou+can+read+the+full+article+here%3A%20http://www.uc51.pl/2010/02/24/procedury-obslugi-przerwan-czesc-3-z-3/" rel="nofollow" class="external" title="Email this to a friend?">Email this to a friend?</a>
		</li>
		<li class="sexy-comfeed">
			<a href="http://www.uc51.pl/2010/02/24/procedury-obslugi-przerwan-czesc-3-z-3/feed" rel="nofollow" class="external" title="Subscribe to the comments for this post?">Subscribe to the comments for this post?</a>
		</li>
		<li class="sexy-google">
			<a href="" rel="nofollow" class="external" title=""></a>
		</li>
		<li class="sexy-wykop">
			<a href="http://www.wykop.pl/dodaj?url=http://www.uc51.pl/2010/02/24/procedury-obslugi-przerwan-czesc-3-z-3/&amp;title=Procedury+obs%C5%82ugi+przerwa%C5%84+%28cz%C4%99%C5%9B%C4%87+3+z+3%29" rel="nofollow" class="external" title="Add this to Wykop!">Add this to Wykop!</a>
		</li>
</ul>
<div style="clear:both;"></div>
</div>
<!-- End SexyBookmarks Menu Code -->

]]></content:encoded>
			<wfw:commentRss>http://www.uc51.pl/2010/02/24/procedury-obslugi-przerwan-czesc-3-z-3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Konfiguracja systemu przerwań &#8211; rejestr specjalny IE (część 2 z 3)</title>
		<link>http://www.uc51.pl/2010/02/12/konfiguracja-systemu-przerwan-rejestr-specjalny-ie-czesc-2-z-3/</link>
		<comments>http://www.uc51.pl/2010/02/12/konfiguracja-systemu-przerwan-rejestr-specjalny-ie-czesc-2-z-3/#comments</comments>
		<pubDate>Fri, 12 Feb 2010 16:53:24 +0000</pubDate>
		<dc:creator>Paweł</dc:creator>
				<category><![CDATA[Asembler]]></category>
		<category><![CDATA[Jak to działa]]></category>
		<category><![CDATA[Mikrokontrolery]]></category>
		<category><![CDATA[ie]]></category>
		<category><![CDATA[port szeregowy]]></category>
		<category><![CDATA[przerwania]]></category>
		<category><![CDATA[przerwanie zewętrzne]]></category>
		<category><![CDATA[rejestr ie]]></category>
		<category><![CDATA[rejestr specjalny]]></category>
		<category><![CDATA[timer]]></category>
		<category><![CDATA[timery]]></category>

		<guid isPermaLink="false">http://www.uc51.pl/?p=57</guid>
		<description><![CDATA[Jak skonfigurować i uruchomić system przerwań w mikrokontrolerze Atmel AT89C51 (i podobnych).]]></description>
			<content:encoded><![CDATA[<p>No więc my, programiści:</p>
<div id="attachment_58" class="wp-caption aligncenter" style="width: 510px"><img src="http://www.uc51.pl/wp-content/uploads/2010/02/1265646968_by_Saszlyk_500.jpg" alt="" title="1265646968_by_Saszlyk_500" width="500" height="405" class="size-full wp-image-58" /><p class="wp-caption-text">Źródło: http://demotywatory.pl/912484/Najlepsi-programisci-Google</p></div>
<p>Nie no... <strong>ja</strong> wyglądam normalnie! Ale do rzeczy.</p>
<p>Rejestr specjalny IE odpowiada za działanie poszczególnych przerwań. Każde przerwanie można w nim osobno włączyć lub wyłączyć. </p>
<p>Rejestr IE składa się z 8 bitów. Aby "uczulić" mikrokontroler na wybrane przez nas przerwanie, należy ustawić odpowiadający mu bit na wartość 1. </p>
<blockquote><p>
IE.0 - przerwanie zewnętrzne INT0<br />
IE.1 - przerwanie z timera T0<br />
IE.2 - przerwanie zewnętrzne INT1<br />
IE.3 - przerwanie z timera T1<br />
IE.4 - przerwanie z portu szeregowego<br />
IE.5 - przerwanie z timera T2 (AT89C52)<br />
IE.6 -<br />
IE.7 - włącz/wyłącz system przerwań</p></blockquote>
<p>Domyślnie system przerwań jest wyłączony. Aby mikrokontroler reagował na wybrane przez ciebie przerwanie, musisz ustawić odpowiadający mu bit <strong>oraz</strong> ustawić IE.7 na 1. Możesz to zrobić za pomocą jednej instrukcji:</p>
<p>MOV IE, 81h</p>
<p>Lub osobno:</p>
<p>SETB IE.0<br />
SETB IE.7</p>
<p>W sumie wiele tutaj tłumaczyć nie trzeba. Jeśli masz jakieś pytanie, możesz je zadać w komentarzach poniżej.</p>
<p><strong>W następnej części: Procedury obsługi przerwań.</strong> Więc lepiej zapisz się na newsletter lub na <a href="http://feeds.feedburner.com/uc51">RSS</a> :)<br />
<strong>Podobne wpisy:</strong>
<ul class="similar-posts">
<li><a href="http://www.uc51.pl/2010/02/08/co-to-sa-przerwania-czesc-1-z-3/" rel="bookmark" title="8 lutego 2010">Co to są przerwania (część 1 z 3)</a></li>
<li><a href="http://www.uc51.pl/2010/01/30/jaki-jest-wedlug-ciebie-najlepszy-zasilacz-do-projektow/" rel="bookmark" title="30 stycznia 2010">Jaki jest według ciebie najlepszy zasilacz do projektów?</a></li>
<li><a href="http://www.uc51.pl/2010/02/24/procedury-obslugi-przerwan-czesc-3-z-3/" rel="bookmark" title="24 lutego 2010">Procedury obsługi przerwań (część 3 z 3)</a></li>
<li><a href="http://www.uc51.pl/2010/01/25/witam-w-nowej-odslonie-uc51/" rel="bookmark" title="25 stycznia 2010">Witam w nowej odsłonie uC51!</a></li>
</ul>
<p><!-- Similar Posts took 19.603 ms --></p>


<!-- Begin SexyBookmarks Menu Code -->
<div class="sexy-bookmarks sexy-bookmarks-expand">
<ul class="socials">
		<li class="sexy-facebook">
			<a href="http://www.facebook.com/share.php?v=4&amp;src=bm&amp;u=http://www.uc51.pl/2010/02/12/konfiguracja-systemu-przerwan-rejestr-specjalny-ie-czesc-2-z-3/&amp;t=Konfiguracja+systemu+przerwa%C5%84+-+rejestr+specjalny+IE+%28cz%C4%99%C5%9B%C4%87+2+z+3%29" rel="nofollow" class="external" title="Share this on Facebook">Share this on Facebook</a>
		</li>
		<li class="sexy-mail">
			<a href="mailto:?subject=%22Konfiguracja%20systemu%20przerwa%C5%84%20-%20rejestr%20specjalny%20IE%20%28cz%C4%99%C5%9B%C4%87%202%20z%203%29%22&amp;body=I+thought+this+article+might+interest+you.%0A%0A%22No%20wi%C4%99c%20my%2C%20programi%C5%9Bci%3A%0D%0A%0D%0A%0D%0A%0D%0ANie%20no...%20ja%20wygl%C4%85dam%20normalnie%21%20Ale%20do%20rzeczy.%0D%0A%0D%0ARejestr%20specjalny%20IE%20odpowiada%20za%20dzia%C5%82anie%20poszczeg%C3%B3lnych%20przerwa%C5%84.%20Ka%C5%BCde%20przerwanie%20mo%C5%BCna%20w%20nim%20osobno%20w%C5%82%C4%85czy%C4%87%20lub%20wy%C5%82%C4%85czy%C4%87.%20%0D%0A%0D%0ARejestr%20IE%20sk%C5%82ada%20si%C4%99%20z%208%20bit%C3%B3w.%20Aby%20%22uczuli%C4%87%22%20mikrokontroler%20na%20wyb%22%0A%0AYou+can+read+the+full+article+here%3A%20http://www.uc51.pl/2010/02/12/konfiguracja-systemu-przerwan-rejestr-specjalny-ie-czesc-2-z-3/" rel="nofollow" class="external" title="Email this to a friend?">Email this to a friend?</a>
		</li>
		<li class="sexy-comfeed">
			<a href="http://www.uc51.pl/2010/02/12/konfiguracja-systemu-przerwan-rejestr-specjalny-ie-czesc-2-z-3/feed" rel="nofollow" class="external" title="Subscribe to the comments for this post?">Subscribe to the comments for this post?</a>
		</li>
		<li class="sexy-google">
			<a href="" rel="nofollow" class="external" title=""></a>
		</li>
		<li class="sexy-wykop">
			<a href="http://www.wykop.pl/dodaj?url=http://www.uc51.pl/2010/02/12/konfiguracja-systemu-przerwan-rejestr-specjalny-ie-czesc-2-z-3/&amp;title=Konfiguracja+systemu+przerwa%C5%84+-+rejestr+specjalny+IE+%28cz%C4%99%C5%9B%C4%87+2+z+3%29" rel="nofollow" class="external" title="Add this to Wykop!">Add this to Wykop!</a>
		</li>
</ul>
<div style="clear:both;"></div>
</div>
<!-- End SexyBookmarks Menu Code -->

]]></content:encoded>
			<wfw:commentRss>http://www.uc51.pl/2010/02/12/konfiguracja-systemu-przerwan-rejestr-specjalny-ie-czesc-2-z-3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
