<?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>kotlovi za grejanje Archives - Automatika.rs</title>
	<atom:link href="https://www.automatika.rs/tag/kotlovi-za-grejanje/feed" rel="self" type="application/rss+xml" />
	<link>https://www.automatika.rs/tag/kotlovi-za-grejanje</link>
	<description>Portal za inženjere</description>
	<lastBuildDate>Sat, 30 Apr 2016 22:34:18 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9</generator>
	<item>
		<title>Regulisanje temperature vode zatvorenog centralnog grejanja &#8211; praktična realizacija</title>
		<link>https://www.automatika.rs/projekti/svi-projekti/regulisanje-temperature-vode-zatvorenog-centralnog-grejanja-prakticna-realizacija.html</link>
					<comments>https://www.automatika.rs/projekti/svi-projekti/regulisanje-temperature-vode-zatvorenog-centralnog-grejanja-prakticna-realizacija.html#respond</comments>
		
		<dc:creator><![CDATA[Miloš Jurošević]]></dc:creator>
		<pubDate>Wed, 09 Sep 2009 01:00:00 +0000</pubDate>
				<category><![CDATA[Svi projekti]]></category>
		<category><![CDATA[elektornika za kotlove]]></category>
		<category><![CDATA[grenjanje vode]]></category>
		<category><![CDATA[kotlovi za grejanje]]></category>
		<category><![CDATA[regulacija temperature]]></category>
		<guid isPermaLink="false"></guid>

					<description><![CDATA[<p>&#160; U bazi znanja analizirane su dinamičke karakteristike, odziv i ponašanje sistema centralnog grejanja na zadatu referentnu promenljivu. Određena je prenosna funkcija sistema i izvršena je sinteza digitalnog PI odnosno PID zakona upravljanja. Postupkom simulacije u MATLab-ovom simulink modulu dobijeni su optimalni parametri (konstante) PI tj PID regulatora. &#160; &#160; Grubo gledano sistem možemo podeliti [&#8230;]</p>
<p>The post <a href="https://www.automatika.rs/projekti/svi-projekti/regulisanje-temperature-vode-zatvorenog-centralnog-grejanja-prakticna-realizacija.html">Regulisanje temperature vode zatvorenog centralnog grejanja &#8211; praktična realizacija</a> appeared first on <a href="https://www.automatika.rs">Automatika.rs</a>.</p>
]]></description>
										<content:encoded><![CDATA[<div align="justify"><img decoding="async" class=" alignleft size-full wp-image-1955" src="http://automatika.rs/wp-content/uploads/2009/09/sistem_centralnog_grejanja_automatika_elekronika_obrada_signala.jpg" alt="sistem_centralnog_grejanja_automatika_elekronika_obrada_signala.jpg" title="sistem_centralnog_grejanja_automatika_elekronika_obrada_signala.jpg" style="margin: 5px; float: left; width: 100px; height: 100px;" height="100" width="100" />&nbsp; U <a href="baza-znanja/obrada-signala/regulisanje-temperature-vode-zatvorenog-centralnog-grejanja.html" target="_blank">bazi znanja</a> analizirane su dinamičke karakteristike, odziv i ponašanje sistema centralnog grejanja na zadatu referentnu promenljivu. Određena je prenosna funkcija sistema i izvršena je sinteza digitalnog PI odnosno PID zakona upravljanja. Postupkom simulacije u MATLab-ovom simulink modulu dobijeni su optimalni parametri (konstante) PI tj PID regulatora.</p>
<p></div>
<div align="justify">&nbsp;</div>
<p>  <span id="more-257"></span>  </p>
<div align="justify">&nbsp;</div>
<div align="justify">Grubo gledano sistem možemo podeliti na dva dela :</p>
</div>
<div align="justify">1. Elektronski deo – koga čine : mikrokontroler, A/D konvertor, kolo za generisanje referentne promenljive, kolo za generisanje upravljane promen-ljive – senzor za temperaturu vode u sistemu, deo za galvansku izolaciju elektronskog i energetskog dela, kolo za sinhronizaciju sa mrežom i deo za napajanje.</div>
<div align="justify">&nbsp;</div>
<div align="justify">2.&nbsp; Energetski deo čini trofazni tiristorski polu upravljivi ispravljač. Umesto njega bolje je koristiti trofazni tiristorski fazni regulator ali je upravljanje njegovim radom znatno složenije i izlazi iz okvira ovog projekta.</div>
<div align="justify">&nbsp;</div>
<div align="justify">&nbsp;</div>
<div style="text-align: center;"><img fetchpriority="high" decoding="async" class=" size-full wp-image-2008" src="http://automatika.rs/wp-content/uploads/2009/09/regulacija_temperature_projekat_automatika.rs.jpg" alt="regulacija temperature_projekat_automatika.rs" title="slika1_regulisanje_temperature_vode_zatvorenog_centralnog_grejanja_-_praktina_realizacija_obrada_signala_automatika.rs.jpg" height="314" width="500" srcset="https://www.automatika.rs/wp-content/uploads/2009/09/regulacija_temperature_projekat_automatika.rs.jpg 827w, https://www.automatika.rs/wp-content/uploads/2009/09/regulacija_temperature_projekat_automatika.rs-300x188.jpg 300w, https://www.automatika.rs/wp-content/uploads/2009/09/regulacija_temperature_projekat_automatika.rs-768x482.jpg 768w, https://www.automatika.rs/wp-content/uploads/2009/09/regulacija_temperature_projekat_automatika.rs-696x437.jpg 696w, https://www.automatika.rs/wp-content/uploads/2009/09/regulacija_temperature_projekat_automatika.rs-669x420.jpg 669w" sizes="(max-width: 500px) 100vw, 500px" /></div>
<div align="justify">&nbsp;</div>
<div align="center">Slika 1. Blok šema sistema za upravljanje centralnim grejanjam.</div>
<div align="justify">&nbsp;</div>
<div align="justify">&nbsp;&nbsp; Mikrokontroler predstavlja mozak sistema i ima glavnu ulogu u njegovom radu. U jednom čipu se nalazi procesor, memorija, registri i sve što je potrebno za obavljanje funkcija tipičnih za jedan procesor informacija. Namenjen je&nbsp; projekto-vanju digitalnih sistema upravljanja u industriji i slično. On&nbsp;&nbsp; generiše upravljačku promenljivu na osnovu merene upravljane promenljive tj temperature vode u povratnoj grani upravljajući radom tiristorskog polu upravljivog ispravljača. Istovremeno kontrolišući celokupan rad uređaja.</div>
<div align="justify">&nbsp;</div>
<div>&nbsp;&nbsp; Senzor ima važnu ulogu.Njegova osetljivost i stabilnost (nepromenljivost karakteri-stika u odnosu na temperaturu) su vrlo bitni za rad i tačnost celog sistema. Nalazi se na cevi koja vraća ohlađenu vodu iz sistema u kotao.</div>
<div align="justify">&nbsp;</div>
<div align="justify">Izlaz senzora se vodi na pojačavač koji ima ulogu da pojača signal sa senzora i prilagodi ga opsegu A/D konvertora.Njegova stabilnost i otpornost na spoljašnje uticaje kao i mali ofset (razdešenost) ukazuju na njegovu ulogu u celom sistemu.</div>
<div align="justify">&nbsp;</div>
<div align="justify">Sa pojačavača se signal povratne sprege dovodi na ulaz A/D konvertora. Njegova uloga je da analogni signal pretvori u digitalni koji se dalje vodi u mikrokontroler. Ovde bi se mogao koristiti mikrokontroler sa već ugrađenim A/D konvertorom čime bi se data šema znatno uprostila. Priloženo rešenje nije jedino ali je sa stanovišta univerzalnosti i edukativnog značaja bolje.</div>
<div align="justify">&nbsp;</div>
<div align="justify">Galvanska izolacija je neophodan deo svakog uređaja u kome se kombinuju elektronska kola sa kolima energetske elektronike. Usled havarije u energetskom delu, koja je moguća jer su komponente (tiristori i diode) značajno opterećeni, mogao bi se uništiti čitav elektronski sklop. U ovom delu se nalaze i impulsni pojačavači koji slab digitalni signal podižu na viši nivo dovoljan za okidanje tiristora.</p>
</div>
<div align="justify">&nbsp;&nbsp; Kolo za zadavanje referentnog signala je obavezan deo jer omogućuje korisniku da na jednostavan način zada željenu referentnu temperaturu vode u sistemu. Njegova uloga je ovde i da ograniči opseg zadavanja temperature na MAX 70°C. U isto vreme ovo kolo treba i da obezbedi jednostavno očitavanje zadate temperature na displeju.</div>
<div align="justify">Za uspešan rad svih ovih kola potreban je kvalitetan i stabilan izvor napajanja. On treba da obezbedi potrebne napone za funkcionisanje svih kola.</p>
</div>
<div align="justify">&nbsp;&nbsp; Tiristorski polu upravljivi ispravljač je zbog snage grejača kojim upravljamo vezan na trofaznu mrežu 3x380V . Nije bilo potrebe da se koristi puno upravljivi ispravljač zbog činjenice da grejač ne radi u invertorskom režimu. Na ovaj način su umesto tri tiristora upotrebljene tri diode , čime je postignuta znatna ušteda kako u pogledu cene uređaja tako i sa tačke upravljanja sistemom.</p>
</div>
<div align="justify">&nbsp;U postojeći sistem se može dodati i EPROM memorija u koju se može smestiti kompletan program za mikrokontroler. Mikrokontroler već u sebi sadrži izvesnu količinu memorije (8KB) koja je u ovom slučaju dovoljna da primi celokupan kod. Iz tog razloga je u ovom projektu izostavljena.</div>
<div>&nbsp;</div>
<ul>
<li>Normal 0 false false false MicrosoftInternetExplorer4 &nbsp; U nastavku prelazimo na konkretan izbor sklopova i elemenata.</li>
</ul>
<div align="justify">&nbsp;&nbsp; Mikrokontroler koji je ovde korišćen je Atmel-ov AT89C52. Radi se o kontroleru koji je po svom pinskom rasporedu i setu instrukcija kompatibilan sa Intel-ovim 8052 mikrokontrolerom. On sadrži tri 16-to bitna brojača i 8KB flash memorije. Priključen je na kvarcni kristal učestanosti 12 MHz. Postoje 4 ulazno/izlazna porta mada su ovde korišćena samo dva. Napon napajanja je +5V.</p>
</div>
<div align="justify">&nbsp;A/D konvertor je AD570 firme Analog Devices. U pitanju je 8-mo bitni A/D, sa vremenom konverzije &lt;25μs na bazi sukcesivne aproksimacije. Napajanje mu je +5V i – 12V, a opseg ulaznog napona je 0-10V. Izbor ovakvog konvertora je zasno-van prvenstveno na činjenici da se radi o sporo promenljivom procesu i na što jednostavnijem upravljanju. Proces A/D konverzije započinje na opadajućoj ivici signala B&amp;C . Nakon 25μs po završetku konverzije aktivira se signal DATAREADY . Signal B&amp;C generiše mikrokontroler koji i detektuje DATAREADY signal preko svog INT1 ulaza.</div>
<div align="justify">Kolo za generisanje referentne vrednosti je napravljeno pomoću dva BCD UP/DOWN brojača 74HC4510. Pomoću dva tastera biramo smer brojanja a trećim vršimo upis izabrane vrednosti u leč kolo 74HC573.Prikaz se vrši na dva 7-mo segmentna displeja pomoću dva BCD/7-SEG drivera 74HC4511. Napajanje je +5V.</p>
</div>
<div align="justify">&nbsp;Galvanska izolacija zahteva posebno galvanski odvojeno napajanje i može se izvesti pomoću optokaplera ili malih signalnih trafoa . Ovde će biti prikazano rešenje sa signalnim trafoom, koje je ujedno i najjednostavnije .&nbsp;<span style="line-height: 1.3em;">Sklop za sinhronizaciju sa mrežom koristi mrežni transformator u delu za napajanje.</p>
<p></span></div>
<div align="justify">&nbsp;Prolaskom mrežnog napona kroz nulu generiše se okidni impuls koji se zatim uobličuje i vodi na INT0 ulaz u mikrokontroler.Ovaj deo je vrlo važan jer na osnovu impulsa sinhronizacije se vrši izračunavanje ugla paljenja tiristora kao i perioda odabiranja. Koristeći mrežni transformator sklop je galvanski odvojen od mreže.</p>
</div>
<div align="justify">&nbsp;Senzor korišćen u ovom sistemu je LM35 proizvođača National Semiconductor . U pitanju je vrlo jednostavan, precizan, linearan i jeftin senzor.Osetljivost mu je 10mV/°C. Može da meri temperaturu do +150°C. Izlaz je naponski signal. Napajanje može biti u granicama od 4 do 30V.</p>
</div>
<div align="justify">&nbsp;U pojačavačkom sklopu je korišćen klasičan 741 operacioni pojačavač u neinvertu-jućem spoju sa kompenzovanim ofsetom koji ulazni naponski signal pojačava i prilagođava ulaznom opsegu A/D konvertora 0-10V.</p>
</div>
<div align="justify">&nbsp;Iz dosad navedenog proizilazi da su za rad ovog uređaja potrebni sledeći naponi :</div>
<div align="justify">
<ul>
<li>&nbsp; +5V,+15V,+15V(galvanski odvojeno) i –12V.&nbsp;</li>
</ul>
<p> &nbsp;Možda najbolje rešenje predstavljaju integrisani stabilizatori napona 7805,7815 i 7912.</p></div>
<div align="justify">&nbsp;</div>
<div align="justify">&nbsp;</div>
<div align="center"><b>Programska podrška</b></div>
<div align="center">&nbsp;</div>
<div align="center">&nbsp;</div>
<div align="justify">&nbsp;&nbsp; Nakon hardverske sinteze sistema u celini možemo pristupiti razmatranju problema-tike softvera koji će upravljati celim sistemom. Najpre treba zakon upravljanja predstaviti u nešto drugačijem obliku.</div>
<div align="justify">&nbsp;</div>
<div align="justify">
<div style="text-align: center;"><img decoding="async" class=" size-full wp-image-2009" src="http://automatika.rs/wp-content/uploads/2009/09/1_regulacija_temperature_projekat_automatika.rs.jpg" alt="1 regulacija_temperature_projekat_automatika.rs" title="formula1_regulisanje_temperature_vode_zatvorenog_centralnog_grejanja_-_praktina_realizacija_obrada_signala_automatika.rs.jpg" style="width: 311px; height: 50px; margin: 5px;" height="54" width="297" /></div></div>
<div align="justify">&nbsp; Ovde su konstante KP, KI i KDodredjene u tekstu u bazi znanja i iznose:</div>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; KP=30 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; KI=0.6 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; KD=0.2</p>
<div align="justify">Sređivanjem gornjeg izraza i svođenjem na nešto drugačiji oblik dobija se :</div>
<div align="justify">&nbsp;</div>
<div align="justify">
<div style="text-align: center;"><img loading="lazy" decoding="async" class=" size-full wp-image-2010" src="http://automatika.rs/wp-content/uploads/2009/09/2_regulacija_temperature_projekat_automatika.rs.jpg" alt="2 regulacija_temperature_projekat_automatika.rs" title="formula2_regulisanje_temperature_vode_zatvorenog_centralnog_grejanja_-_praktina_realizacija_obrada_signala_automatika.rs.jpg" style="width: 650px; height: 287px; margin: 5px;" height="144" width="550" srcset="https://www.automatika.rs/wp-content/uploads/2009/09/2_regulacija_temperature_projekat_automatika.rs.jpg 608w, https://www.automatika.rs/wp-content/uploads/2009/09/2_regulacija_temperature_projekat_automatika.rs-300x78.jpg 300w" sizes="auto, (max-width: 550px) 100vw, 550px" /></div></div>
<p>&nbsp; &nbsp;Ovo je rekurzivni oblik zakona upravljanja koji je vrlo pogodan za implementaciju jer se vrednost upravljačke promenljive u(kT) u trenutku kT izračunava na osnovu vrednosti upravljačke promenljive i signala greške (e(kT)) u prethodnim trenutcima.<br /> Konstante koje se ovde pojavljuju su :&nbsp;</p>
<div align="center">&nbsp;K1 = KP+KI+KD = 30.8&nbsp;&nbsp; &nbsp;&nbsp; K2 = KP+2K = 30.4&nbsp;&nbsp; &nbsp;K3 = KD = 0.2</div>
<div align="center">&nbsp;</div>
<div align="justify">&nbsp;&nbsp; Očigledno da konstante nisu celobrojne i da ih treba skalirati kako bi se mogle primeniti u softverskoj implementaciji zakona upravljanja . Zato ih množimo sa 4, zaokružujemo i dobijamo nove konstante : K1 = 123 ; K2 = 122 ; K3 = 1 .&nbsp;<span style="line-height: 1.3em;">Ove konstante su celobrojne i mogu se koristiti u programu predstavljene u hexadecimalnom obliku kao : K1 = 7B H ; K2 = 7A H ; K3 = 01 H .</p>
<p></span></div>
<div align="justify">&nbsp;&nbsp; Ovo unosi izvesnu grešku u izračunavanju upravljačke promenljive. Upravljačka pro-menljiva, koja ovde predstavlja vrednost napona koju dovodimo na grejač, se nalazi u opsegu 0 – 400V . Teorijski bi se mogla generisati bilo koja vrednost iz tog opsega ali to nema praktičnog značaja . Iz tog razloga je ovde izvršeno skaliranje upravlja-čke promenljive, pa je ona svedena u opseg 0 – 50, deljenjem sa 8 .</p>
</div>
<div align="justify">&nbsp;Na ovaj način ustvari generišemo samo 50 vrednosti ugla paljenja tiristora, pri čemu se napon menja u koracima od 8V. Ugao paljenja prvog tiristora generiše Timer0 u mikrokontroleru dok su ostali uglovi pomereni za po 1/3 periode. Konsanta kojom se puni Timer0 da bi generisao željeni ugao je 16-to bitna i uzima se iz tabele koja se nalazi u programskoj memoriji. Tabela je data u nastavku .</div>
<div align="justify">&nbsp;</div>
<div align="justify">
<div style="text-align: center;"><img loading="lazy" decoding="async" class=" size-full wp-image-2011" src="http://automatika.rs/wp-content/uploads/2009/09/3_regulacija_temperature_projekat_automatika.rs.jpg" alt="3 regulacija_temperature_projekat_automatika.rs" title="tabela1_regulisanje_temperature_vode_zatvorenog_centralnog_grejanja_-_praktina_realizacija_obrada_signala_automatika.rs.jpg" style="width: 495px; height: 679px; margin: 5px;" height="852" width="600" srcset="https://www.automatika.rs/wp-content/uploads/2009/09/3_regulacija_temperature_projekat_automatika.rs.jpg 665w, https://www.automatika.rs/wp-content/uploads/2009/09/3_regulacija_temperature_projekat_automatika.rs-211x300.jpg 211w, https://www.automatika.rs/wp-content/uploads/2009/09/3_regulacija_temperature_projekat_automatika.rs-296x420.jpg 296w" sizes="auto, (max-width: 600px) 100vw, 600px" /></div></div>
<div align="center">Tabela 1. Zavisnost napona ispravljačaod ugla paljenja tiristora</div>
<div align="center">&nbsp;</div>
<div align="center">
<div style="text-align: center;"><img loading="lazy" decoding="async" class=" size-full wp-image-2012" src="http://automatika.rs/wp-content/uploads/2009/09/4_regulacija_temperature_projekat_automatika.rs.jpg" width="480" height="158" alt="4 regulacija_temperature_projekat_automatika.rs" srcset="https://www.automatika.rs/wp-content/uploads/2009/09/4_regulacija_temperature_projekat_automatika.rs.jpg 672w, https://www.automatika.rs/wp-content/uploads/2009/09/4_regulacija_temperature_projekat_automatika.rs-300x99.jpg 300w" sizes="auto, (max-width: 480px) 100vw, 480px" /></div></div>
<div align="justify">&nbsp;</div>
<div align="justify">&nbsp;&nbsp; Zavisnost izlaznog napona od ugla paljenja je prikazana u tabeli. Uout predstavlja zaokruženu vrednost . Kolona Timer sadrži konstante kojima se puni Timer0 da bi generisao željeni ugao paljenja prvog tiristora. Potrebno je ove vrednosti pretvoriti u hexadecimalni oblik .</div>
<div align="justify">&nbsp;&nbsp; Konstante su dvo-bajtne (16 bita) niže bajtove stavljamo u jednu tabelu na lokacije od 100 (64H) do 150 (96H) , a više bajtove u drugu tabelu na lokacije od 151 (97H) do 201 (C9H) . Ovim tabelama pristupamo indirektno .</div>
<div align="justify">Timer1 koristimo za generisanje uglova paljenja ostala dva tiristora. On&nbsp; generiše vremenski period koji odgovara 1/3 periode mrežnog napona tj. oko 6.666msec. Konstanta kojom punimo Timer1 je zato 65535 – 6666 =58869 (E5F5 H).</p>
</div>
<div align="justify">Perioda odabiranja je 75sec što predstavlja 3750 perioda mrežnog napona . Timer2 služi za generisanje periode odabiranja. Nalazi se u auto-reload modu što znači da&nbsp; se pri prekoračenju (kad dostigne 65535 (FFFF H)) automatski napuni vrednošću 65535 – 3750 = 61785 (F159 H).Ovaj Timer je podešen da radi kao Counter tj. brojač događaja odnosno brojač perioda mrežnog napona.</p>
</div>
<div align="justify">&nbsp;&nbsp; Vrlo važno pitanje je određivanje prioriteta interapta. Najviši prioritet ima INT0 koga generiše mreža. U odnosu na njega se generišu svi uglovi paljenja i određuje perioda odabiranja.&nbsp;<span style="line-height: 1.3em;">Na osnovu dosad izloženog može se preći na programski kod u asembleru uz oslonac na repertoar instrukcija mikrokontrolera uz kratak komentar.</span></div>
<div align="justify">&nbsp;</div>
<div align="center"><b>Programski kod za upravljanja centralnim grejanjem </b></div>
<div align="justify">&nbsp;</div>
<div align="justify">&nbsp;</div>
<div>;ADRESE PROMENLJIVIH VELIČINA</p>
<p> OUT0&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; DATA&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 30h&nbsp;&nbsp;&nbsp; ; Izlazna promenljiva u(kT)<br /> OUT1&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; DATA&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 31h&nbsp;&nbsp;&nbsp; ; u((k-1)T)<br /> EROR0&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; DATA&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 32h&nbsp;&nbsp;&nbsp; ; Signal greške e(kT)<br /> EROR1&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; DATA&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 33h&nbsp;&nbsp;&nbsp; ; e((k-1)T)<br /> EROR2&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; DATA&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 34h&nbsp;&nbsp;&nbsp; ; e((k-2)T)<br /> EROR0ZN&nbsp;&nbsp;&nbsp; BIT&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 00h&nbsp;&nbsp;&nbsp; ; Znak greške<br /> EROR1ZN&nbsp;&nbsp;&nbsp; BIT&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 01h<br /> EROR2ZN&nbsp;&nbsp;&nbsp; BIT&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 02h<br /> SCRCTRL&nbsp;&nbsp;&nbsp; BIT&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 03h&nbsp;&nbsp;&nbsp; ; Kontrolni bit za upravljanje SCR-ovima<br /> ZNAK1&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; BIT&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 04h&nbsp;&nbsp;&nbsp; ; Pomocna prom.<br /> ZNAK2&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; BIT&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 05h&nbsp;&nbsp;&nbsp; ;<br /> ZNAKR&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; BIT&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 06h&nbsp;&nbsp;&nbsp; ;</p>
<p> ;KONSTANTE</p>
<p> K1&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; EQU&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 7Bh&nbsp;&nbsp;&nbsp; ; K1 = 123<br /> K2&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; EQU&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 7Ah&nbsp;&nbsp;&nbsp; ; K2 = 122<br /> K3&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; EQU&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 01h&nbsp;&nbsp;&nbsp; ; K3 = 1<br /> TIM1H&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; EQU&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; E5h&nbsp;&nbsp;&nbsp; ; 65535 – 6666 = E5F5 h za Timer1<br /> TIM1L&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; EQU&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; F5h&nbsp;&nbsp;&nbsp; ;<br /> TIM2H&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; EQU&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; F1h&nbsp;&nbsp;&nbsp; ; 65535 – 3750 = F159 h za Timer2<br /> TIM2L&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; EQU&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 59h&nbsp;&nbsp;&nbsp; ;</p>
<p> ORG&nbsp;&nbsp;&nbsp; 0000h&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ; Pri resetu ili uključenju ide se na INIC<br /> JMP&nbsp;&nbsp;&nbsp; INIC<br /> ORG&nbsp;&nbsp;&nbsp; 0003h&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ; INT0 Rutina SCR123<br /> LCALL&nbsp;&nbsp;&nbsp; SCR123<br /> ORG&nbsp;&nbsp;&nbsp; 000Bh&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ; Timer0 Rutina<br /> LCALL&nbsp;&nbsp;&nbsp; SCR1&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ; Generiše ugao paljenja prvog (SCR1) tiristora<br /> ORG&nbsp;&nbsp;&nbsp; 001Bh&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ; Timer1 Rutina<br /> LCALL&nbsp;&nbsp;&nbsp; PAUZA&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ; Generiše pauzu u trajanju 6.666 msec<br /> ORG&nbsp;&nbsp;&nbsp; 002Bh&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ; Timer2 Rutina<br /> LCALL&nbsp;&nbsp;&nbsp; RACUN&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ; Generiše upravljačku promenljivu OUT0</p>
<p> ; NA OVOM MESTU TREBALO BI DEFINISATI TABELU SA UGLOVIMA PALJENJA<br /> &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ORG&nbsp;&nbsp;&nbsp; 0064h&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ; Početak TABELE – niži bajtovi<br /> &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; DB&nbsp;&nbsp;&nbsp; EFh,68h,47h,25h,03h, …….&nbsp;&nbsp;&nbsp; ; Ovo su samo prvih 5 nižih<br /> &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; DB&nbsp;&nbsp;&nbsp; D8h,DCh,DDh,DEh,DFh, ……&nbsp;&nbsp;&nbsp; ; Ovo su samo prvih 5 viših</p>
<p> ; INICIJALIZACIJA</p>
<p> &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ORG&nbsp;&nbsp;&nbsp; 00CDh&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ; Adresa (205 dec) od koje počinje prog. kod<br /> INIC:&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; CLR&nbsp;&nbsp;&nbsp; IE.7&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ; Zabrana svih prekida<br /> &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; MOV&nbsp;&nbsp;&nbsp; PSW,#00h&nbsp;&nbsp;&nbsp; ; Obriši PSW<br /> &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; MOV&nbsp;&nbsp;&nbsp; TMOD,#11h&nbsp;&nbsp;&nbsp; ; Timer0 i Timer1 u MOD1 kao 16 bitni Timer<br /> &nbsp;&nbsp;&nbsp; MOV&nbsp;&nbsp;&nbsp; TCON,#05h&nbsp;&nbsp;&nbsp; ; IE0 i IE1 interapti na opadajuću ivicu<br /> &nbsp;&nbsp;&nbsp; MOV&nbsp;&nbsp;&nbsp; IP,#01h&nbsp;&nbsp;&nbsp; ; Najviši prioritet za IE0<br /> &nbsp;&nbsp;&nbsp; MOV&nbsp;&nbsp;&nbsp; T2CON,#02h&nbsp;&nbsp;&nbsp; ; Timer2 kao Counter u AUTO-RELOAD modu<br /> &nbsp;&nbsp;&nbsp; MOV&nbsp;&nbsp;&nbsp; OUT0,#00h&nbsp;&nbsp;&nbsp; ; Inicijalizuj promenljive<br /> &nbsp;&nbsp;&nbsp; MOV&nbsp;&nbsp;&nbsp; OUT1,#00h&nbsp;&nbsp;&nbsp; ; &#8211;<br /> &nbsp;&nbsp;&nbsp; MOV&nbsp;&nbsp;&nbsp; EROR0,#00h&nbsp;&nbsp;&nbsp; ; &#8211;<br /> &nbsp;&nbsp;&nbsp; MOV&nbsp;&nbsp;&nbsp; EROR1,#00h&nbsp;&nbsp;&nbsp; ; &#8211;<br /> &nbsp;&nbsp;&nbsp; MOV&nbsp;&nbsp;&nbsp; EROR2,#00h&nbsp;&nbsp;&nbsp; ; &#8211;<br /> &nbsp;&nbsp;&nbsp; CLR&nbsp;&nbsp;&nbsp; SCRCTRL&nbsp;&nbsp;&nbsp; ; SCRCTRL=0 za SCR2 i SCRCTRL=1 za SCR3<br /> &nbsp;&nbsp;&nbsp; <br /> &nbsp;&nbsp;&nbsp; MOV&nbsp;&nbsp;&nbsp; TL1,TIM1L&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ; Napuni Timer1 sa E5F5h<br /> &nbsp;&nbsp;&nbsp; MOV&nbsp;&nbsp;&nbsp; TH1,TIM1H&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ;<br /> &nbsp;&nbsp;&nbsp; MOV&nbsp;&nbsp;&nbsp; RCAP2L,TIM2L&nbsp;&nbsp;&nbsp; ; Napuni Auto-reload registre sa F159h<br /> &nbsp;&nbsp;&nbsp; MOV&nbsp;&nbsp;&nbsp; RCAP2H,TIM2H&nbsp;&nbsp;&nbsp; ;<br /> &nbsp;&nbsp;&nbsp; MOV&nbsp;&nbsp;&nbsp; P1,#10001111b&nbsp;&nbsp;&nbsp; ; U port P0 upiši 10001111<br /> &nbsp;&nbsp;&nbsp; SETB&nbsp;&nbsp;&nbsp; IE.7&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ; Omogući prekide<br /> &nbsp;&nbsp;&nbsp; SETB&nbsp;&nbsp;&nbsp; T2CON.2&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ; Startuj Timer/Counter2</p>
<p> PETLJA:&nbsp;&nbsp;&nbsp; SJMP&nbsp;&nbsp;&nbsp; PETLJA&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ; Petlja u kojoj se vrti program</p>
<p> SCR123:&nbsp;&nbsp;&nbsp; MOV&nbsp;&nbsp;&nbsp; R1,OUT0&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ; R1 = OUT0 = upravljačka prom.<br /> &nbsp;&nbsp;&nbsp; MOV&nbsp;&nbsp;&nbsp; TL0,@R1+100&nbsp;&nbsp;&nbsp; ; Indirektno napuni TL0 i TH0 sa <br /> &nbsp;&nbsp;&nbsp; MOV&nbsp;&nbsp;&nbsp; TH0,@R1+151&nbsp;&nbsp;&nbsp; ; vrednostima iz tabele<br /> &nbsp;&nbsp;&nbsp; SETB&nbsp;&nbsp;&nbsp; TCON.4&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ; T0 RUN<br /> &nbsp;&nbsp;&nbsp; RETI&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ; Gotova IE0 rutina<br /> &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br /> SCR1:&nbsp;&nbsp;&nbsp; CPL&nbsp;&nbsp;&nbsp; P1.2&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ; SCR1 ON&nbsp;&nbsp;&nbsp; &nbsp;<br /> &nbsp;&nbsp;&nbsp; SETB&nbsp;&nbsp;&nbsp; TCON.6&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ; T1 RUN&nbsp;&nbsp;&nbsp; &nbsp; <br /> &nbsp;&nbsp;&nbsp; CLR&nbsp;&nbsp;&nbsp; TCON.4&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ; T0 OFF<br /> &nbsp;&nbsp;&nbsp; CPL&nbsp;&nbsp;&nbsp; P1.2&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ;<br /> &nbsp;&nbsp;&nbsp; RETI</p>
<p> PAUZA:&nbsp;&nbsp;&nbsp; JB&nbsp;&nbsp;&nbsp; SCRCTRL,SCR3&nbsp;&nbsp;&nbsp; ;<br /> &nbsp;&nbsp;&nbsp; CPL&nbsp;&nbsp;&nbsp; P1.3&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ; SCR2 ON<br /> &nbsp;&nbsp;&nbsp; CLR&nbsp;&nbsp;&nbsp; TCON.6&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ; T1 OFF<br /> &nbsp;&nbsp;&nbsp; MOV&nbsp;&nbsp;&nbsp; TL1,TIM1L&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ;<br /> &nbsp;&nbsp;&nbsp; MOV&nbsp;&nbsp;&nbsp; TH1,TIM1H&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ;<br /> &nbsp;&nbsp;&nbsp; SETB&nbsp;&nbsp;&nbsp; TCON.6&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ; T1 ON<br /> &nbsp;&nbsp;&nbsp; SETB&nbsp;&nbsp;&nbsp; SCRCTRL&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ; SCRCTRL=1 i sledeći put ide na SCR3<br /> &nbsp;&nbsp;&nbsp; CPL&nbsp;&nbsp;&nbsp; P1.3&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ;<br /> &nbsp;&nbsp;&nbsp; RETI</p>
<p> SCR3:&nbsp;&nbsp;&nbsp; CPL&nbsp;&nbsp;&nbsp; P1.4&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ; SCR3 ON<br /> &nbsp;&nbsp;&nbsp; CLR&nbsp;&nbsp;&nbsp; TCON.6&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ; T1 OFF<br /> &nbsp;&nbsp;&nbsp; MOV&nbsp;&nbsp;&nbsp; TL1,TIM1L&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ;<br /> &nbsp;&nbsp;&nbsp; MOV&nbsp;&nbsp;&nbsp; TH1,TIM1H&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ;<br /> &nbsp;&nbsp;&nbsp; CLR&nbsp;&nbsp;&nbsp; SCRCTRL&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ; SCRCTRL=0 i sledeći put ide na SCR2<br /> &nbsp;&nbsp;&nbsp; CPL&nbsp;&nbsp;&nbsp; P1.4&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ;<br /> &nbsp;&nbsp;&nbsp; RETI</p>
<p> ; Slede potprogrami za 2-vo Bajtno sabiranje i oduzimanje<br /> ; operand1 : A niži bajt, B viši bajt ; operand2 : R1 niži bajt, R2 viši bajt<br /> ; Rezultat&nbsp;&nbsp; : A niži bajt, B viši bajt&nbsp; ;&nbsp; C = 1 negativan rezultat ; C=0 pozitivan</p>
<p> 2BSAB:&nbsp;&nbsp;&nbsp; CLR&nbsp;&nbsp;&nbsp; C&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ; Priprema za sabiranje<br /> &nbsp;&nbsp;&nbsp; ADD&nbsp;&nbsp;&nbsp; A,R1&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ; Saberi niže bajtove<br /> &nbsp;&nbsp;&nbsp; MOV&nbsp;&nbsp;&nbsp; R1,A&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ;<br /> &nbsp;&nbsp;&nbsp; MOV&nbsp;&nbsp;&nbsp; A,B&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ;<br /> &nbsp;&nbsp;&nbsp; ADDC&nbsp;&nbsp;&nbsp; A,R2&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ; Saberi više bajtove i C<br /> &nbsp;&nbsp;&nbsp; JNC&nbsp;&nbsp;&nbsp; KRSAB&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ; Ako nema C idi na KRSAB<br /> &nbsp;&nbsp;&nbsp; MOV&nbsp;&nbsp;&nbsp; A,#FFh&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ; Inače vrati MAX (FFFFh) vrednost<br /> &nbsp;&nbsp;&nbsp; MOV&nbsp;&nbsp;&nbsp; B,#FFh&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ;<br /> &nbsp;&nbsp;&nbsp; RET</p>
<p> KRSAB:&nbsp;&nbsp;&nbsp; MOV&nbsp;&nbsp;&nbsp; B,A&nbsp;&nbsp;&nbsp; <br /> &nbsp;&nbsp;&nbsp; MOV&nbsp;&nbsp;&nbsp; A,R1<br /> &nbsp;&nbsp;&nbsp; RET</p>
<p> 2BODU:&nbsp;&nbsp;&nbsp; CLR&nbsp;&nbsp;&nbsp; C&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ; Pripremi za oduzimanje<br /> &nbsp;&nbsp;&nbsp; SUBB&nbsp;&nbsp;&nbsp; A,R1&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ; Oduzmi niže bajtove<br /> &nbsp;&nbsp;&nbsp; MOV&nbsp;&nbsp;&nbsp; R1,A&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ;<br /> &nbsp;&nbsp;&nbsp; MOV&nbsp;&nbsp;&nbsp; A,B&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ;<br /> &nbsp;&nbsp;&nbsp; SUBB&nbsp;&nbsp;&nbsp; A,R2&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ; Oduzmi više bajtove i C<br /> &nbsp;&nbsp;&nbsp; JNC&nbsp;&nbsp;&nbsp; KRODU&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ; Ako nije C (- rezultat) idi na KRODU<br /> &nbsp;&nbsp;&nbsp; MOV&nbsp;&nbsp;&nbsp; R2,A<br /> &nbsp;&nbsp;&nbsp; MOV&nbsp;&nbsp;&nbsp; A,R1&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ;<br /> &nbsp;&nbsp;&nbsp; CLR&nbsp;&nbsp;&nbsp; C<br /> &nbsp;&nbsp;&nbsp; CPL&nbsp;&nbsp;&nbsp; A&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ; Inače nađi drugi komplement nižeg<br /> &nbsp;&nbsp;&nbsp; ADD&nbsp;&nbsp;&nbsp; A,#01h&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ;<br /> &nbsp;&nbsp;&nbsp; MOV&nbsp;&nbsp;&nbsp; R1,A&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ;<br /> &nbsp;&nbsp;&nbsp; MOV&nbsp;&nbsp;&nbsp; A,R2&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ;<br /> &nbsp;&nbsp;&nbsp; CPL&nbsp;&nbsp;&nbsp; A&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ;<br /> &nbsp;&nbsp;&nbsp; ADDC&nbsp;&nbsp;&nbsp; A,#01h&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ; i drugi kompl. Višeg bajta<br /> &nbsp;&nbsp;&nbsp; SETB&nbsp;&nbsp;&nbsp; C&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ; Postavi C&nbsp; &#8211;&nbsp; rezultat je negativan<br /> &nbsp;&nbsp;&nbsp; MOV&nbsp;&nbsp;&nbsp; B,A<br /> &nbsp;&nbsp;&nbsp; MOV&nbsp;&nbsp;&nbsp; A,R1&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ; Postavi izlaz i vrati se<br /> &nbsp;&nbsp;&nbsp; RET</p>
<p> KRODU:&nbsp;&nbsp;&nbsp; MOV&nbsp;&nbsp;&nbsp; B,A<br /> &nbsp;&nbsp;&nbsp; MOV&nbsp;&nbsp;&nbsp; A,R1<br /> &nbsp;&nbsp;&nbsp; CLR&nbsp;&nbsp;&nbsp; C&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ; Postavi izlaz, C=0 (rez. je +) i vrati se&nbsp;&nbsp;&nbsp; <br /> &nbsp;&nbsp;&nbsp; RET&nbsp;&nbsp;&nbsp; </p>
<p> ;Sledi potprogram za 2B sabiranje sa predznakom<br /> ;operand1 : B:A viši i niži bajt i ZNAK1 = 1 ako je negativan<br /> ;operand2 : R2:R1 viši i niži bajt i ZNAK2 = 1 ako je negativan<br /> ;rezultat&nbsp;&nbsp; : B:A viši i niži bajt i ZNAKR = 1 ako je negativan</p>
<p> SABIRAJ:&nbsp;&nbsp;&nbsp; JB&nbsp;&nbsp;&nbsp; ZNAK1,PG1&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ; operand1 &lt;0<br /> &nbsp;&nbsp;&nbsp; JB&nbsp;&nbsp;&nbsp; ZNAK2,PG2&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ; operand2 &lt;0<br /> &nbsp;&nbsp;&nbsp; CLR&nbsp;&nbsp;&nbsp; ZNAKR&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ; op1&gt;0 i op2&gt;0 onda je rez.&gt;0<br /> &nbsp;&nbsp;&nbsp; CALL&nbsp;&nbsp;&nbsp; 2BSAB&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ; saberi i vrati se<br /> &nbsp;&nbsp;&nbsp; RET</p>
<p> PG2:&nbsp;&nbsp;&nbsp; CALL&nbsp;&nbsp;&nbsp; 2BODU&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ; op1&gt;0 i op2&lt;0 zato zovi oduzimanje<br /> &nbsp;&nbsp;&nbsp; JC&nbsp;&nbsp;&nbsp; PG3&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ; ako je rez&lt;0 skoči na PG3<br /> &nbsp;&nbsp;&nbsp; CLR&nbsp;&nbsp;&nbsp; ZNAKR&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ; inače je rez &gt;0 , znakr = 0 , vrati se<br /> &nbsp;&nbsp;&nbsp; RET<br /> PG3:&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; SETB&nbsp;&nbsp;&nbsp; ZNAKR&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ; rez&lt;0 , znakr = 1 , vrati se&nbsp;&nbsp;&nbsp; <br /> &nbsp;&nbsp;&nbsp; RET<br /> PG1:&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; JNB&nbsp;&nbsp;&nbsp; ZNAK2,PG4&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ; op1&lt;0 ako je op2&gt;0 skoči na PG4<br /> &nbsp;&nbsp;&nbsp; SETB&nbsp;&nbsp;&nbsp; ZNAKR&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ; op1&lt;0 i op2&lt;0 pa je rez&lt;0 , znakr=1<br /> &nbsp;&nbsp;&nbsp; CALL&nbsp;&nbsp;&nbsp; 2BSAB&nbsp;&nbsp;&nbsp; <br /> &nbsp;&nbsp;&nbsp; RET<br /> PG4:&nbsp;&nbsp;&nbsp; MOV&nbsp;&nbsp;&nbsp; R3,A&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ; Zameni mesta oper1 i oper2 i<br /> &nbsp;&nbsp;&nbsp; MOV&nbsp;&nbsp;&nbsp; R4,B&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ; skoči na PG2<br /> &nbsp;&nbsp;&nbsp; MOV&nbsp;&nbsp;&nbsp; A,R1<br /> &nbsp;&nbsp;&nbsp; MOV&nbsp;&nbsp;&nbsp; B,R2<br /> &nbsp;&nbsp;&nbsp; MOV&nbsp;&nbsp;&nbsp; R1,R3<br /> &nbsp;&nbsp;&nbsp; MOV&nbsp;&nbsp;&nbsp; R2,R4<br /> &nbsp;&nbsp;&nbsp; SJMP&nbsp;&nbsp;&nbsp; PG2</p>
<p> ;Sledi potprogram za računanje upravljačke promenljive OUT0</p>
<p> RACUN:&nbsp;&nbsp;&nbsp; CLR&nbsp;&nbsp;&nbsp; T2CON.7&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ; Interapt flag TF2 moramo obrisati <br /> CLR&nbsp;&nbsp;&nbsp; P1.5&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ; Startuj signal za konverziju B&amp;C =0<br /> &nbsp;&nbsp;&nbsp; MOV&nbsp;&nbsp;&nbsp; A,P2&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ; U A se nalazi REF ali u obliku BCD cifri<br /> &nbsp;&nbsp;&nbsp; MOV&nbsp;&nbsp;&nbsp; R1,A<br /> &nbsp;&nbsp;&nbsp; ANL&nbsp;&nbsp;&nbsp; A,#0Fh&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ; Odseci donji nibl (4 bita) – cifra desetica<br /> &nbsp;&nbsp;&nbsp; MOV&nbsp;&nbsp;&nbsp; B,#0Ah&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ; U B stavi 10&nbsp;&nbsp;&nbsp; <br /> &nbsp;&nbsp;&nbsp; MUL&nbsp;&nbsp;&nbsp; AB&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br /> &nbsp;&nbsp;&nbsp; MOV&nbsp;&nbsp;&nbsp; R2,A<br /> &nbsp;&nbsp;&nbsp; MOV&nbsp;&nbsp;&nbsp; A,R1<br /> &nbsp;&nbsp;&nbsp; SWAP&nbsp;&nbsp;&nbsp; A&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ; Zameni niblove u A<br /> &nbsp;&nbsp;&nbsp; ANL&nbsp;&nbsp;&nbsp; A,#0Fh&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ; Odseci donji nibl – cifra jedinica<br /> &nbsp;&nbsp;&nbsp; CLR&nbsp;&nbsp;&nbsp; C<br /> &nbsp;&nbsp;&nbsp; ADD&nbsp;&nbsp;&nbsp; A,R2&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ; U A se nalazi REFerentna&nbsp; vrednost<br /> ADC:&nbsp;&nbsp;&nbsp; JB&nbsp;&nbsp;&nbsp; TCON.3,LOADADC&nbsp;&nbsp;&nbsp; ; Čekaj da se obavi konverzija<br /> &nbsp;&nbsp;&nbsp; SJMP&nbsp;&nbsp;&nbsp; ADC<br /> LOADADC:&nbsp;&nbsp;&nbsp; MOV&nbsp;&nbsp;&nbsp; B,P0&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ; U B se nalazi reč iz AD konvertora<br /> &nbsp;&nbsp;&nbsp; SETB&nbsp;&nbsp;&nbsp; P1.5<br /> &nbsp;&nbsp;&nbsp; CLR&nbsp;&nbsp;&nbsp; C<br /> &nbsp;&nbsp;&nbsp; SUBB&nbsp;&nbsp;&nbsp; A,B&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ; U A se nalazi signal greške = REF – AD<br /> &nbsp;&nbsp;&nbsp; CLR&nbsp;&nbsp;&nbsp; EROR0ZN&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ; EROR0 &gt;0<br /> &nbsp;&nbsp;&nbsp; JNC&nbsp;&nbsp;&nbsp; NASTAVI&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ; ako nije C NASTAVI <br /> &nbsp;&nbsp;&nbsp; CPL&nbsp;&nbsp;&nbsp; A&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ; inače je EROR0&lt;0 , nađi drugi komplem.<br /> &nbsp;&nbsp;&nbsp; ADD&nbsp;&nbsp;&nbsp; A,#01h<br /> &nbsp;&nbsp;&nbsp; SETB&nbsp;&nbsp;&nbsp; EROR0ZN&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ; EROR0 je negativno<br /> NASTAVI:&nbsp;&nbsp;&nbsp; MOV&nbsp;&nbsp;&nbsp; EROR0,A<br /> &nbsp;&nbsp;&nbsp; MOV&nbsp;&nbsp;&nbsp; B,K1&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ;<br /> &nbsp;&nbsp;&nbsp; MUL&nbsp;&nbsp;&nbsp; AB&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ; B:A = K1*EROR0<br /> &nbsp;&nbsp;&nbsp; MOV&nbsp;&nbsp;&nbsp; R1,A&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ; R2:R1 = K1*EROR0<br /> &nbsp;&nbsp;&nbsp; MOV&nbsp;&nbsp;&nbsp; R2,B<br /> &nbsp;&nbsp;&nbsp; MOV&nbsp;&nbsp;&nbsp; A,EROR2<br /> &nbsp;&nbsp;&nbsp; MOV&nbsp;&nbsp;&nbsp; B,K3<br /> &nbsp;&nbsp;&nbsp; MUL&nbsp;&nbsp;&nbsp; AB&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ; B:A = K3*EROR2<br /> &nbsp;&nbsp;&nbsp; MOV&nbsp;&nbsp;&nbsp; ZNAK2,EROR0ZN<br /> &nbsp;&nbsp;&nbsp; MOV&nbsp;&nbsp;&nbsp; ZNAK1,EROR2ZN<br /> &nbsp;&nbsp;&nbsp; CALL&nbsp;&nbsp;&nbsp; SABIRAJ&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ; B:A = K3*EROR2+K1*EROR0<br /> &nbsp;&nbsp;&nbsp; MOV&nbsp;&nbsp;&nbsp; R1,A&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ; R2:R1 = &#8212;&#8212;<br /> &nbsp;&nbsp;&nbsp; MOV&nbsp;&nbsp;&nbsp; R2,B<br /> &nbsp;&nbsp;&nbsp; MOV&nbsp;&nbsp;&nbsp; ZNAK2,ZNAKR<br /> &nbsp;&nbsp;&nbsp; MOV&nbsp;&nbsp;&nbsp; A,EROR1&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ;<br /> MOV&nbsp;&nbsp;&nbsp; B,K2<br /> MUL&nbsp;&nbsp;&nbsp; AB&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ; B:A = K2*EROR1<br /> MOV&nbsp;&nbsp;&nbsp; ZNAK1,EROR1ZN<br /> CPL&nbsp;&nbsp;&nbsp; ZNAK1&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ; promeni znak pošto se oduzima<br /> CALL&nbsp;&nbsp;&nbsp; SABIRAJ&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ; U B:A = ER2*K3+ER0*K1-ER1*K2 </p>
<p> ;Sada ovu sumu treba podeliti sa 32 što je isto kao i pomeranje u desno 5 mesta<br /> ; a to je isto što i pomeranje u levo 3 mesta</p>
<p> &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; RLC&nbsp;&nbsp;&nbsp; A<br /> &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; RLC&nbsp;&nbsp;&nbsp; A&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ; rotiraj 3 puta u&nbsp; levo = deli sa 32<br /> &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; RLC&nbsp;&nbsp;&nbsp; A<br /> &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ANL&nbsp;&nbsp;&nbsp; A,#07h&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ; odseci niža 3 bita (00000xxx)<br /> &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; MOV&nbsp;&nbsp;&nbsp; R7,A<br /> &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; MOV&nbsp;&nbsp;&nbsp; A,B&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ; u A stavi viši bajt<br /> &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; RLC&nbsp;&nbsp;&nbsp; A<br /> &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; RLC&nbsp;&nbsp;&nbsp; A<br /> &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; RLC&nbsp;&nbsp;&nbsp; A&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ; i podeli ga sa 32<br /> &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; MOV&nbsp;&nbsp;&nbsp; R6,A<br /> &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; MOV&nbsp;&nbsp;&nbsp; B,07h&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ; u B stavi masku 00000111<br /> &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ANL&nbsp;&nbsp;&nbsp; B,A&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ; i odseci niža 3 bita (00000xxx) višeg B.<br /> &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; MOV&nbsp;&nbsp;&nbsp; A,#F8h&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ; u A stavi masku (11111000)<br /> &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ANL&nbsp;&nbsp;&nbsp; A,R6&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ; i odseci viših 5 bita (xxxxx000) višeg B.<br /> &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ORL&nbsp;&nbsp;&nbsp; A,R7&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ; zalepi xxxxx000 OR 00000xxx<br /> &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; MOV&nbsp;&nbsp;&nbsp; R1,OUT1&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ; u R1 stavi OUT1<br /> &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; MOV&nbsp;&nbsp;&nbsp; R2,#00h&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ; u R2 stavi 00h<br /> &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; CLR&nbsp;&nbsp;&nbsp; ZNAK2&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ; ZNAK2 je +<br /> &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; MOV&nbsp;&nbsp;&nbsp; ZNAK1,ZNAKR&nbsp;&nbsp;&nbsp; ; ZNAK1 = ZNAKR<br /> &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; CALL&nbsp;&nbsp;&nbsp; SABIRAJ&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ; B:A = OUT0 = OUT1 + SUMA/32<br /> &nbsp;&nbsp;&nbsp; JNB&nbsp;&nbsp;&nbsp; ZNAKR,LAB1&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ; ako je &gt;0 skoči na LAB1<br /> &nbsp;&nbsp;&nbsp; MOV&nbsp;&nbsp;&nbsp; OUT0,#00h&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ; inače OUT0 = 00h (MIN)<br /> &nbsp;&nbsp;&nbsp; JMP&nbsp;&nbsp;&nbsp; KRAJ&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ; idi na kraj<br /> LAB1:&nbsp;&nbsp;&nbsp; MOV&nbsp;&nbsp;&nbsp; R1,A<br /> &nbsp;&nbsp;&nbsp; MOV&nbsp;&nbsp;&nbsp; A,B&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ; stavi viši bajt u A<br /> &nbsp;&nbsp;&nbsp; JZ&nbsp;&nbsp;&nbsp; LAB2&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ; ako je 0 skoči na LAB2<br /> LAB3:&nbsp;&nbsp;&nbsp; MOV&nbsp;&nbsp;&nbsp; OUT0,#32h&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ; inače OUT0 = (MAX) = 50<br /> &nbsp;&nbsp;&nbsp; JMP&nbsp;&nbsp;&nbsp; KRAJ&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ; idi na kraj<br /> LAB2:&nbsp;&nbsp;&nbsp; MOV&nbsp;&nbsp;&nbsp; A,#32h<br /> &nbsp;&nbsp;&nbsp; CLR&nbsp;&nbsp;&nbsp; C<br /> &nbsp;&nbsp;&nbsp; SUBB&nbsp;&nbsp;&nbsp; A,R1&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ; A = 50 &#8211; OUT0<br /> &nbsp;&nbsp;&nbsp; JC&nbsp;&nbsp;&nbsp; LAB3&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ; ako je OUT0 &gt;50 skoči na LAB3&nbsp;&nbsp;&nbsp; <br /> &nbsp;&nbsp;&nbsp; MOV&nbsp;&nbsp;&nbsp; OUT0,R1&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ; inače je OUT0&lt;50 i nastavi do kraja<br /> KRAJ:&nbsp;&nbsp;&nbsp; MOV&nbsp;&nbsp;&nbsp; OUT1,OUT0<br /> &nbsp;&nbsp;&nbsp; MOV&nbsp;&nbsp;&nbsp; EROR2,EROR1<br /> &nbsp;&nbsp;&nbsp; MOV&nbsp;&nbsp;&nbsp; EROR1,EOR0<br /> &nbsp;&nbsp;&nbsp; MOV&nbsp;&nbsp;&nbsp; EROR2ZN,EROR1ZN<br /> &nbsp;&nbsp;&nbsp; MOV&nbsp;&nbsp;&nbsp; EROR1ZN,EROR0ZN&nbsp;&nbsp;&nbsp; <br /> &nbsp;&nbsp;&nbsp; RETI&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ;Kraj rutine RACUN</p>
<p> ; Kraj programa</p>
<p> &nbsp;&nbsp;&nbsp; END</p>
<p> <a href="http://www.elektronika.ftn.uns.ac.rs/" target="_blank">FTN Novi Sad, Katedra za elektroniku</a></div>
<p>The post <a href="https://www.automatika.rs/projekti/svi-projekti/regulisanje-temperature-vode-zatvorenog-centralnog-grejanja-prakticna-realizacija.html">Regulisanje temperature vode zatvorenog centralnog grejanja &#8211; praktična realizacija</a> appeared first on <a href="https://www.automatika.rs">Automatika.rs</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.automatika.rs/projekti/svi-projekti/regulisanje-temperature-vode-zatvorenog-centralnog-grejanja-prakticna-realizacija.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
