Haberler:

Foruma Resim Yükleme ve Boyut Sınırlaması ( ! )  https://bit.ly/2GMFb8H

Ana Menü

RS232 geçersiz karakter

Başlatan Ferhat Özdemir, 11 Şubat 2011, 23:26:47

Ferhat Özdemir

MErhaba arkadaşlar.
Pic16f628 ile seri kesme kullanarak işlem yaptirmak istiyorum. Fakat bir türlü if else kullanamıyorum. Sebebine gelince durum şundan ibaret sanırım.
Devreyi proteusta deniyorum, terminal ekranindan

2 tuşuna basıyorum. Terminale bu f olarak geri donuyor. Fakat bunu if else ile karşilaştiramiyorum.
Örnek vermek gerekirse :
char sa;
#int_rda 
void seri_kesme()
{
   sa = getchar();
   putchar(sa); // girilen karakteri tekrar bilgisayara gonder.
   
   if(sa == '3' )
   {output_toggle(PIN_B0);}

   disable_interrupts(int_rda);
}


Yukarıdaki if komutunun calişmasi için şöyle yapiyorum
: Terminalde 2 tuşuna basiyorum. Terminalden geri f karakteri dönüyor. ve sa == '3' dediğimde if şarti sağlanıyor.
Yani istediğim karşilaştirmayi yapamiyorum:S

Basilan Tuş : 2
Geri donen  : f
Pic'in gordu : '3'

nasıl oluyor bu anlamış değilim.

JKramer

Derleyici sürümünü yazar, sadece sorunla ilgili kısma (rs232) ait kısa, derlenebilen kodun (header,vs.) tamamı ve proteus dosyasını koyarsanız deneyebiliriz.

Ferhat Özdemir

Öncelikle cevap için teşekkürler.

Derleyicim : PCWHD Compiler 4.068

Kodların tamamı:
#include <16F628A.h>
/* Burayı derleyici otomatik ekliyor. Burası olmadan da demedim */
#FUSES NOWDT                    //No Watch Dog Timer
#FUSES INTRC
#FUSES LP                       //Low power osc < 200 khz
#FUSES NOPUT                    //No Power Up Timer
#FUSES NOPROTECT                //Code not protected from reading
#FUSES NOBROWNOUT               //No brownout reset
#FUSES NOMCLR                   //Master Clear pin used for I/O
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD                    //No EE protection
/* Otomatik ekleme sonu */

#use delay(clock=4000000)
#use rs232(baud=9600,parity=N,xmit=PIN_B2,rcv=PIN_B1,bits=8)

#int_rda 
void seri_kesme()
{
 
  sa = getchar();
    
    
   if(sa == '3' )
   {output_toggle(PIN_B0);}
 
   putc(sa);
 
   disable_interrupts(int_rda);
}

///PROGRAM
void main(void)
{
 
enable_interrupts(GLOBAL);
	   while(true)
   { 
      enable_interrupts(int_rda);
   }
}



JKramer

Isis dosyanızı www.4shared.com vb. siteye yükleyebilir misiniz? Invert, baudrate, vs. ayarlar önemli.

hemso

Proteus ta virtual terminale sag tıklayıp, edit properties e girin. Altta advanced properties kısmını göreceksiniz. orada inverted yazıyorsa normal. Normal yazıyorsa inverted yapıp bir denermisiniz. Onunla ilgili birşeyler olabilir.

Ferhat Özdemir

Alıntı yapılan: hemso - 12 Şubat 2011, 13:59:46
Proteus ta virtual terminale sag tıklayıp, edit properties e girin. Altta advanced properties kısmını göreceksiniz. orada inverted yazıyorsa normal. Normal yazıyorsa inverted yapıp bir denermisiniz. Onunla ilgili birşeyler olabilir.

Kardeş teşekkürler tavsiyen işe yaradı.

Bu invert olayını biliyordum, ama programı yazarken invert etmediğimden proteusta invert etme gereği duymadım. fakat anlamadığım nokta, pice program yazarken rs232 konfigürasyonunda invert diye belirtmen gerekmiyor mu ki ? invert edilmiş olarak çalışsın ?


hemso

Bu invert olayı bildiğim kadarıyla max232 kullanıp kullanmaman ile ilgili bir mesele. Simulasyonda araya max232 entegresini koyarsan invert etmen gerekiyor. Tersi durumda normal mode da calısması gerekiyor. Programdan herhangi bir invert ayarı yapma gereğin olduğunu sanmıyorum. Daha doğrusu o konuyla ilgili bir bilgim yok tam olarak. Birşey değil bu arada:d