18F877A ilginc bir soru nasil yapariz

Başlatan xxlxxl, 13 Aralık 2011, 23:47:43

xxlxxl

18f877 ile seri porta istediğimiz bir porttan nasıl data göndeririz mesela selam merhaba yardımlarınız için teşekkür ederim lütfen çok basit anlaşılır örnekler verebilirmisiniz sayın hocalarım üstadlar..
ccs örneği olarak

skara1214

#include <16F877A.h>     // Kullanılacak denetleyicinin başlık dosyası tanıtılıyor.
#fuses HS,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD
#use delay (clock=20000000) // 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
char klavye[80];
#int_rda   // RX ucuna veri gelince meydane gelen kesme
void serihaberlesme_kesmesi ()
{
   disable_interrupts(int_rda); // int_rda kesmesini pasif yap
   gets(klavye); // String ifadeyi al ve "klavye" adlı dizi değişkenine aktar.
   printf("yazdiginiz metin %s\n\r",klavye);
}

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ışı
   enable_interrupts(GLOBAL);  // Aktif edilen tüm kesmelere izin ver
   
    while(1) // Sonsuz döngü
   {
      enable_interrupts(int_rda); // int_rda kesmesi aktif
      
   }
}

   
Herkes ölür ama herkes gerçekten yaşamaz

xxlxxl

HOCAM teşekür ederim tam olarak isetdiğim farklı  mesela A01 ucundan pc ye veri göndermek istiyorum merhaba diye bir data gitsin A01 ucundan

justice_for_all

hic denemedim ama software uart yaparak yani #use rs232 (baud=9600,xmit=PIN_a0, rcv=PIN_a1, parity=N, stop=1) bi deneyin bakalim.

puts("merhaba"); ile gonderilir.
Deneyip de başaramayanları değil, yalnızca denemeye bile kalkışmayanları yargıla.   Gökhan Arslanbay

skara1214

burada tx i hangi pin ayarlarsanız ondan yollarsınız.
#include <16F877A.h>     // Kullanılacak denetleyicinin başlık dosyası tanıtılıyor.
#fuses HS,NOWDT
#use delay (clock=20000000) // Gecikme fonksiyonu için kullanılacak osilatör frekansı belirtiliyor.
#use rs232 (baud=9600,xmit=PIN_C6, rcv=PIN_C7, parity=N, stop=1) 
void main ( )
{
printf("merhaba");
}
Herkes ölür ama herkes gerçekten yaşamaz

xxlxxl

sayın hocam  :) denemediniz bir olayı nasıl olur mantikan düşünüyrsunuz sanırım ordaki pin numarasını değştirmek le olmaz sanırım çünkü giriş pinleri standart bildiğim kadarı ile

xxlxxl

#use rs232 (baud=9600,xmit=PIN_C6, rcv=PIN_C7, parity=N, stop=1) // RS232 protokolünün 9600   

zaten standart ayaralrda c7 ve c6 ben istiyorumki a01 pininden data gitsin

skara1214

hocanın dediği ve benim dediğim doğru.Ben denedim çalışıyor:D.Hatta 3 ayrı pindende veri yollayabilirsin.
Herkes ölür ama herkes gerçekten yaşamaz

justice_for_all

ben denemedim ama yapanlari gordum hem ccs buna izin veriyosa bi bildigi vardir yani..denemedim derken uart varken ona ihtiyac duymadim demek istedim.
Deneyip de başaramayanları değil, yalnızca denemeye bile kalkışmayanları yargıla.   Gökhan Arslanbay

skara1214

Alıntı yapılan: xxlxxl - 14 Aralık 2011, 00:10:59
#use rs232 (baud=9600,xmit=PIN_C6, rcv=PIN_C7, parity=N, stop=1) // RS232 protokolünün 9600   

zaten standart ayaralrda c7 ve c6 ben istiyorumki a01 pininden data gitsin
oradaki xmiti ne ayarlarsan o olur istersen ao istersen c0 farketmez.sadece yazılımsal yaptıgın içim rx tx interruptını kullanamazsın
Herkes ölür ama herkes gerçekten yaşamaz

xxlxxl

analdım aslında şöyle bir şey düşünüyorsum normalde standart uçlardan giriş yaptım ama ben extradan da başka bi pinden data göndermek istiyorum pice data gönderdim 1 diye bunun karşılı olan if deyiminden 01 pininden selam datası gidecek  pc den 2 diye bir data gönderdim a0 pininden hayda diye data göndersin

justice_for_all

Deneyip de başaramayanları değil, yalnızca denemeye bile kalkışmayanları yargıla.   Gökhan Arslanbay

justice_for_all

Alıntı yapılan: xxlxxl - 14 Aralık 2011, 00:15:09
analdım aslında şöyle bir şey düşünüyorsum normalde standart uçlardan giriş yaptım ama ben extradan da başka bi pinden data göndermek istiyorum pice data gönderdim 1 diye bunun karşılı olan if deyiminden 01 pininden selam datası gidecek  pc den 2 diye bir data gönderdim a0 pininden hayda diye data göndersin

peki neden normal uart pinlerini kullanmiyosun?
Deneyip de başaramayanları değil, yalnızca denemeye bile kalkışmayanları yargıla.   Gökhan Arslanbay

xxlxxl

HOCAM ben yine yalnış yazdım sanırım..... pc den gelen dataya göre a01 pininden dışarı data göndericek kod olarak yardım bekliyorum resimdekini biliyorum ama kod yazmasını bilmiyorum onnla ilgili örnek bizim gibi acemiler yeni başlayanlar için basit kodlar....... burayı buyüzden seviyorum örnek açısından yardım geliyor....    istediğim gelen dataya göre if deyiminden a01 pininden dışarı veri data göndermesi

skara1214

#use rs232 (baud=9600,xmit=PIN_C6, rcv=PIN_C7, parity=N, stop=1,STREAM=iletisim_0) 
#use rs232 (baud=9600,xmit=PIN_D2, rcv=PIN_D3, parity=N, stop=1,STREAM=iletisim_1)
#use rs232 (baud=9600,xmit=PIN_D6, rcv=PIN_D7, parity=N, stop=1,STREAM=iletisim_2)  
fprintf(iletisim_1,"xup 0\r");
delay_ms(500);
fprintf(iletisim_2,"zup 0\r");
delay_ms(500);
 while(1)
 {
  fgets(klavye,iletisim_0);
 if(klavye[0]=='x'||klavye[0]=='y'||klavye[2]=='x'||klavye[2]=='y')
  {
  fprintf(iletisim_1,"%s\r",klavye);


hocam yazdığım kodları incelerseniz tüm cevapları bulursunuz.Yine sorun çıkarsa sorabilirsiniz
Herkes ölür ama herkes gerçekten yaşamaz