rs232 sorunu..

  • Konbuyu başlatan alperyazir
  • Başlangıç tarihi

alperyazir

Üye
Katılım
25 May 2011
Mesajlar
3
Puanları
1
Yaş
31
3 pici rs232 ile haberleştirmeye ihtiyacım var yazıdığım kodalar şu şekilde ama nedense yanlış çalışıyor. bi bakarmısınız yanlışlarım nerede ,??

bu arada benim istediğim rs232 terminaldeninden girdiğim harflere göre(a,b,c,d) ile ledleri kontrol etmek. örneğin a girdiğimde 1. picteki ledi yakmak b girdiğimde söndürcek. 2 .alıcı içinde c ve d karakterleri aynı görevi yapacak. 2 haftadır uğraşıyorum lütfen bi yardım..



/************************verici***********************/
Kod:
#include <16f877.h> 
#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD
#use delay (clock=4000000)
#use rs232 (baud=9600, xmit=pin_C6, rcv=pin_C7, parity=N, stop=1)
char   klavye[80];
#int_rda   // RX ucuna veri gelince meydane gelen kesme
void serihaberlesme_kesmesi ()
{
   disable_interrupts(int_rda); // int_rda kesmesini pasif yap
   output_high(pin_c5);  // RC5 çıkışı lojik-1
   gets(klavye); // String ifadeyi al ve "klavye" adlı dizi değişkenine aktar.
   printf("\n\rYazdiginiz Metin>  %s\n",klavye); // Satır atla, yeni satır,RS232 üzerinden klavye string ifadesini gönder,satır atla
   if(klavye[0] == 'a'){output_high(pin_b0); output_low(pin_b1); putc('a');}
   if(klavye[0] == 'b'){output_high(pin_b0); output_low(pin_b1); putc('b');}
   if(klavye[0] == 'c'){output_high(pin_b1); output_low(pin_b0); putc('c');}
   if(klavye[0] == 'd'){output_high(pin_b1); output_low(pin_b0); putc('d');}
   output_low(pin_c5); // RC5 çıkışı lojik-0
   printf("\n\rKlavyeden bir metin giriniz ve enter tusuna basiniz>"); // Satır atla, yeni satır,RS232 üzerinden belirtilen metni gönder
}

/********* ANA PROGRAM FONKSİYONU********/
Kod:
void main ( )
{
   setup_psp(PSP_DISABLED);        // PSP birimi devre dışı
   setup_timer_1(T1_DISABLED);     // T1 zamanlayıcısı devre dışı
   setup_timer_2(T2_DISABLED,0,1); // T2 zamanlayıcısı devre dışı
   setup_adc_ports(NO_ANALOGS);    // ANALOG giriş yok
   setup_adc(ADC_OFF);             // ADC birimi devre dışı
   setup_CCP1(CCP_OFF);            // CCP1 birimi devre dışı
   setup_CCP2(CCP_OFF);            // CCP2 birimi devre dışı


   output_low(pin_c5); // RC5 çıkışı ilk anda sıfırlanıyor
   set_tris_c(0b10000000);
   set_tris_b(0x00);
   output_b(0x00);


   enable_interrupts(GLOBAL);  // Aktif edilen tüm kesmelere izin ver


   while(1) // Sonsuz döngü
   {
      enable_interrupts(int_rda); // int_rda kesmesi aktif
   }
}




/**************************alıcı1******************/
Kod:
#include <16f877.h> 
#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD
#use delay (clock=4000000)
#use rs232 (baud=9600, xmit=pin_C6, rcv=pin_C7, parity=N, stop=1)
char al;
void main()
{


   setup_adc_ports(NO_ANALOGS);
   setup_adc(ADC_OFF);
   setup_psp(PSP_DISABLED);
   setup_spi(SPI_SS_DISABLED);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);


set_tris_c(0b10000000);
set_tris_b(0x00);
set_tris_a(0x01);
output_b(0x00);
while(1){


al=getch();
if(al=='a') output_high(pin_b0);
if(al=='b') output_low(pin_b0);


}


}


/**************************alıcı2******************/
#include <16f877.h> 
#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD
#use delay (clock=4000000)
#use rs232 (baud=9600, xmit=pin_C6, rcv=pin_C7, parity=N, stop=1)
char al;
void main()
{


   setup_adc_ports(NO_ANALOGS);
   setup_adc(ADC_OFF);
   setup_psp(PSP_DISABLED);
   setup_spi(SPI_SS_DISABLED);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);


set_tris_c(0b10000000);
set_tris_b(0x00);
set_tris_a(0x01);
output_b(0x00);
while(1){


al=getch();
if(al=='c') output_high(pin_b0);
if(al=='d') output_low(pin_b0);


}


}
 

GüvTek

Üye
Katılım
7 Mar 2012
Mesajlar
190
Puanları
3
Yaş
31
Proteus bilmem ama alıcılarda kristal olmaması normal mi?
 
Konu Sah

alperyazir

Üye
Katılım
25 May 2011
Mesajlar
3
Puanları
1
Yaş
31
Proteus bilmem ama alıcılarda kristal olmaması normal mi?

proteuesta sıkıntı çıkarmıyor pek o yüzden koymayı lüzüm görmedim
 

kudretuzuner

Paylaşımcı üye
Katılım
28 Tem 2009
Mesajlar
902
Puanları
133
Merhaba
.asm olarak isterseniz yardımcı olabilirim.Kolay gelsin.
 
Konu Sah

alperyazir

Üye
Katılım
25 May 2011
Mesajlar
3
Puanları
1
Yaş
31
olabilir hocam çokta makbule geçer ama kodları ilerde değiştirmem gerekecek proje için bu en basit manada denemek için yapıldı. eğer kodları paylaşabilirseniz o benim için daha iyi olur ayrıca isis şemasında yanlışlık felan varsa yorumlarınızı beklerim
 
Son düzenleme:

kudretuzuner

Paylaşımcı üye
Katılım
28 Tem 2009
Mesajlar
902
Puanları
133
Merhaba
Avatarımda profesyonel yazdığına bakmayın.Amatörüm.PIC öğrenirken 16f628A ile başladım 16F877 atladım 18f4550 ile devam etmekteyim.Bu bakımdan 877'nin memory ve registerleri hakkında pek bilgim yok data şitine bakmak lazım.Ama asm ile yazdığım için 877'ye uyarlamak kolay olur düşüncesindeyim.Ben size PC'den PIC'e (virtual terminalden)istediğiniz datayı yollayıp PIC'te ilk low bitlerini görebilirsiniz,ayrıca da PIC'ten PIC'e yazılım gereği(klavye 1 bir Hex'31' yollayıp diğer PIC'te görebilirsiniz.Umarım,bu mantık çerçevesinde yazılımları da inceleyerek istediğiniz tasarımı yaparsınız.Kolay gelsin.
 

Benzer Konular

Forum istatistikleri

Konular
114,832
Mesajlar
808,350
Kullanıcılar
420,166
Son üye
Jackfr0st

Yeni konular

Üst