Picproje Elektronik Sitesi

MİKRODENETLEYİCİLER => Atmel => Konuyu başlatan: satilla - 05 Temmuz 2012, 13:56:46

Başlık: seri porttan veri yollama???
Gönderen: satilla - 05 Temmuz 2012, 13:56:46
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



Başlık: Ynt: seri porttan veri yollama???
Gönderen: justice_for_all - 05 Temmuz 2012, 14:03:44
'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.
Başlık: Ynt: seri porttan veri yollama???
Gönderen: satilla - 05 Temmuz 2012, 14:09:14
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ü
Başlık: Ynt: seri porttan veri yollama???
Gönderen: justice_for_all - 05 Temmuz 2012, 14:14:33
ş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ı?
Başlık: Ynt: seri porttan veri yollama???
Gönderen: esensoy - 05 Temmuz 2012, 14:20:01
void dizi_gonder(const char *yazi){
   while(*yazi){
      transmit(*yazi++);
   }
}


bu fonksiyon ile yapabilirsin
Başlık: Ynt: seri porttan veri yollama???
Gönderen: satilla - 05 Temmuz 2012, 14:29:27
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');
Başlık: Ynt: seri porttan veri yollama???
Gönderen: esensoy - 05 Temmuz 2012, 14:35:01
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);
}

Başlık: Ynt: seri porttan veri yollama???
Gönderen: satilla - 05 Temmuz 2012, 14:40:15
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