- SF800 Solar Speicher Tutorial         
Ergebnis 11 bis 15 von 15

Thema: Soft UART sendet, empfängt aber nicht

Baum-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #12
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    So, im Nachhinein betrachtet ohnehin klar:
    Man muss/darf (wenn man INKEY() verwenden will) natürlich nur das speichern, was NICHT 0 ist. Als Endeerkennung einer Nachricht ist "0" wenig geeignet.
    Wenn man z.b <CR> als Nachricht-Ende nimmt ( was Bascom-PRINT freiwillig tut, wenn man ihn nicht hindert), müsste die Receive-Schleife lauten:
    Code:
        DO  
            inchar= inkey(#2)
            if inchar > 0
                  incr myidx
                  myarr(myidx) = inchar
            end if
        LOOP until  inchar = 27  
    
        myarr(myidx) = 0    ' ev. ein String-ende aus dem <CR> machen
    unter der Annahme, dass das Speichern nicht zu langsam ist. Müsst man ausrechnen, bis zu welcher baudrate es reicht.
    Sonst ist wohl eher "INPUT #" oder GET # geeignet


    Wen es interessiert, so sieht INKEY() von innen aus:
    Code:
    open comb.4:9600,8,n,1 
    
    L_0x00DE:   ' delay 1/2 bit --------------------------
     PUSH r24
     PUSH r25
     LDI r24,0x08
     LDI r25,0x00
    L_0x00E6:
     SBIW r24,0x0001
     BRNE L_0x00E6
     POP r25
     POP r24
     RET
    
    ' inkey (#1)  ---------------------------------
    L_0x00F0:
     SBIS 0x0016,4      ' check PortB.4
     RJMP L_0x00F8      ' start
     CLR r24            ' return 0
     RET
    L_0x00F8:
     LDI r18,0x09       ' counter = 9 (8 + 1 )
    L_0x00FA:           ' loop until PortB.4 = 0
     SBIC 0x0016,4      ' 
     RJMP L_0x00FA  
     RCALL L_0x00DE     ' delay 1/2 bit
    L_0x0100:
     RCALL L_0x00DE     ' delay 1/2 bit
     RCALL L_0x00DE     ' delay 1/2 bit
    CLC                ' clear carry
     SBIC 0x0016,4      ' PortB.4 = ?
     SEC                ' = 1---> set Carry
     DEC r18            ' decr counter
     BREQ L_0x0114      ' counter= 0 --> exit
     ROR r24            ' shift carry into r24:r25
     ROR r25
     RJMP L_0x0100      ' next bit
    L_0x0114:
     RET                ' R24 = inbyte  (that's it)
    Der Unterschied von Waitkey ist minimal
    Code:
    ' waitkey (#1)  ---------------------------------
    L_0x00F0:
     SBIS 0x0016,4 ' wait PortB.4 = 0
     RJMP L_0x00F6 ' start 
     RJMP L_0x00F0 ' cont'd wait    Das ist der einzige Unterschied 
    
    
    Geändert von PicNick (02.01.2012 um 15:54 Uhr)
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

Ähnliche Themen

  1. RN-Funk sendet, empfängt aber nicht
    Von DEAF BOY im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 1
    Letzter Beitrag: 28.12.2011, 16:59
  2. Asuro sendet (und empfängt?) nichts
    Von Hannibal1412 im Forum Asuro
    Antworten: 13
    Letzter Beitrag: 06.02.2010, 13:28
  3. Antworten: 2
    Letzter Beitrag: 04.08.2008, 03:31
  4. 18f1320 USART sendet aber empfängt nicht
    Von stalky13 im Forum PIC Controller
    Antworten: 1
    Letzter Beitrag: 20.06.2007, 19:06
  5. UART ermöglicht Senden, aber kann nicht Empfangen
    Von batti112 im Forum C - Programmierung (GCC u.a.)
    Antworten: 3
    Letzter Beitrag: 18.09.2004, 15:05

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Solar Speicher und Akkus Tests