Haberler:

Eposta uyarılarını yanıtlamayınız ( ! ) https://bit.ly/2J7yi0d

Ana Menü

int_rda

Başlatan prometyus2010, 14 Ocak 2013, 18:41:43

prometyus2010

merhaba arkadaşlar  iki tane pic16f877a yı kesme kullanarak rs232 serial haberleştirmek istiyorum bir picten 5 adet değişken bilgisi gönderecem diğer picten kesme ile bunları okumak istiyorum
getc komutunu denedim olmadı sanırım enter tuşunu beklediğinden kesmeden çıkmıyor bunu nasıl yapabilirim acaba

esensoy

kodlarını şemanı eklersen yorum yapabiliriz,
getc dediniz ccs c kullanıyorsunuz anladığım kadarıyla,
ccs c de getch enter bekler, getc 1 byte veri okur, veri gelmemişse gelene kadar bekler,
doğru fonksiyonu kullanıyorsunuz muhtemelen hata başka bir yerde
En tehlikeli an "zafer" anıdır.

Okan AKÇA

beş defa oku yada string gönderirsen enter kodu gelinceye kadar bekler.

ertsen

#3
Daha önceden yaptığım Rf uygulamasının veri gönderme ve alma bölümü aşağıda. kablo ilede seri haberleşme gerçekleşiyor. Belki bir fikir verir.

Verici kısmı
#use rs232(baud=900,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8,Stream=RF)

putc(0b01010101);  //uayndırma
putc(0b01010101);
putc(0b01010101);
putc(0b01010101);
putc(0b01010101);
putc(0x00);
putc(0x00);
putc(0x00);
putc(0x00);
putc(0x00);
delay_ms(20);
putc('x');
delay_ms(20);
putc('z');
putc('s');
putc('l');
delay_ms(30);


alıcı kısmı,
#use rs232(baud=900,xmit=Pin_B2,rcv=Pin_B1,stream=RF) 

#int_rda   // RX ucuna veri gelince meydane gelen kesme
void serihaberlesme_kesmesi ()
{
   disable_interrupts(int_rda); // int_rda kesmesini pasif yap
for(;getch()!='x';)
{

}
a[0]=getc();
a[1]=getc();
a[2]=getc();

if (a[0]=='z' && a[1]=='s' && a[2]=='l' )
{degisim=1;

        output_high(pin_b0);
}
enable_interrupts(int_rda); // int_rda kesmesi aktif
return;
}

void main ( )
{
   enable_interrupts(GLOBAL);  // Aktif edilen tüm kesmelere izin ver
enable_interrupts(int_rda); // int_rda kesmesi aktif
   while(1) // Sonsuz döngü
   {

     }
}

ziyaretci

#4
getchar(); komutu enter'ı beklemez. Gelen veriyi 1 byte olarak değişkene aktarır.
int dizi[x]={};
int i=0;

#int_rda
Void veri_geldi()
{
disable_interrupts(int_rda);

dizi[i]=getchar();
i++;
}

prometyus2010

tşk arkadaşlar biraz uğraştıktan sonra şöyle birşey yaptım oldu gibi en azından isiste çalışıyor 

#int_rda
void kesmeoldu(){

oku=rcreg;

j=j+1;


if(kbhit()==0){


i=i+1;
}

if( i==7){i=0;kes=1;}

}

ama devremde deneyemedim pic18f452 kullanıyorum ve 3.3v ile çalıştırıyorum veri gönderecek pic 5v ile çalışıyor  haberleştirmeye çalışıyorum 
3.3v ile çalışan pici pc ye bağladım ama veri yollayamadım sanırım 3.3v ile çalıştığından veriyi yolayamıyorum pc algılayamıyor

ziyaretci

Max232 kullanıyor musun?

prometyus2010

elimde max232 yoktu 2 transistörlü bir devre yaptım pc rahatlıkla bilgi gönderiyorum