logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[atmega8][C]Błedy przy transmisji 0x00 przez uart

r06ert 13 Paź 2008 22:07 1376 3
REKLAMA
  • #1 5628810
    r06ert
    Poziom 25  
    
    ...
    void InitUSART(unsigned long int bitrate ) // bitrate - szybkosc portu
    {
       //ladowanie rejestrow odp za szybkosc
       UBRRH = (unsigned char)(((F_CPU/(16UL*bitrate))-1)>>8);
       UBRRL = (unsigned char)((F_CPU/(16UL*bitrate))-1);
       // 8bitów,
       UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);
       // Otwarty kanal odbioru i nadawania
       UCSRB = (1<<RXEN)|(1<<TXEN);
    
    }
    
    void TransmitUSART(const unsigned char data )  // funkcja wysłania bajtu po RS232
    {
       while ( !( UCSRA & (1<<UDRE)) );
       UDR = data;
    } 
    
    int main(void){
    	unsigned long int bauda = 19200; 
    	InitUSART(bauda);
    
    	unsigned char abc=0;
      	while(abc < 11)
      	{
    		TransmitUSART(00);
    		abc++;
    	}
    }
    
    

    Witam! mam taki problem...
    dlaczego ten program wysyła tylko jeden znak? Transmisja innych znaków przebiega poprawnie, ale jak chce wysłać kilka pod rząd 0x00 to wysyła mi tylko jeden :/ dlaczego? Podejrzewam ze to kwestia optymalizacji, czy mam racje? Środowisko to AVRStudio.

    z góry dzięki
    ...chyba wrócę do assemblera ;)

    Poprawiłem tytuł - regulamin p.11.1
    [zumek]
  • REKLAMA
  • #2 5629033
    BoskiDialer
    Poziom 34  
    Tutaj raczej nie ma czego zoptymalizować, żeby zamiana wartości na zero na coś wpłynęła. Prawdopodobnie problem nie występuje lub pojawia się niedopasowanie prędkości - spróbuj ustawić dwa bity stopu.
  • REKLAMA
  • #3 5629070
    r06ert
    Poziom 25  
    Dzięki za odpowiedź. ...już próbowałem, zmniejszałem nawet prędkość 600b/s i też nic.
  • #4 5629763
    r06ert
    Poziom 25  
    zauważyłem jedno ...zamiast kwarcu 11.0592MHz mam 11.059MHz Czy to może w jakiś znaczący sposób wpłynąć na prace UARTU?

    EDIT:
    problemem był terminal na PCta ;) Terminal v1.9b by br@y++ miał problem z odebraniem więcej niż jednego znaku 0x00. Po odebraniu pierwszego nie odbierał już pozostałych bajtów. Zainstalowałem X-CTU i wszystko działa :)

    pozdrawiam i dziękuje za pomoc.
REKLAMA