Haberler:

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

Ana Menü

Yardımmmm!!!!!!

Başlatan aydertunca, 29 Nisan 2009, 23:51:07

aydertunca

S.A arkadaşlar...ben 16f877 ile seri port haberleşme yapıyorum...Ancak ben seri haberleşme için picin RC6 ve RC7 pinlerini kullanmadım...Yani seri port için 16f877 nin RB6 ve RB7 uçlarını tanımladım..yapmak istediğim seri porttan pice bir bilgi gitmediği durumlarda  RB1'e bağlı led flash yapsın...eğer seri porttan bilgi gelirse pic gelen bilgiyi d portuna bağlı lcd de göstersin ve tekrar programa dönerek led flash yapmaya devam etsin... istiyorum...fakat programı çalıştırdığımda proteusta led sürekli flash yapıyor ve ben bu arada pice seri porttan bir bilgi gönderdiğimde LCD_YAZ fonksiyonuna gidip gelen bilgiyi LCD'de yazmıyor ve led flash yapmaya devam ediyor......kodlar aşağıdaki gibi ...ACABA NERDE YANLIŞ YAPIYORUM VEYA nasıl yapabilir bunu Düzeltecek arkadaşlara şimdiden tşkler..

#include <16f877a.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=20000000) // Gecikme fonksiyonu için kullanılacak osilatör frekansı belirtiliyor.

#include <lcd.c>   // lcd.c dosyası tanıtılıyor

#use rs232 (baud=9600, xmit=pin_B6, rcv=pin_B7, 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
char   klavye[80];  // klavye isminde 80 üyeli bir dizi tanımlanıyor

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

void LCD_YAZ()
{
gets(klavye);
printf(lcd_putc,"\f%s",klavye);
printf("\fklavyeden metin gir...\n\r");
}
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ışı

 
  lcd_init();   // LCD'yi hazırla
  lcd_putc(" Hosgeldiniz...");
  output_b(0x00);
  while(1) // Sonsuz döngü
  {
 
 
   output_high(pin_b1);
   delay_ms(100);
   output_low(pin_b1);
   delay_ms(100);  
   
  if(kbhit())
  {
  continue;
  LCD_YAZ();
  }
 
  }
}

DİKKAT, Başlığı düzeltiniz, sadece "yardım" diye başlık açmayınız ,
yardımın yanına problemle ilgili kısa bir özet yazınız.. MaxiBoost

Tagli

if(kbhit())
{
continue;
LCD_YAZ();
}
Burada continue varken nasıl LCD_YAZ() satırına gelebilir ki?

Kodda klavye lafı geçiyor. Klavye nasıl seri porttan bağlandı onu anlamadım. Ayrıca kbhit() fonksiyonunu da biraz açarsan konu daha iyi anlaşılabilir.
Gökçe Tağlıoğlu

aydertunca

kbhit() fonksiyonu seri porttan bilgi geldiğinde geriye true döndüren bir fonksiyondur diye biliyorum(Acaba sadece RC6 ve RC7 özel seri port pinleri için geçerli bir fonksiyonmu ki bu kbhit() ...) ...ayrıca continue ; satırını kaldırsamda sonuç yine aynı....