Rx-Tx Veri Gönderimi ?

Başlatan bladekel, 10 Ocak 2015, 00:14:39

bladekel

Arkadaşlar selam.

2 tane 16f877a ile rx-tx devre kurmak istiyorum. Yazılımını pic c ile yazıyorum.

Bildiğimiz, şu garaj kapılarını açar uzaktan kumanda sistemi gibi düşünelim.

Alıcının ve vericinin eşleşmesi için öncelikle 8bit bir veri göndereceğim alıcıya, ondan sonra sistem çalışacak.

Veriyi gönderiyorum, alıcıya ulaşıyor,görüyorum ancak iki veriyi eşleştirme yaparken hep sorunla kaşılaşıyorum.

Mesala 10101010 vericiden çıktı, 10101010 alıcıya geldi. İkisinin eşitliği durumunda sistemin çalışmasını sağlayan bir kod yazacağım. Ancak olmuyor.

Verici tarafı kodu :
char text[8];
text[]="10101010";
puts(text);


Alıcı tarafı kodu:
char text[8];
gets(text);
if(text=="10101010")
{
output_high(PIN_B0);
}


Kod bu şekilde yazıldığı zaman eşleşmiyor.

Biraz araştırdım, stringlerde verinin sonuna Null olarak \0 ekliyormuş. Sanırım sorun bu, ama çözümü bulamadım.

Yardımlarınızı bekliyorum...

OG

RF için UYANDIRMA ve ON TANIMLAMA dataları gerek.
Çok konusuldu forumda.
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

Kabil ATICI

programda veriyi okurken, kesme kullanıyor musun?
Yoksa kesme kullanmadan mı okumaya çalışıyorsun.?
Kesme kullanmıyorsan, sen başka bir iş yaparken veri gerilerse senin verinin okuman şansa kalır.
O şekilde göndereceğin karşılığı olan 0xAA gönder. Tek bir karakter. Senin gönderdiğin 8 bayt. 8 bit değil dikkat et.
Bir de alıcı ve vericin her ikisi de aynı seri port ayarlarına sahip olmalıdır. (Bunu yaptığını kabul edelim)
ambar7

semihel

puts ile veri gonderimi yaptıgında text dizisindekiler karakter karakter gider. senin de bufferında aldıgın datalarıda "==" ile karsılastırman zor, string kutuphanesinden strstr yada stricmp fonksiyonlarını kullanrak alınan veriyi karşılastırman lazım. örneğin char txt[5] = "selam" giye puts ile bi veri gönderdin, bunu gets ile bir buffera alman lazım, char buff[5] gibi sonrasındada if(stricmp(buff, "selam")==0){} gibi bi karşılastıma yaparak gönderdiğin string ifadeyi karşılastıra bilirsin.

hasankara

Emin olamadım ve xc8 le verdiğin kodun text[]="10101010"; bu satırını derlemeyi denedim ve beklediğim gibi expression syntax hatası aldım. öncelikle sen kodunu derleyebildiğine emin misin? bu satırı açıklamaya çalışırsam; "10101010" şeklinde 8 adet 8 bitlik karakterlerden oluşan bir string elde edersin. ve bu stringi tırnak içinde başka bir şeye eşitle dediğin zaman bu stringin adresini eşitle demiş olursun. bu sebeple eşitliğin sol tarafında, mantıklı bir işlem olabilmesi için ya bir pointer olmalı yada içerisinde adres taşıdığını bildiğin bir değişken. yani bu stringin her hücresini tek tek text[] dizisi hücrelerine yükleme işlemi yapmaz, sadece stringin adresini eşitlemiş olursun  diye biliyorum.  bir ihtimal derleyiciye özgü bir kullanım şekli olabilir.

8 adet 8 bitlik karakterler deyimini açacak olursam;
senin stringinin "10101010" iken yer kaplama şekli binary olarak: 00110001, 00110000, 00110001 ... hex olarak: 0x31, 0x30, 0x31 ...
http://upload.wikimedia.org/wikipedia/commons/1/1b/ASCII-Table-wide.svg

Alıntı YapAlıcının ve vericinin eşleşmesi için öncelikle 8bit bir veri göndereceğim alıcıya
bu cümlenden çıkarımımla yapmak istediğin şeyin esasında 1 byte göndermek olduğunu anlıyorum.
bu sebeple string oluşturmana gerek yok, putc(0b10101010); şeklinde gönderip, if(getc()==0b10101010){...} şeklinde aldığını karşılaştırmayı deneyebilirsin.

bladekel

#5
Arkadaşlar hepinize teşekkür ediyorum.

Öncelikle kesme kullandım, kodu okuyabiliyorum, ve derleme yapabiliyorum. Kodu direk kopyala yapıştır yapmamıştım, kendim mesajı yazarken elle eklemiştim. Sizde derleme yapmamış olabilir. Malum günün yorgunluğu, gece iyice bitkinleştirdi beni. O yüzden ufak tefek yazım hataları olmuş olabilir.

Yukarıya sadece kodun, çözümleyemediğim kısmını yazmıştım.

Alıntı yapılan: semihel - 10 Ocak 2015, 01:29:47
puts ile veri gonderimi yaptıgında text dizisindekiler karakter karakter gider. senin de bufferında aldıgın datalarıda "==" ile karsılastırman zor, string kutuphanesinden strstr yada stricmp fonksiyonlarını kullanrak alınan veriyi karşılastırman lazım. örneğin char txt[5] = "selam" giye puts ile bi veri gönderdin, bunu gets ile bir buffera alman lazım, char buff[5] gibi sonrasındada if(stricmp(buff, "selam")==0){} gibi bi karşılastıma yaparak gönderdiğin string ifadeyi karşılastıra bilirsin.


Arkadaşım , sağolasın. Aradağım komut buymuş. Stricmp komutuyla işimi halletim.

Halbuki bunu da denemiştim ama gene olmamıştı.

Neyse gene de çok sağolasın, teşekkür etiim....