ustawianie UART na 9600bps, 1b start,1 stop,no-parity

Jun 17, 2004 6 Replies

Procek At89s51 czy ustawienie: SCON = 0x40; TMOD = 0x20; TH1 = TL1 = 0xFD; TR1 = 1; /*TCON.6*/ SBUF = 0; TI = 0; /*SCON.1*/ ustawi transmije weglug topicu ? thx, prosze o info na priv: snipped-for-privacy@student.prz.rzeszow.pl


U¿ytkownik "Imperator" snipped-for-privacy@st-wola.pl napisa³ w wiadomo¶ci news:casd2i$el9$ snipped-for-privacy@lena.prz.rzeszow.pl

Jaki kwarc?!

Tylko na listê. Tu pytasz - tu dostajesz odpowied¼.

11,0592 U¿ytkownik "Marek Dzwonnik" <mdz@WIADOMO_PO_CO_TO.message.pl> napisa³ w wiadomo¶ci news:40d1b97d$ snipped-for-privacy@news.home.net.pl...

U¿ytkownik "Imperator" snipped-for-privacy@st-wola.pl napisa³ w wiadomo¶ci news:casi4l$hbk$ snipped-for-privacy@lena.prz.rzeszow.pl

Pierwsze primo: Cytuj, ale odpowiadaj POD przyciêtym cytatem.

No to po kolei:

Bierzemy ksi±¿kê Rydzewskiego. Skoro '51ka to do generacji baudrate-u mo¿e byæ wziêty tylko timer1. W '52 mo¿na by u¿yæ jeszcze timer2 (T2CON.4==TCLK :=1 , T2CON5==RCLK := 1).

Czyli f_xtal/ 12 = 921.6kHz.

SCON = 01000000b ==>

SM0=0, SM1=1 -> Tryb1; trans. szeregowa, asynch, 8bit, szybko¶æ okr. programowo (czyli przez timer1) SM2 = 0 -> bez maskowania (nie robimy komunikacji wieloprocesorowej) REN = 0 -> odbiornik nieaktywny (czy tak mia³o byæ?) TB8 = 0 -> (bit8-tx) nieistotne (chcia³e¶ mieæ tylko 8bitów pomiêdzy start a stop) RB8 = 0 -> (bit8-rx) nieistotne, j.w. TI =0 -> znacznik przerwania bedzie ustawiany przez sprzêt RI=0 -> j.w. (a Rx i tak nie dzia³a przy REN=0)

Czyli mamy 8 bitów danych, po 1 bicie START/STOP (51-ka potrafi tylko tak). Je¶li chce siê mieæ parzysto¶æ to i tak trzeba obs³u¿yæ programowo tzn. ustawiaæ albo czytaæ i sprawdzaæ odpowiedni bit: DB7 lub TB8/RB8 - zale¿nie od trybu.

Mlodszy (zerowy) pó³bajt dotyczy timera0 wiêc nas nie interesuje

Starszy pó³bajt (timer1): TMOD = 00100000b ->

GATE = 0 -> timer1 _bez_ bramkowania zewn. sygna³em z we INT1\ (czyli Ok) C/T\ = 0 czyli czasomierz taktowany z zegara wewn (f_xtal/12) M1.M0 = 10 -> tryb 2, czyli licznik 8bitowy (TL1) z automatycznym przeladowaniem z TH1 -> Ok

0xFD = 253d Zatem czêstotliwo¶æ wyj¶ciowa licznika T1 bêdzie równa:

f_ot1 = (fxtal/12) / (256 - TH1) f_ot1 = 921.6kHz / (256-253) = 307.2kHz

No dobrze, a co z bitem SMOD==PCON.7 ? (Decyduje o dodatkowym podziale czêstotliwo¶ci /2) Za³ó¿my, ¿e SMOD=0 (musisz tego przypilnowaæ), wiêc f_bd = f_ot1 / 32 f_bd = 307.2kHz / 32 = 9600 c.n.d :-)

Ok. Bez tego licznik nie ruszy

A z tym ostro¿nie, bo za³adowanie SBUF uruchamia wysy³anie znaku. Czy naprawdê chcesz wys³aæ 0x00 ?

To jest znacznik przerwañ od Tx. Zerujesz go przed odblokowaniem przerwañ (na wszelki - ¿eby nie mieæ fa³szywego przerwania) a potem w obs³udze przerwania UART - po _wys³aniu_ ka¿dego znaku. TI i RI _nie_sa_ (bodajze jako jedyne) automatycznie zerowane po przyjêciu przerwania. Zwróc uwagê, ¿e UART ma przypisane _jedno_ przerwanie a badaj±c w obs³udze RI i TI dopiero ustalasz co faktycznie zasz³o.

primo to juz znaczy "pierwsze" ;-)

bierzemy taki stary ale fajny programik AppBuilder z Intela, odfajkowujemy odpowiednie opcje w menu i klikamy jeden przycisk, po czym delektujemy sie automagicznie wygenerowanym odpowiednim kodem ;-) Gdybysmy uzywali prockow Siemensa to wtedy rozgladamy sie za DaVE'm ;-) Oczywiscie to wszystko w celach edukacyjnych, aby wiedziec co popsulismy w procedurze napisanej wczesniej wlasnorecznie :-)

Wysyłając taki oto zestaw znaków dnia 2004-06-18 12:37 Michal Baszynski nakarmił(a) stado głodnych newsserwerów:

A mógłbyś napisać gdzie można znaleźć ten program???

kiedys byl na stronie intela, google wyrzuca np. taki adres:

formatting link
, a jak nie to odezwij sie na priv - postaram sie wtedy odkopac w piwnicy stare CD Intela i powinienem go znalezc

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required