So, im Nachhinein betrachtet ohnehin klar:
Man muss/darf (wenn man INKEY() verwenden will) natürlich nur das speichern, was NICHT 0 ist. Als Endeerkennung einer Nachricht ist "0" wenig geeignet.
Wenn man z.b <CR> als Nachricht-Ende nimmt ( was Bascom-PRINT freiwillig tut, wenn man ihn nicht hindert), müsste die Receive-Schleife lauten:
unter der Annahme, dass das Speichern nicht zu langsam ist. Müsst man ausrechnen, bis zu welcher baudrate es reicht.Code:DO inchar= inkey(#2) if inchar > 0 incr myidx myarr(myidx) = inchar end if LOOP until inchar = 27 myarr(myidx) = 0 ' ev. ein String-ende aus dem <CR> machen
Sonst ist wohl eher "INPUT #" oder GET # geeignet
Wen es interessiert, so sieht INKEY() von innen aus:
Der Unterschied von Waitkey ist minimalCode:open comb.4:9600,8,n,1 L_0x00DE: ' delay 1/2 bit -------------------------- PUSH r24 PUSH r25 LDI r24,0x08 LDI r25,0x00 L_0x00E6: SBIW r24,0x0001 BRNE L_0x00E6 POP r25 POP r24 RET ' inkey (#1) --------------------------------- L_0x00F0: SBIS 0x0016,4 ' check PortB.4 RJMP L_0x00F8 ' start CLR r24 ' return 0 RET L_0x00F8: LDI r18,0x09 ' counter = 9 (8 + 1 ) L_0x00FA: ' loop until PortB.4 = 0 SBIC 0x0016,4 ' RJMP L_0x00FA RCALL L_0x00DE ' delay 1/2 bit L_0x0100: RCALL L_0x00DE ' delay 1/2 bit RCALL L_0x00DE ' delay 1/2 bit CLC ' clear carry SBIC 0x0016,4 ' PortB.4 = ? SEC ' = 1---> set Carry DEC r18 ' decr counter BREQ L_0x0114 ' counter= 0 --> exit ROR r24 ' shift carry into r24:r25 ROR r25 RJMP L_0x0100 ' next bit L_0x0114: RET ' R24 = inbyte (that's it)
Code:' waitkey (#1) --------------------------------- L_0x00F0: SBIS 0x0016,4 ' wait PortB.4 = 0 RJMP L_0x00F6 ' start RJMP L_0x00F0 ' cont'd wait Das ist der einzige Unterschied







Zitieren


Lesezeichen