Picproje Elektronik Sitesi

DERLEYİCİLER => CCS C => Konuyu başlatan: kadir55555 - 11 Kasım 2018, 17:37:08

Başlık: 2 Pic Rs232 Karşılıklı Haberleşmesi
Gönderen: kadir55555 - 11 Kasım 2018, 17:37:08
Merhaba arkadaşlar 2 adet pic i rs232 ile #intrda kullanarak haberleştirmeye çalışıyorum piclerden birisi 877a diğeri 628a her denetleyicide bir adet led mevcut bunun yanı sıra 877a üzerinde bir adet buton ve bir adet de lcd mevcut 877a üzerindeki butona basarak a0 girişinden bilgiyi alıyorum rs232 ile 628a ya gönderiyorum burada int_rda kesmesi içerisinde an0 çıkışını aktif ederek ledi yakıyorum 628a ya gelen bilgiyi daha sonra if komutuyla karşılaştırarak sonuca göre geri 877a entegresine gönderiyorum fakat 877a int_rda kesmesine girmiyor. Bu konuda beni yönlendirirseniz çok sevinirim. Kodlarıda aşağıdaki gibidir.

#include <16f877a.h>
#fuses XT,NOWDT,NOWRT,NOCPD,NOLVP,NOPUT,NODEBUG,NOPROTECT,NOBROWNOUT
#use delay(clock=4m)
#use rs232(baud=9600, xmit=pin_c6, rcv=pin_c7)
#use fast_io(b)
#define use_portb_lcd TRUE
#include <lcd2.c>

int a;
void uyan()
{
putc(0x55);
putc(0x00);
putc(0xff);
return;
}



#int_rda
void serihaberlesme ()
{
disable_interrupts(int_rda);


a=getch();
if(a=='b')
{
lcd_init();
delay_ms(10);

lcd_gotoxy(1,1);
printf(lcd_putc,"LED_1");



output_high(pin_a1);
}

}







void main()
{
setup_psp(PSP_DISABLED);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
setup_CCP1(CCP_OFF);
setup_CCP2(CCP_OFF);

enable_interrupts(GLOBAL);


set_tris_c(0b10000000);
output_c(0x00);


set_tris_a(0b00000001);
output_a(0x00);



set_tris_b(0x00);
output_B(0x00);



int c;
lcd_init();
delay_ms(10);

lcd_gotoxy(1,1);
printf(lcd_putc,"HOSGELDINIZ");

while(true)
{enable_interrupts(int_rda);



if(input(pin_a0))
{
uyan();
putc(0x01);
}

}


}


#include <16f628a.h>
#fuses INTRC,NOWDT,NOPUT,NOLVP,NOCPD,NOBROWNOUT,NOPROTECT
#use delay(clock=4m)
#use rs232 (baud=9600, xmit=pin_b2, rcv=pin_b1)

int c;
void uyan()
{
putc(0x55);
putc(0x00);
putc(0xff);
return;
}

#int_rda
void serihaberlesmekesmesi()
{
disable_interrupts(int_rda);
c=getch();
if(c==0x01)
{
output_high(pin_a0);



}
}

void main()
{
enable_interrupts(GLOBAL);
 
   setup_timer_1(T1_DISABLED);     
   setup_timer_2(T2_DISABLED,0,1);
   setup_CCP1(CCP_OFF);           
   
int A=0x01;   

while(1)
{
enable_interrupts(int_rda);
if(c==0x01)
{
delay_ms(100);
uyan();
putc('b');
}

}

}



Başlık: Ynt: 2 Pic Rs232 Karşılıklı Haberleşmesi
Gönderen: ziyaretci - 22 Kasım 2018, 01:03:47
Stop biti ve parity biti ayarı yapılmamış. Bu ayarlar yazılmadığında varsayılan olarak tanımlımıdır(stop=1, parity=n gibi) bilmem. Bunun dışında devre şemanızdan emin olmak gerekiyor.

Rx->Tx
Tx->Rx

Ek olarak giriş-çıkış ayarları kontrol edilmeli. Rx giriş, Tx çıkış.
Başlık: Ynt: 2 Pic Rs232 Karşılıklı Haberleşmesi
Gönderen: fide - 22 Kasım 2018, 08:07:33
Pin_A0 pull_up ile vcc ye bağlı bir anahtar olarak düşünürsek
İf(input(pin_a0) ==0) şeklinde düzeltme gerekir ki anahtara basınca 0 olduğunu algılayıp veri göndersin.

Diğer bir konu(forumda da defalarca yazıldı çizildi.) :
İki mcu haberleşecekse önce veri alacak tarafta yazılımı geliştirin ve bilgisayardan usb seri dönüştürücü ile diğer mcunun göndereceği veriyi bilgisayardan gönderip test edin.

Her iki yazılımda bulunabilecek küçük kod hataları sizi günlerce uğraştırır.
Bu yüzden alıcı tarafı hazırlayın. Bilgisayardan gönderip, veriyi alıp almadığına bakın. Hatayı ona göre ayarlayın.

@erkantr67 belirttiği gibi rs232 çapraz bağlanır. Rx karşıda tx e, tx -> rx e bağlanır.

Önce bilgisayardan veri gönderip kontrol edin, alıcı çalıştıktan sonra aynı şekilde verici tarafı bilgisayara bağlar denersiniz. İki taraf da düzgün çalışıyorsa birbirine bağlayıp denersiniz.