;******* Befehl auswerten ************************************************************* BefehlCheck: ;*** Check Befehl "RBS:" *********************************************** ldi BZA,0x00 rcall SRAM_Start_Adr ldi ZL,LOW (TBef_RBS*2) ldi ZH,HIGH(TBef_RBS*2) BFCheck_RBS: lpm mov Tmp, r0 ;Zeichen aus Texttabelle ld Temp, Y ;Aus SRAM über Y-Register lesen cp Tmp, Temp ;vergleichen brne BFCheck_RBE1 ;Wenn ungleich nächster Befehl checken cpi BZA, BefGr ;vergleichen ====Fehler == >>breq BfOKOK_RBS ;Wenn letztes Zeichen reicht ist springen inc BZA ;Befehlzähler +1 rcall Inc_SRAM_Adr rcall Inc_TextTabelle_Adr rjmp BFCheck_RBS ;*** Check Befehl "RBS:" *********************************************** ;*** Check Befehl "RBE:" *********************************************** BFCheck_RBE1: ldi BZA,0x00 rcall SRAM_Start_Adr ldi ZL,LOW (TBef_RBE*2) ldi ZH,HIGH(TBef_RBE*2) BFCheck_RBE: lpm mov Tmp, r0 ;Zeichen aus Texttabelle ld Temp, Y ;Aus SRAM über Y-Register lesen cp Tmp, Temp ;vergleichen brne BFCheck_WBE1 ;Wenn ungleich nächster Befehl checken cpi BZA,BefGr ;vergleichen breq BfOK_RBE ;Wenn letztes Zeichen reicht ist springen inc BZA ;Befehlzähler +1 rcall Inc_SRAM_Adr rcall Inc_TextTabelle_Adr rjmp BFCheck_RBE ;*** Check Befehl "RBE:" *********************************************** ;*** Check Befehl "WBE:" *********************************************** BFCheck_WBE1: ldi BZA,0x00 rcall SRAM_Start_Adr ldi ZL,LOW (TBef_WBE*2) ldi ZH,HIGH(TBef_WBE*2) BFCheck_WBE: lpm mov Tmp, r0 ;Zeichen aus Texttabelle ld Temp, Y ;Aus SRAM über Y-Register lesen cp Tmp, Temp ;vergleichen brne BFCheck_VER1 ;Wenn ungleich nächster Befehl checken cpi BZA,BefGr ;vergleichen breq BfOK_WBE ;Wenn letztes Zeichen reicht ist springen inc BZA ;Befehlzähler +1 rcall Inc_SRAM_Adr rcall Inc_TextTabelle_Adr rjmp BFCheck_WBE ;*** Check Befehl "WBE:" *********************************************** ;*** Check Befehl "VER:" *********************************************** BFCheck_VER1: ldi BZA,0x00 rcall SRAM_Start_Adr ldi ZL,LOW (TBef_VER*2) ldi ZH,HIGH(TBef_VER*2) BFCheck_VER: lpm mov Tmp, r0 ;Zeichen aus Texttabelle ld Temp, Y ;Aus SRAM über Y-Register lesen cp Tmp, Temp ;vergleichen brne BFCheck_TSN1 ;Wenn ungleich nächster Befehl checken cpi BZA,BefGr ;vergleichen breq BfOK_VER ;Wenn letztes Zeichen reicht ist springen inc BZA ;Befehlzähler +1 rcall Inc_SRAM_Adr rcall Inc_TextTabelle_Adr rjmp BFCheck_VER ;*** Check Befehl "VER:" *********************************************** ;*** Check Befehl "TSN:" *********************************************** BFCheck_TSN1: ldi BZA,0x00 rcall SRAM_Start_Adr ldi ZL,LOW (TBef_TSN*2) ldi ZH,HIGH(TBef_TSN*2) BFCheck_TSN: lpm mov Tmp, r0 ;Zeichen aus Texttabelle ld Temp, Y ;Aus SRAM über Y-Register lesen cp Tmp, Temp ;vergleichen brne Befehl_Fehler ;Wenn ungleich nächster Befehl checken cpi BZA,BefGr ;vergleichen breq BfOK_TSN ;Wenn letztes Zeichen reicht ist springen inc BZA ;Befehlzähler +1 rcall Inc_SRAM_Adr rcall Inc_TextTabelle_Adr rjmp BFCheck_TSN ;*** Check Befehl "TSN:" *********************************************** ;*** Denn Befehl nicht gefunde:Fehler ********************************** Befehl_Fehler: ;Wenn Befehl nicht erkannt Fehler zurücksenden rcall Befehl_BackSend rcall Befehl_Error_Back rjmp Befehl_Ende ;*** Denn Befehl nicht gefunde:Fehler ********************************** ;BfOK_RBS: BfOKOK_RBS: rcall Befehl_BackSend rcall Befehl_RBS rjmp Befehl_OK BfOK_RBE: rcall Befehl_BackSend rcall Befehl_RBE rjmp Befehl_OK BfOK_WBE: rcall Befehl_WBE rcall Befehl_BackSend rjmp Befehl_OK BfOK_VER: rcall Befehl_BackSend rcall Befehl_VER rjmp Befehl_OK BfOK_TSN: rcall Befehl_BackSend rcall Befehl_TSN rjmp Befehl_OK BfOK_KDN: rcall Befehl_BackSend rcall Befehl_KDN rjmp Befehl_OK BfOK_PKO: rcall Befehl_BackSend rcall Befehl_PKO rjmp Befehl_OK BfOK_RPO: rcall Befehl_BackSend rcall Befehl_RPO rjmp Befehl_OK BfOK_WPO: rcall Befehl_BackSend rcall Befehl_WPO rjmp Befehl_OK Befehl_OK: ;Wenn Befehl erkannt OK zurücksenden rcall Befehl_OK_Back Befehl_Ende: ;Alles wieder auf Null setzen rcall DelBuffer ldi TZA, 0x00 ;Wichtig Zähler für Timer reseten ldi BZA, 0x00 ;Wichtig Zähler für Empfangsbuffer reseten ret ;******* Befehl auswerten *************************************************************