1) chyba v použití serial6_text_out
Tato funkce převádí vše na text, předtím než to pošle na sériovou linku. To znamená 0x0D je převedeno na text '13' - bez uvozovek, samozřejmě, tedy na znak 1 a znak 3 - a tyto dva znaky jsou poslány ven na sériovou linku.
Pokud je opravdu cílem poslat tam 0x0D použijte funkci serial6_write().
2) odzkoušení problému
Na MINI jsem natvdro zkratoval pin 4 a pin 6, tím jsem propojim COM6 RX a COM6 TX. Takže vše co MINI odešle (na sériovou linku COM6) ihned také na COM6 následně přijme.
Nahrál jsem do MINI následující program:
init
{
echo('Setup...');
serial6_set(9600, 8, 1, 0);
}
var ch;
main
{
// zápis do COM6, pozor 0x0D se touto funkcí zapíše jako text: 13
serial6_text_out('Ahoj, jak se mas?', 0x0D);
wait(1000);
// vypsat vše co přijde na COM6
wait_for_rx:
ch = sys[56];
if (ch < 0)
goto wait_for_rx;
text[0] = ch; // aby šel zobrazit i skutečný znak
echo(ch,' ', text[0]); // číslo a znak
goto wait_for_rx;
}
Výsledek:
Setup...
65 A
104 h
111 o
106 j
44 ,
32
106 j
97 a
107 k
32
115 s
101 e
32
109 m
97 a
115 s
63 ?
49 1
51 3
Takže to funguje jak má (plus ale viz poznámka v bodu 1 ohledně 0x0D, ale teď se bavíme o původním problému).
3) dotaz
Jakým způsobem zachytáváte zmíněná data, která se vám ukáží jako nesprávná ?
Tzn. jaký hardware a software atd. - je důležité do detailu vše sem popsat. Jaká je celá vaše sestava.
Pochlubte se - popište jak využíváte své zařízení SDS zde ! Můžete si bezplatně přidat svou reklamu !