Jak obsługiwać znaki ASCII #13 i #10 w komunikacji RS z procesorem AT89X52 w Keil?

Keil i problem z komunikacja rs.





Poprzedni Następny
Wiadomość
Spis treści
From: "Bartosz Waleska" <combosoft_at_nospam_poczta.onet.pl>
Subject: Keil i problem z komunikacja rs.
Date: Wed, 5 Feb 2003 20:51:40 +0100


Czesc,

mam taki kod w Keil uVision 2.12:

#include <AT89X52.H>
#include <stdio.h>
#include <adds.h>
#include <ctype.h>


char znaki[10];
gets(znaki,8);
puts(znaki);


I jezeli wysle sobie do procesora tekst '12312312' to wszystko jest ok, ale
nie moge sobie poradzic jezeli dane maja inny charakter np.:
#13 #10 COS123

gdzie #13 i #10 sa znakami ASCII podawanymi dziesietnie z tabeli czyli ZTCP
koniec linii i nowa linia.

Nie moge sobie z tym poradzic... czy takie zachowanie jest spowodowane tym,
ze znaki #13 i #10 nie moga zostac zapamietane w zmiennej typu char?

pozdrawiam,
Bartek.



========
Path: news-archive.icm.edu.pl!pingwin.icm.edu.pl!news.icm.edu.pl!news.atman.pl!wsisiz.edu.pl!news2.icm.edu.pl!news.pw.edu.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: "Zbych" <bzb_at_nospam_poczta.onet.pl>
Subject: Re: Keil i problem z komunikacja rs.
Date: Wed, 5 Feb 2003 23:07:29 +0100


char znaki[10];
gets(znaki,8);
puts(znaki);


I jezeli wysle sobie do procesora tekst '12312312' to wszystko jest ok,
ale
nie moge sobie poradzic jezeli dane maja inny charakter np.:
#13 #10 COS123

co to znaczy nie mogę sobię poradzić ?
Procesor nic nie zwraca, zwraca co innego ?
Rzuć trochę więcej informacji.

Nie moge sobie z tym poradzic... czy takie zachowanie jest spowodowane
tym,
ze znaki #13 i #10 nie moga zostac zapamietane w zmiennej typu char?

mogą być zapamiętywane bez żadnych problemów.
Jeżeli problem dotyczy tego, że "rozmnażają" ci się znaki końca
linii to rzuć okiem na źródła funkcji putchar, która jest używana
przez puts.

char putchar (char c) {
if (c == '\n') {
while (!TI);
TI = 0;
SBUF = 0x0d; /* output CR */
}
while (!TI);
TI = 0;
return (SBUF = c);

Jeżeli to jest twój problem to proponuje skorzystać,
z prostszej wersji putchar

char putchar (char c) {
while (!TI);
TI = 0;
return (SBUF = c);
}

a jeżeli problem dotyczy czegoś innego to musisz podać więcej
szczegółów


========
Path: news-archive.icm.edu.pl!pingwin.icm.edu.pl!news.icm.edu.pl!news.onet.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: "Bartosz Waleska" <combosoft_at_nospam_poczta.onet.pl>
Subject: Re: Keil i problem z komunikacja rs.
Date: Wed, 5 Feb 2003 23:48:30 +0100


</ciach>
co to znaczy nie mogę sobię poradzić ?
Procesor nic nie zwraca, zwraca co innego ?
Rzuć trochę więcej informacji.
</ciach>
No wlasnie ciekawa sprawa...
jak mam np. #13 #10 12345 #13 #10

to po operacji odebrania i odeslania otrzymuje
dwa razy #13 #10.

Nie mam pojecia gdzie sie podziala reszta znakow...
Staralem sie to juz zrobic roznymi sposobami np.
najpierw odbieralem 2 pierwsze znaki, pozniej tekst i nastepnie
kolejne dwa. A odsylalem tylko tekst, ale to tez nie pomaga.
Efekt jak wyzej...
Co ciekawe, jak wysle "normalne" znaki 12345... to odsyla
mi dwa razy to samo...
Czyli analizujac przypadek z #13 #10 doszedlem do wniosku,
ze prawdopodobnie sa to ostatnie dwa znaki wyslane dwa razy...
ale co sie stalo z tym wczesniej?

mam nadzieje ze to troche wyjasnia...

pozdrawiam,
bartek.





========
Path: news-archive.icm.edu.pl!pingwin.icm.edu.pl!news.icm.edu.pl!uw.edu.pl!news.pw.edu.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: "Zbych" <bzb_at_nospam_poczta.onet.pl>
Subject: Re: Keil i problem z komunikacja rs.
Date: Thu, 6 Feb 2003 01:53:07 +0100


przesymulowałem program i wychodzi na to, że wszystko działa.
Powiedz w jaki sposób sprawdzasz program: w układzie czy
w symulatorze, czym wysyłasz i odbierasz znaki z procesora
(terminal, własny program ?).


========
Path: news-archive.icm.edu.pl!pingwin.icm.edu.pl!news.icm.edu.pl!uw.edu.pl!news.pw.edu.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: "Zbych" <bzb_at_nospam_poczta.onet.pl>
Subject: Re: Keil i problem z komunikacja rs.
Date: Thu, 6 Feb 2003 02:30:57 +0100


przesymulowałem program i wychodzi na to, że wszystko działa.

chociaż może nie działać jeśli:
1) program nie jest umieszczony w pętli (a w twoim programie pętli nie
widzę)
Podwójne 0A,0D bierze się stąd, że gets po uruchomieniu wysyła znak 0A,
po odebraniu 0D zwraca 0D i kończy działanie. Potem jest wywoływany
puts,
a ponieważ string "znaki" jest pusty to odsyła 0A,0D. I tu się kończy
program.

