RTV forum PL | NewsGroups PL

Przesyłanie znaków przez COM w 80C51: nie działa echem na ekranie?

80c51 i program

NOWY TEMAT

elektroda NewsGroups Forum Index - Elektronika Polska - Przesyłanie znaków przez COM w 80C51: nie działa echem na ekranie?

Lukas
Guest

Fri Mar 26, 2004 9:52 pm   



napisalem oto taki prosty programik do przesylania znakow przez com i zeby
wracaly echem na ekran.
I teraz mam problem bo kiedy klepie w terminal to sie nic nei dzieje!! Sad
nei wiem czemu, jedyne co odkrylem to to ze jak bezposrednio w funkcji
wyslij zrobie znak='x'; to sie wysyla x ale ajk juz to przestawie gdzies
indziej to nic juz sie nei wyswietla, i tak samo jest z buforem, nei dziala
:(

Help, chce sie czegos nauczyc ale nie czaje wogole czemu tak jest Sad
dzieki


#include <8051.h>

int bufin,bufout;
xdata unsigned char bufor[5];
xdata unsigned char znak;

void op(void)
{
int i;
for(i=0;i<1000;i++){}
}

void pobierz(void)
{

while(RI==0){}
znak=SBUF;
bufor[bufin]=znak;
bufin++;
if (bufin==200) bufin=0;
RI=0;
P1_4=0;
op();
}

void wyslij(void)
{
if (bufin!=bufout)
{
// znak=bufor[bufout];
//znak='b';
SBUF=znak;
//SBUF=bufor[bufout];
// while(TI==0){}

// SBUF=bufor[bufin];
bufout++;
if (bufout==200) bufout=0;
TI=0;
}
P1_4=1;
}

void main(void)
{
bufin=0;
bufout=0;
SCON=80;
TMOD=32; //32 4
TH1=TL1=244; //244
TI=0;
RI=0;
PCON=128;

while(1)
{
znak='s';
pobierz();
wyslij();

}

}

J.F.
Guest

Sat Mar 27, 2004 1:30 am   



On Fri, 26 Mar 2004 14:52:17 +0100, Lukas wrote:
Quote:
napisalem oto taki prosty programik do przesylania znakow przez com i zeby
wracaly echem na ekran.
I teraz mam problem bo kiedy klepie w terminal to sie nic nei dzieje!! Sad
nei wiem czemu, jedyne co odkrylem to to ze jak bezposrednio w funkcji
wyslij zrobie znak='x'; to sie wysyla x ale ajk juz to przestawie gdzies
indziej to nic juz sie nei wyswietla, i tak samo jest z buforem, nei dziala
:(

#include <8051.h
int bufin,bufout;
xdata unsigned char bufor[5];
xdata unsigned char znak;

Czy posiadasz zewnetrzny RAM w swoim systemie ?

Quote:
void op(void) { int i; for(i=0;i<1000;i++){} }

void pobierz(void)
{
while(RI==0){}
znak=SBUF;
bufor[bufin]=znak;
bufin++;
if (bufin==200) bufin=0;

Skoro bufor[5] to czemu tu 200 ? :-)

Quote:
RI=0;
P1_4=0;

No i w jakim stanie jest P1.4 ?
Opoznienie jest krociutkie, wiec nie zauwazysz miernikiem,
a diodka ledwo mignie - mozesz nie zauwazyc.

Quote:
op();
}

void wyslij(void)
{
if (bufin!=bufout)
{
// znak=bufor[bufout];

cos tu chyba chciales odkomentowac ? :-)

Quote:
//znak='b';
SBUF=znak;
//SBUF=bufor[bufout];
// while(TI==0){}
// SBUF=bufor[bufin];

W przyszlosci bedziesz musial cos tu odkomentowac, ale na razie chyba
moze byc ..

Quote:
bufout++;
if (bufout==200) bufout=0;
TI=0;
}
P1_4=1;
}

void main(void)
{
bufin=0;
bufout=0;
SCON=80;
TMOD=32; //32 4
TH1=TL1=244; //244

A kto w TCON wystartuje timer 1

Quote:
TI=0;
RI=0;
PCON=128;

while(1)
{
znak='s';
pobierz();
wyslij();

}
}

No to jeszcze drobnostka zostala .. czy pecet stawiony na wlasciwa
predkosc .. 2400 ?

J.

Lukas
Guest

Sat Mar 27, 2004 2:05 am   



Uzytkownik "J.F." <jfox_nospam@poczta.onet.pl> napisal w wiadomosci
news:kul8601l474sjj66cp2i2ttq7co94esvqk@4ax.com...
Quote:
On Fri, 26 Mar 2004 14:52:17 +0100, Lukas wrote:
napisalem oto taki prosty programik do przesylania znakow przez com i
zeby
wracaly echem na ekran.
I teraz mam problem bo kiedy klepie w terminal to sie nic nei dzieje!! Sad
nei wiem czemu, jedyne co odkrylem to to ze jak bezposrednio w funkcji
wyslij zrobie znak='x'; to sie wysyla x ale ajk juz to przestawie gdzies
indziej to nic juz sie nei wyswietla, i tak samo jest z buforem, nei
dziala
:(

#include <8051.h
int bufin,bufout;
xdata unsigned char bufor[5];
xdata unsigned char znak;

Czy posiadasz zewnetrzny RAM w swoim systemie ?

void op(void) { int i; for(i=0;i<1000;i++){} }

void pobierz(void)
{
while(RI==0){}
znak=SBUF;
bufor[bufin]=znak;
bufin++;
if (bufin==200) bufin=0;

Skoro bufor[5] to czemu tu 200 ? :-)

RI=0;
P1_4=0;

No i w jakim stanie jest P1.4 ?
Opoznienie jest krociutkie, wiec nie zauwazysz miernikiem,
a diodka ledwo mignie - mozesz nie zauwazyc.

op();
}

