Da ist auch ein Wait 1 in der isr...
So würde ich es wohl probieren: (ungetestet, da nur Laptop hier und keine Hardware)
Code:'------------------------------------------------------------------------------- '------------------------------------------------------------------------------- '------------------------------------------------------------------------------- 'Programmname: UART-Schnittstelle.bas 'Letzte Änderung: 03.03.2013 'Funktion: Empfang von gesamt 18Byte, ' ausgabe als echo über seriell und lcd zur kontrolle 'Mikrocontroller: Mega8 ' 'Input: 'Output: '------------------------------------------------------------------------------- '------------------------------------------------------------------------------- '------------------------------------------------------------------------------- 'Den Atmega mit den passenden Daten füttern. '------------------------------------------------------------------------------- $regfile = "m8def.dat" 'eingesetzter Mikrocontroller $crystal = 8000000 'eingestellte Taktfrequenz (8MHz) $hwstack = 40 'Standardwert $swstack = 40 'Standardwert $framesize = 20 'Standardwert $baud = 9600 '------------------------------------------------------------------------------- 'Ports/Pins/Configs '------------------------------------------------------------------------------- '------------------------------------------------------------------------------- 'Timer/OCR/PWM/ISR usw. setzen '------------------------------------------------------------------------------- Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portd.3 , Rs = Portd.2 Config Lcd = 16 * 2 Config Serialin = Buffered , Size = 18 Enable Interrupts '------------------------------------------------------------------------------- 'Variablen '------------------------------------------------------------------------------- Dim Temp_byte As Byte Dim Datenblock(16) As Byte Dim Indexposition As Byte Const Startzeichen = 123 Const Endzeichen = 125 Const Datenblock_laenge = 16 Dim Datenblock_komplett As Bit Dim Lcd_position As Byte Dim Datenblock_string As String * 16 Dim Datenblock_byte(16) As Byte At Datenblock_string Overlay '------------------------------------------------------------------------------- 'Hauptprogramm '------------------------------------------------------------------------------- Cls Waitms 100 Do If Ischarwaiting() = 1 Then Gosub Empfangen End If If Datenblock_komplett = 1 Then Reset Datenblock_komplett Gosub Anzeige End If Loop End Anzeige: Cls Waitms 100 For Indexposition = 1 To 3 Step 1 Lcd_position = Indexposition Locate 1 , Lcd_position Lcd Chr(datenblock(indexposition)) Next For Indexposition = 3 To Datenblock_laenge Step 1 Lcd_position = Indexposition - 8 Locate 2 , Lcd_position Lcd Chr(datenblock(indexposition)) Next 'Echo zurücksenden zur Kontrolle Print Datenblock_string Return Empfangen: Temp_byte = Inkey() If Temp_byte > 12 Then 'unter 13 sind nur Sonderzeichen If Temp_byte = Startzeichen Then Indexposition = 0 Elseif Temp_byte = Endzeichen Then Gosub Auswerten Else Incr Indexposition Datenblock(indexposition) = Temp_byte End If If Indexposition = Datenblock_laenge Then Gosub Auswerten End If End If Return Auswerten: Dim Dummy As Byte Datenblock_string = String(datenblock_laenge , 0) Dummy = Memcopy(datenblock(1) , Datenblock_byte(1) , Indexposition) Datenblock(1) = String(datenblock_laenge , 22) 'Wozu? Indexposition = 0 Set Datenblock_komplett Return







Zitieren


Lesezeichen