Hier die Programme vom Sender:
und Empfänger:Code:$regfile = "m8def.dat" $crystal = 8000000 Baud = 9600 Dim I As Byte Dim T0ov As Byte Dim Akth As Word At &H70 Dim Diffh As Integer At &H72 Dim Akthlow As Byte At &H70 Overlay Dim Akthhigh As Byte At &H71 Overlay Dim Diffhlow As Byte At &H72 Overlay Dim Diffhhigh As Byte At &H73 Overlay Dim Lasth As Word Dim Temph As Word 'Dim Zeroh As Word 'Zeroh = 0 Enable Interrupts 'Enable Int1 'Interrupt durch Taster zur Abfrage 'On Int1 _interr1 'der Nullpunkthöhe über Normalnull Ddrb.0 = 1 Ddrb.1 = 1 Portb.1 = 1 Config Adc = Single , Prescaler = Auto , Reference = Avcc 'Konfig. des AD-Wandlers Start Adc 'On Adc _adc Nosave Config Timer0 = Timer , Prescale = 1024 'Timer0 für Durchlaufzeit der Hauptschleife Enable Timer0 On Timer0 _t0 Start Timer0 ' *** Hauptschleife *** Do Toggle Portb.0 Toggle Portb.1 T0ov = 0 'Überlaufzähler Timer0 rücksetzen Lasth = Akth 'Den Wert der letzten Messung sichern Akth = 0 'Variable löschen For I = 1 To 16 '16 Meßwerte aufnehmen für Mittelwertbildung Temph = Getadc(0) 'Drucksensor am ADC0 Akth = Akth + Temph Next Shift Akth , Right , 4 'Ergebnis /16 teilen 'Akth = Akth - Zeroh 'Nullhöhe abziehen Diffh = Akth - Lasth 'Differenz zw. letzter und aktueller Messung Print 1 '&B00000001 Waitms 50 Print Akthlow Waitms 50 Print Akthhigh Waitms 50 Print Diffhlow Waitms 50 Print Diffhhigh Do 'warten bis Timer0 10 mal übergelaufen ist, Loop Until T0ov = 10 'dann beginnt nächster Messzyklus Loop End ' *** Interruptroutinen *** '_adc: ' Return _t0: Incr T0ov Timer0 = 15 Return '_interr1: 'Zeroh = Getadc(0) 'Nullpunkt setzen 'Return
Code:$regfile = "m8def.dat" 'Mega8 $crystal = 8000000 $baud = 9600 Declare Sub Lcdinit Declare Sub Lcdwrite(byval Zeichen As Byte) Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portd.2 , Rs = Portd.3 Config Lcd = 20 * 4a Waitms 100 'Initlcd Call Lcdinit Cls Ddrb.0 = 1 Dim Akth As Word At &H71 Dim Diffh As Integer At &H73 Dim Buffer(6) As Byte At &H70 Overlay Dim I As Byte Dim P As Byte Dim A As Word Dim D As Integer On Urxc _onrxc Enable Urxc Enable Interrupts I = 0 Do If I > 5 Then A = Akth D = Diffh End If Locate 1 , 1 Lcd A ; " " Locate 2 , 1 Lcd D ; " " Locate 3 , 1 Lcd P ; " " Locate 4 , 1 Lcd I Loop _onrxc: P = Udr If P = 1 And I = 6 Then I = 1 End If If I < 6 Then Buffer(i) = P Incr I End If Toggle Portb.0 Return Sub Lcdinit Call Lcdwrite(&B00101100) Call Lcdwrite(&B00001001) Call Lcdwrite(&B00101000) Call Lcdwrite(&B00000110) Call Lcdwrite(&B00001100) End Sub Sub Lcdwrite(byval Zeichen As Byte) ' Höherwertiges Nibble setzen If Zeichen.4 = 1 Then Portd.4 = 1 Else Portd.4 = 0 If Zeichen.5 = 1 Then Portd.5 = 1 Else Portd.5 = 0 If Zeichen.6 = 1 Then Portd.6 = 1 Else Portd.6 = 0 If Zeichen.7 = 1 Then Portd.7 = 1 Else Portd.7 = 0 ' Höherwertiges Nibble übertragen Portd.2 = 1 Waitms 1 Portd.2 = 0 Waitms 1 ' Niederwertiges Nibble setzen If Zeichen.0 = 1 Then Portd.4 = 1 Else Portd.4 = 0 If Zeichen.1 = 1 Then Portd.5 = 1 Else Portd.5 = 0 If Zeichen.2 = 1 Then Portd.6 = 1 Else Portd.6 = 0 If Zeichen.3 = 1 Then Portd.7 = 1 Else Portd.7 = 0 ' Niederwertiges Nibble übertragen Portd.2 = 1 Waitms 1 Portd.2 = 0 Waitms 1 End Sub







Zitieren

Lesezeichen