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

[ATmega16][USART][asm] - wysyłanie całych łańcuchów

cys_ek 25 Cze 2008 21:35 2687 3
REKLAMA
  • #1 5285238
    cys_ek
    Poziom 10  
    Witam,
    w jaki sposób przesyłać cały łańcuch, a nie żeby był rozbity na litery(różnicę widać na snifferach i w moim tunerze sat, który w taki sposób nie chce działać)?

    moje ustawienia i procedury:
    // inicjacja UASART
    USART_Init:
    
    ; Ustawianie predkosci
    	ldi R16,high(MYUBRR)
    	out UBRRH, R16
    
    	ldi R16,low(MYUBRR)
    	out UBRRL, R16
    
    ; Walczenie odbiornika i nadajnika
    	ldi R16, (1<<RXEN)|(1<<TXEN)
    	out UCSRB,R16
    
    ; Ustawienia ramki: 8bitow, 1 stop
    	ldi R16, (1<<URSEL)|(0<<USBS)|(3<<UCSZ0)
    	out UCSRC,R16
    ret
    
    
    // wyslanie znaku
    USART_Transmit:
    
    ; Czekanie na pusty bufor wysylania
    	sbis UCSRA,UDRE
    	rjmp USART_Transmit
    
    ; 'Wyslanie' znaku z R16
    	out UDR,R16
    ret
    
    
    // wyslanie lancucha z pamieci programu o adresie Z do R17
    USART_String2:
    ; ustawianie ile brakuje do 0
    	com R17	
    	inc r17	
    
    USART_String2_:
    ; czy juz wszystkie znaki
    	tst R17
    	breq USART_String2_koniec
    
    ; pobieranie znaku
    	lpm R0, Z+
    	mov R16,R0
    	call USART_Transmit
    	inc R17
    	rjmp USART_String2_
    USART_String2_koniec:
    ret
  • REKLAMA
  • #2 5286453
    shg
    Poziom 35  
    cys_ek napisał:
    w jaki sposób przesyłać cały łańcuch, a nie żeby był rozbity na litery(różnicę widać na snifferach i w moim tunerze sat, który w taki sposób nie chce działać)?


    Jak się przesyła cały łańcuch to trzeba go rozbić na litery, chyba że ma to być coś innego niż RS-232.
    O co chodzi z tą różnicą?, czym się jedno od drugiego różni?
  • REKLAMA
  • #4 5286686
    cys_ek
    Poziom 10  
    nie czekam na 0x00 bo muszę przesyłać różne znaki i null bardzo często występuje.No właśnie wiem że trzeba znak po znaku wysyłać :/ A może jakbym przed wysłaniem łańcucha ustawić RTS=1 i później wysyłać to by wtedy połączyły się w jeden 'pakiet' (a na końcu ustawić RTS=0). Lub jakieś inne linie. Szukałem w Internecie ale nie znalazłem niczego podobnego.

    w załącznikach są logi sniffera HHD Free Serial Port Monitor
    -puste.csv.txt - komunikacja programu FKE ze Fergusonem (i tam widać ze w jednej linii IRP_MJ_WRITE jest wysyłanych więcej znaków, tak jakby w pakiecie)
    -uC.csv.txt - puminikacja putty z atmega, przy pomocy linii TxD RxD (DTR jest zmostowane z DSR i RTS z CTS) od linii 44 widać ze każdy znak jest wysyłany rozdzielnie a nie w 'pakiecie'
REKLAMA