seri porttan veri yollama???

Başlatan satilla, 05 Temmuz 2012, 13:56:46

satilla

yazdığım kod kütüphanesiyle tek tek data gönderebiliyorum

void Transmit( unsigned char data )
{
//buffer bosalana kadar bekle
while ( !( UCSRA & (1<<UDRE))) 
;
/* Copy 9th bit to TXB8 */
UCSRB &= ~(1<<TXB8);
if ( data & 0x0100 )
UCSRB |= (1<<TXB8);

UDR = data;
}


void main()

{

Transmit('a');
Transmit('b');
Transmit('c');
Transmit('d');

}



ancak ben bu veriyi

Transmit('a b c d ');


şeklinde tek bir defada göndermek istiyorum hem kod yazarken kolaylık olacak hemde örneğin 26 sayısını göndermek için 2 bytelık veri göndermiş olmayacağım




justice_for_all

'AB' olarak gönderebilirsin 8 biti ayırarak ama abcd biraz zor gibi ama 26 sayısını 2 ve 6 diye ayırarak 8 biti ise 4 bit 4 bit ayırarak yapabilirsin.
Deneyip de başaramayanları değil, yalnızca denemeye bile kalkışmayanları yargıla.   Gökhan Arslanbay

satilla

aslında istediigm bunun gibi


Serial.print("ATD05321234567;"); // Seri porttan arayacağımız numarayı gönder

kendi kütüphanesi olan derleyiciler bunu sağlıyor
hi tech tede bunu yaptım ama atmelde uyduramadım bir türlü

justice_for_all

şimdi string ifadeyi bi kerede gönderemezsiniz zaten.tam olarak soruyu anlamadım biraz daha açarmısın.string mi göndermek istiyosun yoksa char olarakmı?
Deneyip de başaramayanları değil, yalnızca denemeye bile kalkışmayanları yargıla.   Gökhan Arslanbay

esensoy

void dizi_gonder(const char *yazi){
   while(*yazi){
      transmit(*yazi++);
   }
}


bu fonksiyon ile yapabilirsin
En tehlikeli an "zafer" anıdır.

satilla

string olarak göndermeye çalışıyorum zaten char olarak göndermeye kalksam bile ekranda ASCII karşılığı görünüyor


emre hocam sizin koduda derlediğimde bu warning çıkıyor ekrandada görününe hiç birşey yok

../a.c:94: warning: passing arg 1 of `dizi_gonder' makes pointer from integer without a cast

void transmit( unsigned char data )
{

while ( !( UCSRA & (1<<UDRE))) 
;

UCSRB &= ~(1<<TXB8);
if ( data & 0x0100 )
UCSRB |= (1<<TXB8);

UDR = data;
}



void dizi_gonder(const char *yazi)
{
   while(*yazi)
   {
      transmit(*yazi++);
   }
}


dizi_gonder('a');

esensoy

ccs in kütüphanesinden idi bu fonksiyon,
sen hangi ide yi kullanıyorsun?

altta ki gibi dener misin?
void Transmit( unsigned char data )
{
//buffer bosalana kadar bekle
while ( !( UCSRA & (1<<UDRE))) 
;
/* Copy 9th bit to TXB8 */
UCSRB &= ~(1<<TXB8);
if ( data & 0x0100 )
UCSRB |= (1<<TXB8);

UDR = data;
}
void dizi_gonder(const char *yazi){
   while(*yazi){
      transmit(*yazi++);
   }
}

char dizi[20];

void main()

{

dizi="Merhaba Dunya";
dizi_gonder(dizi);

while(1);
}
En tehlikeli an "zafer" anıdır.

satilla

#7
avr studio kullanıyorum ve bu hatayı alıyorum şimdi


../a.c:88: error: incompatible types in assignment

dizi="Merhaba Dunya";
dizi_gonder(dizi);

bu satır için hata veriyor

mesaj birleştirme:: 05 Temmuz 2012, 21:46:34

char dizi[20]=" ";



void send_string(char *str)
{
   while(*str!=0)
   {
   transmit(*str++);
   }                   

}


sprintf(dizi,"Merhaba");
send_string(dizi);


bu şekilde sonuca ulaştım umarım başkalarınında işine yarar teşekkür ederim cevaplarınız için üstadlar