
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
Lesezeichen