Forum: Mikrocontroller und Digitale Elektronik UART Datenübertragung


von Stefan Herfert (Gast)


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:
1
; Reset and Interrupt vector             ; VNr.  Beschreibung    
2
            rjmp    main                 ; 1     POWER ON RESET    
3
            reti                         ; 2     Int0-Interrupt    
4
            reti                         ; 3     Int1-Interrupt    
5
            reti                         ; 4     TC2 Compare Match    
6
            reti                         ; 5     TC2 Overflow    
7
            reti                         ; 6     TC1 Capture    
8
            reti                         ; 7     TC1 Compare Match A    
9
            reti                         ; 8     TC1 Compare Match B    
10
            reti                         ; 9     TC1 Overflow    
11
            reti                         ; 10    TC0 Overflow    
12
            reti                         ; 11    SPI, STC Serial Transfer Complete  
13
            reti                         ; 12    UART Rx Complete    
14
            reti                         ; 13    UART Data Register Empty  
15
            reti                         ; 14    UART Tx complete    
16
            reti                         ; 15    ADC Conversion Complete  
17
            reti                         ; 16    EEPROM Ready    
18
            reti                         ; 17    Analog Comperator    
19
            reti                         ; 18    TWI (I²C) Serial Interface  
20
            reti                         ; 19    Store Program Memory Ready  
21
;---------------------------------------------------------------------------  
22
; Start, Power ON, Reset          
23
main:    ldi  r16,lo8(RAMEND)
24
      out  SPL,r16    ; Init Stackpointer LO
25
      ldi  r16,hi8(RAMEND)
26
      out  SPH,r16    ; Init Stackpointer HI
27
      cbi  DDRB,  0  ; B0 Eingang Draht
28
      sbi  PORTB,  0   ; B0 PullUP
29
      cbi  DDRB,  1  ; B1 Eingang Reset
30
      sbi  PORTB,  1  ; B1 PullUP
31
      sbi  DDRB,  2  ; LED Gruen
32
      sbi  PORTB,  2  ; Startup
33
      sbi  DDRB,  3  ; LED Rot
34
      sbi  UCSRB,  3
35
      ldi  r16,  23
36
      out  UBRRL,  r16
37
      rcall  putchar
38
      ldi  r17,  'H'
39
      rcall  putchar
40
      ldi  r17,  'D'
41
      rcall  putchar
42
      ldi  r17,  'C'
43
      rcall  putchar
44
      ldi  r17,  ' '
45
      rcall  putchar
46
      ldi  r17,  'v'
47
      rcall  putchar
48
      ldi  r17,  '0'
49
      rcall  putchar
50
      ldi  r17,  '.'
51
      rcall  putchar
52
      ldi  r17,  '1'
53
      rcall  putchar
54
      ldi  r17,  10
55
      rcall  putchar
56
      ldi  r17,  13
57
      rcall  putchar
58
;---------------------------------------------------------------------------  
59
mainloop:
60
      in r16,  PINB
61
      sbrs  r16,  0
62
      rjmp  loose
63
      sbrs   r16,  1
64
      rjmp  reset
65
      rjmp  mainloop
66
;---------------------------------------------------------------------------
67
loose:
68
      ldi  r18,  0b00001100
69
      out  PORTB,  r18
70
      ldi  r17,  '5'
71
      rcall  putchar
72
      ret
73
;---------------------------------------------------------------------------
74
reset:
75
      ldi  r19,  0b00000100
76
      out  PORTB,  r19
77
      ldi  r17,  '6'
78
      rcall  putchar
79
      ret
80
;---------------------------------------------------------------------------
81
putchar:  sbis  UCSRA,  5
82
      rjmp  putchar
83
      out  UDR,  r17
84
      ret


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

Grüße

Stefan

von Stefan B. (stefan) Benutzerseite


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!)?

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.