Hallole!
Ich hab mir vor kurzem nen MPX4115 (Drucksensor) geleistet, hab ihn auch zum laufen gebracht und hab den Luftdruck berechnen können.
Nun bin ich aber dabei den Code etwas platzsparender zu schreiben (und lass nachher die berechnungen vom PC machen).
Dabei will ich die USART und ADC Register von Hand konfigurieren (sprich UCSRx und UBRR bzw. ADMUX, ADCSRA). Allerdings will mir jetzt mein Mega8 keine Daten mehr schicken (kommt nix im Terminal-Programm an).

Im Anhang hab ich die komplette .bas Datei, hier noch ein paar ausschnitte vom Code:

Register setzen, Variablen deklarieren

Code:
$regfile = "m8def.dat"
$crystal = 3686400

Dim Adhi As Byte                                                                'Temp für ADCH
Dim Adlow As Byte                                                               'Temp für ADCL
Dim Adcergebins As Word                                                         'Endergebnis der AD-Wandlung (ADCH+ADCL)
Dim B As Byte                                                                   '"Merkbit" wenn Adlow und Adhi gelesen sind

Ucsra = &B00000000                                                              'U2X und MPCM aus
Ucsrb = &B00011000                                                              'UART Interrupts aus, TxD/RxD an, Char. Size=8Bit
Ucsrc = &B10000110                                                              'Register UCSRC wählen, Asynchron, Parity aus, 1 Stop Bit, Clock Polarity=0
Ubrr = 23                                                                       'Baudrate=9600, Double Speed aus

Ddrc = &B00000000                                                               'Ports PC0...5 auf Eingang
Admux = &B1100000                                                               'Referenz: Intern 2,56V, LeftAdjust aus, ADC-Kanal 0 (Pin C.0)
Adcsra = &B10001101                                                             'ADC an, Free Running aus, ADC-Interrupt an, Prescaler=32

On Adc Onadc                                                                    'Interrupt Routine wenn AD-Wandlung komplett

Sreg.7 = 1
-> Der Rest des Programms (ADCL/H lesen und an UDR geben)

Code:
Do

Adcsra.adsc = 1                                                                 'ADC Wandlung einschalten

   If B = 1 Then                                                                'Wenn Adlow und Adhi gelesen wurden...
      Udr = Adlow                                                               '...erst Adlow schicken...
         Do : Loop Until Ucsra.udre = 1                                         '...auf leeres USART-Datenregister warten...                                      '
      Udr = Adhi                                                                '...und dann Adhi schicken

      B = 0                                                                     'Als letztes "Merkbit" B auf 0 setzen
   End If

Wait 2                                                                          '2 Sekunden bis zur nächsten Wandlung warten

Loop

Onadc:                                                                          'Wenn ADC einen neuen Wert hat...

   Adlow = Adcl                                                                 '...erst Adcl lesen...
   Adhi = Adch                                                                  '...dann Adch...

   B = 1                                                                        '"Merkbit" B auf 1 setzen

Return                                                                          'Zur Hauptschleife zurückkehren


End
Das ist mein aktueller Code!
Ich weiß echt nicht ob ich da was vergessen oder falsch gemacht hab...für mich sieht's eigentlich Richtig aus

Ich hoffe ihr könnt mir etwas weiterhelfen!

P.S.: Die Do:Loop Schleife beim übertragen der Daten an UDR ist ein wenig schlecht...wie könnte man die am besten umgehen? Mit dem TX-Interrupt vielleicht?