Ämfänger braucht hilfe "Byte nach BCD auf Portx"
Hallo Leute,
ich stehe auf dem Schlauch.
Als Anfänger habe ich mir das Buch "AVR" von Roland Walter geholt und die dazugehörige Experimentierplatine mit einem Atmega8.
Jetzt möchte ich einfach ein Byte als Zahl in einen BCD (8-4-2-1) Code wandeln und den BCD code parallel an 4 Pins ausgeben. Die Ausgabe des BCD codes von den 4 Pins soll dann einem 4511 (BCD to 7-Segment Anzeige converter) zu geführt werden.
Kann mir da bitte mal jemand helfen wie ich das mit den Basic Befehlen realisiere? Ich komme nicht drauf.
vielen Dank
André
Liste der Anhänge anzeigen (Anzahl: 1)
habe mir dank eurer Hilfe mal was zum testen gebastelt um aus einer 2 Stelligen numeric nach 2 x BCD aufzulösen und auf dem LCD anzuzeigen.
Mir hat es für das Verständnis weiter geholfen.
Code:
'Demonstration zur Wandlung von 2 Stelligen Zahlen nach BCD
'----------------------------------------------------------
$regfile = "m8def.dat" 'ATmega8-Deklarationen
$crystal = 3686400 'Taktfrequenz: 3,6864 MHz
$baud = 9600
On Urxc Onrxd 'Interrupt-Routine setzen
Enable Urxc 'Interrupt URXC einschalten
Enable Interrupts 'Interrupts global zulassen
Config Lcd = 20 * 4
Config Lcdpin = Pin , Db4 = Portc.0 , Db5 = Portc.1 , Db6 = Portc.2 , Db7 = Portc.3 , E = Portd.5 , Rs = Portd.4
Config Lcdbus = 4
Cls
Dim A As Byte
Dim B As Byte
Dim C As Byte
Dim D As Byte
Dim E As Byte
Dim F As Byte
Dim G As Byte
Dim H As Byte
Dim I As Byte
Dim L As Byte
Dim Z As Byte
Dim Y As Byte
Dim U As Byte
'Dim V As String * 4
Z = 96
'----------------------------------------------------------
Main:
Cls
Y = Makebcd(z)
L = Y And &B0000_1111 'Mask To Get Only Low Nibble Of Byte , Store As C
H = Y And &B1111_0000 'Mask To Get Only High Nibble Of Byte
Shift H , Right , 4 'Shift High Nibble To Low Nibble Position , Store As H
A = L And &B0000_0001 'Low Byte zerlegen in BCD Code
If A >= 1 Then A = 1 'abfrage
B = L And &B0000_0010
If B >= 1 Then B = 1
C = L And &B0000_0100
If C >= 1 Then C = 1
D = L And &B0000_1000
If D >= 1 Then D = 1
E = H And &B0000_0001
If E >= 1 Then E = 1
F = H And &B0000_0010
If F >= 1 Then F = 1
G = H And &B0000_0100
If G >= 1 Then G = 1
I = H And &B0000_1000
If I >= 1 Then I = 1
Locate 1 , 1
Lcd Bcd(h) ; " High" 'Ausgabe des high Byte
Locate 1 , 10
Lcd I ; " " ; G ; " " ; F ; " " ; E 'Ausgabe des BCD codes
Locate 3 , 1
Lcd Bcd(l) ; " Low "
Locate 3 , 10
Lcd D ; " " ; C ; " " ; B ; " " ; A
'BCD High = 8 4 2 1
'variable = I G F E
'BCD Low = 8 4 2 1
'variable = D C B A
Wait 1
Goto Main
Onrxd:
U = Udr 'Byte aus der UART auslesen
Udr = U 'Byte als Echo zurückgeben
Z = U
Return