void wyslij(void)
{
if (bufin!=bufout)
{
// znak=bufor[bufout];

cos tu chyba chciales odkomentowac ? :-)

//znak='b';
SBUF=znak;
//SBUF=bufor[bufout];
// while(TI==0){}
// SBUF=bufor[bufin];

W przyszlosci bedziesz musial cos tu odkomentowac, ale na razie chyba
moze byc ..

bufout++;
if (bufout==200) bufout=0;
TI=0;
}
P1_4=1;
}

void main(void)
{
bufin=0;
bufout=0;
SCON=80;
TMOD=32; //32 4
TH1=TL1=244; //244

A kto w TCON wystartuje timer 1

TI=0;
RI=0;
PCON=128;

while(1)
{
znak='s';
pobierz();
wyslij();

}
}

No to jeszcze drobnostka zostala .. czy pecet stawiony na wlasciwa
predkosc .. 2400 ?

J.


Spoko poradzilem sobie Smile
nie na 2400 tylko na 4800, jest ustwiony bit SMOD
mam 8Kb zewnetrzenbgo ramu
ale nie wiem czemu jesli nei zdefinjuje gdzie ma wrzucic zmienna do ramu to
nie dziala, chyba powinien gdzies sam ja umiescic?? :/ hm... nie rozumiem
wlasnie tego jak jest:
xdata unsigned char bufor[5];
to nei dziala ale jak jest
xdata at 0x9000 unsigned char bufor[5];
to jest ok, i to mnie irytuje przeciez zmienne bufin i bufout nie sa nigdzie
umieszczone a dziaja prawidlowo - chyba Smile
teraz to mam problem z przerwaniami nie bardzo wiem jak je ustawic :(

Pozdro

J.F.
Guest

Sat Mar 27, 2004 5:48 am   



On Fri, 26 Mar 2004 19:05:25 +0100, Lukas wrote:
Quote:
#include <8051.h
int bufin,bufout;
xdata unsigned char bufor[5];
xdata unsigned char znak;

mam 8Kb zewnetrzenbgo ramu
ale nie wiem czemu jesli nei zdefinjuje gdzie ma wrzucic zmienna do ramu to
nie dziala, chyba powinien gdzies sam ja umiescic?? :/ hm... nie rozumiem
wlasnie tego jak jest:
xdata unsigned char bufor[5];
to nei dziala ale jak jest
xdata at 0x9000 unsigned char bufor[5];
to jest ok,

A ten twoj ram to jest od 0000 do FFFF [powtorzony 8x] czy od
8000-9FFF ? Bo imho - przydziela od 0.

Quote:
i to mnie irytuje przeciez zmienne bufin i bufout nie sa nigdzie
umieszczone a dziaja prawidlowo - chyba Smile

Sa w wewnetrznym ram. Ale ten ma tylko 128 bajtow i jeszcze musi
na stos starczyc :-)

J.

Lukas
Guest

Sat Mar 27, 2004 6:43 am   



Uzytkownik "J.F." <jfox_nospam@poczta.onet.pl> napisal w wiadomosci
news:7b2960ldt3s3fr9tagccoev1olun23oc7i@4ax.com...
Quote:
On Fri, 26 Mar 2004 19:05:25 +0100, Lukas wrote:
#include <8051.h
int bufin,bufout;
xdata unsigned char bufor[5];
xdata unsigned char znak;

mam 8Kb zewnetrzenbgo ramu
ale nie wiem czemu jesli nei zdefinjuje gdzie ma wrzucic zmienna do ramu
to
nie dziala, chyba powinien gdzies sam ja umiescic?? :/ hm... nie rozumiem
wlasnie tego jak jest:
xdata unsigned char bufor[5];
to nei dziala ale jak jest
xdata at 0x9000 unsigned char bufor[5];
to jest ok,

A ten twoj ram to jest od 0000 do FFFF [powtorzony 8x] czy od
8000-9FFF ? Bo imho - przydziela od 0.

i to mnie irytuje przeciez zmienne bufin i bufout nie sa nigdzie
umieszczone a dziaja prawidlowo - chyba :)

Sa w wewnetrznym ram. Ale ten ma tylko 128 bajtow i jeszcze musi
na stos starczyc Smile

znaczy ja program wrzucam do pamieci pod 8000 bo jak sie nei myle to monitor
jest od 0000 do 7ffff wiec korzystam od 8000 a zmienne umiescilem gdzies
dalej zeby nie kolidowalo to z programem, ale nei wiem, chyba by skompilowal
tak zeby pominac te zmienne jakos jak bym je umiescil pod 8003 np??

elektroda NewsGroups Forum Index - Elektronika Polska - Przesyłanie znaków przez COM w 80C51: nie działa echem na ekranie?

NOWY TEMAT

Regulamin - Zasady uzytkowania Polityka prywatnosci Kontakt RTV map News map