{"id":322,"date":"2025-10-27T14:01:20","date_gmt":"2025-10-27T11:01:20","guid":{"rendered":"https:\/\/ta9ea.com\/?p=322"},"modified":"2025-10-27T14:01:20","modified_gmt":"2025-10-27T11:01:20","slug":"pic-mikrodenetleyici-pic16f877-ile-i2c-iletisimi","status":"publish","type":"post","link":"https:\/\/ta9ea.com\/?p=322","title":{"rendered":"PIC Mikrodenetleyici PIC16F877 ile I2C \u0130leti\u015fimi"},"content":{"rendered":"<p class=\"rtejustify\"><span dir=\"auto\">PIC Mikrodenetleyiciler, Microchip taraf\u0131ndan g\u00f6m\u00fcl\u00fc projeler i\u00e7in sa\u011flanan g\u00fc\u00e7l\u00fc bir platformdur. \u00c7ok y\u00f6nl\u00fc yap\u0131s\u0131 sayesinde bir\u00e7ok uygulamaya girmi\u015ftir ve bu a\u015fama hala devam etmektedir.\u00a0<\/span><span dir=\"auto\">PIC e\u011fitimlerimizi<\/span><span dir=\"auto\">\u00a0takip ettiyseniz , PIC mikrodenetleyiciler hakk\u0131nda en temellerden ba\u015flayarak geni\u015f bir yelpazede e\u011fitimler verdi\u011fimizi fark etmi\u015fsinizdir. \u015eimdiye kadar, ileti\u015fim portal\u0131 gibi daha ilgin\u00e7 konulara da girebilece\u011fimiz temelleri ele ald\u0131k.<\/span><\/p>\n<p class=\"rtejustify\"><span dir=\"auto\">G\u00f6m\u00fcl\u00fc uygulamalar\u0131n geni\u015f sisteminde, hi\u00e7bir mikrodenetleyici t\u00fcm i\u015flemleri tek ba\u015f\u0131na ger\u00e7ekle\u015ftiremez. Bir noktada, bilgi payla\u015f\u0131m\u0131 i\u00e7in di\u011fer cihazlarla ileti\u015fim kurmas\u0131 gerekir. Bu bilgileri payla\u015fmak i\u00e7in bir\u00e7ok\u00a0<\/span><strong><span dir=\"auto\">farkl\u0131 ileti\u015fim protokol\u00fc t\u00fcr\u00fc<\/span><\/strong><span dir=\"auto\">\u00a0vard\u0131r , ancak en \u00e7ok kullan\u0131lanlar\u00a0<\/span><strong><span dir=\"auto\">USART, IIC, SPI ve CAN&#8217;d\u0131r<\/span><\/strong><span dir=\"auto\">\u00a0. Her ileti\u015fim protokol\u00fcn\u00fcn kendine \u00f6zg\u00fc avantajlar\u0131 ve dezavantajlar\u0131 vard\u0131r. Bu e\u011fitimde \u00f6\u011frenece\u011fimiz \u015fey bu oldu\u011fundan, \u015fimdilik\u00a0<\/span><strong><span dir=\"auto\">IIC k\u0131sm\u0131na<\/span><\/strong><span dir=\"auto\">\u00a0odaklanal\u0131m .<\/span><\/p>\n<h3 class=\"rtejustify\"><strong><span dir=\"auto\">I2C \u0130leti\u015fim Protokol\u00fc Nedir?<\/span><\/strong><\/h3>\n<p class=\"rtejustify\"><span dir=\"auto\">IIC terimi, &#8221;\u00a0<\/span><strong><span dir=\"auto\">Inter Integrated Circuits&#8221; (Entegre Devreler<\/span><\/strong><span dir=\"auto\">\u00a0Aras\u0131) anlam\u0131na gelir . Genellikle I2C veya I kare C veya baz\u0131 yerlerde 2 telli aray\u00fcz protokol\u00fc (TWI) olarak adland\u0131r\u0131l\u0131r, ancak hepsi ayn\u0131 anlama gelir. I2C, e\u015fzamanl\u0131 bir ileti\u015fim protokol\u00fcd\u00fcr; yani bilgiyi payla\u015fan her iki cihaz\u0131n da ortak bir saat sinyalini payla\u015fmas\u0131 gerekir. Bilgi payla\u015f\u0131m\u0131 i\u00e7in yaln\u0131zca iki teli vard\u0131r; bunlardan biri sinyal i\u00e7in, di\u011feri ise veri g\u00f6nderip almak i\u00e7in kullan\u0131l\u0131r.<\/span><\/p>\n<h3 class=\"rtejustify\"><strong><span dir=\"auto\">I2C \u0130leti\u015fimi nas\u0131l \u00e7al\u0131\u015f\u0131r?<\/span><\/strong><\/h3>\n<p class=\"rtejustify\"><span dir=\"auto\">I2C ileti\u015fimi ilk olarak Phillips taraf\u0131ndan tan\u0131t\u0131ld\u0131. Daha \u00f6nce de belirtildi\u011fi gibi, iki kablosu vard\u0131r ve bu iki kablo iki cihaza ba\u011flan\u0131r. Burada bir cihaz\u00a0<\/span><strong><span dir=\"auto\">ana cihaz<\/span><\/strong><span dir=\"auto\">\u00a0, di\u011fer cihaz ise\u00a0<\/span><strong><span dir=\"auto\">ba\u011f\u0131ml\u0131 cihaz olarak adland\u0131r\u0131l\u0131r. \u0130leti\u015fim her zaman iki\u00a0<\/span><\/strong><strong><span dir=\"auto\">ana cihaz ve bir ba\u011f\u0131ml\u0131 cihaz<\/span><\/strong><span dir=\"auto\">\u00a0aras\u0131nda ger\u00e7ekle\u015fmelidir ve ger\u00e7ekle\u015fecektir\u00a0. I2C ileti\u015fiminin avantaj\u0131, bir ana cihaza birden fazla ba\u011f\u0131ml\u0131 cihaz\u0131n ba\u011flanabilmesidir.<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-323 size-full\" src=\"https:\/\/ta9ea.com\/wp-content\/uploads\/2025\/10\/How-I2C-Communication-works.png\" alt=\"\" width=\"436\" height=\"257\" \/><\/p>\n<p class=\"rtejustify\"><span dir=\"auto\">T\u00fcm ileti\u015fim, Seri Saat (SCL) ve Seri Veri (SDA) olmak \u00fczere iki kablo \u00fczerinden ger\u00e7ekle\u015fir.<\/span><\/p>\n<p class=\"rtejustify\"><strong><span dir=\"auto\">Seri Saat (SCL):<\/span><\/strong><span dir=\"auto\">\u00a0Ana bilgisayar taraf\u0131ndan \u00fcretilen saat sinyalini k\u00f6le ile payla\u015f\u0131r<\/span><\/p>\n<p class=\"rtejustify\"><strong><span dir=\"auto\">Seri Veri (SDA):<\/span><\/strong><span dir=\"auto\">\u00a0Verileri Master ve slave aras\u0131nda g\u00f6nderir ve al\u0131r.<\/span><\/p>\n<p class=\"rtejustify\"><span dir=\"auto\">Herhangi bir anda yaln\u0131zca ana cihaz ileti\u015fimi ba\u015flatabilir. Veriyolunda birden fazla yard\u0131mc\u0131 cihaz oldu\u011fundan, ana cihaz\u0131n her bir yard\u0131mc\u0131 cihaza farkl\u0131 bir adres kullanarak ba\u015fvurmas\u0131 gerekir. Adreslendi\u011finde, yaln\u0131zca o adrese sahip olan yard\u0131mc\u0131 cihaz bilgiyle yan\u0131t verirken, di\u011ferleri ileti\u015fimi kesmeye devam eder. Bu \u015fekilde, ayn\u0131 veri yolunu kullanarak birden fazla cihazla ileti\u015fim kurabiliriz.<\/span><\/p>\n<h3 class=\"rtejustify\"><strong><span dir=\"auto\">I2C haberle\u015fmesi nerelerde kullan\u0131l\u0131r?<\/span><\/strong><\/h3>\n<p class=\"rtejustify\"><strong><span dir=\"auto\">I2C ileti\u015fimi yaln\u0131zca k\u0131sa mesafeli ileti\u015fim<\/span><\/strong><span dir=\"auto\">\u00a0i\u00e7in kullan\u0131l\u0131r\u00a0. Ak\u0131ll\u0131 olmas\u0131n\u0131 sa\u011flayan senkronize bir saat darbesine sahip oldu\u011fundan, bir dereceye kadar g\u00fcvenilirdir. Bu protokol, esas olarak bir ana bilgisayara bilgi g\u00f6ndermesi gereken sens\u00f6rler veya di\u011fer cihazlarla ileti\u015fim kurmak i\u00e7in kullan\u0131l\u0131r. Bir mikrodenetleyicinin en az\u0131ndan birka\u00e7 kablo kullanarak bir\u00e7ok ba\u015fka yard\u0131mc\u0131 mod\u00fclle ileti\u015fim kurmas\u0131 gerekti\u011finde \u00e7ok kullan\u0131\u015fl\u0131d\u0131r. Uzun menzilli bir ileti\u015fim ar\u0131yorsan\u0131z RS232&#8217;yi, daha g\u00fcvenilir bir ileti\u015fim ar\u0131yorsan\u0131z SPI protokol\u00fcn\u00fc denemelisiniz.<\/span><\/p>\n<h3 class=\"rtejustify\"><strong><span dir=\"auto\">XC8 Derleyicisini Kullanarak PIC16F877a ile I2C<\/span><\/strong><\/h3>\n<p class=\"rtejustify\"><span dir=\"auto\">Giri\u015f k\u0131sm\u0131 yeter, \u015fimdi konuya girelim ve bir mikrodenetleyiciyi I2C ileti\u015fimi ger\u00e7ekle\u015ftirmek i\u00e7in nas\u0131l kullanabilece\u011fimizi \u00f6\u011frenelim. Ba\u015flamadan \u00f6nce, bu e\u011fitimin yaln\u0131zca\u00a0<\/span><strong><span dir=\"auto\">XC8 derleyicisi kullan\u0131larak PIC16F877a&#8217;da I2C&#8217;den<\/span><\/strong><span dir=\"auto\">\u00a0bahsetti\u011fini , s\u00fcrecin di\u011fer mikrodenetleyiciler i\u00e7in de ayn\u0131 olaca\u011f\u0131n\u0131, ancak k\u00fc\u00e7\u00fck de\u011fi\u015fiklikler gerekebilece\u011fini unutmay\u0131n. Ayr\u0131ca, PIC18F serisi gibi geli\u015fmi\u015f mikrodenetleyicilerde derleyicinin I2C \u00f6zelliklerini kullanmak i\u00e7in yerle\u015fik bir k\u00fct\u00fcphanesi olabilece\u011fini, ancak PIC16F877A i\u00e7in b\u00f6yle bir \u015fey olmad\u0131\u011f\u0131n\u0131 unutmay\u0131n, bu y\u00fczden kendimiz bir tane olu\u015ftural\u0131m. Burada a\u00e7\u0131klanan k\u00fct\u00fcphane, PIC16F877A&#8217;n\u0131n di\u011fer I2C cihazlar\u0131yla ileti\u015fim kurmas\u0131 i\u00e7in kullan\u0131labilecek bir ba\u015fl\u0131k dosyas\u0131 olarak alt k\u0131s\u0131mda indirilebilir.<\/span><\/p>\n<p class=\"rtejustify\"><span dir=\"auto\">Her zaman oldu\u011fu gibi, herhangi bir \u015feye ba\u015flamak i\u00e7in en iyi yer\u00a0<\/span><a href=\"http:\/\/ww1.microchip.com\/downloads\/en\/DeviceDoc\/39582b.pdf\" target=\"_blank\" rel=\"nofollow noopener\"><span dir=\"auto\">veri<\/span><\/a><span dir=\"auto\">\u00a0sayfam\u0131zd\u0131r . Veri sayfas\u0131nda I2C ile ilgili ayr\u0131nt\u0131lar\u0131 aray\u0131n ve hangi kay\u0131tlar\u0131n yap\u0131land\u0131r\u0131lmas\u0131 gerekti\u011fini kontrol edin. Veri sayfas\u0131 bunu sizin i\u00e7in zaten yapt\u0131\u011f\u0131 i\u00e7in ayr\u0131nt\u0131l\u0131 olarak a\u00e7\u0131klamayaca\u011f\u0131m. A\u015fa\u011f\u0131da, ba\u015fl\u0131k dosyas\u0131nda bulunan farkl\u0131 i\u015flevleri ve programdaki sorumluluklar\u0131n\u0131 a\u00e7\u0131klayaca\u011f\u0131m.<\/span><\/p>\n<p class=\"rtejustify\"><strong><span dir=\"auto\">void I2C_Initialize()<\/span><\/strong><\/p>\n<p class=\"rtejustify\"><span dir=\"auto\">Ba\u015flatma fonksiyonu, mikrodenetleyiciye I2C protokol\u00fcn\u00fc kullanaca\u011f\u0131m\u0131z\u0131 bildirmek i\u00e7in kullan\u0131l\u0131r. Bu, SSPCON ve SSPCON2 kay\u0131tlar\u0131nda gerekli bitleri ayarlayarak yap\u0131labilir. \u0130lk ad\u0131m,\u00a0<\/span><strong><span dir=\"auto\">IIC pinlerini giri\u015f pinleri olarak tan\u0131mlamakt\u0131r<\/span><\/strong><span dir=\"auto\">\u00a0; burada RC3 ve RC4 pinleri I2C ileti\u015fimi i\u00e7in kullan\u0131lmal\u0131d\u0131r, bu y\u00fczden bunlar\u0131 giri\u015f pinleri olarak tan\u0131ml\u0131yoruz. Ard\u0131ndan, MSSP kontrol kay\u0131tlar\u0131 olan SSPCON ve SSPCON2&#8217;yi ayarlamal\u0131y\u0131z.\u00a0<\/span><strong><span dir=\"auto\">PIC&#8217;i FOSC\/(4 * (SSPADD + 1)) saat frekans\u0131yla IIC ana modunda \u00e7al\u0131\u015ft\u0131r\u0131yoruz<\/span><\/strong><span dir=\"auto\">\u00a0. Bu belirli kayd\u0131n neden bu \u015fekilde ayarland\u0131\u011f\u0131n\u0131 anlamak i\u00e7in a\u015fa\u011f\u0131daki yorum sat\u0131rlar\u0131nda belirtilen veri sayfas\u0131n\u0131n sayfa numaralar\u0131na bak\u0131n.<\/span><\/p>\n<p class=\"rtejustify\"><span dir=\"auto\">\u015eimdi s\u0131rada\u00a0<\/span><strong><span dir=\"auto\">saat frekans\u0131n\u0131 ayarlamam\u0131z gerekiyor<\/span><\/strong><span dir=\"auto\">\u00a0, farkl\u0131 uygulamalar i\u00e7in saat frekans\u0131 de\u011fi\u015febilir, bu nedenle kullan\u0131c\u0131dan\u00a0<\/span><em><span dir=\"auto\">feq_k<\/span><\/em><span dir=\"auto\">\u00a0de\u011fi\u015fkeni arac\u0131l\u0131\u011f\u0131yla se\u00e7im yapma hakk\u0131 al\u0131yoruz ve bunu form\u00fcllerimizde SSPADD kayd\u0131n\u0131 ayarlamak i\u00e7in kullan\u0131yoruz.<\/span><\/p>\n<pre class=\"lang:default decode:true \">void I2C_Initialize(const unsigned long feq_K) \/\/IIC'yi ana olarak ba\u015flat \n{ \n  TRISC3 = 1; TRISC4 = 1; \/\/SDA ve SCL pinlerini giri\u015f pinleri olarak ayarla\n\n  SSPCON = 0b00101000; \/\/sayfa 84\/234 \n  SSPCON2 = 0b00000000; \/\/sayfa 85\/234\n\n  SSPADD = (_XTAL_FREQ\/(4*feq_K*100))-1; \/\/Saat H\u0131z\u0131n\u0131 Ayarlama pg99\/234 \n  SSPSTAT = 0b00000000; \/\/pg83\/234 \n}<\/pre>\n<p class=\"rtejustify\"><strong><span dir=\"auto\">Bo\u015f I2C_Hold()<\/span><\/strong><\/p>\n<p class=\"rtejustify\"><span dir=\"auto\">Bir sonraki \u00f6nemli i\u015flev,\u00a0<strong>mevcut I2C i\u015flemi tamamlanana kadar cihaz\u0131n y\u00fcr\u00fct\u00fclmesini bekletmek i\u00e7in<\/strong>\u00a0kullan\u0131lan\u00a0<\/span><em><span dir=\"auto\">I2C_hold<\/span><\/em><span dir=\"auto\">\u00a0i\u015flevidir . Herhangi bir yeni i\u015flem ba\u015flatmadan \u00f6nce I2C i\u015flemlerinin durdurulup durdurulmamas\u0131 gerekti\u011fini kontrol etmemiz gerekir. Bu, SSPSTAT ve SSPCON2 kay\u0131tlar\u0131n\u0131 kontrol ederek yap\u0131labilir. SSPSTAT, I2C veri yolunun durumu hakk\u0131nda bilgi i\u00e7erir.<\/span><\/p>\n<p class=\"rtejustify\"><span dir=\"auto\">Program, bir &#8220;ve&#8221; ve bir &#8220;veya&#8221; operat\u00f6r\u00fc i\u00e7erdi\u011finden biraz karma\u015f\u0131k g\u00f6r\u00fcnebilir. Bunu \u015fu \u015fekilde par\u00e7alara ay\u0131rd\u0131\u011f\u0131n\u0131zda:<\/span><\/p>\n<pre class=\"lang:default decode:true \">SSPSTAT ve 0b00000100 \nSSPCON2 ve 0b00011111<\/pre>\n<p><span dir=\"auto\">Bu,\u00a0<strong>SSPSTAT&#8217;taki\u00a0<\/strong><strong><sup>2.<\/sup><\/strong><\/span><strong><span dir=\"auto\">\u00a0bitin s\u0131f\u0131r oldu\u011fundan ve benzer \u015fekilde SSPCON2&#8217;deki 0 ile 4 aras\u0131ndaki bitlerin s\u0131f\u0131r oldu\u011fundan emin oldu\u011fumuz anlam\u0131na gelir. Ard\u0131ndan, sonucun s\u0131f\u0131r oldu\u011funu kontrol etmek i\u00e7in t\u00fcm bunlar\u0131 birle\u015ftiririz. Sonu\u00e7 s\u0131f\u0131rsa program devam eder, de\u011filse\u00a0<\/span><\/strong><em><span dir=\"auto\">, while<\/span><\/em><span dir=\"auto\">\u00a0d\u00f6ng\u00fcs\u00fcnde kullan\u0131ld\u0131\u011f\u0131 i\u00e7in s\u0131f\u0131r olana kadar orada kal\u0131r\u00a0.<\/span><\/p>\n<pre class=\"lang:default decode:true \">void I2C_Hold() \n{ \n    while ( (SSPCON2 &amp; 0b00011111) || (SSPSTAT &amp; 0b00000100) ) ; \/\/IIC'nin devam etmedi\u011finden emin olmak i\u00e7in kay\u0131tlardaki this'i kontrol edin \n}<\/pre>\n<p class=\"rtejustify\"><strong><span dir=\"auto\">Bo\u015f I2C_Begin() ve bo\u015f I2C_End()<\/span><\/strong><\/p>\n<p class=\"rtejustify\"><span dir=\"auto\">I2C veri yolunu kullanarak herhangi bir veri yazarken veya okurken,\u00a0<\/span><strong><span dir=\"auto\">I2C ba\u011flant\u0131s\u0131n\u0131 ba\u015flatmal\u0131 ve sonland\u0131rmal\u0131y\u0131z<\/span><\/strong><span dir=\"auto\">\u00a0. Bir I2C ileti\u015fimi ba\u015flatmak i\u00e7in SEN bitini, ileti\u015fimi sonland\u0131rmak i\u00e7in ise PEN durum bitini ayarlamal\u0131y\u0131z. Bu bitlerden herhangi birini de\u011fi\u015ftirmeden \u00f6nce, yukar\u0131da a\u00e7\u0131kland\u0131\u011f\u0131 gibi I2C_Hold i\u015flevini kullanarak I2C veri yolunun me\u015fgul olup olmad\u0131\u011f\u0131n\u0131 da kontrol etmeliyiz.<\/span><\/p>\n<pre class=\"lang:default decode:true \">void I2C_Begin() \n{ \n  I2C_Hold(); \/\/I2C me\u015fgul oldu\u011funda program\u0131 beklet \n  SEN = 1; \/\/IIC pg85\/234'\u00fc ba\u015flat \n} \nvoid I2C_End() \n{ \n  I2C_Hold(); \/\/I2C me\u015fgul oldu\u011funda program\u0131 beklet \n  PEN = 1; \/\/IIC pg85\/234'\u00fc bitir \n}<\/pre>\n<p class=\"rtejustify\"><strong><span dir=\"auto\">Bo\u015f I2C_Write()<\/span><\/strong><\/p>\n<p class=\"rtejustify\"><strong><span dir=\"auto\">Yazma i\u015flevi, ana mod\u00fclden yedek mod\u00fcle herhangi bir veri g\u00f6ndermek<\/span><\/strong><span dir=\"auto\">\u00a0i\u00e7in kullan\u0131l\u0131r\u00a0. Bu i\u015flev genellikle bir I2C ba\u015flang\u0131\u00e7 \u200b\u200bi\u015flevinden sonra kullan\u0131l\u0131r ve ard\u0131ndan bir I2C biti\u015f i\u015flevi gelir. IIC veri yoluna yaz\u0131lmas\u0131 gereken veriler, de\u011fi\u015fken veri \u00fczerinden iletilir. Bu veriler daha sonra I2C veri yolu \u00fczerinden g\u00f6nderilmek \u00fczere SSPBUF tampon kayd\u0131na y\u00fcklenir.<\/span><\/p>\n<p class=\"rtejustify\"><span dir=\"auto\">Normalde bir veriyi yazmadan \u00f6nce bir adres yaz\u0131laca\u011f\u0131ndan yazma fonksiyonunu iki kez kullanman\u0131z gerekir; bir kez adresi ayarlamak i\u00e7in, bir kez de ger\u00e7ek veriyi g\u00f6ndermek i\u00e7in.<\/span><\/p>\n<pre class=\"rtejustify\"><strong><span dir=\"auto\">void I2C_Write(unsigned data) <\/span><\/strong>\n<strong><span dir=\"auto\">{ <\/span><\/strong>\n<strong><span dir=\"auto\">  I2C_Hold(); \/\/I2C me\u015fgul oldu\u011funda program\u0131 tut <\/span><\/strong>\n<strong><span dir=\"auto\">  SSPBUF = data; \/\/pg82\/234 <\/span><\/strong>\n<strong><span dir=\"auto\">}<\/span><\/strong><\/pre>\n<p class=\"rtejustify\"><strong><span dir=\"auto\">imzas\u0131z k\u0131sa I2C_Read()<\/span><\/strong><\/p>\n<p class=\"rtejustify\"><span dir=\"auto\">Bilmemiz gereken son fonksiyon\u00a0<\/span><em><span dir=\"auto\">I2C_Read<\/span><\/em><span dir=\"auto\">\u00a0fonksiyonudur. Bu fonksiyon, I2C veri yolundaki mevcut verileri okumak i\u00e7in kullan\u0131l\u0131r. Bir slave&#8217;den veri yoluna bir de\u011fer yazmas\u0131n\u0131 istedikten sonra kullan\u0131l\u0131r. Al\u0131nan de\u011fer SSPBUF&#8217;ta olacakt\u0131r ve\u00a0<\/span><em><span dir=\"auto\">bu<\/span><\/em><span dir=\"auto\">\u00a0de\u011feri i\u015flemimiz i\u00e7in herhangi bir de\u011fi\u015fkene aktarabiliriz.<\/span><\/p>\n<p class=\"rtejustify\"><span dir=\"auto\">Bir I2C ileti\u015fimi s\u0131ras\u0131nda, k\u00f6le, ana cihaz taraf\u0131ndan talep edilen verileri g\u00f6nderdikten sonra, onay biti olan ba\u015fka bir bit g\u00f6nderir. Bu bit, ana cihaz taraf\u0131ndan ileti\u015fimin ba\u015far\u0131l\u0131 oldu\u011fundan emin olmak i\u00e7in kontrol edilmelidir. Onay i\u00e7in ACKDT biti kontrol edildikten sonra, ACKEN biti ayarlanarak etkinle\u015ftirilmelidir.<\/span><\/p>\n<pre class=\"lang:default decode:true \">unsigned short I2C_Read(unsigned short ack)\n{\n  unsigned short incoming;\n  I2C_Hold();\n  RCEN = 1;\n\n  I2C_Hold();\n  incoming = SSPBUF;      \/\/get the data saved in SSPBUF\n\n  I2C_Hold();\n  ACKDT = (ack)?0:1;    \/\/check if ack bit received \n  ACKEN = 1;          \/\/pg 85\/234\n\n  return incoming;\n}<\/pre>\n<p class=\"rtejustify\"><span dir=\"auto\">\u0130\u015fte bu kadar, bu i\u015flevler bir I2C ileti\u015fimi kurmak ve bir cihazdan veri yazmak veya okumak i\u00e7in yeterli olmal\u0131d\u0131r. Ayr\u0131ca, I2C ileti\u015fiminin ger\u00e7ekle\u015ftirebilece\u011fi ba\u015fka bir\u00e7ok i\u015flev oldu\u011funu da unutmay\u0131n, ancak basitlik ad\u0131na bunlar\u0131 burada ele alm\u0131yoruz. Cihaz\u0131n t\u00fcm \u00e7al\u0131\u015fma prensibini \u00f6\u011frenmek i\u00e7in veri sayfas\u0131na bakabilirsiniz.<\/span><\/p>\n<p class=\"rtejustify\">\n","protected":false},"excerpt":{"rendered":"<p>PIC Mikrodenetleyiciler, Microchip taraf\u0131ndan g\u00f6m\u00fcl\u00fc projeler i\u00e7in sa\u011flanan g\u00fc\u00e7l\u00fc bir platformdur. \u00c7ok y\u00f6nl\u00fc yap\u0131s\u0131 sayesinde bir\u00e7ok uygulamaya girmi\u015ftir ve bu a\u015fama hala devam etmektedir.\u00a0PIC e\u011fitimlerimizi\u00a0takip [&#8230;]<\/p>\n","protected":false},"author":1,"featured_media":324,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-322","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-genel"],"_links":{"self":[{"href":"https:\/\/ta9ea.com\/index.php?rest_route=\/wp\/v2\/posts\/322","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ta9ea.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/ta9ea.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/ta9ea.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/ta9ea.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=322"}],"version-history":[{"count":0,"href":"https:\/\/ta9ea.com\/index.php?rest_route=\/wp\/v2\/posts\/322\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/ta9ea.com\/index.php?rest_route=\/"}],"wp:attachment":[{"href":"https:\/\/ta9ea.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=322"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ta9ea.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=322"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ta9ea.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=322"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}