Haberler:

Forum kuralları güncellendi LÜTFEN  okuyunuz:  https://bit.ly/2IjR3ME

Ana Menü

pic16f877 seri haberleşme sorun

Başlatan speedy1989, 29 Eylül 2012, 19:30:26

speedy1989

pic16f877 ile pin girişlerini okuyup bunları aralıklı olarak pcye yollamak istiyorum yazdığım program aşağıdaki gibi fakat devreyi bilgisayara takıp programımı çaşlıştırdığımda ilk defasında bir sürü veri gönderiyor ve bi daha veri göndermiyor sebebi ne olabilir acaba yardımlarınız için şimdiden teşekkürler

/******************************************************
      PIC16F877 ile RS232 Seri İletişim Uygulaması
PIC PROG/DEKA     : Port B jumper'ı LCD konumunda olmalı
*******************************************************/

#include <16f877.h>     // Kullanılacak denetleyicinin başlık dosyası tanıtılıyor.
#include <stdio.h>

// Denetleyici konfigürasyon ayarları
#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD

#use delay (clock=4000000) // Gecikme fonksiyonu için kullanılacak osilatör frekansı belirtiliyor.
#use rs232 (baud=9600, xmit=pin_C6, rcv=pin_C7, parity=N, stop=1) // RS232 protokolünün 9600 bit/sn baud hızında olacağını ve
                                                                  // TX,RX uçlarının hangi pinler olacağını tanımlıyor
                                                                  // parity bitinin olmadığını, stop bitinin 1 bit olacağı belirtiliyor
#int_rda
void serikesme()
{
   disable_interrupts(int_rda); // int_rda kesmesini pasif yap
   output_high(pin_a0);
}

/********* ANA PROGRAM FONKSİYONU********/

void main ( )
{
   setup_psp(PSP_DISABLED);        // PSP birimi devre dışı
   setup_spi(SPI_SS_DISABLED);     // SPI 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
   output_low(pin_a0);

   enable_interrupts(GLOBAL);  // Aktif edilen tüm kesmelere izin ver
   while(1) // Sonsuz döngü
   {
   int32 i;
   int32 j;
   char bufb[20];
   char bufd[20];
   enable_interrupts(int_rda);
   int8 y;
   int8 x;
   x=input_b();
   printf("a%u",x);
   //sprintf(bufb,"a%ld",x);
   //puts(bufb);
   for(i=0;i<5000;i++)
   {
      for(j=0;j<5;j++)
   {
   ;
   }
   ;
   }
   output_toggle(pin_a0);
   y=input_d();
   printf("b%u",y);
   //sprintf(bufd,"b%ld",y);
   //fputs(bufd);
   for(i=0;i<5000;i++)
   {
   for(j=0;j<5;j++)
   {
   ;
   }
   ;
   }
   }
   output_toggle(pin_a0);
}

sadogan

Slm,
Devre şemasını eklersen iyi olur

speedy1989


/******************************************************
      PIC16F877 ile RS232 Seri İletişim Uygulaması
PIC PROG/DEKA     : Port B jumper'ı LCD konumunda olmalı
*******************************************************/

#include <16f877.h>     // Kullanılacak denetleyicinin başlık dosyası tanıtılıyor.

// Denetleyici konfigürasyon ayarları
#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD

#use delay (clock=4000000) // Gecikme fonksiyonu için kullanılacak osilatör frekansı belirtiliyor.
#use rs232 (baud=9600, xmit=pin_C6, rcv=pin_C7, parity=N, stop=1) // RS232 protokolünün 9600 bit/sn baud hızında olacağını ve
                                                                  // TX,RX uçlarının hangi pinler olacağını tanımlıyor
                                                                  // parity bitinin olmadığını, stop bitinin 1 bit olacağı belirtiliyor


/********* ANA PROGRAM FONKSİYONU********/

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ışı
   set_tris_b(0x00);
   set_tris_d(0x00);
   output_high(pin_a0);

   while(1) // Sonsuz döngü
   {
   char bufb[20];
   char bufd[20];
   int8 y;
   int8 x;
   x=input_b();
   sprintf(bufb,"a%u",x);
   //puts(bufb);
   delay_ms(200);
   y=input_d();
   sprintf(bufd,"b%u",y);
   delay_ms(200);
   puts(bufb);
   delay_ms(200);
   puts(bufd);
   }
}



Verileri sanal olarak her seri port programı ile çok güzel bir şekilde alıyorum fakat bilgisayara bağladığımda hiçbir gecikme yapmadan 100 tane saçma sapan veriyi gönderiyor ve bağlantıyı kesiyor.Yardımlarınız için şimdiden teşekkürler çok sıkışmış durumdayım.hatta pcbsinide ekliyorum


speedy1989

ayrıca rs232 pini için rs232 usb dönüştürücü kullanıyorum acaba max232yi devre dışı bırakıp pic çıkışını direk konnektöre versem sorun olur mu