Citat:
janko11:
Nisam stigao da odgovorim. Decimalna tacka radi. Da li postoji neka mogucnost da se u programu kod inicijalizacije serijskog porta podesi da se bira baudrate izmedju vise vrednosti, umesto da se stavi fiksna vrednost? Moze li neka smernica u kom pravcu treba razmisljati? Hvala svima na odgovorima i savetima.
Ovaj program koji si poslao po svom konceptu ne može da radi to što je napisano da bi trebalo da radi u gornjem citatu.
Opet je pomešana inicijalizacija sa redovnim radom. Moram da te podsetim da je SBUF validan tek ako je postavljen flag RI! dakle nema čitanja SBUF dok RI nije jednak 1 a takođe kad jednom pročitaš SBUF on više nije validan. a RI moraš sam da resetuješ.
Izbriši ovo sve. Koncept nije dobar i ovako ne može da se odredi kojom brzinom je poslat bajt ka 8051.
1. Predlažem da ne gubiš vreme sa autobaud algoritmom jer mislim da to nema neku pravu primenu.
2. Ako hoćeš da menjaš "u letu" brzinu onda prvo onemogućiš prijem pa podesiš reload vrednosti tajmera na novu vrednost pa omogućiš prijem i imaš novu brzinu.
Uostalom imaš gore link na fin kalkulator ne moraš da računaš.
Evo inicijalizacije na 19200 iz tog kalkulatora
//Replace x with timer no.
//Configure and Enable timer.
//Timer Clk=11.0592/12*1 = 0.9216 MHz
PCON |= 0x80 //Set SMOD
SCON = 0x50; //8-bit,rx enable
TLx = 0x00; //Lower Byte
THx = 0xFD; //Upper Byte
TRx = 1; //Run timer
Evo isto iz njega inicijalizacije za 4800
//Replace x with timer no.
//Configure and Enable timer.
//Timer Clk=11.0592/12*1 = 0.9216 MHz
PCON |= 0x80 //Set SMOD
SCON = 0x50; //8-bit,rx enable
TLx = 0x00; //Lower Byte
THx = 0xF4; //Upper Byte
TRx = 1; //Run timer
i to je urađeno JEDNOM NA POČETKU. Kasnije kad po nekom kriterijumu hoćeš da menjaš brzinu onda samo onemogući prijem na kratko promeni TH bajt na novu vrednost i ponovo pokreni prijem. To je zgodno ako GSM modul radi sa procesorom na 19200 a GPS/GLONASS na 4800 a prebacuješ procesorov port sa jedne na drugu periferiju.
Inače jesi li stavio gašenje vodeće nule kao što si hteo.
A ovo mi bode oči:
int i;
for(i=0;i<10;i++) ......
zašto za ime sveta int i ? to čak nije ni signed a ne unsigned char za to što broji ? nije to tridestdvobitni ARM :)