UART 8051
Masz problem? Zapytaj na forum elektroda.pl
From: "darek" <darpat_at_nospam_wp.pl>
Subject: UART 8051
Date: Sat, 24 May 2003 23:20:01 +0200
byc moze lamerskie, ale nie wiem dlaczego nie dziala.
Mam cos takiego:
void InitSerial(int v)
{
SM0=0; SM1=1;
REN=1;
TI=0; RI=0;
//ustawienie szybkosci transmisji k*v kBotow
if (v==19200) PCON |= 0x80;//k=2;podwojna predkosc transmisji
else if (v==9600) PCON |= 0x00;//k=1;pojedyncza predkosc transmisji
ES=1;
//iniclajizacja timera T1
//SCON |= 0x80; //ustawienie timera
TMOD=0x22; //00100000-licznik TR1,tryb 2
TH1=(unsigned char)(256-((1*11059200)/(16L*12L*v)));
TL1=TH1;
TR1=1;
EA=1;
}
void serial(void) interrupt 4
{
//odbior danych
if (RI != 0){
RI=0;
if(ile_odebrano < sizeof(inbufor[wielkosc_inbuf])){
inbufor[ile_odebrano++]=SBUF;
znak=0x20; // dla kontroli
znak=SBUF;
++i;
}
else buf_odb_pelny=1;
}
Symulacje przeprowadzan w Keilu..
I taraz jezeli wystapi przewanie RI=1 to po wykonaniu procedury przerwnia
dany element tablicy i zmienna znak zostaja zamazane do wart 0x00 mimo ze w
SBUF znajduje sie znak rozny od zera..po prostu nie ma przepisania SBUF to
tablicy i do znak a przypisuje sie wartosc 0x00. DLACZEGO???
--
darek
GG 1830902
========
Path: news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!newsfeed.gazeta.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai
From: "megaraptor" <megaraptor_at_nospam_wp.pl>
Subject: Re: UART 8051
Date: Sun, 25 May 2003 00:11:11 +0200
Zamiast kombinować to pociągnij ze strony keila elegancki przykładzik.
Pzdr
megaraptor
========
Path: news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.gazeta.pl!news.ipartners.pl!not-for-mai
From: Maciej Iwanczewski <iwan_at_nospam_ps.pl.spamprecz>
Subject: Re: UART 8051
Date: Sun, 25 May 2003 18:54:34 +0200
darek wrote:
void serial(void) interrupt 4
{
//odbior danych
if (RI != 0){
RI=0;
if(ile_odebrano < sizeof(inbufor[wielkosc_inbuf])){
inbufor[ile_odebrano++]=SBUF;
znak=0x20; // dla kontroli
znak=SBUF;
++i;
}
else buf_odb_pelny=1;
}
Czy jesteś na 100% pewny, że warunek w if jest spełniony ?
Wydaje mi się, że robisz coś takiego:
#define wielkosc_inbuf 10
char inbufor[wielkosc_inbuf];
to moim zdaniem sizeof(inbufor[wielkosc_inbuf]) zawsze będzie równe
jeden, więc może byc problem ze spełnieniem warunku if-a.
Zerujesz zmienną "ilo_odebrano" na początku programu (w main()) ?
Jak się zachowuje zmienna "buf_odb_pelny", czy mimo, jak przypuszczam,
wyzerowania na początku (main()) to jest zawze równa jeden?
--
Pozdrawiam
Maciek
========
Path: news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai