Zitat Zitat von PicNick
Wenn in dem Byte eine Zahl 0-9 steht, kannst du die unteren 4-Bits direkt an den 4511 schicken, da brauchst du gar nix.
Also ich habe es jetzt mal so gemacht:
Code:
'0405.BAS:  UART-Empfänger mit Interrupt
'Hardware:  MAX232 an PD0/PD1, Nullmodemkabel zum PC,
'           Speaker an PD5
'----------------------------------------------------------
$regfile = "m8def.dat"                                      'ATmega8-Deklarationen
$crystal = 3686400                                          'Quarz: 3,6864 MHz
$baud = 9600                                                'UART-Baudrate: 9600 Baud

Dim I As Byte                                               'Byte: 0...255
Dim A As Byte                                               'Setup A Variable
Dim B As Byte                                               'Setup B Variable
Dim C As Byte                                               'Setup C Variable

Ddrd = &B00100000                                           'Pin PD5 ist Ausgang, Rest Eingang
Ddrb = &B00001111
Ddrc = &B00001111


A = &H23                                                    'zahl nur Hexadecimal


On Urxc Onrxd                                               'Interrupt-Routine setzen
Enable Urxc                                                 'Interrupt URXC einschalten
Enable Interrupts                                           'Interrupts global zulassen
'----------------------------------------------------------
Main:

   B = A And &B0000_1111                                    'Mask To Get Only Low Nibble Of Byte , Store As C
   Portb = B

   C = A And &B1111_0000                                    'Mask To Get Only High Nibble Of Byte
   Shift C , Right , 4                                      'Shift High Nibble To Low Nibble Position , Store As C
   Portc = C
Goto Main


Onrxd:
  I = Udr

  'B = Bcd(i)
  'A = Makebcd(i)
    A = I                                                   'Byte aus der UART auslesen
                                                     'Byte als Echo zurückgeben
  Udr = A
Return
Zm testen war es gedacht über ein Terminal Programm einen Zahl ein zu tippen die mir dann auf einer 7-segment anzeige ersichtlich wird.

Leider klappte das nur mit einer Ziffer - bei der 2. Ziffer kam nur mist raus.

Wenn ich jetzt die Variable A mit einer HEX zahl versehe dann wird auch diese Hex-Zahl aus gegeben wie in diesem beispiel 23.

Gebe ich im Terminalprog z.B. "a" ein was hexadecimal 61 entspricht dann wird auch 61 auf meiner 2 Stelligen 7-Segmentanzeige angezeigt.

Alles super soweit.
Doch ich will ja nicht den hexadecimalwert angezeigt bekommen sondern eine eine Zahl von 0-99 eingeben und auch genau diese angezeigt bekommen.

Also muss ich irgenwie und wo noch wandeln. doch ich raff es nicht. wer kann mir helfen bitte