Haberler:

Eposta uyarılarını yanıtlamayınız ( ! ) https://bit.ly/2J7yi0d

Ana Menü

Seri Port Sorunu

Başlatan Emin Aydın EROĞLU, 17 Mayıs 2014, 11:20:10

Emin Aydın EROĞLU

Arkadaşlar merhaba
İki tane devre yaptım ve biri diğerine sürekli olarak bilgi göndermesi gerekiyor. Fakat şöyle bir sorun yaşıyorum iki devremde gayet normal bir şekilde çalışıyor diğer tüm işlemlerini gerçekleştiriyorlar. Fakat seriport kütüphanesini eklediğim zaman devreler sapıtmaya başlıyor ve donuyorlar. Tek tek kontrol ettim ve şunu gözlemledim SPBRG registerine değer yüklediğim zaman pic donuyor. Eğer onu pasif edersem devreler normal şekilde çalışıyor (tabi seri port hariç). Devrenin birinde pic 16f628a diğerinde 16f877a kullanıyorum ve ikisinde de bu sorunu yaşıyorum.
Sizce neden böyle oluyor avilen yardımlarınızı bekliyorum.
Teşekkürler.

Gökhan BEKEN

SBRG değerine osilatörünüzün frekansını ve baudrate değerinizi doğru girmeniz gerekiyor.
osilatör: 25Mhz ve Baudrate: 9600 için:
SPBRG = ((int)(25000000L/(16UL * 9600) -1));
Özel mesaj okumuyorum, lütfen göndermeyin.

Emin Aydın EROĞLU

Sıkıntı değer hesaplamada değil onu gayet iyi biliyorum denemesini yaptım. Yaşadığım sorun normalde devrem sıkıntısız çalışıyor ama  usart_init(); fonksiyonunu aktif ettiğim zaman devre sapıtıyor.
void usart_init(void)
{
   unsigned char speed,nine_bits;
   
   
   RX_PIN = 1;         // Seri iletiþim pinleri giriþ olarak tanýmlanýyor
   TX_PIN = 1;
   
   if(HIGH_SPEED==1)   // Hýzlý iletiþim yapýlacaksa
      speed=0x4;
   else            // Yaval iletiþim yapýlacaksa
      speed=0x00;
   
   if(NINE==1)         // 9 bitlik iletiþim yapýlacaksa
      nine_bits=0x04;
   else            // 8 bitlik iletiþim yapýlacaksa
      nine_bits=0x00;
       //RCIF=0;


   SPBRG = DIVIDER;            // Hýz deðeri SPBRG'ye yükleniyor
   RCSTA = (nine_bits|0x90);      // Alým kaydedicisi ayarlanýyor
   TXSTA = (speed|nine_bits|0x20);   // Gönderim kaydedicisi ayarlanýyor
                char degisken;
        degisken=RCREG;
        RCIE=1;

}

Fonksiyonun içerisinde de bu var.
Normalde devremde Lcd üzerinde degişkenler falan yazılıyken bu fonksiyonu aktif ettim mi lcd de yazılar düşüyor ilk 2 karakter yazıyor öyle kalıyor yada seriport kesmesi ile veriyi alıp lcd ye yazdırırken değişken sürekli 0 oluyor