mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik UART Datenübertragung


Autor: Stefan Herfert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Ich habe ein Programm geschrieben das beim Schalten von Port B.0 der 
Ausgang B.3 angesteuert wird, und das B.3 wieder abgeschaltet wird, wenn 
B.1 geschaltet wird. Das Klappt auch alles ganz gut, aber ich würde 
gerne bei jedem schalten von B.0 und B.1 ein Signal über UART zum 
Rechner schicken.

Mein Problem ist, das ich kein Ordentliches Signal gesendet bekomme.

Der Microcontroller gibt bei Power ON :     HDC v0.1        aus.

Bei schalten von B.0 oder B.1 kommt jedes mal der "Begrüßungssatz" mit 
dabei, obwohl der im     Start, Power ON, Reset     Unterprogramm steht 
der eigendlich nur 1 mal durchläuft, und dann nicht wieder aufgerufen 
wird.

Also bei Reset (PORT B.1) sollte nur eine "6" gesendet werden, ich 
bekomme aber ein    " “6HDC v0.1 "   oder   " ‡66HDC v0.1 " .

Microcontroller: ATMEL   ATMEGA8L-8PU
Compiler: Sisy AVR


Hier das Programm:
; Reset and Interrupt vector             ; VNr.  Beschreibung    
            rjmp    main                 ; 1     POWER ON RESET    
            reti                         ; 2     Int0-Interrupt    
            reti                         ; 3     Int1-Interrupt    
            reti                         ; 4     TC2 Compare Match    
            reti                         ; 5     TC2 Overflow    
            reti                         ; 6     TC1 Capture    
            reti                         ; 7     TC1 Compare Match A    
            reti                         ; 8     TC1 Compare Match B    
            reti                         ; 9     TC1 Overflow    
            reti                         ; 10    TC0 Overflow    
            reti                         ; 11    SPI, STC Serial Transfer Complete  
            reti                         ; 12    UART Rx Complete    
            reti                         ; 13    UART Data Register Empty  
            reti                         ; 14    UART Tx complete    
            reti                         ; 15    ADC Conversion Complete  
            reti                         ; 16    EEPROM Ready    
            reti                         ; 17    Analog Comperator    
            reti                         ; 18    TWI (I²C) Serial Interface  
            reti                         ; 19    Store Program Memory Ready  
;---------------------------------------------------------------------------  
; Start, Power ON, Reset          
main:    ldi  r16,lo8(RAMEND)
      out  SPL,r16    ; Init Stackpointer LO
      ldi  r16,hi8(RAMEND)
      out  SPH,r16    ; Init Stackpointer HI
      cbi  DDRB,  0  ; B0 Eingang Draht
      sbi  PORTB,  0   ; B0 PullUP
      cbi  DDRB,  1  ; B1 Eingang Reset
      sbi  PORTB,  1  ; B1 PullUP
      sbi  DDRB,  2  ; LED Gruen
      sbi  PORTB,  2  ; Startup
      sbi  DDRB,  3  ; LED Rot
      sbi  UCSRB,  3
      ldi  r16,  23
      out  UBRRL,  r16
      rcall  putchar
      ldi  r17,  'H'
      rcall  putchar
      ldi  r17,  'D'
      rcall  putchar
      ldi  r17,  'C'
      rcall  putchar
      ldi  r17,  ' '
      rcall  putchar
      ldi  r17,  'v'
      rcall  putchar
      ldi  r17,  '0'
      rcall  putchar
      ldi  r17,  '.'
      rcall  putchar
      ldi  r17,  '1'
      rcall  putchar
      ldi  r17,  10
      rcall  putchar
      ldi  r17,  13
      rcall  putchar
;---------------------------------------------------------------------------  
mainloop:
      in r16,  PINB
      sbrs  r16,  0
      rjmp  loose
      sbrs   r16,  1
      rjmp  reset
      rjmp  mainloop
;---------------------------------------------------------------------------
loose:
      ldi  r18,  0b00001100
      out  PORTB,  r18
      ldi  r17,  '5'
      rcall  putchar
      ret
;---------------------------------------------------------------------------
reset:
      ldi  r19,  0b00000100
      out  PORTB,  r19
      ldi  r17,  '6'
      rcall  putchar
      ret
;---------------------------------------------------------------------------
putchar:  sbis  UCSRA,  5
      rjmp  putchar
      out  UDR,  r17
      ret


Ich würde mich über jeden Lösungsansatz sehr freuen.

Grüße

Stefan

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du darfst in der mainloop die Unterroutinen loose und reset nicht mit 
rjmp anspringen und dort dann ein ret machen - wohin soll denn das ret 
gehen, was liegt auf dem Stack (nix!)?

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.