merhaba arkadaşlar, udeanın rf modüllerini kullanmaya çalışıyorum, modülleri basit bir kodla çalıştırabildim, ancak asıl çalıştırmak istediğim kod B portunda değişiklik olduğunda kesme fonksiyonun içinde putc() kullanarak veri iletebilmek, ancak bunu bir türlü başaramadım, öncelikle basit olarak şunu denedim
****************verici****************
#include <16F877A.H>
#fuses XT,NOWDT,NOPROTECT,BROWNOUT,PUT,NOLVP
#use delay (clock=4000000)
#use rs232 (baud=600, xmit=PIN_C6)
void main()
{
enable_interrupts(int_RB);
enable_interrupts(GLOBAL);
set_tris_b(0xFF);
while(1)
{
putc(0x55);
putc(0x55);
putc(0x55);
putc(0x55);
putc(0x55);
putc(0x00);
putc(0x00);
putc(0x00);
putc(0x00);
putc(0x00);
putc(0xff);
putc(0xff);
putc(0xff);
putc(0xff);
putc(0xff);
putc(0xdd);
putc(0xcc);
}
}
#int_RB
void kesme()
{
putc('y');
}
*****************alıcı**************
#include <16F877A.H>
#fuses XT,NOWDT,NOPROTECT,BROWNOUT,PUT,NOLVP
#use delay (clock=4000000)
#include <lcd.c>
#use rs232 (baud=600, rcv=PIN_C7)
/*****************************degiskenler****************************/
int say1=0;
int say2=0;
int i=0;
char x;
void read()
{
if(getc()==0xdd)
{if(getc()==0xcc)
{ x=getc();}
}
}
void fivebyte1()
{
while(1)
{
if(getc()==0xff)
{say2++;
if(say2>=5)
{say2=0;
read();
break;
}
}
}
}
void fivebyte0()
{
while(1)
{
if(getc()==0x00)
{say1++;
if(say1>=5)
{say1=0;
fivebyte1();
break;
}
}
}
}
void main()
{
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_CCP1(CCP_OFF); // CCP1 birimi devre dışı
while(1)
{
fivebyte0();
if(x=='y')
{output_high(pin_a2);
delay_ms(500);
output_low(pin_a2);
delay_ms(500);}
}
}
ama çalıştıramadım, acaba hata nerde, illa while1()'in içinde mi veri göndermem lazım, yardımcı olursanız çok sevinirim...
#int_RB
void kesme()
{
putc('y');
}
yerine
#int_RB
void kesme()
{
putc(0x55);
putc(0x55);
putc(0x55);
putc(0x55);
putc(0x55);
putc(0x00);
putc(0x00);
putc(0x00);
putc(0x00);
putc(0x00);
putc(0xff);
putc(0xff);
putc(0xff);
putc(0xff);
putc(0xff);
putc(0xdd);
putc(0xcc);
putc('y');
putc('y');
putc('y');
}
olarak dener misiniz? Vericideki "while" içini de silebilirsiniz, yani bu deneme uygulamanız için sonsuz döngüye gerek yok. Sadece kesme gelince kesme alt programı çalışsın yeter. İyi çalışmalar.
@ferdem
dediğiniz gibi de denedim aslında
*****************verici**************
#include <16F877A.H>
#fuses XT,NOWDT,NOPROTECT,BROWNOUT,PUT,NOLVP
#use delay (clock=4000000)
#use rs232 (baud=600, xmit=PIN_C6)
char data;
void byte_yolla(data)
{
putc(0x55);
putc(0x55);
putc(0x55);
putc(0x55);
putc(0x55);
putc(0x00);
putc(0x00);
putc(0x00);
putc(0x00);
putc(0x00);
putc(0xff);
putc(0xff);
putc(0xff);
putc(0xff);
putc(0xff);
putc(data);
putc(data);
putc(data);
}
void main()
{
enable_interrupts(int_RB);
enable_interrupts(int_timer1);
enable_interrupts(int_timer0);
enable_interrupts(int_timer2);
enable_interrupts(global);
set_tris_b(0x10);
while(1)
{
}
}
#int_RB
void kesmeAltFonk()
{
data='a';
byte_yolla(data);
}
*********alıcı kodu*****
#include <16F877A.H>
#fuses XT,NOWDT,NOPROTECT,BROWNOUT,PUT,NOLVP
#use delay (clock=4000000)
#include <lcd.c>
#use rs232 (baud=600, rcv=PIN_C7)
/*****************************degiskenler****************************/
int say1=0;
int say2=0;
char x;
void read()
{
x=getc();
if(x=='a')
{output_high(pin_a2);
delay_ms(500);
output_low(pin_a2);}
}
void fivebyte1()
{output_high(pin_a0);
while(1)
{
if(getc()==0xff)
{say2++;
if(say2>=5)
{say2=0;
read();
break;
}
}
}
}
void fivebyte0()
{output_high(pin_a3);
while(1)
{
if(getc()==0x00)
{say1++;
if(say1>=5)
{say1=0;
fivebyte1();
break;
}
}
}
}
void main()
{
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_CCP1(CCP_OFF); // CCP1 birimi devre dışı
lcd_init();
while(1)
{
fivebyte0();
}
}
lakin yine rf modüllerde tık yok:(( yardımcı olabilirseniz çok sevinirim
peki modülsüz çalışıyormu kablo ile bağlantısını yapın deneyin birde öyle
m0odüller keymark ise eğer vericiye 3V vermek gerekir bu herkesin başına gelen bir durum bende dahil :D
Umarım bu yazı size yardımcı olur:
atx-arx RF Modüllerinizi Test Edin! (http://www.fatiherdem.net/icerik.asp?yer=gst&id=60)
Bir bakın bakalım, olmazsa yine düşünürüz. İyi çalışmalar.