Şimdi Ara

Terminalden veri alırken bu hata neden oluyor?

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
1 Misafir - 1 Masaüstü
5 sn
1
Cevap
0
Favori
410
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
Öne Çıkar
0 oy
Sayfa: 1
Giriş
Mesaj
  • Proteusta virtual terminalden 877 yardımıyla veri almaya çalışıyorum.Veri alış veriş hızı 9600 bit/s.
    Sorunum şu;

    #define BAUD 104

    unsigned char VeriAl(){
    unsigned char temp = 0;
    char i;
    char time;

    while(RX);
    // for(time=0; time<5; time++) DelayUs(BAUD);
    for(time=0; time<5; time++) DelayUs(BAUD/2);

    for(i=0; i<8; i++){
    if(RX) temp |= 128;
    for(time=0; time<5; time++) DelayUs(BAUD);
    temp = temp >> 1;
    }

    for(time=0; time<5; time++) DelayUs(BAUD/2);

    return temp;

    }

    Kod bu haliyle doğru çalışıyor.Ancak // ile iptal ettiğim kodla beraber çalıştığında ilk 0.bit kaçıyor.Şöyleki;
    B Tuşuna bastığımda
    01000010 verisini almam gerekirken
    00100001 verisini alıyorum.
    Ancak protokolü incelediğimde
    for(time=0; time<5; time++) DelayUs(BAUD);
    for(time=0; time<5; time++) DelayUs(BAUD/2);
    bu kadarlık bir gecikme koymam gerektiğini anlıyorum.Çünkü protokole göre start biti gelene kadar hat lojik-1'de bekliyor.Start biti geldiğini while(RX) ile anlıyorum.Daha sonra 104us bekliyorum ki start biti geçsin.Ondn sonra da 52us kadar bekleyip LSB bitinin ortasında bir yere geliyorum.Tam bu noktada (ortadayken) LSB bitini alıyorum.Ama gel gelelimki uygulamada böyle olmuyor, LSB biti kaçıyor ve 1.bitten başlıyorum almaya.Ancak 104us beklemeden, direk START biti geldiği anda ortalayıp, start bitinin ortasından veri almaya başlayınca doğru alıyor.

    Acaba düşüncemin neresinde yanlışlık var?



    _____________________________




  • Yapay Zeka’dan İlgili Konular
    Daha Fazla Göster
    
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.