{"id":565,"date":"2016-06-26T19:29:03","date_gmt":"2016-06-26T16:29:03","guid":{"rendered":"http:\/\/ozenozkaya.com\/blog\/?p=565"},"modified":"2016-06-26T19:29:03","modified_gmt":"2016-06-26T16:29:03","slug":"pic-programlama-11-usart","status":"publish","type":"post","link":"http:\/\/ozenozkaya.com\/blog\/?p=565","title":{"rendered":"PIC Programlama \u2013 11 \u2013 USART"},"content":{"rendered":"<p>Merhabalar,<\/p>\n<p>\u00d6nceki yaz\u0131 ile birlikte, bir mikrokontrol\u00f6re nas\u0131l SDK geli\u015ftirebilece\u011fimizi ve PIC16F84A&#8217;n\u0131n t\u00fcm mod\u00fcllerini detayl\u0131ca incelemi\u015ftik. Her iki ba\u015fl\u0131k i\u00e7in de gerekli mesajlar\u0131n verildi\u011fi, gerekli bilgilerin aktar\u0131ld\u0131\u011f\u0131 d\u00fc\u015f\u00fcncesi ile PIC yaz\u0131lar\u0131n\u0131n seyrini biraz daha de\u011fi\u015ftiriyorum.<\/p>\n<p>PIC programlama yaz\u0131 dizisinin bu b\u00f6l\u00fcm\u00fcnde, \u015fu zamana kadar incelemedi\u011fimiz, ancak g\u00f6m\u00fcl\u00fc sistemler d\u00fcnyas\u0131n\u0131n adeta kolonlar\u0131\/kiri\u015fleri olan temel mod\u00fclleri inceleyece\u011fiz. Bunlar\u0131n ba\u015f\u0131nda da <a href=\"https:\/\/en.wikipedia.org\/wiki\/Universal_asynchronous_receiver\/transmitter\">USART <\/a>mod\u00fcl\u00fc geliyor. PIC16F84A&#8217;da ne yaz\u0131k ki USART mod\u00fcl\u00fc bulunmuyor. Bu sebeple PIC16F877A \u00fczerinden devam edece\u011fiz \ud83d\ude42 Bu defa, PIC16F877A i\u00e7in de ayr\u0131ca bir k\u00fct\u00fcphane yazmak yerine, mecvut k\u00fct\u00fcphaneleri kullanarak uygulama yapaca\u011f\u0131z. K\u00fct\u00fcphane geli\u015ftirme ile ilgili bilgileri \u00f6nceki yaz\u0131larda yeterince i\u015flemi\u015f oldu\u011fumuzdan, bu yola girmekte art\u0131k bir sak\u0131nca g\u00f6rm\u00fcyorum. Dileyen azimli arkada\u015flar, PIC16F877A i\u00e7in de k\u00fct\u00fcphane yazabilirler.<\/p>\n<p>\u015eimdi gelelim her zamanki gibi USART&#8217;a bir girizgah yapmaya. Ancak \u00f6ncesinde irdelememiz gereken bir ba\u015fka \u00f6nemli kavram var&#8230;<\/p>\n<p><strong>Haberle\u015fme\u00a0<\/strong><\/p>\n<p>Bir bilgiyi, bir kaynaktan ba\u015fka bir hedefe aktarmak o bilgili veriye d\u00f6n\u00fc\u015ft\u00fcr\u00fcp; veriyi kaynaktan hedefe aktaracak bir haberle\u015fme hatt\u0131 kurmakla m\u00fcmk\u00fcnd\u00fcr. \u00c7ok derinden girdi\u011fimiz bu hususu bir \u00f6rnekle irdeleyelim. Ali adl\u0131 arkada\u015f\u0131m\u0131z, o anki \u015fa\u015fk\u0131nl\u0131\u011f\u0131n\u0131 ifade eden &#8216;A&#8217; sesini, Veli&#8217;ye duyurmak istedi\u011finde haberle\u015fme s\u00fcreci nas\u0131l olu\u015fur?<\/p>\n<p>\u015ea\u015fk\u0131nl\u0131k bilgisi bu \u015femada &#8216;A&#8217; sesi ile kodlanm\u0131\u015ft\u0131r. Bu bilgi, havay\u0131 belli frekansta titre\u015ftiren ve Ali&#8217;nin a\u011fz\u0131ndan gelen &#8216;A&#8217; sesi vas\u0131tas\u0131 ile havada ilerler ve Veli&#8217;nin kula\u011f\u0131nda olu\u015fan titre\u015fimlerin alg\u0131lanmas\u0131 ile Veli&#8217;ye bu veri aktar\u0131l\u0131r. Ard\u0131ndan Veli&#8217;nin beyni bu veriyi tekrardan bilgiye d\u00f6n\u00fc\u015ft\u00fcrerek &#8216;A&#8217; sesini alg\u0131lar ve Veli; Ali&#8217;nin \u015fa\u015f\u0131rd\u0131\u011f\u0131n\u0131 alg\u0131lam\u0131\u015f olur. Bu \u015femada kaynak Ali, hedef Veli, haberle\u015fme kanal\u0131 hava, bilgi \u015fa\u015fk\u0131nl\u0131k, veri ise &#8216;A&#8217; sesi olmaktad\u0131r. Haberle\u015fme ses vas\u0131tasyla da ta\u015f\u0131nsa, elektriksel olarak da ta\u015f\u0131nsa bu \u015fema de\u011fi\u015fmez. Bilgi, veri ve haberle\u015fme kaynaklar\u0131n\u0131 a\u00e7\u0131klad\u0131\u011f\u0131m\u0131z bu \u00f6rnek \u00e7ok saf ve naif g\u00f6r\u00fcnse de, kompleksle\u015fen haberle\u015fme sistemlerinde temelleri hat\u0131rlamak ve bu ger\u00e7ekliklerin fark\u0131nda olmak hayat kurtarmaktad\u0131r.<\/p>\n<p>Bilginin veriye d\u00f6n\u00fc\u015f\u00fcm\u00fc, bu yaz\u0131n\u0131n odak noktas\u0131 olmad\u0131\u011f\u0131ndan; biz verinin aktar\u0131m\u0131 \u00fczerine yo\u011funla\u015faca\u011f\u0131z.Peki tek bir veriyi\u00a0de\u011fil de, birden fazla veriyi\u00a0g\u00f6ndermek istedi\u011fimizde ne yapaca\u011f\u0131z?<\/p>\n<p><strong>Paralel ve Seri Haberle\u015fme<\/strong><\/p>\n<p>Yukar\u0131daki \u00f6rnekte Ali&#8217;nin biraz daha konu\u015fkan biri oldu\u011funu d\u00fc\u015f\u00fcnelim. Ali, Veli&#8217;ye &#8220;Selam Veli&#8221; dedi\u011finde sesler ard\u0131\u015f\u0131l olarak; yani pe\u015fi s\u0131ra olarak Veli&#8217;ye gider. Yani Ali s\u0131ras\u0131yla \u00f6nce &#8216;S&#8217;,&#8217;e&#8217;,&#8217;l&#8217;,&#8217;a&#8217;,&#8217;m&#8217; der biraz bekler, ard\u0131ndan s\u0131ras\u0131yla &#8216;V&#8217;,&#8217;e&#8217;,&#8217;l&#8217;,&#8217;i&#8217; harflerini pe\u015fis\u0131ra s\u00f6yler. Veli de bu sesleri -k\u0131sa bir gecikmeden sonra- ayn\u0131 s\u0131ra ile duyar. \u0130\u015fte bu \u015fekilde ard\u0131-s\u0131ra veri aktar\u0131m\u0131 olan haberle\u015fme \u015femalar\u0131, seri haberle\u015fme \u015femalar\u0131 olarak adland\u0131r\u0131l\u0131r. \u00d6zellikle, tek haberle\u015fme kanal\u0131n\u0131n bulundu\u011fu durumlarda, bu haberle\u015fme y\u00f6ntemi kullan\u0131l\u0131r. Seri haberle\u015fmede yaln\u0131zca tek kanal kullan\u0131l\u0131r, ancak t\u00fcm veri s\u0131ras\u0131yla g\u00f6nderildi\u011finden t\u00fcm verinin aktar\u0131m\u0131 zaman al\u0131r.<\/p>\n<p>Paralel haberle\u015fmede ise veri, -ad\u0131 \u00fczerinde- paralel olarak g\u00f6nderilir. 8 hoparl\u00f6r\u00fc\u00a0olan bir cihaz, 8 mikrofonu olan bir cihaza &#8216;Selamlar&#8217; mesaj\u0131n\u0131 paralel olarak iletmek isterse (her bir hoparl\u00f6r\u00fc sadece 1 mikrofonun duyabildi\u011fini varsayarsak) 1. hoparl\u00f6r &#8216;S&#8217; sesini, 2. hoparl\u00f6r &#8216;e&#8217; sesini, &#8230; , 8. hoparl\u00f6r &#8216;r&#8217; sesini ayn\u0131 anda \u00e7\u0131kart\u0131r. Kar\u015f\u0131 tarafta da bu sesler mikrofonlardan ayn\u0131 kar\u015f\u0131l\u0131kla ayn\u0131 anda alg\u0131lan\u0131rsa; t\u00fcm sesler paralel olarak g\u00f6nderildi\u011finden bu haberle\u015fme ad\u0131 \u00fczerinde &#8220;paralel haberle\u015fme&#8221; olur. Paralel haberle\u015fme, birden fazla haberle\u015fme kanal\u0131 gerektirir ancak bilgi daha k\u0131sa s\u00fcrede aktar\u0131l\u0131r.<\/p>\n<p>Ayn\u0131 konseptler elektriksel olarak da ge\u00e7erlidir. Yani ses yerine bitleri inceleyecek olursak, a\u015fa\u011f\u0131daki gibi bir g\u00f6sterim yapmam\u0131z yanl\u0131\u015f olmaz. [Resim\u00a0<a href=\"https:\/\/en.wikipedia.org\/wiki\/Parallel_communication\">Wikipedia sayfas\u0131ndan<\/a> al\u0131nm\u0131\u015ft\u0131r.]\n<p><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" data-attachment-id=\"566\" data-permalink=\"http:\/\/ozenozkaya.com\/blog\/?attachment_id=566\" data-orig-file=\"https:\/\/i0.wp.com\/ozenozkaya.com\/blog\/wp-content\/uploads\/Parallel_and_Serial_Transmission.gif?fit=300%2C321\" data-orig-size=\"300,321\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"Parallel_and_Serial_Transmission\" data-image-description=\"\" data-image-caption=\"\" data-medium-file=\"https:\/\/i0.wp.com\/ozenozkaya.com\/blog\/wp-content\/uploads\/Parallel_and_Serial_Transmission.gif?fit=280%2C300\" data-large-file=\"https:\/\/i0.wp.com\/ozenozkaya.com\/blog\/wp-content\/uploads\/Parallel_and_Serial_Transmission.gif?fit=300%2C321\" class=\"alignnone size-full wp-image-566\" src=\"https:\/\/i0.wp.com\/ozenozkaya.com\/blog\/wp-content\/uploads\/Parallel_and_Serial_Transmission.gif?resize=300%2C321\" alt=\"\" width=\"300\" height=\"321\" \/><\/p>\n<p>G\u00fczel.. \u015eimdi d\u00f6nelim konumuza. USART dedi\u011fimiz nane, bir seri haberle\u015fme algoritmas\u0131 olup; s\u0131k\u00e7a kullan\u0131lmaktad\u0131r. \u00d6zellikle &#8220;tracing&#8221;,&#8221;serial logging&#8221; gibi i\u015fler i\u00e7in; s\u0131kl\u0131kla USART kullan\u0131l\u0131r. Ayr\u0131ca USART ile haberle\u015fen \u00e7ok say\u0131da sens\u00f6r vb. elektronik ekipman bulunmaktad\u0131r.<\/p>\n<p><strong>PIC16F877A ve USART<\/strong><\/p>\n<p>\u015eimdi gelelim PIC16F877A ile USART haberle\u015fmesi yapacak kodu yazmaya&#8230; Bunun i\u00e7in olduk\u00e7a basit bir \u00f6rnek yapaca\u011f\u0131z. \u0130lk hedefimiz, USART \u00fczerinden &#8220;Merhaba\u00a0d\u00fcnya!&#8221; yaz\u0131s\u0131n\u0131 g\u00f6nderecek bir kod yazmak. Bunu, Microchip&#8217;in en yeni k\u00fct\u00fcphanesi olan; xc k\u00fct\u00fcphanesini kullanarak yapaca\u011f\u0131z. Unutmay\u0131n\u0131z ki, xc k\u00fct\u00fcphanesini kullanabilmek i\u00e7in <a href=\"http:\/\/www.microchip.com\/mplabxc8windows\">XC8 <\/a>derleyicisini y\u00fcklemeniz gerekmekte.<\/p>\n<pre class=\"lang:c decode:true\">\/* \r\n * File:   main.c\r\n * Author: ozenozkaya\r\n *\r\n * Created on 26 Haziran 2016 Pazar, 18:10\r\n *\/\r\n\r\n#include &lt;stdio.h&gt;\r\n#include &lt;stdlib.h&gt;\r\n#include &lt;xc.h&gt;\r\n\r\n#define _XTAL_FREQ 4000000\r\n\r\nvoid UART_Initialize()\r\n{\r\n    TRISC = 0b10000000;\r\n    TXSTA=0b00100100;\r\n    RCSTA=0b10010000;\r\n    SPBRG=25;\r\n    TXREG=0x00;\r\n}\r\n\r\nvoid UART_Write(char data)\r\n{\r\n  while(!TRMT);\r\n  TXREG = data;\r\n}\r\n\r\nvoid UART_Write_Text(char *text)\r\n{\r\n  int i;\r\n  for(i=0;text[i]!='\\0';i++)\r\n    UART_Write(text[i]);\r\n}\r\n\r\nint main() {\r\n    UART_Initialize();\r\n    while(1)\r\n    {\r\n        UART_Write_Text(\"Merhaba dunya!\\r\\n\");\r\n        __delay_ms(1000);\r\n    }\r\n    return (EXIT_SUCCESS);\r\n}\r\n\r\n<\/pre>\n<p>USART haberle\u015fmesi seri bir haberle\u015fme oldu\u011fundan, verilerin\u00a0ard\u0131 s\u0131ra g\u00f6nderilimindeki zamanlama \u00e7ok \u00f6nemlidir. Bu sebeple, kodumuza PIC16F877A&#8217;n\u0131n kristal osilat\u00f6r fraksns\u0131n\u0131 a\u015fa\u011f\u0131daki gibi giriyoruz.<\/p>\n<pre class=\"lang:default decode:true \">#define _XTAL_FREQ 4000000<\/pre>\n<p>\u00d6ncelikli olarak UART_Intialize fonksiyonunu incelemeye ba\u015flayal\u0131m. PIC16F877A&#8217;n\u0131n C portunun 6. pini USART_TX (transmit, veri g\u00f6nderme), 7. pini ise USART_RX (receive, veri alma) pini oldu\u011fundan, 6. pini \u00e7\u0131k\u0131\u015f, 7. pini giri\u015f olarak konfigure ediyoruz. Buna ili\u015fkin kod a\u015fa\u011f\u0131da yer al\u0131yor:<\/p>\n<pre class=\"lang:default decode:true \">TRISC = 0b10000000;<\/pre>\n<p>Ard\u0131ndan mod\u00fcl\u00fcm\u00fcz\u00fc konfig\u00fcre edece\u011fiz. Buna g\u00f6re datasheet&#8217;e bakt\u0131\u011f\u0131m\u0131zda konfig\u00fcre etmemiz gereken k\u00fct\u00fcklerin TXSTA, RCSTA, SPBRG k\u00fct\u00fckleri oldu\u011funu g\u00f6r\u00fcyoruz. Veri g\u00f6ndermek i\u00e7in ise TXREG k\u00fct\u00fc\u011f\u00fcne ihtiya\u00e7 duyaca\u011f\u0131z. Veri ka\u011f\u0131d\u0131ndan s\u0131ras\u0131 ile bu k\u00fct\u00fcklerle ilgli bilgilere bak\u0131p, konfig\u00fcrasyonumuzu yapal\u0131m \ud83d\ude42<\/p>\n<p><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" data-attachment-id=\"571\" data-permalink=\"http:\/\/ozenozkaya.com\/blog\/?attachment_id=571\" data-orig-file=\"https:\/\/i0.wp.com\/ozenozkaya.com\/blog\/wp-content\/uploads\/TXSTA.png?fit=649%2C563\" data-orig-size=\"649,563\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"TXSTA\" data-image-description=\"\" data-image-caption=\"\" data-medium-file=\"https:\/\/i0.wp.com\/ozenozkaya.com\/blog\/wp-content\/uploads\/TXSTA.png?fit=300%2C260\" data-large-file=\"https:\/\/i0.wp.com\/ozenozkaya.com\/blog\/wp-content\/uploads\/TXSTA.png?fit=640%2C555\" class=\"alignnone size-full wp-image-571\" src=\"https:\/\/i0.wp.com\/ozenozkaya.com\/blog\/wp-content\/uploads\/TXSTA.png?resize=640%2C555\" alt=\"\" width=\"640\" height=\"555\" srcset=\"https:\/\/i0.wp.com\/ozenozkaya.com\/blog\/wp-content\/uploads\/TXSTA.png?w=649 649w, https:\/\/i0.wp.com\/ozenozkaya.com\/blog\/wp-content\/uploads\/TXSTA.png?resize=300%2C260 300w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><\/p>\n<pre class=\"lang:c decode:true\">    TXSTA=0b00100100;\r\n<\/pre>\n<p>Buna g\u00f6re SYNC=0 (Asenkron mod), BRGH = 1 (Y\u00fcksek h\u0131zl\u0131 mod), TXEN=1 (Veri g\u00f6nderimi aktive edildi, izin verildi), TX9=0 (8 bit veri aktar\u0131m\u0131 modu) \u015feklinde konfig\u00fcrasyon yapt\u0131\u011f\u0131m\u0131z g\u00f6z\u00fck\u00fcyor \ud83d\ude42<\/p>\n<p>\u015eimdi hemen di\u011fer bir \u00f6nemli k\u00fct\u00fc\u011f\u00fcm\u00fcz olan RCSTA&#8217;ya bakal\u0131m.<\/p>\n<p><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" data-attachment-id=\"572\" data-permalink=\"http:\/\/ozenozkaya.com\/blog\/?attachment_id=572\" data-orig-file=\"https:\/\/i0.wp.com\/ozenozkaya.com\/blog\/wp-content\/uploads\/RXSTA.png?fit=649%2C669\" data-orig-size=\"649,669\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"RXSTA\" data-image-description=\"\" data-image-caption=\"\" data-medium-file=\"https:\/\/i0.wp.com\/ozenozkaya.com\/blog\/wp-content\/uploads\/RXSTA.png?fit=291%2C300\" data-large-file=\"https:\/\/i0.wp.com\/ozenozkaya.com\/blog\/wp-content\/uploads\/RXSTA.png?fit=640%2C660\" class=\"alignnone size-full wp-image-572\" src=\"https:\/\/i0.wp.com\/ozenozkaya.com\/blog\/wp-content\/uploads\/RXSTA.png?resize=640%2C660\" alt=\"\" width=\"640\" height=\"660\" srcset=\"https:\/\/i0.wp.com\/ozenozkaya.com\/blog\/wp-content\/uploads\/RXSTA.png?w=649 649w, https:\/\/i0.wp.com\/ozenozkaya.com\/blog\/wp-content\/uploads\/RXSTA.png?resize=291%2C300 291w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><\/p>\n<pre class=\"lang:c decode:true\">    RCSTA=0b10010000;<\/pre>\n<p>Buna g\u00f6re RX9=0 (8 bit mod), ADDEN= 0\u00a0(9. bit parity biti olarak kullan\u0131ls\u0131n), CREN=1 (S\u00fcrekli veri al\u0131m\u0131 aktive edildi, izin verildi), SPEN=1 (Seri port aktive edildi) \u015feklinde konfig\u00fcrasyon yapt\u0131\u011f\u0131m\u0131z g\u00f6z\u00fck\u00fcyor \ud83d\ude42<\/p>\n<p>Seri haberle\u015fmemizi 9600 baudrate&#8217;te yapmak istiyoruz. Buna g\u00f6re SPBRG k\u00fct\u00fc\u011f\u00fcne yazmam\u0131z gereken de\u011feri, PIC16F877A&#8217;n\u0131n datasheet d\u00f6k\u00fcman\u0131ndan buluyoruz. \u00a0Buna g\u00f6re, veri ka\u011f\u0131d\u0131n\u0131n a\u015fa\u011f\u0131daki k\u0131sm\u0131ndan da g\u00f6r\u00fclebildi\u011fi \u00fczere BRGH bitinin durumuna g\u00f6re hesaplamalar de\u011fi\u015fiyor. Biz BRGH=1 olacak \u015fekilde konfig\u00fcre etmi\u015ftik.<\/p>\n<p><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" data-attachment-id=\"573\" data-permalink=\"http:\/\/ozenozkaya.com\/blog\/?attachment_id=573\" data-orig-file=\"https:\/\/i0.wp.com\/ozenozkaya.com\/blog\/wp-content\/uploads\/SPBRG.png?fit=688%2C585\" data-orig-size=\"688,585\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"SPBRG\" data-image-description=\"\" data-image-caption=\"\" data-medium-file=\"https:\/\/i0.wp.com\/ozenozkaya.com\/blog\/wp-content\/uploads\/SPBRG.png?fit=300%2C255\" data-large-file=\"https:\/\/i0.wp.com\/ozenozkaya.com\/blog\/wp-content\/uploads\/SPBRG.png?fit=640%2C544\" class=\"alignnone size-full wp-image-573\" src=\"https:\/\/i0.wp.com\/ozenozkaya.com\/blog\/wp-content\/uploads\/SPBRG.png?resize=640%2C544\" alt=\"\" width=\"640\" height=\"544\" srcset=\"https:\/\/i0.wp.com\/ozenozkaya.com\/blog\/wp-content\/uploads\/SPBRG.png?w=688 688w, https:\/\/i0.wp.com\/ozenozkaya.com\/blog\/wp-content\/uploads\/SPBRG.png?resize=300%2C255 300w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><\/p>\n<p>Bir di\u011fer \u00f6nemli tablo da, BRGH se\u00e7im tablosu. Veri ka\u011f\u0131d\u0131ndan ald\u0131\u011f\u0131m tablolar ise a\u015fa\u011f\u0131daki gibi:<\/p>\n<p><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" data-attachment-id=\"574\" data-permalink=\"http:\/\/ozenozkaya.com\/blog\/?attachment_id=574\" data-orig-file=\"https:\/\/i0.wp.com\/ozenozkaya.com\/blog\/wp-content\/uploads\/PIC16F877A_BaudrateTable.png?fit=597%2C885\" data-orig-size=\"597,885\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"PIC16F877A_BaudrateTable\" data-image-description=\"\" data-image-caption=\"\" data-medium-file=\"https:\/\/i0.wp.com\/ozenozkaya.com\/blog\/wp-content\/uploads\/PIC16F877A_BaudrateTable.png?fit=202%2C300\" data-large-file=\"https:\/\/i0.wp.com\/ozenozkaya.com\/blog\/wp-content\/uploads\/PIC16F877A_BaudrateTable.png?fit=597%2C885\" class=\"alignnone size-full wp-image-574\" src=\"https:\/\/i0.wp.com\/ozenozkaya.com\/blog\/wp-content\/uploads\/PIC16F877A_BaudrateTable.png?resize=597%2C885\" alt=\"\" width=\"597\" height=\"885\" srcset=\"https:\/\/i0.wp.com\/ozenozkaya.com\/blog\/wp-content\/uploads\/PIC16F877A_BaudrateTable.png?w=597 597w, https:\/\/i0.wp.com\/ozenozkaya.com\/blog\/wp-content\/uploads\/PIC16F877A_BaudrateTable.png?resize=202%2C300 202w\" sizes=\"auto, (max-width: 597px) 100vw, 597px\" \/><\/p>\n<p>Yukar\u0131daki tablonun alt k\u0131sm\u0131n\u0131 kullanca\u011f\u0131z, \u00e7\u00fcnk\u00fc BRGH=1 olarak konfig\u00fcre etmi\u015ftik. Kullanaca\u011f\u0131m\u0131z osilat\u00f6r frekans\u0131 4MHz oldu\u011funda ve istedi\u011fimiz Baudrate (veri aktar\u0131m h\u0131z\u0131) 9600 baud = 9.6K baud oldu\u011fundan, SPBRG de\u011ferinizin 25 olmas\u0131 gerekti\u011fi tablodan g\u00f6r\u00fclebiliyor. Biz de bu sebeple a\u015fa\u011f\u0131daki konfig\u00fcrasyonu yapt\u0131k:<\/p>\n<pre class=\"lang:c decode:true\">SPBRG=25;\r\n<\/pre>\n<p>Art\u0131k USART mod\u00fcl\u00fcm\u00fcz\u00fc konfig\u00fcre etti\u011fimizden, veri g\u00f6nderme k\u0131sm\u0131na ge\u00e7elim. Veri g\u00f6ndermek i\u00e7in yapmam\u0131z gereken \u015fey, g\u00f6nderece\u011fimiz 8 bitlik de\u011feri TXREG k\u00fct\u00fc\u011f\u00fcne yazmak. Ancak hali haz\u0131rda g\u00f6nderilmekte olan bir veri var ise \u00f6ncelikle onun g\u00f6nderilmesini beklememiz gerekiyor. TRMT biti 1 old\u011funda veri g\u00f6nderimi yok demektir. Buna g\u00f6re TRMT k\u00fct\u00fc\u011f\u00fc s\u0131f\u0131r oldu\u011fu s\u00fcrece bekliyoruz.<\/p>\n<pre class=\"lang:c decode:true\">void UART_Write(char data)\r\n{\r\n  while(!TRMT);\r\n  TXREG = data;\r\n}\r\n<\/pre>\n<p>Yukar\u0131daki fonksiyon ile her seferinde 8 bitlik bir veri g\u00f6nderebiliriz. Bu, her seferinde en fazla 1 ASCII karakteri g\u00f6nderebilece\u011fimiz anlam\u0131na geliyor. String, yani karakter dizisi g\u00f6ndermek i\u00e7in ise a\u015fa\u011f\u0131daki fonksiyonu yazd\u0131k.<\/p>\n<pre class=\"lang:c decode:true\">void UART_Write_Text(char *text)\r\n{\r\n  int i;\r\n  for(i=0;text[i]!='\\0';i++)\r\n    UART_Write(text[i]);\r\n}<\/pre>\n<p>Buna g\u00f6re uygulamam\u0131z\u0131n Proteus ISIS sim\u00fclasyonundaki \u00e7\u0131kt\u0131s\u0131 a\u015fa\u011f\u0131daki gibi oluyor [Benzetimden \u00f6nce PIC16F877A&#8217;ya sa\u011f t\u0131klayarak Processor Clock Frequency parametresini 4MHz yapman\u0131z gerekmekte] :<\/p>\n<p><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" data-attachment-id=\"575\" data-permalink=\"http:\/\/ozenozkaya.com\/blog\/?attachment_id=575\" data-orig-file=\"https:\/\/i0.wp.com\/ozenozkaya.com\/blog\/wp-content\/uploads\/PIC16F877A_USART_MerhabaDunya.png?fit=1473%2C668\" data-orig-size=\"1473,668\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"PIC16F877A_USART_MerhabaDunya\" data-image-description=\"\" data-image-caption=\"\" data-medium-file=\"https:\/\/i0.wp.com\/ozenozkaya.com\/blog\/wp-content\/uploads\/PIC16F877A_USART_MerhabaDunya.png?fit=300%2C136\" data-large-file=\"https:\/\/i0.wp.com\/ozenozkaya.com\/blog\/wp-content\/uploads\/PIC16F877A_USART_MerhabaDunya.png?fit=640%2C290\" class=\"alignnone size-full wp-image-575\" src=\"https:\/\/i0.wp.com\/ozenozkaya.com\/blog\/wp-content\/uploads\/PIC16F877A_USART_MerhabaDunya.png?resize=640%2C290\" alt=\"\" width=\"640\" height=\"290\" srcset=\"https:\/\/i0.wp.com\/ozenozkaya.com\/blog\/wp-content\/uploads\/PIC16F877A_USART_MerhabaDunya.png?w=1473 1473w, https:\/\/i0.wp.com\/ozenozkaya.com\/blog\/wp-content\/uploads\/PIC16F877A_USART_MerhabaDunya.png?resize=300%2C136 300w, https:\/\/i0.wp.com\/ozenozkaya.com\/blog\/wp-content\/uploads\/PIC16F877A_USART_MerhabaDunya.png?resize=768%2C348 768w, https:\/\/i0.wp.com\/ozenozkaya.com\/blog\/wp-content\/uploads\/PIC16F877A_USART_MerhabaDunya.png?resize=1024%2C464 1024w, https:\/\/i0.wp.com\/ozenozkaya.com\/blog\/wp-content\/uploads\/PIC16F877A_USART_MerhabaDunya.png?w=1280 1280w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><\/p>\n<p>\u015eimdilik bu kadar \ud83d\ude42 Bir sonraki yaz\u0131m\u0131zda USART RX kesmesini ve USART arac\u0131l\u0131\u011f\u0131 ile veri okumay\u0131 inceleyece\u011fiz.<\/p>\n<p>&nbsp;<\/p>\n<p>Yaz\u0131lar\u0131 be\u011fendiyseniz, faydalanabilecek tan\u0131d\u0131klar\u0131n\u0131zla payla\u015fmay\u0131 unutmay\u0131n\u0131z.<\/p>\n<a href=\"http:\/\/ozenozkaya.com\/blog\/?p=538\" class=\"su-button su-button-style-3d\" style=\"color:#FFFFFF;background-color:#2D89EF;border-color:#246ec0;border-radius:5px\" target=\"_self\"><span style=\"color:#FFFFFF;padding:6px 16px;font-size:13px;line-height:20px;border-color:#6cadf4;border-radius:5px;text-shadow:none\"><i class=\"sui sui-arrow-circle-o-left\" style=\"font-size:13px;color:#FFFFFF\"><\/i> \u00d6nceki Sayfa<\/span><\/a> \u00a0<a href=\"http:\/\/ozenozkaya.com\/blog\/\" class=\"su-button su-button-style-3d\" style=\"color:#FFFFFF;background-color:#2D89EF;border-color:#246ec0;border-radius:5px\" target=\"_self\"><span style=\"color:#FFFFFF;padding:6px 16px;font-size:13px;line-height:20px;border-color:#6cadf4;border-radius:5px;text-shadow:none\"><i class=\"sui sui-arrow-circle-right\" style=\"font-size:13px;color:#FFFFFF\"><\/i> Sonraki Sayfa<\/span><\/a>\n","protected":false},"excerpt":{"rendered":"<p>Merhabalar, \u00d6nceki yaz\u0131 ile birlikte, bir mikrokontrol\u00f6re nas\u0131l SDK geli\u015ftirebilece\u011fimizi ve PIC16F84A&#8217;n\u0131n t\u00fcm mod\u00fcllerini detayl\u0131ca incelemi\u015ftik. Her iki ba\u015fl\u0131k i\u00e7in de gerekli mesajlar\u0131n verildi\u011fi, gerekli bilgilerin aktar\u0131ld\u0131\u011f\u0131 d\u00fc\u015f\u00fcncesi ile PIC yaz\u0131lar\u0131n\u0131n seyrini biraz daha de\u011fi\u015ftiriyorum. PIC programlama yaz\u0131 dizisinin bu b\u00f6l\u00fcm\u00fcnde, \u015fu zamana kadar incelemedi\u011fimiz, ancak g\u00f6m\u00fcl\u00fc sistemler d\u00fcnyas\u0131n\u0131n adeta kolonlar\u0131\/kiri\u015fleri olan temel mod\u00fclleri inceleyece\u011fiz. <a class=\"read-more\" href=\"http:\/\/ozenozkaya.com\/blog\/?p=565\">Read more<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_tr_post_content":"Merhabalar,\r\n\r\n\u00d6nceki yaz\u0131 ile birlikte, bir mikrokontrol\u00f6re nas\u0131l SDK geli\u015ftirebilece\u011fimizi ve PIC16F84A'n\u0131n t\u00fcm mod\u00fcllerini detayl\u0131ca incelemi\u015ftik. Her iki ba\u015fl\u0131k i\u00e7in de gerekli mesajlar\u0131n verildi\u011fi, gerekli bilgilerin aktar\u0131ld\u0131\u011f\u0131 d\u00fc\u015f\u00fcncesi ile PIC yaz\u0131lar\u0131n\u0131n seyrini biraz daha de\u011fi\u015ftiriyorum.\r\n\r\nPIC programlama yaz\u0131 dizisinin bu b\u00f6l\u00fcm\u00fcnde, \u015fu zamana kadar incelemedi\u011fimiz, ancak g\u00f6m\u00fcl\u00fc sistemler d\u00fcnyas\u0131n\u0131n adeta kolonlar\u0131\/kiri\u015fleri olan temel mod\u00fclleri inceleyece\u011fiz. Bunlar\u0131n ba\u015f\u0131nda da <a href=\"https:\/\/en.wikipedia.org\/wiki\/Universal_asynchronous_receiver\/transmitter\">USART <\/a>mod\u00fcl\u00fc geliyor. PIC16F84A'da ne yaz\u0131k ki USART mod\u00fcl\u00fc bulunmuyor. Bu sebeple PIC16F877A \u00fczerinden devam edece\u011fiz :) Bu defa, PIC16F877A i\u00e7in de ayr\u0131ca bir k\u00fct\u00fcphane yazmak yerine, mecvut k\u00fct\u00fcphaneleri kullanarak uygulama yapaca\u011f\u0131z. K\u00fct\u00fcphane geli\u015ftirme ile ilgili bilgileri \u00f6nceki yaz\u0131larda yeterince i\u015flemi\u015f oldu\u011fumuzdan, bu yola girmekte art\u0131k bir sak\u0131nca g\u00f6rm\u00fcyorum. Dileyen azimli arkada\u015flar, PIC16F877A i\u00e7in de k\u00fct\u00fcphane yazabilirler.\r\n\r\n\u015eimdi gelelim her zamanki gibi USART'a bir girizgah yapmaya. Ancak \u00f6ncesinde irdelememiz gereken bir ba\u015fka \u00f6nemli kavram var...\r\n\r\n<strong>Haberle\u015fme\u00a0<\/strong>\r\n\r\nBir bilgiyi, bir kaynaktan ba\u015fka bir hedefe aktarmak o bilgili veriye d\u00f6n\u00fc\u015ft\u00fcr\u00fcp; veriyi kaynaktan hedefe aktaracak bir haberle\u015fme hatt\u0131 kurmakla m\u00fcmk\u00fcnd\u00fcr. \u00c7ok derinden girdi\u011fimiz bu hususu bir \u00f6rnekle irdeleyelim. Ali adl\u0131 arkada\u015f\u0131m\u0131z, o anki \u015fa\u015fk\u0131nl\u0131\u011f\u0131n\u0131 ifade eden 'A' sesini, Veli'ye duyurmak istedi\u011finde haberle\u015fme s\u00fcreci nas\u0131l olu\u015fur?\r\n\r\n\u015ea\u015fk\u0131nl\u0131k bilgisi bu \u015femada 'A' sesi ile kodlanm\u0131\u015ft\u0131r. Bu bilgi, havay\u0131 belli frekansta titre\u015ftiren ve Ali'nin a\u011fz\u0131ndan gelen 'A' sesi vas\u0131tas\u0131 ile havada ilerler ve Veli'nin kula\u011f\u0131nda olu\u015fan titre\u015fimlerin alg\u0131lanmas\u0131 ile Veli'ye bu veri aktar\u0131l\u0131r. Ard\u0131ndan Veli'nin beyni bu veriyi tekrardan bilgiye d\u00f6n\u00fc\u015ft\u00fcrerek 'A' sesini alg\u0131lar ve Veli; Ali'nin \u015fa\u015f\u0131rd\u0131\u011f\u0131n\u0131 alg\u0131lam\u0131\u015f olur. Bu \u015femada kaynak Ali, hedef Veli, haberle\u015fme kanal\u0131 hava, bilgi \u015fa\u015fk\u0131nl\u0131k, veri ise 'A' sesi olmaktad\u0131r. Haberle\u015fme ses vas\u0131tasyla da ta\u015f\u0131nsa, elektriksel olarak da ta\u015f\u0131nsa bu \u015fema de\u011fi\u015fmez. Bilgi, veri ve haberle\u015fme kaynaklar\u0131n\u0131 a\u00e7\u0131klad\u0131\u011f\u0131m\u0131z bu \u00f6rnek \u00e7ok saf ve naif g\u00f6r\u00fcnse de, kompleksle\u015fen haberle\u015fme sistemlerinde temelleri hat\u0131rlamak ve bu ger\u00e7ekliklerin fark\u0131nda olmak hayat kurtarmaktad\u0131r.\r\n\r\nBilginin veriye d\u00f6n\u00fc\u015f\u00fcm\u00fc, bu yaz\u0131n\u0131n odak noktas\u0131 olmad\u0131\u011f\u0131ndan; biz verinin aktar\u0131m\u0131 \u00fczerine yo\u011funla\u015faca\u011f\u0131z.Peki tek bir veriyi\u00a0de\u011fil de, birden fazla veriyi\u00a0g\u00f6ndermek istedi\u011fimizde ne yapaca\u011f\u0131z?\r\n\r\n<strong>Paralel ve Seri Haberle\u015fme<\/strong>\r\n\r\nYukar\u0131daki \u00f6rnekte Ali'nin biraz daha konu\u015fkan biri oldu\u011funu d\u00fc\u015f\u00fcnelim. Ali, Veli'ye \"Selam Veli\" dedi\u011finde sesler ard\u0131\u015f\u0131l olarak; yani pe\u015fi s\u0131ra olarak Veli'ye gider. Yani Ali s\u0131ras\u0131yla \u00f6nce 'S','e','l','a','m' der biraz bekler, ard\u0131ndan s\u0131ras\u0131yla 'V','e','l','i' harflerini pe\u015fis\u0131ra s\u00f6yler. Veli de bu sesleri -k\u0131sa bir gecikmeden sonra- ayn\u0131 s\u0131ra ile duyar. \u0130\u015fte bu \u015fekilde ard\u0131-s\u0131ra veri aktar\u0131m\u0131 olan haberle\u015fme \u015femalar\u0131, seri haberle\u015fme \u015femalar\u0131 olarak adland\u0131r\u0131l\u0131r. \u00d6zellikle, tek haberle\u015fme kanal\u0131n\u0131n bulundu\u011fu durumlarda, bu haberle\u015fme y\u00f6ntemi kullan\u0131l\u0131r. Seri haberle\u015fmede yaln\u0131zca tek kanal kullan\u0131l\u0131r, ancak t\u00fcm veri s\u0131ras\u0131yla g\u00f6nderildi\u011finden t\u00fcm verinin aktar\u0131m\u0131 zaman al\u0131r.\r\n\r\nParalel haberle\u015fmede ise veri, -ad\u0131 \u00fczerinde- paralel olarak g\u00f6nderilir. 8 hoparl\u00f6r\u00fc\u00a0olan bir cihaz, 8 mikrofonu olan bir cihaza 'Selamlar' mesaj\u0131n\u0131 paralel olarak iletmek isterse (her bir hoparl\u00f6r\u00fc sadece 1 mikrofonun duyabildi\u011fini varsayarsak) 1. hoparl\u00f6r 'S' sesini, 2. hoparl\u00f6r 'e' sesini, ... , 8. hoparl\u00f6r 'r' sesini ayn\u0131 anda \u00e7\u0131kart\u0131r. Kar\u015f\u0131 tarafta da bu sesler mikrofonlardan ayn\u0131 kar\u015f\u0131l\u0131kla ayn\u0131 anda alg\u0131lan\u0131rsa; t\u00fcm sesler paralel olarak g\u00f6nderildi\u011finden bu haberle\u015fme ad\u0131 \u00fczerinde \"paralel haberle\u015fme\" olur. Paralel haberle\u015fme, birden fazla haberle\u015fme kanal\u0131 gerektirir ancak bilgi daha k\u0131sa s\u00fcrede aktar\u0131l\u0131r.\r\n\r\nAyn\u0131 konseptler elektriksel olarak da ge\u00e7erlidir. Yani ses yerine bitleri inceleyecek olursak, a\u015fa\u011f\u0131daki gibi bir g\u00f6sterim yapmam\u0131z yanl\u0131\u015f olmaz. [Resim\u00a0<a href=\"https:\/\/en.wikipedia.org\/wiki\/Parallel_communication\">Wikipedia sayfas\u0131ndan<\/a> al\u0131nm\u0131\u015ft\u0131r.]\r\n\r\n<img class=\"alignnone size-full wp-image-566\" src=\"http:\/\/ozenozkaya.com\/blog\/wp-content\/uploads\/Parallel_and_Serial_Transmission.gif\" alt=\"\" width=\"300\" height=\"321\" \/>\r\n\r\nG\u00fczel.. \u015eimdi d\u00f6nelim konumuza. USART dedi\u011fimiz nane, bir seri haberle\u015fme algoritmas\u0131 olup; s\u0131k\u00e7a kullan\u0131lmaktad\u0131r. \u00d6zellikle \"tracing\",\"serial logging\" gibi i\u015fler i\u00e7in; s\u0131kl\u0131kla USART kullan\u0131l\u0131r. Ayr\u0131ca USART ile haberle\u015fen \u00e7ok say\u0131da sens\u00f6r vb. elektronik ekipman bulunmaktad\u0131r.\r\n\r\n<strong>PIC16F877A ve USART<\/strong>\r\n\r\n\u015eimdi gelelim PIC16F877A ile USART haberle\u015fmesi yapacak kodu yazmaya... Bunun i\u00e7in olduk\u00e7a basit bir \u00f6rnek yapaca\u011f\u0131z. \u0130lk hedefimiz, USART \u00fczerinden \"Merhaba\u00a0d\u00fcnya!\" yaz\u0131s\u0131n\u0131 g\u00f6nderecek bir kod yazmak. Bunu, Microchip'in en yeni k\u00fct\u00fcphanesi olan; xc k\u00fct\u00fcphanesini kullanarak yapaca\u011f\u0131z. Unutmay\u0131n\u0131z ki, xc k\u00fct\u00fcphanesini kullanabilmek i\u00e7in <a href=\"http:\/\/www.microchip.com\/mplabxc8windows\">XC8 <\/a>derleyicisini y\u00fcklemeniz gerekmekte.\r\n<pre class=\"lang:c decode:true\">\/* \r\n * File:   main.c\r\n * Author: ozenozkaya\r\n *\r\n * Created on 26 Haziran 2016 Pazar, 18:10\r\n *\/\r\n\r\n#include &lt;stdio.h&gt;\r\n#include &lt;stdlib.h&gt;\r\n#include &lt;xc.h&gt;\r\n\r\n#define _XTAL_FREQ 4000000\r\n\r\nvoid UART_Initialize()\r\n{\r\n    TRISC = 0b10000000;\r\n    TXSTA=0b00100100;\r\n    RCSTA=0b10010000;\r\n    SPBRG=25;\r\n    TXREG=0x00;\r\n}\r\n\r\nvoid UART_Write(char data)\r\n{\r\n  while(!TRMT);\r\n  TXREG = data;\r\n}\r\n\r\nvoid UART_Write_Text(char *text)\r\n{\r\n  int i;\r\n  for(i=0;text[i]!='\\0';i++)\r\n    UART_Write(text[i]);\r\n}\r\n\r\nint main() {\r\n    UART_Initialize();\r\n    while(1)\r\n    {\r\n        UART_Write_Text(\"Merhaba dunya!\\r\\n\");\r\n        __delay_ms(1000);\r\n    }\r\n    return (EXIT_SUCCESS);\r\n}\r\n\r\n<\/pre>\r\nUSART haberle\u015fmesi seri bir haberle\u015fme oldu\u011fundan, verilerin\u00a0ard\u0131 s\u0131ra g\u00f6nderilimindeki zamanlama \u00e7ok \u00f6nemlidir. Bu sebeple, kodumuza PIC16F877A'n\u0131n kristal osilat\u00f6r fraksns\u0131n\u0131 a\u015fa\u011f\u0131daki gibi giriyoruz.\r\n<pre class=\"lang:default decode:true \">#define _XTAL_FREQ 4000000<\/pre>\r\n\u00d6ncelikli olarak UART_Intialize fonksiyonunu incelemeye ba\u015flayal\u0131m. PIC16F877A'n\u0131n C portunun 6. pini USART_TX (transmit, veri g\u00f6nderme), 7. pini ise USART_RX (receive, veri alma) pini oldu\u011fundan, 6. pini \u00e7\u0131k\u0131\u015f, 7. pini giri\u015f olarak konfigure ediyoruz. Buna ili\u015fkin kod a\u015fa\u011f\u0131da yer al\u0131yor:\r\n<pre class=\"lang:default decode:true \">TRISC = 0b10000000;<\/pre>\r\nArd\u0131ndan mod\u00fcl\u00fcm\u00fcz\u00fc konfig\u00fcre edece\u011fiz. Buna g\u00f6re datasheet'e bakt\u0131\u011f\u0131m\u0131zda konfig\u00fcre etmemiz gereken k\u00fct\u00fcklerin TXSTA, RCSTA, SPBRG k\u00fct\u00fckleri oldu\u011funu g\u00f6r\u00fcyoruz. Veri g\u00f6ndermek i\u00e7in ise TXREG k\u00fct\u00fc\u011f\u00fcne ihtiya\u00e7 duyaca\u011f\u0131z. Veri ka\u011f\u0131d\u0131ndan s\u0131ras\u0131 ile bu k\u00fct\u00fcklerle ilgli bilgilere bak\u0131p, konfig\u00fcrasyonumuzu yapal\u0131m :)\r\n\r\n<img class=\"alignnone size-full wp-image-571\" src=\"http:\/\/ozenozkaya.com\/blog\/wp-content\/uploads\/TXSTA.png\" alt=\"\" width=\"649\" height=\"563\" \/>\r\n<pre class=\"lang:c decode:true\">    TXSTA=0b00100100;\r\n<\/pre>\r\nBuna g\u00f6re SYNC=0 (Asenkron mod), BRGH = 1 (Y\u00fcksek h\u0131zl\u0131 mod), TXEN=1 (Veri g\u00f6nderimi aktive edildi, izin verildi), TX9=0 (8 bit veri aktar\u0131m\u0131 modu) \u015feklinde konfig\u00fcrasyon yapt\u0131\u011f\u0131m\u0131z g\u00f6z\u00fck\u00fcyor :)\r\n\r\n\u015eimdi hemen di\u011fer bir \u00f6nemli k\u00fct\u00fc\u011f\u00fcm\u00fcz olan RCSTA'ya bakal\u0131m.\r\n\r\n<img class=\"alignnone size-full wp-image-572\" src=\"http:\/\/ozenozkaya.com\/blog\/wp-content\/uploads\/RXSTA.png\" alt=\"\" width=\"649\" height=\"669\" \/>\r\n<pre class=\"lang:c decode:true\">    RCSTA=0b10010000;<\/pre>\r\nBuna g\u00f6re RX9=0 (8 bit mod), ADDEN= 0\u00a0(9. bit parity biti olarak kullan\u0131ls\u0131n), CREN=1 (S\u00fcrekli veri al\u0131m\u0131 aktive edildi, izin verildi), SPEN=1 (Seri port aktive edildi) \u015feklinde konfig\u00fcrasyon yapt\u0131\u011f\u0131m\u0131z g\u00f6z\u00fck\u00fcyor :)\r\n\r\nSeri haberle\u015fmemizi 9600 baudrate'te yapmak istiyoruz. Buna g\u00f6re SPBRG k\u00fct\u00fc\u011f\u00fcne yazmam\u0131z gereken de\u011feri, PIC16F877A'n\u0131n datasheet d\u00f6k\u00fcman\u0131ndan buluyoruz. \u00a0Buna g\u00f6re, veri ka\u011f\u0131d\u0131n\u0131n a\u015fa\u011f\u0131daki k\u0131sm\u0131ndan da g\u00f6r\u00fclebildi\u011fi \u00fczere BRGH bitinin durumuna g\u00f6re hesaplamalar de\u011fi\u015fiyor. Biz BRGH=1 olacak \u015fekilde konfig\u00fcre etmi\u015ftik.\r\n\r\n<img class=\"alignnone size-full wp-image-573\" src=\"http:\/\/ozenozkaya.com\/blog\/wp-content\/uploads\/SPBRG.png\" alt=\"\" width=\"688\" height=\"585\" \/>\r\n\r\nBir di\u011fer \u00f6nemli tablo da, BRGH se\u00e7im tablosu. Veri ka\u011f\u0131d\u0131ndan ald\u0131\u011f\u0131m tablolar ise a\u015fa\u011f\u0131daki gibi:\r\n\r\n<img class=\"alignnone size-full wp-image-574\" src=\"http:\/\/ozenozkaya.com\/blog\/wp-content\/uploads\/PIC16F877A_BaudrateTable.png\" alt=\"\" width=\"597\" height=\"885\" \/>\r\n\r\nYukar\u0131daki tablonun alt k\u0131sm\u0131n\u0131 kullanca\u011f\u0131z, \u00e7\u00fcnk\u00fc BRGH=1 olarak konfig\u00fcre etmi\u015ftik. Kullanaca\u011f\u0131m\u0131z osilat\u00f6r frekans\u0131 4MHz oldu\u011funda ve istedi\u011fimiz Baudrate (veri aktar\u0131m h\u0131z\u0131) 9600 baud = 9.6K baud oldu\u011fundan, SPBRG de\u011ferinizin 25 olmas\u0131 gerekti\u011fi tablodan g\u00f6r\u00fclebiliyor. Biz de bu sebeple a\u015fa\u011f\u0131daki konfig\u00fcrasyonu yapt\u0131k:\r\n<pre class=\"lang:c decode:true\">SPBRG=25;\r\n<\/pre>\r\nArt\u0131k USART mod\u00fcl\u00fcm\u00fcz\u00fc konfig\u00fcre etti\u011fimizden, veri g\u00f6nderme k\u0131sm\u0131na ge\u00e7elim. Veri g\u00f6ndermek i\u00e7in yapmam\u0131z gereken \u015fey, g\u00f6nderece\u011fimiz 8 bitlik de\u011feri TXREG k\u00fct\u00fc\u011f\u00fcne yazmak. Ancak hali haz\u0131rda g\u00f6nderilmekte olan bir veri var ise \u00f6ncelikle onun g\u00f6nderilmesini beklememiz gerekiyor. TRMT biti 1 old\u011funda veri g\u00f6nderimi yok demektir. Buna g\u00f6re TRMT k\u00fct\u00fc\u011f\u00fc s\u0131f\u0131r oldu\u011fu s\u00fcrece bekliyoruz.\r\n<pre class=\"lang:c decode:true\">void UART_Write(char data)\r\n{\r\n  while(!TRMT);\r\n  TXREG = data;\r\n}\r\n<\/pre>\r\nYukar\u0131daki fonksiyon ile her seferinde 8 bitlik bir veri g\u00f6nderebiliriz. Bu, her seferinde en fazla 1 ASCII karakteri g\u00f6nderebilece\u011fimiz anlam\u0131na geliyor. String, yani karakter dizisi g\u00f6ndermek i\u00e7in ise a\u015fa\u011f\u0131daki fonksiyonu yazd\u0131k.\r\n<pre class=\"lang:c decode:true\">void UART_Write_Text(char *text)\r\n{\r\n  int i;\r\n  for(i=0;text[i]!='\\0';i++)\r\n    UART_Write(text[i]);\r\n}<\/pre>\r\nBuna g\u00f6re uygulamam\u0131z\u0131n Proteus ISIS sim\u00fclasyonundaki \u00e7\u0131kt\u0131s\u0131 a\u015fa\u011f\u0131daki gibi oluyor [Benzetimden \u00f6nce PIC16F877A'ya sa\u011f t\u0131klayarak Processor Clock Frequency parametresini 4MHz yapman\u0131z gerekmekte] :\r\n\r\n<img class=\"alignnone size-full wp-image-575\" src=\"http:\/\/ozenozkaya.com\/blog\/wp-content\/uploads\/PIC16F877A_USART_MerhabaDunya.png\" alt=\"\" width=\"1473\" height=\"668\" \/>\r\n\r\n\u015eimdilik bu kadar :) Bir sonraki yaz\u0131m\u0131zda USART RX kesmesini ve USART arac\u0131l\u0131\u011f\u0131 ile veri okumay\u0131 inceleyece\u011fiz.\r\n\r\n&nbsp;\r\n\r\nYaz\u0131lar\u0131 be\u011fendiyseniz, faydalanabilecek tan\u0131d\u0131klar\u0131n\u0131zla payla\u015fmay\u0131 unutmay\u0131n\u0131z.\r\n\r\n[su_button url=\"http:\/\/ozenozkaya.com\/blog\/?p=538\" style=\"3d\"\u00a0icon=\"icon: arrow-circle-o-left\"]\u00d6nceki Sayfa[\/su_button] \u00a0[su_button url=\"http:\/\/ozenozkaya.com\/blog\/\" style=\"3d\" icon=\"icon: arrow-circle-right\"]Sonraki Sayfa[\/su_button]","_tr_post_name":"pic-programlama-11-usart","_tr_post_excerpt":"","_tr_post_title":"PIC Programlama \u2013 11 \u2013 USART","_en_post_content":"","_en_post_name":"","_en_post_excerpt":"","_en_post_title":"","edit_language":"tr","jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"enabled":false},"version":2}},"categories":[1],"tags":[],"class_list":["post-565","post","type-post","status-publish","format-standard","hentry","category-genel"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p5gWM6-97","jetpack-related-posts":[],"_links":{"self":[{"href":"http:\/\/ozenozkaya.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/565","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/ozenozkaya.com\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/ozenozkaya.com\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/ozenozkaya.com\/blog\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/ozenozkaya.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=565"}],"version-history":[{"count":3,"href":"http:\/\/ozenozkaya.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/565\/revisions"}],"predecessor-version":[{"id":576,"href":"http:\/\/ozenozkaya.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/565\/revisions\/576"}],"wp:attachment":[{"href":"http:\/\/ozenozkaya.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=565"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/ozenozkaya.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=565"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/ozenozkaya.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=565"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}