2) po wysłaniu znaków końca linii zbyt szybko wyślesz następny
ciąg znaków (tak jak w twoim przykładzie #10#13 123 #10#13)
(w czasie gdy funkcja puts się wykonuje ty wysyłasz coś do
procesora - a tu zonk, nie ma kto odebrać danych).


========
Path: news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: "Bartosz Waleska" <combosoft_at_nospam_poczta.onet.pl>
Subject: Re: Keil i problem z komunikacja rs.
Date: Sun, 16 Feb 2003 15:29:12 +0100


Witam ponownie...
Wrocilem dopiero z krotkiego nieplanowanego urlopu... (tzn. byl planowany,
ale na pare dni pozniej...)
Przepraszam wiec za tak nagle zerwanie watku. Sprobuje cos jeszcze pisac
tutaj, jesli sie nie uda
wowczas mam nadzieje wznowic dyskusje w nowym watku.


1) program nie jest umieszczony w pętli (a w twoim programie pętli nie
to nie to... moj program nie jest umieszczony w petli...

2) po wysłaniu znaków końca linii zbyt szybko wyślesz następny
ciąg znaków (tak jak w twoim przykładzie #10#13 123 #10#13)
(w czasie gdy funkcja puts się wykonuje ty wysyłasz coś do
procesora - a tu zonk, nie ma kto odebrać danych).

to jest bardziej prawdopodobne... postaram sie wiec opoznic wysylanie
danych...

Program sprawdzam w ukladzie, programujac AT89C52, uklad jest poprawnie
zlutowany itd. (dzialaja programy asemblera), podobnie jest z programem,
uzywam swojego wlasnego programu napisanego w Delphi, ale recze za ten
program, zrobilem na nim setki watkow komunikacji, z tym ze program dla
elektroniki pisalem w asm51. Teraz chcialem sie troche "pobawic" Keil'em,
zobaczyc jak to dziala, jakie sa mozliwosci. Dlatego jestem troche
zaskoczony problemami... moze jest jakis patch o ktorym ja nie wiem?
Sprawdzalem na stronie producenta, ale nie ma tam nic takiego, a zadne bledy
tego typu nie sa potwierdzone.


pozdrawiam, bartek.




========
Path: news-archive.icm.edu.pl!pingwin.icm.edu.pl!news.icm.edu.pl!news.onet.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: jfox_at_nospam_poczta.onet.pl (J.F.)
Subject: Re: Keil i problem z komunikacja rs.
Date: Thu, 06 Feb 2003 17:48:54 GMT


On Wed, 5 Feb 2003 23:07:29 +0100, Zbych wrote:
char znaki[10];
gets(znaki,8);
puts(znaki);

Nie moge sobie z tym poradzic... czy takie zachowanie jest spowodowane tym,
ze znaki #13 i #10 nie moga zostac zapamietane w zmiennej typu char?

mogą być zapamiętywane bez żadnych problemów.

Moga ... tylko ze w momencie napotkania #10 gets konczy czytanie i
dostawia do buforka #0. Bardzo mozliwe ze robi to tez przy #13..

J.


========
Path: news-archive.icm.edu.pl!pingwin.icm.edu.pl!news.icm.edu.pl!news.atman.pl!wsisiz.edu.pl!news2.icm.edu.pl!news.pw.edu.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: "Zbych" <bzb_at_nospam_poczta.onet.pl>
Subject: Re: Keil i problem z komunikacja rs.
Date: Thu, 6 Feb 2003 19:51:39 +0100


Moga ... tylko ze w momencie napotkania #10 gets konczy czytanie i
dostawia do buforka #0. Bardzo mozliwe ze robi to tez przy #13..

Mała poprawka: gets (przynajmniej ten z keila) po rozpoczęciu
wysyła 0A, ale wszystkie kody 0A, które dostaje są przez niego
ignorowane. Gets kończy się dopiero po odebraniu 0D (lub
przepełnieniu bufora).


========
Path: news-archive.icm.edu.pl!pingwin.icm.edu.pl!news.icm.edu.pl!news.atman.pl!newsfeed.gazeta.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai