RS232 iletişiminde lcd ye yazı yazdırma da nereyi yanlış yapıyorum.

Başlatan yunusdursun, 28 Ağustos 2013, 08:08:58

yunusdursun

#include <16F877A.h>
#device ADC=16

#FUSES NOWDT                    //No Watch Dog Timer
#FUSES NOBROWNOUT               //No brownout reset
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O

#use delay(crystal=4000000)
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8,stream=PORT1)



#include <main.h>
#include <lcd.c>

#use fast_io(d)
int1 data=false;
char ser;

#INT_RDA
void  RDA_isr(void)
{
disable_interrupts(GLOBAL);

   ser=getc(PORT1);
   data=true;
}

void main()
{
   set_tris_d(0x00);
   output_d(0x00);

   lcd_init();
   enable_interrupts(INT_RDA);
   enable_interrupts(GLOBAL);

   
   while(TRUE)
   {
     
      if(data)
      { 
         printf(lcd_putc,"\f%c",ser);
         data=false;
         
      }
   
   }
}

Yardımınız için şimdiden TEŞEKKÜR EDİYORUM. Ayrıca dün bir abim örneğin sitring basmak için iletinin sonunda enter basmak gerekli dedi bunun gibi ayrıntıları da paylaşabilir misiniz?

yasin_arsln

#include<main.h>

içeriği ne paylaşırmısın.


mesaj birleştirme:: 28 Ağustos 2013, 10:57:51

#include <16F877A.h>
#device ADC=16

#FUSES NOWDT                    //No Watch Dog Timer
#FUSES NOBROWNOUT               //No brownout reset
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O

#use delay(crystal=4000000)
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8,stream=PORT1)



//#include<main.h> //içeriği bilmediğim için kullanmadım.
#include <lcd.c>

#use fast_io(d)
int1 data=false;
char ser;

#INT_RDA
void  RDA_isr(void) 
{
disable_interrupts(INT_RDA);//disable_interrupts(global) yerine INT_RDA gelmeli sen sadece bu kesmeyi kapatmalısın tamamını değil.

   ser=fgetc(PORT1); //Eğer stream ismi belirtmişsen fgetc ile PORT'tan bilgi alırsın.
   data=true;
 
}

void main()
{
   set_tris_d(0x00);
   output_d(0x00);

   lcd_init();
   enable_interrupts(INT_RDA);
   enable_interrupts(GLOBAL);

   
   while(TRUE)
   {
     
      if(data)
      {  
         printf(lcd_putc,"\f%c",ser);
         data=false;
         enable_interrupts(INT_RDA);
         fprintf(PORT1,"%c\n\r",ser); //klavyeden veriyi doğru alıyormusun diye tekrardan ekrana bastırma işlemi.
      }
   
   }
}

yunusdursun

Teşekkürler  main.h ın içindekiler üsttarafındaki kodlardı

Gökhan BEKEN

Alıntı yapılan: yunusdursun - 28 Ağustos 2013, 08:08:58
Ayrıca dün bir abim örneğin sitring basmak için iletinin sonunda enter basmak gerekli dedi bunun gibi ayrıntıları da paylaşabilir misiniz?
13 rakamını ascii olarak gönderirseniz enter karakterini basabilirsiniz. Çünkü enterin ascii kodu 13 tür. Sadece enter basmak yetmeyebilir satır başı yapmanız gerekebilir. Satırbaşının ascii kodu 10 dur. Bu dediğim ascii kodlar 10luk taban içn geçerli. Hex olarak gönderecekseniz 0x0D ve 0x0A göndermeniz gerekir.
Ayrıca ascii olarak göndermek yerine kontrol(Kaçış) karakterleri kulllanarak print("\r\n") gibi gönderebilirsiniz.

Konrol/Kaçış karakterleri (escape squence): değişkenlerin ve sabitlerin nasıl yazılacağını belirtmek veya imlecin alt satıra geçirilmesi gibi bazı işlemlerin gerçekleştirilmesi için kullanılır.

\n    Bir alt satıra geç (newline)
\r    Satır başı yap (carriage return)


ascii kodlar:
Özel mesaj okumuyorum, lütfen göndermeyin.

yasin_arsln

kbhit fonksiyonunu incele istersen enter tuşuna başıp işlemi devam ettirmek için.